remotion-dev/remotion · error · Error
Multiple frame ranges are not supported on Cloud Run. Use re
Error message
Multiple frame ranges are not supported on Cloud Run. Use renderMedia() locally to render multiple ranges.
What it means
Thrown by renderMediaOnCloudRun() when the frameRange parameter is a nested array (e.g., [[0,10],[20,30]]), indicating multiple frame ranges. Cloud Run rendering only supports a single contiguous frame range per render job.
Source
Thrown at packages/cloudrun/src/api/render-media-on-cloudrun.ts:370
logLevel,
delayRenderTimeoutInMilliseconds,
concurrency,
enforceAudioTrack,
preferLossless,
offthreadVideoCacheSizeInBytes,
colorSpace,
downloadBehavior,
metadata,
renderIdOverride,
renderStatusWebhook,
offthreadVideoThreads,
mediaCacheSizeInBytes,
sampleRate,
}: RenderMediaOnCloudrunInput): Promise<
RenderMediaOnCloudrunOutput | CloudRunCrashResponse
> => {
if (Array.isArray(frameRange) && Array.isArray(frameRange[0])) {
throw new Error(
'Multiple frame ranges are not supported on Cloud Run. Use renderMedia() locally to render multiple ranges.',
);
}
return internalRenderMediaOnCloudrun({
cloudRunUrl: cloudRunUrl ?? undefined,
serviceName: serviceName ?? undefined,
region,
serveUrl,
composition,
inputProps: inputProps ?? {},
codec,
forceBucketName: forceBucketName ?? undefined,
privacy: privacy ?? undefined,
outName: outName ?? undefined,
updateRenderProgress: updateRenderProgress ?? undefined,
jpegQuality: jpegQuality ?? 80,
audioCodec: audioCodec ?? undefined,View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Pass a single range: frameRange: [0, 60] or frameRange: 30.
- Render each range in a separate Cloud Run render call.
- Use renderMedia() locally if you truly need multi-range rendering in one job.
Example fix
// before
await renderMediaOnCloudRun({frameRange: [[0,30],[40,60]], ...});
// after
await renderMediaOnCloudRun({frameRange: [0, 60], ...});
// or render ranges separately Defensive patterns
Strategy: validation
Validate before calling
function isSingleRange(r): boolean {
return !Array.isArray(r) || !Array.isArray(r[0]);
}
if (!isSingleRange(frameRange)) {
throw new Error('Cloud Run supports only a single frame range');
}
await renderMediaOnCloudRun({frameRange, ...}); Type guard
type SingleFrameRange = number | [number, number]; const isSingleFrameRange = (r): r is SingleFrameRange => typeof r === 'number' || (Array.isArray(r) && typeof r[0] === 'number');
Prevention
- Flatten multi-range configs before passing to Cloud Run render calls.
- Render each range as a separate Cloud Run job when multi-range is required.
When it happens
Trigger: Calling renderMediaOnCloudRun({frameRange: [[0,30], [40,60]], ...}) with an array-of-arrays structure.
Common situations: Copying a frameRange config from a local renderMedia() call that uses multi-range splitting, or programmatically generating ranges without flattening for the Cloud Run path.
Related errors
- Comma-separated frame selections are only supported by the l
- Bucket creation is required, but no region has been passed.
- Either cloudRunUrl or serviceName must be provided
- Either cloudRunUrl or serviceName must be provided, not both
- If determining Cloudrun Url from serviceName, region must be
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/ff2f527fbe42a44a.
Report an issue: GitHub.