Behind the pouch

How it works

You supply the predicament. Your agent draws the cast, gives them voices, and sends you a finished video.

1. Agree on the plan in chat
2. Draw the cast
3. Voice & render
4. Watch & revise

Start in your agent chat

Give the pelican-theater skill to your agent, then describe your scene. Review the plot and dialogue together before making it. The agent writes SVG artwork and the skit directly with its own model; the theater does not make additional OpenRouter or other LLM API calls.

The agent needs permission to work with files and run commands on a computer or VPS. It checks Node.js, Chromium, FFmpeg, and a speech service. Local Pocket TTS provides voices; you can also use a compatible service or explicitly choose captions only. The current install path supports Linux and macOS, or WSL on Windows.

Make it, watch it, change one thing

The CLI validates the artwork and script, creates speech, and captures the performance as an MP4. Ask your agent to send that video in chat so you can watch on your phone. You also get an editable project bundle. A localhost link on a VPS will not open on your phone.

Before production, your agent proposes the format, characters, setting, scene beats, and dialogue in chat. Give feedback until you are happy with the plan, then approve it. No separate storyboard tool is needed.

Afterward, ask for a quicker delivery, a new shirt, or a longer pause. The agent edits the project and renders again. Unchanged speech is cached, so a camera or timing edit does not regenerate the voices.

node scripts/theater.mjs init data/projects/my-skit
# Your agent edits skit.json and assets/ here.
node scripts/theater.mjs validate data/projects/my-skit
node scripts/theater.mjs render data/projects/my-skit

Get the skill and installation instructions →

Like moving things around yourself?

Editor opens the project your agent made. Move a character, adjust pauses, rewrite dialogue, and preview your changes. Copy a request with the selected scene or character to any agent chat. A private local installation can connect to Hermes directly; you review its proposed edits before applying them. On your private installation, update voices and render a video directly in the Editor. Export your latest project to continue in any agent chat. Projects stay on this device until you export them.

A deliberately constrained stage

Characters are ordinary SVG files with stable IDs for parts such as eyes, pupils, and mouths. A skit is a JSON sequence of actions—not generated JavaScript—so dialogue, movement, expressions, camera shots, and props can be inspected and replayed deterministically.

{ "do": "say",   "who": "pelican", "line": "Places, everyone." }
{ "do": "emote", "who": "pelican", "emotion": "worried" }
{ "do": "shot",   "type": "closeup", "who": "pelican" }

Voices and mouth timing

Published skits bundle their audio alongside the script. During playback, the player measures the active audio clock and drives mouth shapes against that same timeline. The capture tool waits for an explicit audio-start signal, records the browser performance, and normalizes both audio and video to the same zero point before producing H.264/AAC MP4.

Untrusted SVG stays untrusted

Community and generated SVG is sanitized before it is inserted into the page. Executable tags, event handlers, CSS imports, and external URL references are stripped; the internal IDs and fragment references required for animation are retained.

The pelican that started it

Inspired by Simon Willison's pelican-on-a-bicycle test: once a model can draw a character, can we give it stage fright?

The repository is public. Your agent can install it over HTTPS without a GitHub login or deploy key. You can also watch The Description or the CLI sample video with no setup.