remotion-dev/remotion · error · ErrorWithBacktrace

No input

Error message

No input

What it means

Thrown by the compositor binary's main function when it is launched with no command-line argument. Every invocation must pass a JSON-encoded CliInputCommand as its first positional arg.

Source

Thrown at packages/compositor/rust/main.rs:42

mod tone_map;

use errors::ErrorWithBacktrace;
use global_printer::{_print_verbose, set_verbose_logging};
use long_running_process::LongRunningProcess;
use memory::get_ideal_maximum_frame_cache_size;
use std::env;

use payloads::payloads::{CliInputCommand, CliInputCommandPayload};

extern crate png;

fn mainfn() -> Result<(), ErrorWithBacktrace> {
    let args = env::args();

    let first_arg =
        args.skip(1)
            .next()
            .ok_or(errors::ErrorWithBacktrace::from(std::io::Error::new(
                std::io::ErrorKind::Other,
                "No input",
            )))?;

    let opts: CliInputCommand = parse_init_command(&first_arg)?;

    match opts.payload {
        CliInputCommandPayload::StartLongRunningProcess(payload) => {
            set_verbose_logging(payload.verbose);

            let max_video_cache_size = payload
                .maximum_frame_cache_size_in_bytes
                .unwrap_or(get_ideal_maximum_frame_cache_size());

            _print_verbose(&format!(
                "Starting Rust process. Max video cache size: {}MB, max threads = {}",
                max_video_cache_size / 1024 / 1024,
                payload.concurrency

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Do not run the compositor binary directly — let Remotion spawn it via the normal render path.
  2. If debugging manually, pass a valid CliInputCommand JSON string as argv[1].
  3. Upgrade Remotion so the Node layer and the compositor binary versions match.

Example fix

// before
$ ./compositor

// after (manual debug only)
$ ./compositor '{"type":"...","payload":{...}}'
Defensive patterns

Strategy: validation

Validate before calling

let args: Vec<String> = env::args().collect();
if args.len() < 2 {
    eprintln!("Usage: compositor <cli-input-command-json>");
    std::process::exit(2);
}

Type guard

null

Try / catch

null

Prevention

When it happens

Trigger: Running the compositor executable with zero arguments, or invoking it through a wrapper that strips argv. Remotion's Node side always supplies a payload, so seeing this means the binary was launched manually or a parent process dropped the argument.

Common situations: Manual debugging where the developer runs the binary directly without args; a broken spawn from a custom serverless runtime that mis-forwards argv; an older Node/Remotion version mismatched against a newer compositor binary expecting a payload shape.

Related errors


AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12). Data as JSON: /api/errors/10f74e7cdd2cef48. Report an issue: GitHub.