Skip to content

Replay a demo script on a virtual display and write a silent MP4 with step timings #2

Closed

Description

@codeonym

Replay a demo script on a virtual display and write a silent MP4 with step timings

Problem

There is no way to record an agent's demo headlessly and reproducibly: the existing screen-recording skill assumes
OBS on a person's desktop.

Change

  • The container image: virtual display, Chromium, Playwright, ffmpeg.
  • The npm package flow-reel with the demo() / step() API (story decision 010) and the CLI: on the host,
    flow-reel record demo.ts starts the image with the project mounted; inside, it replays the script and records.
  • The runner's stabilisation from story decision 009: fixed viewport and device scale, prefers-reduced-motion, fixed
    clock and seed, network-idle wait before each step.
  • Recording with Xvfb + ffmpeg into a 4K near-lossless master at 30 fps, plus a silent 1080p demo.mp4 (decision 001).
  • A wrapped page that eases the mouse to each target and types visibly, so later polish can draw the cursor
    (story decision 012, this ticket's decision 002).
  • transcript.json with video and each step's index, startMs, actionEndMs, endMs (story decision 011), and
    events.json with the runner's moves, clicks, typing and scrolls (story decision 013).
  • Reaching an app on the host's localhost on Linux and Docker Desktop (decision 003); the image tagged with the npm
    version, built locally when it can't be pulled (decision 004).

Out of scope

Narration, captions, audio (GH-3 to GH-5); drawing the cursor, zoom and SFX (later tickets); publishing images
(the release ticket).

Done when

  • flow-reel record on a sample app writes a 3840×2160 30 fps master, a silent 1920×1080 demo.mp4, and a
    transcript.json and events.json that validate against version 1.
  • Two runs of the same script have the same steps, every start within ±150 ms.
  • A step's logged startMs matches the frame where it visibly starts, within ±2 frames.

Decisions

This ticket's decisions 001-004 (recorder, wrapped page, reaching the host, image).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions