remotion-dev/remotion · error
No src passed
Error message
No src passed
What it means
OffthreadVideoForRendering validates its `src` prop inside a useEffect and throws 'No src passed' when src is falsy (undefined, null, or empty string). The <OffthreadVideo> API requires a src pointing at the video asset to extract frames from.
Solutions
- Always pass a non-empty src, e.g. <OffthreadVideo src={staticFile('video.mp4')} />.
- Guard with a check before rendering: only mount OffthreadVideo when src is truthy.
- Verify dynamic data (JSON/API) actually contains the URL; add a fallback or throw a clearer error upstream.
- Check that imports of asset URLs are correct and not undefined.
Example fix
// before
<OffthreadVideo src={item.videoUrl} />
// after
{item.videoUrl ? <OffthreadVideo src={staticFile(item.videoUrl)} /> : null} Defensive patterns
Strategy: validation
Validate before calling
if (!src) {
throw new Error('OffthreadVideo requires a non-empty src');
}
return <OffthreadVideo src={src} />; Type guard
const hasSrc = (src: unknown): src is string => typeof src === 'string' && src.length > 0;
Try / catch
// Error is thrown in useEffect during render; validate props instead.
if (!hasSrc(src)) {
return null; // or a placeholder
}
return <OffthreadVideo src={src} />; Prevention
- Always build src with staticFile() for local assets.
- Validate data-driven inputs (JSON/API) before rendering sequences.
- Never render <OffthreadVideo> when the asset URL is missing; render a fallback instead.
- Type the src prop as string and avoid optional chaining that can yield undefined.
When it happens
Trigger: Rendering `<OffthreadVideo />` or `<OffthreadVideo src={undefined} />`, passing a variable that is empty/undefined at render time (e.g. staticFile result not yet computed, missing asset field in data), or conditionally building the src and accidentally passing ''.
Common situations: Data-driven videos where a JSON entry lacks a video URL, forgetting to wrap a local path with staticFile(), or an import resolving to undefined.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- 'preservePitch' must be a boolean or undefined but got
- The ` ` tag requires a string for `src`, but got instead.
- acceptableTimeShift has been removed. Use…
- animationData should be provided as an object. If you only…
- blur passed to blurSlide() must be a finite number, received
AI-assisted analysis of remotion-dev/remotion@46a3a6bf13 (2026-09-18).
Data as JSON: /api/errors/cb3db115ca121c21.
Report an issue: GitHub.
Appendix: source
Thrown at packages/core/src/video/OffthreadVideoForRendering.tsx:111
frame: volumePropsFrame,
mediaVolume: 1,
});
warnAboutTooHighVolume(volume);
const audioEnabled = useAudioEnabled();
const {shouldUseAudio} = useMediaAudioState({
muted,
volume,
audioEnabled,
});
if (!videoConfig) {
throw new Error('No video config found');
}
useEffect(() => {
if (!src) {
throw new Error('No src passed');
}
if (!shouldUseAudio) {
return;
}
registerRenderAsset({
type: 'video',
src: getAbsoluteSrc(src),
id,
frame: absoluteFrame,
volume,
mediaFrame: frame,
playbackRate,
toneFrequency,
audioStartFrame: Math.max(
0,
-(sequenceContext?.cumulatedNegativeFrom ?? 0),View on GitHub (pinned to 46a3a6bf13)