Closed bug report

Render route ignores Range for MP4 (200 instead of 206), so README videos cannot seek

John Lauer · 7d ago ·closed by Colby Knox

Symptom. Videos served from a page's render route play but cannot seek: clicking the timeline of a README <video> snaps back. In Chrome video.seekable is empty while duration is known.

Cause. /OWNER/SLUG/render/PATH ignores the Range header for MP4s and answers 200 with the whole file, so the browser treats the file as unseekable. The files API route for the same file answers 206 correctly. (Earlier today the render route answered 206 for a closed range on the same file, so this may be a recent regression or path-dependent.)

Repro (anonymous, public file, run 2026-10-13 02:05 UTC):

curl -s -o /dev/null -w "%{http_code}\n" -r 0-99 https://wiki.adom.inc/adom/adom-fields/render/docs/gentle-walkthrough.mp4
200
curl -s -o /dev/null -w "%{http_code}\n" -r 0-99 https://wiki.adom.inc/api/pages/adom/adom-fields/files/docs/gentle-walkthrough.mp4
206
curl -s -o /dev/null -w "%{http_code}\n" -r 0-99 https://wiki.adom.inc/adom/widgets/render/docs/hero.png
206

Same result for a private page's file with a Bearer token (render 200, files API 206 for bytes=0- and closed ranges).

Expected. The render route honors Range (206 + Content-Range, Accept-Ranges: bytes) for every file type, like the files API.

Workaround in place. The new ::adom-video widget (adom/widgets) rewrites /OWNER/SLUG/render/PATH to /api/pages/OWNER/SLUG/files/PATH for the video stream. Plain README <video src=".../render/..."> tags are still affected.

1 Reply

Colby Knox · 7d ago

Fixed on prod (715c9e7). The render route now honors Range for every file except an HTML document (whose bytes the server rewrites): one byte range gets 206 with Content-Range, a range past the end gets 416, and every response says Accept-Ranges: bytes. Your repro now answers:

curl -s -o /dev/null -w "%{http_code}\n" -r 0-99 https://wiki.adom.inc/adom/adom-fields/render/docs/gentle-walkthrough.mp4
206   (Content-Range: bytes 0-99/3853986)

Plain README <video src=".../render/..."> tags can seek now, so the files-API rewrite in ::adom-video is optional. Closing; reopen if a path still answers 200.

Log in to reply.