Skip to content

docs: retime the full film gallery to 1.5x playback - #35

Merged
DivyamTalwar merged 1 commit into
mainfrom
docs/retime-all-films-1-5x
Sep 8, 2026
Merged

DivyamTalwar merged 1 commit into
mainfrom
docs/retime-all-films-1-5x

Conversation

@DivyamTalwar

Copy link
Copy Markdown
Member

Summary

Retimes all 30 films in docs/media/ to 1.5x. The gallery ran 67–96 seconds per film — 41.2 minutes end to end — which is a long hold for a reader skimming the page and longer than most social platforms show before a viewer drops.

Gallery runtime: 41.2 min → 27.5 min.

Filenames are unchanged, so every README link and every link already shared externally keeps working. Only the content is faster.

Why no frames are lost

Every source is 30fps, and 30 × 1.5 = 45fps exactly. The retime is therefore a pure timestamp remap: every frame carries through, no drops, no duplicates, no motion judder. A source at 25fps would not divide cleanly and would have forced a compromise — all 30 are 30fps, so none did. All 30 are also video-only, so no audio retime was required.

The encode setting was measured, not assumed

CRF 18 was the obvious default, but it grew files ~19%, which would have added ~114 MB of permanent blobs to git history. So I measured CRF 18/20/22 against the same source frame on one of the largest, busiest films (17-ledger):

CRF Size vs source Mean abs diff Pixels off by >8/255
18 +17% 0.24/255 0.2%
20 −11% 0.38/255 (0.15%) 0.2%
22 −24% 0.54/255 0.4%

CRF 20 is indistinguishable on flat UI content and lands below source size. Across all 30 the gallery goes 95.5 MB → 96.9 MB (+1.4%), so the repo takes on no meaningful new blob burden.

Verification — all 30, programmatic

Each film was checked mechanically rather than by eye, and only moved into place if it passed all three:

  • output frame count within 1 frame of source (the +1 is a CFR tail pad, ~22ms)
  • output duration within 0.05s of source / 1.5
  • r_frame_rate exactly 45/1

30 pass, 0 fail. Independently confirmed afterwards:

  • 0 films not at 45fps
  • 0 broken docs/media links in README
  • 0 files touched outside docs/media/
  • check:qa-docs — pass
  • check:brand — pass

Spot-check any film:

ffprobe -v error -count_frames -select_streams v:0 \
  -show_entries stream=nb_read_frames,r_frame_rate \
  -show_entries format=duration docs/media/17-ledger.mp4

Risk and rollback

Low. Binary doc assets only, no code path. No README prose claims a duration for any retimed film — the only duration claims on the page are the 12.0s .png loops and film 27's on-screen exit 0 · 9.0s marker, neither of which is touched. Poster frames and loop stills are unaffected, since retiming does not alter frame content. Rollback is git revert.

Note

scripts/film/cut.mjs already speeds each film up to 1.45x to hit a 78s target, so these are now roughly 2.2x the raw capture. They read fine, but that is the real multiplier if the pace is ever revisited.

Problem
Every film in the README gallery ran 67-96 seconds, 41.2 minutes across
all thirty. That is a long hold for a reader skimming the page, and
longer than most social platforms show before a viewer drops.

Approach
Retimed all thirty films to 1.5x. Every source is 30fps, so
30 x 1.5 = 45fps exactly and every frame survives the retime with no
drops and no duplicates. All thirty are video-only, so no audio retime
was needed. +faststart is set for web and social playback.

Encoded at CRF 20 rather than 18, chosen on measurement rather than
habit: against the same source frame, CRF 20 differs by a mean of
0.38/255 (0.15%) with only 0.2% of pixels off by more than 8/255, which
is indistinguishable on flat UI content, while CRF 18 grew the files
roughly 19%. At CRF 20 the gallery lands at 96.9 MB against 95.5 MB
before, so the repository does not carry a meaningful new blob burden.

Verification
All thirty verified programmatically, not by eye: output frame count
within one frame of source, output duration within 0.05s of source/1.5,
and r_frame_rate exactly 45/1. Thirty of thirty pass, zero fail. No file
outside docs/media is touched. Every docs/media link in README still
resolves. check:qa-docs and check:brand both pass.

Impact
Gallery runtime drops from 41.2 to 27.5 minutes. Filenames are unchanged,
so every README link and every external link already shared keeps
working; only the content is faster. Poster frames and loop stills are
unaffected, since retiming does not change frame content.
@DivyamTalwar
DivyamTalwar merged commit c83eef8 into main Sep 8, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant