Repository navigation
Conversation
…s, crossfaded (Closes #10596) R4a of epic #10560. lesson_reel.t27 gains a beat clock: cut 0 at the goal phrase's start (held to a 1250 ms open floor), cut 1 at cta_from, each a crossfade of reel.t27's TRANSITION_FRAMES centred on the cut. Seven tests: frame constants, lesson 1's measured cuts, the short-title floor, a grid of 80 voices x every lesson x both languages (full clock, voice too short for an open scene, refused), weights summing to 1000 at every 10 ms, exactly two beat changes over 450 frames, and a fixed-thirds control that lands mid-phrase. The clock lives in lesson_reel.t27, not in the beat_clock.t27 module the issue names: importing phrase_start or cta_from into another module leaves them UNRESOLVED because token_floor_mux.t27 declares the same names, and the splicer drops ambiguous imports even on an explicit path (#10556). Lab: 13/13 tests pass, 0 vacuous; seal saved and verified. t27b still blocked on type [N]T, as the ledger row already says; max_not_pass unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eel (Refs #10596) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ock's cuts, on whole frames (Closes #10603) lesson_reel.t27 gains: - beat_xfade_frame: the last base frame at or before c - BEAT_HALF_MS. - beat_solo_frames: a floor on how many frames each beat shows alone. - beat_graph: inputs 0..2 (the open, main and close scene clips), crossfaded with xfade at offset beat_frame_ms(f) in AV_TIME_BASE, then trimmed to 450 frames. - LR_MODE=4, which prints the graph and refuses a voice that does not fit, as mode 3 does. Tests: 17/17 pass, 0 vacuous. - New: every cut from 1250 to 13500 ms lands on its frame. - New: the offset for every frame 0..450 selects that frame. - New control: an offset rounded up misses 300 of 451 frames. - New: on R4a's voice grid, every beat keeps MIN_SCENE_FRAMES whole frames, except the counted early case. Measured with ffmpeg 5.1 on the Railway lab, on solid-colour inputs, 450 frames each: - 1300/4200/6800 ms: runs 50 / 332 / 38. - 2500/8000/9000 ms: runs 88 / 235 / 98. - 200/1500/13100 ms: runs 28 / 30 / 362. - 9000/9000/9000 ms: refused. Every run equals beat_solo_frames, with one extra frame when the offset falls on a whole ms. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r runs (Refs #10603) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 18, 2026
This was referenced Oct 18, 2026
This was referenced Oct 18, 2026
Closed
Merged
Contributor
Owner
Author
Owner
Author
|
Carried by #10627. That PR's branch holds every commit of this one, and it is mergeable with master: master was merged into it in This PR is not getting its own master merge. The pre-commit |
This was referenced Oct 18, 2026
Owner
Author
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.
Closes #10603. Part R4b.1 of epic #10560. This PR is stacked on #10598 (R4a, the beat clock), which should merge first; until then this diff also shows #10598's two commits.
What
specs/t27f/lesson_reel.t27turns the beat clock's cuts into video:beat_xfade_frame(c)gives the base frame where the crossfade for a cut atcms starts: the last frame at or beforec - BEAT_HALF_MS. Both cuts round the same way, so neither takes a frame from the other beat.beat_solo_frames(b, f0, f1)gives how many frames beatbis on screen alone. It is a floor.beat_graphand the newLR_MODE=4:fps=30andsettb=AVTB.xfade=transition=fade:duration=0.500:offset=beat_frame_ms(f), twice.trim=end_frame=450.In the AV_TIME_BASE timebase the offset is not rounded a second time. xfade starts on the first frame at or after the offset, so
beat_frame_ms(f)selects frame f.Tests
On the Railway lab: 17/17 pass, 0 vacuous. The seal is saved and verified. The t27b ledger row is unchanged (
blocked,type [N]T).MIN_SCENE_FRAMESwhole frames, except the counted early caseMeasured with ffmpeg
ffmpeg 5.1.9 on the Railway lab. Inputs 0..2 were solid red, green and blue, 15 s at 30 fps. The table gives each run of identical frames, from
od | uniq -cof the raw RGB output.beat_solo_frames.Not claimed
🤖 Generated with Claude Code