Skip to content

feat: world-class agent-run film — scoreboard, true orbit, cinematic bookends#1

Merged
drewstone merged 1 commit into
mainfrom
feat/world-class-film
Jun 3, 2026
Merged

feat: world-class agent-run film — scoreboard, true orbit, cinematic bookends#1
drewstone merged 1 commit into
mainfrom
feat/world-class-film

Conversation

@drewstone

Copy link
Copy Markdown
Contributor

Upgrade the composed film from "decent" to launch-grade, verified frame-by-frame on a real CAD eval trace.

  • Animated scoreboard (renderers/scoreboard.ts): each geometry-gate check streams in with a stroke-drawn ✓, a count-up tally, and lands on a big "7/7 — RESOLVED · score 1.00" with bbox/triangle/volume chips. Wired into autoCompose via opts.result, threaded through runToVideo + a new CLI --result <file.json>.
  • True 360 orbit (--orbit-dir <dir>): loads a directory of rendered frames as a real spin (hero shot + a timeline PiP).
  • Cinematic intro/outro (renderers/title-cards.ts): kinetic word-by-word titles, brand wordmark, aurora + vignette — replaces the plain cards.
  • Crossfade ghosting fix (media-layer.ts): JS-driven equal-and-opposite opacity with the back buffer fully staged before the swap — no double-image flash.
  • Pacing + final-shot landing: beat-matched durations with crossfade overlap (no black gaps), and the composition now polls the last shot's own done-signal so the outro fully lands regardless of headless-timer drift.
  • Verdict-aware narration closes on the gate result; 17 tests added to the canonical suite (41/41 pass).

Verified by extracting + reading ~25 stills across every shot on the real trace; final film 32s, audio+video muxed.

…, cinematic bookends

Turn the composed film into a directed, beat-matched piece on a real CAD eval
trace (brief → author OpenSCAD → compile → render → geometry gate RESOLVED 1.0).

- renderScoreboardHtml(result): the verdict payoff — each geometry check streams
  in one-by-one with a stroke-drawn ✓, a tally counts up, landing on a big
  "N/N — RESOLVED · score X.XX" with the measured bbox / triangles / volumes
  readout. EvalResult type + scoreboardDurationMs so the composition sizes the
  slot. Wired into autoCompose via opts.result and threaded through runToVideo +
  the CLI --result flag.
- renderIntroHtml / renderOutroHtml: kinetic word-by-word titles, brand
  wordmark, animated aurora gradient + vignette, mission framing on the intro and
  outcome stat chips on the outro. Replaces the plain card bookends. The intro
  subtitle is condensed to the brief's lead line; the outro never shows raw
  artifact source (e.g. the .scad) — it states the outcome cleanly.
- renderImageRevealHtml: clean A/B crossfade — a buffer's src is overwritten only
  after its opacity reaches 0, so two distinct frames are never partly visible at
  once (eliminates mid-fade ghosting). Equal-and-opposite opacity ramp holds
  constant luminance through the dissolve.
- renderCompositionHtml: the final shot is never auto-hidden; the film ends when
  that shot's iframe reports its done-signal (polled via contentDocument), with
  the scheduled total as a ceiling — so the outro fully lands regardless of timer
  drift. Shots crossfade-overlap so no black gap sits between cuts.
- Narration closes on the gate verdict when a result is given.

Tests: 17 added covering the scoreboard verdict/fail paths + duration scaling,
the crossfade no-overwrite invariant, the bookend kinetic/stat markup, autoCompose
scoreboard gating + intro/outro content discipline + overlap pacing + the
final-shot done-signal, and verdict-aware narration. 41/41 pass.

Verified end-to-end on /tmp/cad-trace-learned.json: 32s film, video+audio muxed,
36-azimuth OpenSCAD orbit, every shot frame-checked.
@drewstone drewstone merged commit 329ad8d into main Jun 3, 2026
1 check passed
@drewstone drewstone deleted the feat/world-class-film branch June 3, 2026 11:41
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