Skip to content

Video review and feedback ​

Chaptered playback with frame-anchored feedback flags.

The /review surface for produced videos: a chapter timeline synced to playback, a flag list for frame-anchored feedback, and a detail pane per flag — the feedback half of the produce → review → refine loop.

Question

Which product behavior does this surface prove?

Watch for

The first few beats show the capability in the real Kitsoki UI.

Why it matters

The page is generated from the same catalog and deterministic fixtures used by QA.

Key beats

  1. After the story renders a real walkthrough MP4, the /review surface is where an operator flags moments and dispatches structured refine notes. Every flag carries its still, its source_ref, and its instruction — captured in the browser, refined deterministically in the story.

    Video review — feedback on a rendered walkthrough — screenshot
  2. The /review surface opens on a session that rendered a real walkthrough video. Two columns: the player, chapter timeline and flags on the left; the selected flag's detail on the right.

    The /review feedback surface — screenshot
  3. This is the actual MP4 the deterministic slidey producer rendered for this run, served through the run's ArtifactResolver by its journalled handle — no upload, no copy.

    The rendered walkthrough plays inline — screenshot
  4. Each marker is one scene from the chapter sidecar the render emitted (source_ref kind=slidey). Click or drag the track to pick a moment; the selection is what you flag.

    A chapter timeline from the sidecar — screenshot
  5. Flagging the selected moment grabs a still at that timestamp — a REAL single-frame ffmpeg extraction (internal/video.Frame), recorded back through the run's substrate as its own artifact handle.

    Flag a moment — screenshot
Full recorded walkthrough (10 steps)
  1. The flag's detail pane shows the grabbed frame — proof the frame seam ran end-to-end: video handle → ffmpeg grab at t → recorded PNG handle → served back into the panel.

    The captured still — screenshot
  2. The dominant chapter resolves the flag to the exact slidey scene that produced it, with a vscode:// deep-link straight to the spec. Feedback lands on the source, not a screenshot.

    Resolved source_ref + IDE deep-link — screenshot
  3. Type what should change at this moment. This becomes the structured feedback note's instruction — a binding directive the slice-3 refine arc will honour.

    Write the refine instruction — screenshot
  4. Dispatch the note via runstatus.feedback.add: it carries the source_ref, the time range, the captured frame handle, and the instruction. The panel captures and dispatches — it never edits a spec itself.

    Send to refine — screenshot
  5. Flags accumulate in the left column; a filled dot marks a dispatched note. 'Send all' fires every open note in one batch for the next refine cycle.

    Every flag, dispatched together — screenshot