feat(cinematic): R10–R14 grade/cadence/edit rules + 420p compat fix
Add five source-adaptive cinematic rules, all content-agnostic and
fail-soft, derived from a web review of the film look and how consumer
AI editors (DJI LightCut, Insta360) auto-edit:
- R10: 24fps cinematic cadence (output frame rate 30 -> 24)
- R11: filmic tone-curve grade (lifted toe + highlight roll-off);
optional licensed film LUT via lut3d, gated on a .license.txt
sidecar (fails closed, no unlicensed asset applied)
- R12: shutter-angle motion blur (tmix), toggle
- R13: beat-synced cuts — snap cut boundaries onto the score's beat
grid (HighlightBeatSync + tools/beat_detect.py, librosa)
- R14: subject-tracking reframe — follow the detected subject instead
of a static crop (HighlightSubjectTracker + tools/subject_track.py,
YOLO/AGPL, non-commercial); renderer subjectFollowFilter
- Fix: pin -pix_fmt yuv420p on every encode pass (was yuv444p, which
browsers/QuickTime reject)
R13/R14 are opt-in flags, on in localpoc. mvn verify: 288 tests green.
E2e bowling re-render verified: 24fps, yuv420p, -16.0 LUFS, 3 cut
boundaries beat-snapped, all 5 shots subject-followed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>