You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of #326. The contact sheet is batch 1 and depends on nothing. Transition sampling is batch 3 and depends on #336.
Asked how he verified the SVG reel, its author is direct: he cannot watch it move or hear it. He captured stills at chosen instants, assembled them into contact sheets by hand, and found the misplaced hexagons and the clipped subtitle that way. The audio he checked only through peak and RMS numbers from ffmpeg, which is how he found the mix clipping at 0 dB. One blind spot he names outright: "the transitions, I never saw them play."
That is the real ground Rustmotion holds. A generator cannot watch its own output, and what can be given to it is not a better eye but numbers in place of one. The geometry validator already catches the clipped subtitle without a contact sheet. But geometry.rs iterates view.scenes and calls anim_sample_times(scene_duration), so transition frames are separate FrameTasks that nothing ever checks. The composite of two frame buffers is unverified, which is the same blind spot, in this engine, on main.
Owned files
crates/rustmotion/src/cli/commands/sheet.rs (new)
crates/rustmotion/src/cli/commands/geometry.rs (the sampling loop)
crates/rustmotion/src/cli/mod.rs (the subcommand)
Do NOT write: encode/video/tasks.rs (#336), any audio file (#331 owns the measurement this reads).
Deliverables
rustmotion sheet — -f x.json --at 3.2,4.8,19.9 or --every 0.5, producing one PNG grid with each cell stamped with its timestamp. The SVG reel's author assembled these by hand; here it is a subcommand over the existing single-frame render path.
Sample transition frames. Iterate build_frame_tasks rather than view.scenes, so --strict-anim covers SlideTransition and ViewTransition frames. This closes the blind spot both this engine and the reference reel share.
Audio measurement in --report — peak, RMS and true-peak, per beat. Clipping becomes a named violation found at validation time rather than a late discovery. Nearly free once Synthesise a soundtrack on the same clock as the cuts #331 lands, and it is the audio half of the same idea.
Acceptance
rustmotion sheet -f examples/mega-showcase.json --every 1.0 writes one readable PNG
A scenario whose text leaves the viewport only mid-transition is caught by --strict-anim, and is not caught today
A clipping soundtrack produces a violation in --report
Part of #326. The contact sheet is batch 1 and depends on nothing. Transition sampling is batch 3 and depends on #336.
Asked how he verified the SVG reel, its author is direct: he cannot watch it move or hear it. He captured stills at chosen instants, assembled them into contact sheets by hand, and found the misplaced hexagons and the clipped subtitle that way. The audio he checked only through peak and RMS numbers from
ffmpeg, which is how he found the mix clipping at 0 dB. One blind spot he names outright: "the transitions, I never saw them play."That is the real ground Rustmotion holds. A generator cannot watch its own output, and what can be given to it is not a better eye but numbers in place of one. The geometry validator already catches the clipped subtitle without a contact sheet. But
geometry.rsiteratesview.scenesand callsanim_sample_times(scene_duration), so transition frames are separateFrameTasks that nothing ever checks. The composite of two frame buffers is unverified, which is the same blind spot, in this engine, onmain.Owned files
crates/rustmotion/src/cli/commands/sheet.rs(new)crates/rustmotion/src/cli/commands/geometry.rs(the sampling loop)crates/rustmotion/src/cli/mod.rs(the subcommand)Do NOT write:
encode/video/tasks.rs(#336), any audio file (#331 owns the measurement this reads).Deliverables
rustmotion sheet—-f x.json --at 3.2,4.8,19.9or--every 0.5, producing one PNG grid with each cell stamped with its timestamp. The SVG reel's author assembled these by hand; here it is a subcommand over the existing single-frame render path.Sample transition frames. Iterate
build_frame_tasksrather thanview.scenes, so--strict-animcoversSlideTransitionandViewTransitionframes. This closes the blind spot both this engine and the reference reel share.Audio measurement in
--report— peak, RMS and true-peak, per beat. Clipping becomes a named violation found at validation time rather than a late discovery. Nearly free once Synthesise a soundtrack on the same clock as the cuts #331 lands, and it is the audio half of the same idea.Acceptance
rustmotion sheet -f examples/mega-showcase.json --every 1.0writes one readable PNG--strict-anim, and is not caught today--report