A GitHub Action · free · MIT

Your demo video, rebuilt on every release.

Rollcut opens your app in a real browser, walks through it with a visible cursor, narrates each step, and attaches the finished MP4 and GIF to the release. Tag a release, get a trailer. Nobody records anything, ever again.

demos/app.yaml
Edit the YAML — it replays as you type.
orbit.example.com/ REC00:00:00:00
Active issues·12 open
MKJLAR+4
FilterAssignee: AnyonePriorityLabel
ProjectOctoberNovemberDecember
Mobile app 2.0· 18 issues
Mobile app 2.064%
Billing v2· 9 issues
Billing v230%
Design system· 24 issues
Design system82%
Public API· 6 issues
Public API10%
Type a command or search…
Go to RoadmapG R
Go to Active issuesG B
Create new issueC
Assign to meI
Toggle themeT
Issue created
Narrationmutedstep 0 / 0
This is a simulation of the recorder, running in your browser against a mock issue tracker. The real one drives headless Chromium against your deployed app — same verbs, same cursor, same timing rule. Turn on Voice to hear the notes read by Rollcut's default voice — kokoro, running locally, no API key.
What lands on the release

Three files. Made by Rollcut, on Rollcut's own release.

These are the actual assets attached to v1.1.0 of this repo, generated in CI by the Action with no one at the keyboard.

demo.mp4 669 KB · 1280×720 · 19 s
Narrated, subtitled, cursor visible. Hover to play.
demo.gif 2.7 MB
Silent, README-ready. Kept under 8 MB.
demo.srt 257 B
1
00:00:00,007 --> 00:00:04,007
This is Excalidraw, a whiteboard
that runs in the browser.

2
00:00:05,769 --> 00:00:07,769
Pick the rectangle tool.

3
00:00:08,285 --> 00:00:10,335
Draw a shape on the canvas.
Captions as a file too — for YouTube, docs, anywhere.
How it works

One workflow. One YAML. A fresh trailer on every tag.

1

You publish a release

The workflow fires on release: published and points at your deployed app or a preview URL.

git tag v1.2.0 && git push --tags
2

A browser follows the spec

Headless Chromium performs the steps with a visible cursor and a soft 1.15× zoom on clicks. Each note is synthesized before recording, so the step is held exactly as long as its line takes to say. Voice and video never drift.

playwright · kokoro (local, no API key)
3

The trailer lands on the release

ffmpeg muxes the voice, burns subtitles, cuts a GIF, and attaches all of it to the release that triggered the run. Optionally the README embed updates itself.

demo.mp4 · demo.gif · demo.srt
Built for the long run

Your UI will change. The spec keeps up.

A demo that breaks the day you cut a release is worse than no demo. Rollcut watches the spec between releases, fixes what it can, and tells you plainly about what it can't.

Drift detection

Run it nightly in mode: check. It replays the spec without recording and fails the job the day a step stops working — not the day you ship.

Spec repair

rollcut repair finds the renamed element, patches the YAML in place, and re-verifies it in a real browser. Steps it can't fix are kept and reported — never silently dropped.

Capture & plan

Click through your product once and rollcut capture writes the spec from what you did. Or point rollcut plan at a URL and it proposes one — every selector verified before it's written.

Install

Six lines in a workflow.

  1. Add the workflowSave it as .github/workflows/demo.yml. It needs contents: write to attach assets.
  2. Write a specOr run rollcut capture, click through your app once, and it writes one for you.
  3. Publish a releaseThe trailer is on it a few minutes later — and on every release after that.
.github/workflows/demo.yml
name: Demo
on:
  release: { types: [published] }
permissions:
  contents: write
jobs:
  demo:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ArshadNyx/rollcut@v1
        with:
          spec: demos/app.yaml
          url: https://app.example.com
Rollcut

Tag a release.
Get a trailer.

Add it to one repo tonight. Your next release will have a demo video before you've finished the changelog.