The local Studio
vanillasky studio video.json opens a visual editor for a config, served from your own machine. Scene timeline, per-scene variables, template swap, music, live preview and MP4 export. No account, no upload, no network — the page, the preview, the render and the file writes are all local.
It exists because the render loop is the slow part of making a video. Waiting ~25 seconds for an MP4 to discover the hook is wrong is a bad way to iterate; the preview shows you that instantly. The intended shape is that your agent composes the first version and hands off:
vanillasky studio video.json # opens http://127.0.0.1:<port>/studioWhat you can change
- Scenes — reorder, delete, duplicate and retime on the timeline below the preview. Selecting a scene seeks the preview to it.
- Copy and variables — every variable the template declares, with the right input for its type. Swapping a template carries copy that both templates share and drops what doesn't belong.
- Background — stock search runs against Pexels with your own key, straight from your machine. Without a key the picker tells you how to add one; see
vanillasky setup. - Music — the full bundled library with durations and moods. A track shorter than your video is still offered and marked
loops to fill, because that is what happens rather than an error. - Brand and orientation — font, brand colours, and a 9:16 / 16:9 toggle that re-lays out every scene.
Export
Export MP4 runs the same renderer vanillasky render uses — headless Chrome plus ffmpeg — and writes video.mp4 next to the config, with progress in the header. It deliberately does not use the browser's own encoder: that path drifts on text width, so what you preview and what you export would not match.
Export is disabled while a save is in flight or the config has validation errors, so you can't render something the CLI would refuse.
Editing alongside your agent
The Studio watches the file. When your agent rewrites the config — because you asked it for a change in another window — the preview updates in front of you without a reload. If you have unsaved edits of your own at that moment, you get a conflict banner offering Use theirs or Keep mine rather than one side silently overwriting the other.
Your own edits autosave to the file, so vanillasky render in another terminal always sees current state.
What it deliberately doesn't have
- No AI chat. The Studio edits; your agent composes. Keeping the chat out is what lets the whole editor ship inside the skill with no backend.
- No media upload. Uploading needs storage. Reference media by https URL, or use stock search with your Pexels key.
- No template ranking. Ranking metadata lives in a database a local install has no access to, so the picker shows registry order.
How it's served
The CLI starts an HTTP server bound to 127.0.0.1 on an ephemeral port and mints a token, which it passes in the URL fragment — fragments are never sent in HTTP requests, so the token stays out of request logs, and the page strips it from history on load. Every local API call checks the token, that the Host resolves to loopback, and that any Origin is exactly the server's own. Loopback binding alone is not a boundary: any page in the same browser can reach 127.0.0.1, and DNS rebinding can make a hostile origin look same-site.
Stop it with Ctrl+C. Nothing persists but the config file you were editing.