Hero demo: directed 30fps camera on /secret - #897
Conversation
… middle The landing-page film is one capture path with a camera, not a fixed wide shot. The scene writes zoom-in/zoom-out cues around the stored secret, the zoom stage holds that line at 2× for two seconds, the typed prompt is one readable sentence (the full contract is TASK.md), and the cut plays the build at 6× with a badge then returns to real time for signing.
The previous cut zoomed a stored-secret still and published at 30 (then 14) fps. The scene now types /secret in the composer, cues a 2× crop on that line, pans right as from-env is entered, and eases out before the short TASK.md prompt. Capture, cut, and cadence for demo-hd are 60 fps / 17 ms. Kitty in the recorder image needs a machine-id and a session bus after Xvfb or the window never appears. verify-scene counts type_visible as typed text.
|
Important Review skippedToo many files! This PR contains 149 files, which is 49 over the limit of 100. To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (149)
You can disable this status message by setting the Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
A hero take came out at 2560x1440, 60/1 CFR, 7415 frames, encoded without dropping anything, and stuttered. Measured with mpdecimate it carried 385 unique frames: a flat 3.3 per second through typing, streaming and idle alike. The cause is --blur-background in the picom chrome. A translucent window makes the compositor re-blur everything behind it every frame, on the CPU through xrender, across the whole 2304x1184 inset. Measured in the recorder image at 2560x1440, one identical payload, six seconds per arm: no compositor 171 unique / 359 grabbed 28 fps opaque + blur 89 unique / 337 grabbed 14 fps 0.72 opacity, no blur 69 unique / 305 grabbed 11 fps 0.72 opacity + blur (the default) 14 unique / 69 grabbed 2 fps The middle column is the tell. With the blur on ffmpeg could grab 69 of 360 frames: the X server had nothing left to answer a screen capture with, so no encoder setting and no render-loop change downstream could recover frames that were never drawn. Re-measured unloaded, the same arms read 49 fps against 2. Blur now stays off unless SCENE_CHROME_BLUR=1 asks for it, which belongs on a still. Rounding, opacity and shadow are unchanged, so the treatment survives. Every signal available at the time said the take was fine, which is the real defect: the pipeline never measured whether the picture moved. proof/motion-gate.sh counts unique frames per second and fails a take below a floor, so a stuttering capture is loud instead of silent. The recorder runs it on every take. The sandbox guest gains ffmpeg, without which the suite pinning the gate cannot run at all.
The previous commit turned --blur-background off for costing 8 to 20 times the frame rate, and read as though a visual feature had been given up for speed. It had not been. The backdrop is generated once, never moves, and is already blurred at 0x26 when it is written, so what the runtime pass convolves on every frame is a constant smooth gradient -- and a blur of a smooth gradient returns the same gradient. Captured as a still with identical geometry and identical terminal contents, the blurred and unblurred arms differ by an RMSE of 0.001 of 255: 0.00%. The frost, the rounding, the shadow and the edge highlight are unaffected, because they come from --active-opacity, --corner-radius and --shadow, none of which is a blur.
Capture dropped from 60 to 30. Measured in the recorder image at 2560x1440 with the hero's own chrome, a payload repainting every cell of the 134x31 grid as fast as the terminal accepts it: 240 unique frames of 240 grabbed idle, 223 of 240 with twelve cores busy. Every frame distinct at 30. Capturing at 60 adds no motion the session ever had, doubles the encoder's cores and the file, and writes a 60 fps header over slower content, which is what made an earlier take read as smooth to ffprobe and stutter on screen. The Wayland path had none of the guards the X path grew: it defaulted to 60, forwarded neither the chrome nor the motion variables, and measured nothing. It now runs the same gate. The verdict is taken after the artifacts are copied out, and exits rather than returns, because an EXIT trap that only returns leaves the run reporting the success it already had.
type_human paces the composer per character so the prompt arrives as typing rather than as a paste. /yolo is confirmed rather than assumed: the dialog takes a second Return. The signing key is typed as a literal throwaway digest, so the frame shows the command a viewer would run. wait_for_screen answers the permission dialogs a turn raises instead of deadlocking on a needle the model cannot reach while halted, and gives up on a goal that has already finished. The zoom stage is off for this scene: the hero publishes the take whole.
# Conflicts: # docs/handbook/book/404.html # docs/handbook/book/acknowledgements.html # docs/handbook/book/appendix/glossary.html # docs/handbook/book/architecture/compaction.html # docs/handbook/book/architecture/config.html # docs/handbook/book/architecture/mcp.html # docs/handbook/book/architecture/memory.html # docs/handbook/book/architecture/overview.html # docs/handbook/book/architecture/providers.html # docs/handbook/book/architecture/sandbox.html # docs/handbook/book/architecture/secrets.html # docs/handbook/book/architecture/session-turn.html # docs/handbook/book/architecture/tui.html # docs/handbook/book/concepts/index.html # docs/handbook/book/concepts/model-contract.html # docs/handbook/book/concepts/permission-model.html # docs/handbook/book/concepts/sessions-turns-threads.html # docs/handbook/book/context/compaction-memory.html # docs/handbook/book/context/context-files.html # docs/handbook/book/context/goal-state.html # docs/handbook/book/context/reads-search.html # docs/handbook/book/edit/edit-repair.html # docs/handbook/book/edit/engine.html # docs/handbook/book/edit/roadmap.html # docs/handbook/book/features/advisor.html # docs/handbook/book/features/branching.html # docs/handbook/book/features/cockpit.html # docs/handbook/book/features/collab.html # docs/handbook/book/features/connectors.html # docs/handbook/book/features/cpu-limit.html # docs/handbook/book/features/doctor.html # docs/handbook/book/features/exec.html # docs/handbook/book/features/export-import.html # docs/handbook/book/features/extensions-authoring.html # docs/handbook/book/features/extensions.html # docs/handbook/book/features/feature-flags.html # docs/handbook/book/features/hooks-authoring.html # docs/handbook/book/features/hooks.html # docs/handbook/book/features/index.html # docs/handbook/book/features/keybindings.html # docs/handbook/book/features/lsp.html # docs/handbook/book/features/marketplace-authoring.html # docs/handbook/book/features/marketplace.html # docs/handbook/book/features/mcp.html # docs/handbook/book/features/memory.html # docs/handbook/book/features/personalities.html # docs/handbook/book/features/plan-mode.html # docs/handbook/book/features/plugins.html # docs/handbook/book/features/profiles.html # docs/handbook/book/features/python-repl.html # docs/handbook/book/features/review.html # docs/handbook/book/features/sandbox.html # docs/handbook/book/features/secrets.html # docs/handbook/book/features/skills-authoring.html # docs/handbook/book/features/skills.html # docs/handbook/book/features/speech.html # docs/handbook/book/features/subagents.html # docs/handbook/book/features/web-search.html # docs/handbook/book/foundations/architecture.html # docs/handbook/book/foundations/thesis.html # docs/handbook/book/foundations/verification.html # docs/handbook/book/index.html # docs/handbook/book/introduction.html # docs/handbook/book/models/prompts.html # docs/handbook/book/models/providers.html # docs/handbook/book/models/system-prompt.html # docs/handbook/book/observability/overview.html # docs/handbook/book/print.html # docs/handbook/book/reference/approval-mode.html # docs/handbook/book/reference/cli.html # docs/handbook/book/reference/environment-complete.html # docs/handbook/book/reference/environment.html # docs/handbook/book/reference/exit-codes.html # docs/handbook/book/reference/file-locations.html # docs/handbook/book/reference/hooks.html # docs/handbook/book/reference/index.html # docs/handbook/book/reference/keybindings-config.html # docs/handbook/book/reference/keybindings-ref.html # docs/handbook/book/reference/mcp-config.html # docs/handbook/book/reference/models-yml.html # docs/handbook/book/reference/project-trust.html # docs/handbook/book/reference/providers.html # docs/handbook/book/reference/rpc.html # docs/handbook/book/reference/sdk.html # docs/handbook/book/reference/settings-reference.html # docs/handbook/book/reference/settings.html # docs/handbook/book/reference/skills.html # docs/handbook/book/reference/slash-commands.html # docs/handbook/book/reference/theme.html # docs/handbook/book/reference/tools.html # docs/handbook/book/reference/tree-command.html # docs/handbook/book/repair/cascade.html # docs/handbook/book/repair/overview.html # docs/handbook/book/repair/per-model.html # docs/handbook/book/repair/soundness.html # docs/handbook/book/router/role-routing.html # docs/handbook/book/searcher-c2a407aa.js # docs/handbook/book/using/authentication.html # docs/handbook/book/using/configuration.html # docs/handbook/book/using/configuring-providers.html # docs/handbook/book/using/custom-tools.html # docs/handbook/book/using/editing.html # docs/handbook/book/using/examples.html # docs/handbook/book/using/extending.html # docs/handbook/book/using/faq.html # docs/handbook/book/using/getting-started.html # docs/handbook/book/using/install.html # docs/handbook/book/using/mcp-setup.html # docs/handbook/book/using/migration-guide.html # docs/handbook/book/using/models.html # docs/handbook/book/using/quickstart.html # docs/handbook/book/using/roles-and-profiles.html # docs/handbook/book/using/safety.html # docs/handbook/book/using/sessions.html # docs/handbook/book/using/task-guides.html # docs/handbook/book/using/themes.html # docs/handbook/book/using/troubleshooting.html # docs/handbook/book/why/argot.html # docs/handbook/book/why/index.html # docs/handbook/book/why/innovations.html # docs/handbook/book/why/performance.html # docs/handbook/book/why/value.html # proof/docker/wlsession.sh # proof/docker/xsession.sh
…ed-cut # Conflicts: # docs/handbook/book/404.html # docs/handbook/book/acknowledgements.html # docs/handbook/book/appendix/glossary.html # docs/handbook/book/architecture/compaction.html # docs/handbook/book/architecture/config.html # docs/handbook/book/architecture/mcp.html # docs/handbook/book/architecture/memory.html # docs/handbook/book/architecture/overview.html # docs/handbook/book/architecture/providers.html # docs/handbook/book/architecture/sandbox.html # docs/handbook/book/architecture/secrets.html # docs/handbook/book/architecture/session-turn.html # docs/handbook/book/architecture/tui.html # docs/handbook/book/concepts/index.html # docs/handbook/book/concepts/model-contract.html # docs/handbook/book/concepts/permission-model.html # docs/handbook/book/concepts/sessions-turns-threads.html # docs/handbook/book/context/compaction-memory.html # docs/handbook/book/context/context-files.html # docs/handbook/book/context/goal-state.html # docs/handbook/book/context/reads-search.html # docs/handbook/book/edit/edit-repair.html # docs/handbook/book/edit/engine.html # docs/handbook/book/edit/roadmap.html # docs/handbook/book/features/advisor.html # docs/handbook/book/features/branching.html # docs/handbook/book/features/cockpit.html # docs/handbook/book/features/collab.html # docs/handbook/book/features/connectors.html # docs/handbook/book/features/cpu-limit.html # docs/handbook/book/features/doctor.html # docs/handbook/book/features/exec.html # docs/handbook/book/features/export-import.html # docs/handbook/book/features/extensions-authoring.html # docs/handbook/book/features/extensions.html # docs/handbook/book/features/feature-flags.html # docs/handbook/book/features/hooks-authoring.html # docs/handbook/book/features/hooks.html # docs/handbook/book/features/index.html # docs/handbook/book/features/keybindings.html # docs/handbook/book/features/lsp.html # docs/handbook/book/features/marketplace-authoring.html # docs/handbook/book/features/marketplace.html # docs/handbook/book/features/mcp.html # docs/handbook/book/features/memory.html # docs/handbook/book/features/personalities.html # docs/handbook/book/features/plan-mode.html # docs/handbook/book/features/plugins.html # docs/handbook/book/features/profiles.html # docs/handbook/book/features/python-repl.html # docs/handbook/book/features/review.html # docs/handbook/book/features/sandbox.html # docs/handbook/book/features/secrets.html # docs/handbook/book/features/skills-authoring.html # docs/handbook/book/features/skills.html # docs/handbook/book/features/speech.html # docs/handbook/book/features/subagents.html # docs/handbook/book/features/web-search.html # docs/handbook/book/foundations/architecture.html # docs/handbook/book/foundations/thesis.html # docs/handbook/book/foundations/verification.html # docs/handbook/book/index.html # docs/handbook/book/introduction.html # docs/handbook/book/models/prompts.html # docs/handbook/book/models/providers.html # docs/handbook/book/models/system-prompt.html # docs/handbook/book/observability/overview.html # docs/handbook/book/print.html # docs/handbook/book/reference/approval-mode.html # docs/handbook/book/reference/cli.html # docs/handbook/book/reference/environment-complete.html # docs/handbook/book/reference/environment.html # docs/handbook/book/reference/exit-codes.html # docs/handbook/book/reference/file-locations.html # docs/handbook/book/reference/hooks.html # docs/handbook/book/reference/index.html # docs/handbook/book/reference/keybindings-config.html # docs/handbook/book/reference/keybindings-ref.html # docs/handbook/book/reference/mcp-config.html # docs/handbook/book/reference/models-yml.html # docs/handbook/book/reference/project-trust.html # docs/handbook/book/reference/providers.html # docs/handbook/book/reference/rpc.html # docs/handbook/book/reference/sdk.html # docs/handbook/book/reference/settings-reference.html # docs/handbook/book/reference/settings.html # docs/handbook/book/reference/skills.html # docs/handbook/book/reference/slash-commands.html # docs/handbook/book/reference/theme.html # docs/handbook/book/reference/tools.html # docs/handbook/book/reference/tree-command.html # docs/handbook/book/repair/cascade.html # docs/handbook/book/repair/overview.html # docs/handbook/book/repair/per-model.html # docs/handbook/book/repair/soundness.html # docs/handbook/book/router/role-routing.html # docs/handbook/book/searcher-c2a407aa.js # docs/handbook/book/searchindex-74060183.js # docs/handbook/book/using/authentication.html # docs/handbook/book/using/configuration.html # docs/handbook/book/using/configuring-providers.html # docs/handbook/book/using/custom-tools.html # docs/handbook/book/using/editing.html # docs/handbook/book/using/examples.html # docs/handbook/book/using/extending.html # docs/handbook/book/using/faq.html # docs/handbook/book/using/getting-started.html # docs/handbook/book/using/install.html # docs/handbook/book/using/mcp-setup.html # docs/handbook/book/using/migration-guide.html # docs/handbook/book/using/models.html # docs/handbook/book/using/quickstart.html # docs/handbook/book/using/roles-and-profiles.html # docs/handbook/book/using/safety.html # docs/handbook/book/using/sessions.html # docs/handbook/book/using/task-guides.html # docs/handbook/book/using/themes.html # docs/handbook/book/using/troubleshooting.html # docs/handbook/book/why/argot.html # docs/handbook/book/why/index.html # docs/handbook/book/why/innovations.html # docs/handbook/book/why/performance.html # docs/handbook/book/why/value.html
What
Redo the landing-page hero take’s camera and cadence.
/secretis entered, pan across the stored value, hold at 2× readable size, then ease back to the wide shot.proof/prompts/demo-hd.mdand is seeded asTASK.md.Production-path proof
A non-publishing X11 rehearsal used
google-antigravity/gemini-3.7-flashat low thinking and completed every guarded state: persistent goal, four-phase todo board, three subagents, integration edit, verified build, compiled simulator, protected signing, signed artifact, completed todo list, completed goal, and final presentation.The recorder measured:
The retained published-form WebP measured:
The prior 10% average-only bound misclassified 400 byte-identical frames coalesced during normal keyboard, spinner, and token pauses. The corrected paired bounds admit this measured take while regressions still reject the historical 14.2 fps distribution, an 80%×33ms/20%×167ms short-hold distribution, and an 83ms resample.
Scene guard
The scene driver had been changed so a byte-identical mark logged a notice instead of
abandoning the take, which turned a take that is not evidence into a green run. The guard
is fatal again, and the cause it was hiding is fixed with it:
wait_for_screenreturned 0for a needle it never observed once the goal finished early, so the next
shotcapturedthe previous mark's screen. It now returns a distinct status 2, which reaches
abandon_takethroughexpect_screen, and its half-second poll counts againstceiling * 2so a ceiling in seconds is a real bound again rather than half of one(measured 2010ms for a 2s ceiling, previously 1000ms). Two back-to-back identical
screen_hascalls inapprove_while_askedare gone.bash scripts/test-sandbox/run.sh --rung=docker bun test \ scripts/a-mark-cannot-capture-a-duplicate-frame.test.tsVerification
python3 proof/zoom.py --self-check bash scripts/test-sandbox/run.sh --rung=docker bun test \ proof/a-published-clip-keeps-capture-cadence.test.ts \ proof/a-capture-is-judged-on-motion.test.ts \ proof/the-chrome-is-drawn-after-the-take.test.ts \ scripts/verify-scene.test.ts \ scripts/magick-tmpdir.test.ts bun run check bun run check:tools mdbook build