{"record":{"id":"2168e2f896fb0caf","repo":"remotion-dev/remotion","slug":"no-video-config-found-offthreadvideoforrendering","errorCode":null,"errorMessage":"No video config found","messagePattern":"No video config found","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/core/src/video/OffthreadVideoForRendering.tsx","lineNumber":106,"sourceCode":"\t\t],\n\t);\n\n\tconst volume = evaluateVolume({\n\t\tvolume: volumeProp,\n\t\tframe: volumePropsFrame,\n\t\tmediaVolume: 1,\n\t});\n\n\twarnAboutTooHighVolume(volume);\n\tconst audioEnabled = useAudioEnabled();\n\tconst {shouldUseAudio} = useMediaAudioState({\n\t\tmuted,\n\t\tvolume,\n\t\taudioEnabled,\n\t});\n\n\tif (!videoConfig) {\n\t\tthrow new Error('No video config found');\n\t}\n\n\tuseEffect(() => {\n\t\tif (!src) {\n\t\t\tthrow new Error('No src passed');\n\t\t}\n\n\t\tif (!shouldUseAudio) {\n\t\t\treturn;\n\t\t}\n\n\t\tregisterRenderAsset({\n\t\t\ttype: 'video',\n\t\t\tsrc: getAbsoluteSrc(src),\n\t\t\tid,\n\t\t\tframe: absoluteFrame,\n\t\t\tvolume,\n\t\t\tmediaFrame: frame,","sourceCodeStart":88,"sourceCodeEnd":124,"githubUrl":"https://github.com/remotion-dev/remotion/blob/46a3a6bf13ca367376ff18bbb06dae2e87e0d068/packages/core/src/video/OffthreadVideoForRendering.tsx#L88-L124","documentation":"OffthreadVideoForRendering is the internal component used during server-side rendering to display <OffthreadVideo>. It reads the current video configuration from Remotion context; if none is present it throws 'No video config found'. In practice this means the component ran outside a valid Remotion rendering/composition context, since videoConfig should always be supplied by the Remotion core during a render.","triggerScenarios":"Rendering OffthreadVideo (which internally mounts OffthreadVideoForRendering) outside of a Remotion composition, invoking the component directly in a plain React app or test without the Remotion context providers, or a broken/custom render pipeline that skips the Internals context.","commonSituations":"Unit-testing the internal component without wrapping providers, using OffthreadVideo in a non-Remotion React project, or core version mismatches where context is not established.","solutions":["Use <OffthreadVideo> only inside a Remotion <Composition> during rendering or in <Player>, never in plain React apps.","Wrap the component with Remotion's context providers if writing a custom test harness (use Internals / CompositionManager + timeline contexts).","Upgrade @remotion/player and @remotion/renderer/core to matching versions so the context is correctly populated.","Render via `remotion render` / CLI rather than calling OffthreadVideoForRendering directly."],"exampleFix":"// before\nrender(<OffthreadVideo src=\"video.mp4\" />); // plain React\n// after\n// register a Composition and render through Remotion\n<Composition id=\"vid\" component={MyVideo} durationInFrames={100} fps={30} width={1920} height={1080} />;","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  renderMedia({composition, serveUrl, outputLocation});\n} catch (e) {\n  if (e instanceof Error && e.message === 'No video config found') {\n    console.error('OffthreadVideo rendered outside a Remotion composition/context; check your entry point.');\n  }\n  throw e;\n}","preventionTips":["Only use OffthreadVideo inside Remotion compositions or <Player>.","Don't mount internal components like OffthreadVideoForRendering directly in tests or plain React apps.","Keep @remotion/core, player, and renderer versions in lockstep.","Use the official CLI/programmatic render entry points."],"tags":["react","context","rendering","internal"],"backgroundTag":"missing-required-config","analyzedSha":"46a3a6bf13ca367376ff18bbb06dae2e87e0d068","analyzedAt":"2026-09-18T00:12:20.256Z","contentChangedAt":"2026-09-18T00:12:20.256Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}