diff options
| author | Adam Soltys <[email protected]> | 2026-10-03 15:52:38 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-10-03 15:52:38 -0700 |
| commit | 141779ab97efad6abefaec0545bba5330fd1e12d (patch) | |
| tree | 32024b5cb022d0a001e618bd05040304af4a124b /src/ark/manager.js | |
| parent | 6488806b840c009278f4ae16de9e079ea4b892bc (diff) | |
| download | coinosv3-141779ab97efad6abefaec0545bba5330fd1e12d.tar.gz coinosv3-141779ab97efad6abefaec0545bba5330fd1e12d.zip | |
Video frames from bytes, not from a CORS player; pager clips load plainly again
Regression from 6488806: pager clips were loaded crossorigin so their
frame could be kept, and on a phone the large clip's slide went black.
Some hosts (Primal's R2 bucket) send CORS headers only to a request with
an Origin and don't Vary on it, so a copy the browser cached from a plain
player load answers a later CORS load without them, and it fails. The
same thing made the size probe fail for any clip that had played in the
feed.
- Pager clips load plainly again; the still under a tap-to-play cover is
restored on every return.
- The probe (and its HEAD) go past the browser cache (no-store).
- A clip's frame is now made from bytes: the opening of the file (index
plus about 1 MB, no-store) decoded from a blob and kept as a JPEG —
for tiles and as the pager's poster. No CORS player anywhere. Files
whose index trails, or hosts whose bytes can't be read, keep the plain
player still (shown, not kept).
- Kept frames are 480 px wide (were 270) and capped at 600.
- Probe failures are stored as failedAt, so earlier failures are asked
again at once.
- Test: an R2-style host, its clip cached by a plain load first, is
still measured and its frame kept (failed before this change).
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01ULQZS9MQa6iAsXnrJUD9Du
Diffstat (limited to 'src/ark/manager.js')
0 files changed, 0 insertions, 0 deletions
