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

  1. Re-encode the media to MP4/H.264 with `faststart` (moov atom at the front) so the browser can seek.
  2. Serve the file with `Accept-Ranges: bytes` and correct CORS headers from a stable URL.
  3. Ensure the src does not change while the element is loading; preload fully before the composition references it.
  4. 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

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


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