remotion-dev/remotion · error · TypeError

No `src` was passed to <Video>.

Error message

No `src` was passed to <Video>.

What it means

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.

Source

Thrown at packages/media/src/video/video-for-rendering.tsx:100

	style,
	className,
	fallbackOffthreadVideoProps,
	audioStreamIndex,
	disallowFallbackToOffthreadVideo,
	_remotionInternalStack,
	toneFrequency,
	trimAfterValue,
	trimBeforeValue,
	headless,
	onError,
	credentials,
	requestInit,
	objectFit: objectFitProp,
	effects,
	...props
}) => {
	if (!src) {
		throw new TypeError('No `src` was passed to <Video>.');
	}

	const frame = useCurrentFrame();
	const absoluteFrame = Internals.useTimelinePosition();

	const {fps} = useVideoConfig();
	const {registerRenderAsset, unregisterRenderAsset} = useContext(
		Internals.RenderAssetManager,
	);
	const startsAt = Internals.useMediaStartsAt();
	const sequenceContext = useContext(Internals.SequenceContext);

	// Generate a string that's as unique as possible for this asset
	// but at the same time the same on all threads
	const id = useMemo(
		() =>
			`media-video-${random(
				src,

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Pass a valid video URL: <Video src={staticFile('clip.mp4')} /> or a remote URL.
  2. Conditionally render: {src && <Video src={src} />} to omit video when no source exists.
  3. Verify input props passed via --props or the render config include the expected src.

Example fix

// before
<Video src={props.videoUrl} /> // undefined at render

// after
{props.videoUrl ? <Video src={props.videoUrl} /> : null}
Defensive patterns

Strategy: validation

Validate before calling

const videoSrc = typeof src === 'string' && src.length > 0 ? src : null;
return videoSrc ? <Video src={videoSrc} /> : null;

Type guard

const isNonEmptyString = (v: unknown): v is string =>
  typeof v === 'string' && v.trim().length > 0;

Prevention

When it happens

Trigger: Rendering <Video src={undefined} /> or <Video src={''} /> and running `remotion render`. The check fires on the render path specifically, after the component destructures props.

Common situations: 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.

Related errors


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