# Capture protocol
Both apps use fresh databases with T3CODE_DEV_SEED=0, added project via `node apps/server/src/bin.ts project add ... --base-dir .t3`, then a free Replay showcase thread using the free deterministic Replay fixture.
Open Files from Toggle right panel > Files; maximize the real panel; hide main sidebar. Explorer 256px; preview 1184px; whole viewport 1440x900 CSS, DPR2, Linux Chromium157, no device emulation, root font16px / font scale100%, dark. This uses the app's real maximize control to keep the preview readable and before/after end frames comparable. The default unmaximized panel was540px.
`instrument.js` is evaluated in the preview tab after initial module optimization. It freezes browser Date, requests reduced-motion through matchMedia override, samples real DOM identity and scroll + read-only app mutation/checkpoint atoms at250ms, and accepts Replay's synthetic approval. It never executes the recorded edit/test on host. Follow-ups use `thread send --wait` in the SAME thread; bytes verified with SHA256.
Before stills: document.fonts.ready, settled asset fetches observed in preview diagnostics, two screenshots at least500ms apart; compare RGBA pixels. Retake unsettled frames. Snapshot files are copied immediately into scratch. Preview API lacks native reduced-motion and network-idle emulation; driver waits for ready content and successful completed asset requests rather than claiming a native network-idle signal.
Recordings show whole app, viewport1440x900, with the app panel maximized. Scroll/mutation/checkpoint log provides exact event milestones alongside the video. `compare.py` creates zero-threshold difference amplified to255 for any nonzero RGB level, and threshold16/255 RGB per channel. No crop or image normalization is applied.
AI-assisted; verified with the tests and tools listed above.
