Every scene is a prompt
Launch videos and feature walkthroughs usually mean screen recordings, a timeline editor, and an afternoon you will not get back. spindle/story starts from the other end. You describe a scene, and Claude writes it.
Each scene is an animated HTML page. Claude reads your codebase, read-only, and rebuilds the real interface with real HTML and CSS, so the product in the video is the product, not a mockup or a blurry screenshot. Then it renders frames and looks at them to check its own work.
Every scene has its own conversation, and so does the whole project. Your playhead position, the neighbouring scenes and the beats in the music go along with every message, so “hold the headline a beat longer” means something. Paste or drop in reference images when words are not enough.
What you see is what renders
Each scene puts its motion on one paused animation timeline. The editor, the thumbnails and the exporter all seek that same timeline, so the preview is exactly what ends up in the video, frame for frame.
- A live preview, scrubbed frame by frame, that updates the moment a scene file changes.
- Every version kept. Every distinct state of a scene is saved, so undo steps back and any earlier version can be previewed and restored.
- Export the whole video or a single scene, at 0.5× to 2× the canvas size and 24 to 60 fps. Scenes render in parallel in headless Chromium and are joined losslessly into an MP4.
Claude checks its own work
The story command is how Claude sees what it made, and you can use it too:
| Command | What it does |
|---|---|
story sheet |
A contact sheet of frames across a scene |
story frames 0.5 1.2 |
Specific frames, by time |
story check |
JavaScript errors, missing assets, and timelines longer than their scene |
story seams |
The pixel difference across each cut, to catch jumpy transitions |
story capture <url> |
A screenshot of your running app, straight into the project’s assets |
Sound, on cue
Music, sound effects and voice-over live on the same timeline as the scenes, and they move when the scenes move.
- Music is generated with ElevenLabs and directed per scene. Sections take their length from the scenes and the tempo is picked so the cuts fall on beats. Every generation is kept as a take you can switch between, and “snap cuts to the beat” works on the real music.
- Sound effects are cues at exact moments: clicks, ticks, toggles, whooshes, risers, or anything you can describe. Cursor clicks and typing get theirs automatically.
- Voice-over is a script on the timeline, one line per moment. Every scene shows how many words fit, lines that would run long are flagged before you spend credits, and Claude can draft the script from what each scene shows. Exports include captions built from the spoken words.
- Bring your own track instead, and its beats are detected and drawn on the timeline for Claude to cut to. A small built-in synth sketches timing drafts offline, for free.
The teaser above was scored, voiced and cut this way. So was the spindle/table video.
Plain files, all the way down
A project is a folder: a project.json for canvas size, frame rate and scene order, one HTML file per scene, a theme, some art direction, assets and renders. Open a scene in your own editor and the preview follows along. Nothing is locked in a database or a proprietary format.
Status
In development, and not available yet. It runs locally on Node 22 with ffmpeg, the Claude Code CLI (or an Anthropic API key), and Playwright’s Chromium. Music, sound effects and voice-over use an ElevenLabs key, which stays on the server and is never sent to the browser or to Claude.