remotion-dev/remotion · error · Error
The media ${ref.src} cannot be seeked. This could be one of
Error message
The media ${ref.src} cannot be seeked. This could be one of few reasons:
1) The media resource was replaced while the video is playing but it was not loaded yet.
2) The media does not support seeking.
3) The media was loaded with security headers prventing it from being included.
Please see https://remotion.dev/docs/non-seekable-media for assistance. What it means
Thrown (only when `type === 'exception'`) by `warnAboutNonSeekableMedia` when the media element's `TimeRanges` seekable range is exactly [0, 0], meaning the browser reports the media cannot be seeked. Remotion requires seeking to render frame-accurately, so non-seekable media breaks rendering. The function also has console-error/console-warning modes that do not throw; the throw path is the 'exception' mode. The error lists three root causes: media replaced while playing, format lacks seek support, or security headers blocking inclusion.
Source
Thrown at packages/core/src/warn-about-non-seekable-media.ts:45
if (range.start === 0 && range.end === 0) {
const msg = [
`The media ${ref.src} cannot be seeked. This could be one of few reasons:`,
'1) The media resource was replaced while the video is playing but it was not loaded yet.',
'2) The media does not support seeking.',
'3) The media was loaded with security headers prventing it from being included.',
'Please see https://remotion.dev/docs/non-seekable-media for assistance.',
].join('\n');
if (type === 'console-error') {
// eslint-disable-next-line no-console
console.error(msg);
} else if (type === 'console-warning') {
// eslint-disable-next-line no-console
console.warn(
`The media ${ref.src} does not support seeking. The video will render fine, but may not play correctly in the Remotion Studio and in the <Player>. See https://remotion.dev/docs/non-seekable-media for an explanation.`,
);
} else {
throw new Error(msg);
}
alreadyWarned[ref.src] = true;
}
};
View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Re-encode the media to MP4/H.264 with `faststart` (moov atom at the front) so the browser can seek.
- Serve the file with `Accept-Ranges: bytes` and correct CORS headers from a stable URL.
- Ensure the src does not change while the element is loading; preload fully before the composition references it.
- Host the asset via `staticFile()` on the same origin to avoid CORS/ranging issues.
Example fix
// before
<Video src="https://example.com/clip.webm" />
// after (moov-atom MP4, served with range support)
<Video src={staticFile('clip.mp4')} /> Defensive patterns
Strategy: validation
Validate before calling
const isSeekable = (el: HTMLMediaElement | null): boolean => {
if (!el) return false;
const r = el.seekable;
return r.length > 0 && !(r.start(0) === 0 && r.end(0) === 0);
}; Type guard
const supportsSeeking = (el: HTMLMediaElement | null): boolean => !!el && el.seekable.length > 1 || (!!el && el.seekable.length === 1 && !(el.seekable.start(0) === 0 && el.seekable.end(0) === 0));
Try / catch
try {
warnAboutNonSeekableMedia(ref, 'exception');
} catch (e) {
// fall back to a known-seekable source
console.warn(e);
} Prevention
- Encode video as MP4/H.264 with faststart (moov atom first).
- Serve with `Accept-Ranges: bytes` and correct CORS headers.
- Avoid swapping the src while the element is still loading.
When it happens
Trigger: A <video>/<audio> whose `seekable` TimeRanges has length 1 with start(0)===0 && end(0)===0, and `warnAboutNonSeekableMedia` was invoked with type 'exception'. Occurs when the media is not loaded, has no metadata, is a format without seek tables (some WebM/MKV), or is served with headers that prevent ranging.
Common situations: Serving video from a host that does not send `Accept-Ranges: bytes` or `Content-Range`; using a container/codec without a seek index; the src swapping while a previous element is still loading; CORS-restricted media where the browser cannot read the duration. The message lists https://remotion.dev/docs/non-seekable-media.
Related errors
- No src passed
- No `src` was passed to <Video>.
- Live streams are not currently supported by Remotion. Sorry!
- Streams with UNIX timestamps are not currently supported by
- Could not determine duration of ${src}, but "loop" was set.
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/28ede1cc4814469c.
Report an issue: GitHub.