{"record":{"id":"ff2f527fbe42a44a","repo":"remotion-dev/remotion","slug":"multiple-frame-ranges-are-not-supported-on-cloud-r","errorCode":null,"errorMessage":"Multiple frame ranges are not supported on Cloud Run. Use renderMedia() locally to render multiple ranges.","messagePattern":"Multiple frame ranges are not supported on Cloud Run\\. Use renderMedia\\(\\) locally to render multiple ranges\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/cloudrun/src/api/render-media-on-cloudrun.ts","lineNumber":370,"sourceCode":"\tlogLevel,\n\tdelayRenderTimeoutInMilliseconds,\n\tconcurrency,\n\tenforceAudioTrack,\n\tpreferLossless,\n\toffthreadVideoCacheSizeInBytes,\n\tcolorSpace,\n\tdownloadBehavior,\n\tmetadata,\n\trenderIdOverride,\n\trenderStatusWebhook,\n\toffthreadVideoThreads,\n\tmediaCacheSizeInBytes,\n\tsampleRate,\n}: RenderMediaOnCloudrunInput): Promise<\n\tRenderMediaOnCloudrunOutput | CloudRunCrashResponse\n> => {\n\tif (Array.isArray(frameRange) && Array.isArray(frameRange[0])) {\n\t\tthrow new Error(\n\t\t\t'Multiple frame ranges are not supported on Cloud Run. Use renderMedia() locally to render multiple ranges.',\n\t\t);\n\t}\n\n\treturn internalRenderMediaOnCloudrun({\n\t\tcloudRunUrl: cloudRunUrl ?? undefined,\n\t\tserviceName: serviceName ?? undefined,\n\t\tregion,\n\t\tserveUrl,\n\t\tcomposition,\n\t\tinputProps: inputProps ?? {},\n\t\tcodec,\n\t\tforceBucketName: forceBucketName ?? undefined,\n\t\tprivacy: privacy ?? undefined,\n\t\toutName: outName ?? undefined,\n\t\tupdateRenderProgress: updateRenderProgress ?? undefined,\n\t\tjpegQuality: jpegQuality ?? 80,\n\t\taudioCodec: audioCodec ?? undefined,","sourceCodeStart":352,"sourceCodeEnd":388,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/cloudrun/src/api/render-media-on-cloudrun.ts#L352-L388","documentation":"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.","triggerScenarios":"Calling renderMediaOnCloudRun({frameRange: [[0,30], [40,60]], ...}) with an array-of-arrays structure.","commonSituations":"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.","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."],"exampleFix":"// before\nawait renderMediaOnCloudRun({frameRange: [[0,30],[40,60]], ...});\n// after\nawait renderMediaOnCloudRun({frameRange: [0, 60], ...});\n// or render ranges separately","handlingStrategy":"validation","validationCode":"function isSingleRange(r): boolean {\n  return !Array.isArray(r) || !Array.isArray(r[0]);\n}\nif (!isSingleRange(frameRange)) {\n  throw new Error('Cloud Run supports only a single frame range');\n}\nawait renderMediaOnCloudRun({frameRange, ...});","typeGuard":"type SingleFrameRange = number | [number, number];\nconst isSingleFrameRange = (r): r is SingleFrameRange =>\n  typeof r === 'number' || (Array.isArray(r) && typeof r[0] === 'number');","tryCatchPattern":null,"preventionTips":["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."],"tags":["cloudrun","gcp","render","frame-range","validation"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}