{"record":{"id":"0a1bef07c6674766","repo":"remotion-dev/remotion","slug":"cannot-render-an-image-sequence-with-a-codec-that","errorCode":null,"errorMessage":"Cannot render an image sequence with a codec that renders no images. codec = ${codec}, imageFormat = ${imageFormat}","messagePattern":"Cannot render an image sequence with a codec that renders no images\\. codec = (.+?), imageFormat = (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/cli/src/render-flows/render.ts","lineNumber":614,"sourceCode":"\t\t\t});\n\t\t} else {\n\t\t\tLog[logLogLevel](\n\t\t\t\t{\n\t\t\t\t\tindent,\n\t\t\t\t\tlogLevel,\n\t\t\t\t\ttag,\n\t\t\t\t},\n\t\t\t\tpreviewString,\n\t\t\t);\n\t\t}\n\t};\n\n\tif (shouldOutputImageSequence) {\n\t\tfs.mkdirSync(absoluteOutputFile, {\n\t\t\trecursive: true,\n\t\t});\n\t\tif (imageFormat === 'none') {\n\t\t\tthrow new Error(\n\t\t\t\t`Cannot render an image sequence with a codec that renders no images. codec = ${codec}, imageFormat = ${imageFormat}`,\n\t\t\t);\n\t\t}\n\n\t\tconst outputDir = shouldOutputImageSequence\n\t\t\t? absoluteOutputFile\n\t\t\t: await fs.promises.mkdtemp(\n\t\t\t\t\tpath.join(os.tmpdir(), 'react-motion-render'),\n\t\t\t\t);\n\n\t\tLog.verbose({indent, logLevel}, 'Output dir', outputDir);\n\n\t\tawait RenderInternals.internalRenderFrames({\n\t\t\timageFormat,\n\t\t\tserializedInputPropsWithCustomSchema,\n\t\t\tonFrameUpdate: (rendered) => {\n\t\t\t\t(renderingProgress as RenderingProgressInput).frames = rendered;\n\t\t\t\tupdateRenderProgress({newline: false, printToConsole: true});","sourceCodeStart":596,"sourceCodeEnd":632,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/cli/src/render-flows/render.ts#L596-L632","documentation":"Thrown by the render flow when shouldOutputImageSequence is true (e.g. --sequence) but the derived imageFormat is 'none'. imageFormat becomes 'none' for audio-only codecs (e.g. mp3, wav) that produce no video frames; an image sequence requires actual frames to write.","triggerScenarios":"Combining `--sequence` with an audio-only codec such as `--codec=mp3` or `--codec=wav`. Setting a codec whose still-image format resolves to 'none' while requesting a frame sequence.","commonSituations":"Forgetting that an audio render has no frames; copy-pasting a video render command and only changing the codec to an audio one while keeping --sequence; misconfigured render preset.","solutions":["Drop --sequence when rendering audio-only output.","Switch to a video codec (e.g. --codec=h264) if you need an image sequence.","Re-check your codec/image-format combination with `npx remotion render --help`."],"exampleFix":"// before\n$ npx remotion render MyComp out --sequence --codec=mp3\n// after - audio render does not need --sequence\n$ npx remotion render MyComp out.mp3 --codec=mp3","handlingStrategy":"validation","validationCode":"const AUDIO_CODECS = new Set(['mp3', 'wav', 'aac']);\n\nconst validateSequenceCodec = (codec: string, imageSequence: boolean) => {\n  if (imageSequence && AUDIO_CODECS.has(codec)) {\n    throw new Error(`--sequence is incompatible with audio-only codec '${codec}'`);\n  }\n};\n\nvalidateSequenceCodec(codec, imageSequence);","typeGuard":"const isAudioOnlyCodec = (codec: string): boolean =>\n  ['mp3', 'wav', 'aac'].includes(codec);","tryCatchPattern":null,"preventionTips":["Reserve --sequence for video codecs that emit frames.","For audio output, omit --sequence and use a file extension matching the codec."],"tags":["cli","render","image-sequence","codec","audio"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}