{"record":{"id":"768b45a071f31d7c","repo":"remotion-dev/remotion","slug":"no-src-was-passed-to-video","errorCode":null,"errorMessage":"No `src` was passed to <Video>.","messagePattern":"No `src` was passed to <Video>\\.","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"packages/media/src/video/video-for-rendering.tsx","lineNumber":100,"sourceCode":"\tstyle,\n\tclassName,\n\tfallbackOffthreadVideoProps,\n\taudioStreamIndex,\n\tdisallowFallbackToOffthreadVideo,\n\t_remotionInternalStack,\n\ttoneFrequency,\n\ttrimAfterValue,\n\ttrimBeforeValue,\n\theadless,\n\tonError,\n\tcredentials,\n\trequestInit,\n\tobjectFit: objectFitProp,\n\teffects,\n\t...props\n}) => {\n\tif (!src) {\n\t\tthrow new TypeError('No `src` was passed to <Video>.');\n\t}\n\n\tconst frame = useCurrentFrame();\n\tconst absoluteFrame = Internals.useTimelinePosition();\n\n\tconst {fps} = useVideoConfig();\n\tconst {registerRenderAsset, unregisterRenderAsset} = useContext(\n\t\tInternals.RenderAssetManager,\n\t);\n\tconst startsAt = Internals.useMediaStartsAt();\n\tconst sequenceContext = useContext(Internals.SequenceContext);\n\n\t// Generate a string that's as unique as possible for this asset\n\t// but at the same time the same on all threads\n\tconst id = useMemo(\n\t\t() =>\n\t\t\t`media-video-${random(\n\t\t\t\tsrc,","sourceCodeStart":82,"sourceCodeEnd":118,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/media/src/video/video-for-rendering.tsx#L82-L118","documentation":"Thrown by <Video> (video-for-rendering) in @remotion/media when `src` is falsy during a server render. The render path requires a concrete URL to register the video asset for ffmpeg muxing, so an undefined or empty source aborts the render.","triggerScenarios":"Rendering <Video src={undefined} /> or <Video src={''} /> and running `remotion render`. The check fires on the render path specifically, after the component destructures props.","commonSituations":"Binding video src to input props that are missing in the render invocation, building src conditionally such that it is empty for the rendered composition, or forgetting staticFile() for a public/ asset.","solutions":["Pass a valid video URL: <Video src={staticFile('clip.mp4')} /> or a remote URL.","Conditionally render: {src && <Video src={src} />} to omit video when no source exists.","Verify input props passed via --props or the render config include the expected src."],"exampleFix":"// before\n<Video src={props.videoUrl} /> // undefined at render\n\n// after\n{props.videoUrl ? <Video src={props.videoUrl} /> : null}","handlingStrategy":"validation","validationCode":"const videoSrc = typeof src === 'string' && src.length > 0 ? src : null;\nreturn videoSrc ? <Video src={videoSrc} /> : null;","typeGuard":"const isNonEmptyString = (v: unknown): v is string =>\n  typeof v === 'string' && v.trim().length > 0;","tryCatchPattern":null,"preventionTips":["Validate that input props include a video src before rendering.","Conditionally render <Video> when src may be absent.","Resolve staticFile() paths eagerly at module scope."],"tags":["video","src","render","media","validation"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}