remotion-dev/remotion · error · Error
Could not load LUT (HTTP ).
Error message
Could not load LUT (HTTP ${response.status}). What it means
LutPreview fetches a .cube LUT file from a URL to render a before/after preview. When the HTTP response is not ok (4xx/5xx), it throws this error so the component can surface a load failure instead of silently rendering without the LUT.
Solutions
- Check the browser network tab for the failing LUT request status and URL; fix the URL or restore the file at that location.
- Verify the host serves the .cube file with proper CORS headers since the fetch is cross-origin with an anonymous crossorigin image.
- Test the LUT URL directly with curl to distinguish 404 (wrong URL) from 403 (permissions/CORS) from 5xx (server issue).
- If the URL is user-supplied, validate it and show a fallback state in the UI.
Example fix
// before <LutPreview src="https://cdn.example.com/luts/look1.cube" /> // after (verify the URL exists and is CORS-enabled first) <LutPreview src="https://cdn.example.com/luts/look-1-v2.cube" />
Defensive patterns
Strategy: try-catch
Validate before calling
const res = await fetch(lutUrl, {method: 'HEAD'});
if (!res.ok) throw new Error(`LUT URL unavailable: ${res.status}`); Try / catch
try {
render(<LutPreview src={lutUrl} />);
} catch (e) {
if (/Could not load LUT/.test(e.message)) showFallbackState();
else throw e;
} Prevention
- Verify LUT URLs with a HEAD request before rendering the preview.
- Serve .cube files with CORS headers from a stable CDN path.
- Pin LUT assets to versioned URLs so they don't 404 after reorganization.
When it happens
Trigger: Passing a `src` prop URL to LutPreview that returns a non-2xx status: a 404 for a removed or mistyped LUT URL, a 403 from a bucket/CORS policy, or a 500 from the hosting server.
Common situations: LUT file moved or renamed on a CDN; S3/R2 bucket permissions changed; requesting a LUT through a proxy that blocks cross-origin anonymous fetches; offline or firewalled environment.
Understand the failure class
Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.
Related errors
- Failed to fetch audio data from
- Could not fetch remote asset. The URL may not allow…
- Could not load the LUT sample image. Check your internet…
- Expected status code 200 or 404 for file, got
- Failed to download whisper model
AI-assisted analysis of remotion-dev/remotion@46a3a6bf13 (2026-09-18).
Data as JSON: /api/errors/8c2f6a584360c59b.
Report an issue: GitHub.
Appendix: source
Thrown at packages/studio/src/components/LutPreview.tsx:177
return;
}
event.preventDefault();
event.stopPropagation();
},
[],
);
useEffect(() => {
const controller = new AbortController();
const image = new Image();
image.crossOrigin = 'anonymous';
setState({type: 'loading'});
const load = async () => {
const response = await fetch(src, {signal: controller.signal});
if (!response.ok) {
throw new Error(`Could not load LUT (HTTP ${response.status}).`);
}
const lut = parseCubeLut(await response.text());
if (controller.signal.aborted) {
return;
}
image.src = sampleImage;
try {
await image.decode();
} catch {
throw new Error(
'Could not load the LUT sample image. Check your internet connection.',
);
}
if (controller.signal.aborted) {
return;View on GitHub (pinned to 46a3a6bf13)