Skip to content

feat(demo): reshoot the video against the shipped product, five photos concurrent - #56

Merged
upgradedev merged 2 commits into
mainfrom
feat/demo-reshoot-five-photo-concurrent
Aug 3, 2026
Merged

feat(demo): reshoot the video against the shipped product, five photos concurrent#56
upgradedev merged 2 commits into
mainfrom
feat/demo-reshoot-five-photo-concurrent

Conversation

@upgradedev

Copy link
Copy Markdown
Owner

Why

The committed cut (2:34, 68.2s of footage) predated four changes that are now live, and contradicted all of them:

  • the photo cap is 5, and the UI says that cap belongs to the demo rather than the reel maker;
  • the wait is derived from the photo count;
  • generation runs concurrently;
  • the job id is in the URL, so a reload no longer loses the run.

The old narration's "about five minutes a photo" described a sequential pipeline that no longer exists. That had stopped being a stale detail and become a misleading one.

What changed

Reshot as one unbroken take of a full five-photo run against the live service at the commit /health was reporting (9fe2f24).

before after
duration 2:34 (154.00s) 2:50 (169.70s)
live footage 68.2s (44%) 95.9s (56.5%)
beats 9 (5 footage) 10 (6 footage)
photos in the take 2 5 (the whole cap)
verify receipt on camera 9/9 12/12

New footage beat 05-link: the tab is reloaded mid-job and the same live reel is picked back up from the link.

Narration fixed where it was wrong

  • 04-rolling no longer says "about five minutes a photo". It now states what the concurrency actually bought, measured on the run in the video: 1508.6s of provider work in 445.7s of wall clock across 5 concurrent Kling calls, a 3.4x compression. Saved verbatim from GET /reels/jobs/<id> as demo/video-assets/usage.txt.
  • 02-photos carries the cap and its demo-not-product framing.
  • 05-link (new) covers the job id in the URL.
  • 10-close covers a live provider failure naming its reason in plain words.
  • 08-honest covers per-job usage accounting.
  • Register is unchanged: warm and selling, not clipped declaratives. Voice is unchanged (Rachel, 21m00Tcm4TlvDq8ikWAM).

One claim was cut because the picture could not back it

A first pass had beat 3 say "read the line beneath" about the derived estimate. That line sits below the fold behind the caption band and is not in frame. The claim moved to beat 4, where 5 photos usually take about 6 minutes. is plainly legible for the whole beat, and beat 3 went back to being about the occasions.

Likewise, Playwright records the page viewport only, so #reel/<job_id> in the address bar can never be in frame. Rather than fake an overlay, the reload beat is built on the app's own resume copy ("Picking this reel back up", "Already in progress"), which is real in-page evidence that the reload recovered a running job.

Nothing freezes

The build pads short footage with tpad=stop_mode=clone, so every beat was re-checked against its source clip after the final narration was measured:

Beat Beat length Source clip Slack
02-photos 19.27s 19.77s 0.50s
03-occasion 10.33s 10.80s 0.47s
04-rolling 19.13s 19.60s 0.47s
05-link 16.07s 16.57s 0.50s
06-reel 10.43s 10.93s 0.50s
07-verify 20.67s 21.17s 0.50s

Cloud Run memory

deploy/deploy-cloudrun.sh still pinned --memory 512Mi. A 5-photo concurrent run OOM'd live (Memory limit of 512 MiB exceeded with 527 MiB used) and the service was raised to 2Gi by hand, so the next deploy would have put the OOM straight back. Now pinned to 2Gi with the reason written next to it.

Gates

  • scripts/check_video.py green at 169.70s: under the 180s cap, H.264/yuv420p 1280x720 30fps, single AAC track (no music), 10 cues matched to 10 beats by order, timing and text.
  • Zero em-dashes in captions, narration and SRT.
  • README.md, demo/SUBMISSION.md, demo/STATE.md and demo/video-script.md reconciled to the new duration and footage share.

Efthimios Fousekis added 2 commits August 3, 2026 19:12
…s concurrent

The committed cut was accurate when it was made and went stale within a day.
Four things shipped after it and the video contradicted all of them: the photo
cap is 5 and the UI says that cap belongs to the demo rather than the reel
maker, the wait is derived from the photo count, generation runs concurrently,
and the job id is in the URL so a reload no longer loses the run. The old
narration's "about five minutes a photo" described a sequential pipeline that
no longer exists, which had stopped being a stale detail and become a
misleading one.

Reshot as one unbroken take of a full five-photo run against the live service
at the commit /health was reporting. The video is 2:50 (169.70s), under the
180s cap, and 95.9s of it (56.5%) is live screen capture, up from 68.2s (44%).
Ten beats, six of them footage, including a new beat in which the tab is
reloaded mid-job and the same live reel is picked back up from the link.

Measured on the run in the video: 1508.6s of provider work completed in 445.7s
of wall clock across 5 concurrent Kling calls, a 3.4x compression. Saved
verbatim from GET /reels/jobs/<id> as demo/video-assets/usage.txt, and beat 4
quotes that run rather than an estimate.

Playwright records the page viewport only, so #reel/<job_id> can never be in
frame. The reload beat is built on the app's own resume copy instead, which is
real in-page evidence that the reload recovered a running job. A first pass
had beat 3 point at the derived estimate on screen; that line sits below the
fold behind the caption band and is not in frame, so the claim moved to beat 4
where it is plainly legible for the whole beat.

Also fixes deploy/deploy-cloudrun.sh, which still pinned --memory 512Mi. A
5-photo concurrent run OOM'd live ("Memory limit of 512 MiB exceeded with 527
MiB used") and the service was raised to 2Gi by hand, so the next deploy would
have put the OOM straight back.

Voice unchanged (Rachel). Narration only, no music, single AAC track. Zero
em-dashes in captions, narration and SRT. Every footage beat is shorter than
its source clip (slack 0.47s to 0.50s), so nothing freezes on a cloned frame.
…the stale 9/9 entry

Two follow-ups on the reshoot.

cut-footage.py cuts a fixed length out of one continuous recording with no
upper bound of its own, so a beat can silently run past the end of its phase.
That only bites where the next thing on screen is a distinct event, which today
is 04-rolling: the take reloads the tab immediately after it, and lengthening
that narration by ~1.7s would put the reload at the end of beat 04 and again as
the whole of beat 05, with nothing failing. New BOUNDS table asserts the clip
fits, so that lands as a build error instead of a duplicated reload.

PHASE_FLOOR in capture-live.py already guarded the other direction (a take too
quick to fill a beat); this is the same invariant from the other side.

Also marks the earlier STATE.md entry superseded. It asserted "9/9 checks
passed" as a live claim about the video, which was true of the two-photo take
and is not true of the five-photo one (12/12). The narration itself states no
count, so it cannot go stale again.
@upgradedev
upgradedev merged commit 05da414 into main Aug 3, 2026
12 checks passed
@upgradedev
upgradedev deleted the feat/demo-reshoot-five-photo-concurrent branch August 3, 2026 16:22
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