spindle.by jsj
← All products
VIDEO EDITOR / IN DEVELOPMENT

spindle/story

Launch videos, one prompt per scene.

A video editor where every scene is a prompt. Claude builds each one as an animated page from your real codebase, checks its own frames, and lines the cuts up with the music.

The spindle/story teaserMade with spindle/story. Every scene, every cut, every sound.

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.