docs: retime the full film gallery to 1.5x playback - #35
Merged
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 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:
source / 1.5r_frame_rateexactly45/130 pass, 0 fail. Independently confirmed afterwards:
docs/medialinks in READMEdocs/media/check:qa-docs— passcheck:brand— passSpot-check any film:
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
.pngloops and film 27's on-screenexit 0 · 9.0smarker, neither of which is touched. Poster frames and loop stills are unaffected, since retiming does not alter frame content. Rollback isgit revert.Note
scripts/film/cut.mjsalready 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.