CLI

Every rapid command and option, grouped by what it does.

Every command and option, from daemon/src/cli/program.ts and the command groups it adds; rapid <command> --help prints one. Job commands talk to the daemon (rapid video and rapid open start it when none answers); setup, the render commands, rapid projects, and the style and format commands run without it. rapid is the shim rapid setup writes; node daemon/bin/rapid.ts from a checkout is the same.

Environment

VariableMeansDefault
RAPID_URLthe daemon's address, for every command that talks to ithttp://127.0.0.1:$RAPID_PORT
RAPID_PORTthe daemon's port, when RAPID_URL isn't set4317
RAPID_HOMEthe state folder: event log, installed packages, config.json, the background daemon's log and PID~/.rapid
RAPID_DEBUG1 prints the whole error instead of one lineunset
CHROME_PATHthe Chrome executable scenes render in/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
ANTHROPIC_API_KEYwhat agents sign in with, when Claude Code isn't signed inunset

$RAPID_HOME/config.json may hold slots (see lanes), styles_repo (the owner/repo bare style names come from, see sharing styles), and projects, the folders rapid finds projects in (see rapid projects).

Every failure prints one line, rapid: <what went wrong>, and exits 1. When no daemon answers, a job command prints rapid: No rapid daemon is running at http://127.0.0.1:4317. Start one with `rapid serve`.

Setup and the daemon

rapid setup

rapid setup [options]

Writes a shim, ~/.local/bin/rapid, that runs this checkout's CLI (a file there that isn't rapid's is left alone), builds the screening page (pnpm --filter @rapid/screen build) when screen/dist is missing, and reports one line per check, ok or missing with its fix: the rapid command and whether its folder is on PATH, Node 24 or newer, ffmpeg, ffprobe, Google Chrome (CHROME_PATH), Claude Code, the Claude sign-in (claude auth status --json, or ANTHROPIC_API_KEY), and the page. It never edits a shell profile or installs a tool. Exits 1 while anything is missing.

OptionMeans
--bin-dir <dir>where the rapid shim goes (default ~/.local/bin)
--checkonly report: write nothing, build nothing

Run it the first time as node daemon/bin/rapid.ts setup from the checkout.

rapid daemon

rapid daemon ensure [--timeout <seconds>]
rapid daemon stop
rapid daemon status

The daemon in the background. It runs detached, logs to $RAPID_HOME/daemon.log, and keeps its PID in $RAPID_HOME/daemon.pid.

CommandDoes
ensurestarts the daemon in the background unless one is running, and waits until it answers; prints started: rapid daemon <version> at <address> (pid <pid>), or running: …
stopstops the daemon rapid daemon ensure started
statuswhether a daemon answers, and where its state and log are; exits 1 when none answers
OptionMeans
--timeout <seconds>for ensure: how long to wait (default: 20)

rapid serve

rapid serve [options]

Runs the daemon in the foreground until Ctrl-C.

OptionMeans
--port <port>port on 127.0.0.1 (default: 4317)
--home <dir>state folder (default $RAPID_HOME or ~/.rapid)
--plugin <dir>the rapid plugin's folder, for agent sessions (default: the checkout's plugin/)
--devserve the screening page from Vite's dev server, which reloads it on edit

rapid mcp

rapid mcp

Serves rapid's tools to a model over MCP on stdio. Claude Code starts it through the plugin; you don't run it yourself. Its eleven tools are in using the MCP tools. Tools that need the daemon start one in the background, as rapid daemon ensure does.

Videos and jobs

rapid video

rapid video [options] [project]

Makes a video from a project: storyboard, key frames, scenes, reviews, then the video. Starts the daemon in the background when none answers (started the daemon in the background). Prints the job's id, then (with --brief) project <folder>, then the screening page's address.

Argument or optionMeans
projectthe project folder (default: .; with --brief and none named, a new one under ~/rapid, named for the brief's first line)
--brief <text>the brief: written to the project's brief.md, the project made if it is new. A project that already holds a different brief is refused
--style <ref>the style: a name, a pinned package, or a folder (default: the project's pinned one, else swiss)
--look <dir>instead of --style, a draft style made by rapid style extract (such as <project>/.rapid/look): the job finishes it with the extractor agent, holds it to rapid style check (sending the check's reasons back to the extractor, three tries in all, then failing), and pins it in rapid.lock before the storyboard. A look already pinned as it is isn't finished again
--format <ref>the format (default: the project's pinned one, else reel)
--review <who>agent: a reviewer judges each round; none: the code checks alone (default: agent)
--rounds <n>review rounds before a scene asks for you (default: 4)
--keys <who>each scene's key frame, its hero as a still, judged before the scene moves. agent: the reviewer judges it; person: you approve it; off: straight to motion. With --review none, agent means off (default: agent)
--director <who>agent: a director judges the storyboard before any scene and the joined video before the mix, and sends either back; none: no direction. With --review none there is none (default: agent)
--stops <where>where the video waits for you. all: the storyboard, a key frame that doesn't converge, and a scene out of rounds; storyboard: the storyboard only; none: nowhere, so it runs to the finished video, taking the best try or round of what doesn't converge and recording each choice (rapid job lists them). --keys person still asks for every key frame (default: all, since at a terminal you are there to answer; the MCP tool new_video defaults to none)
--rebuildbuild every scene again, even those already written
--music <track>a track to cut the video to (copied into the project's assets/ when it is elsewhere): heard before the storyboard (rapid listen), planned and checked to its beats, and mixed as the bed. You must own its rights

rapid new

rapid new [options]

Starts an empty job, for nodes added through the HTTP API. Prints its id. To start a video, use rapid video.

OptionMeans
--title <title>required; what the job makes
--project <dir>the project folder (default: .)
--brief <text>the brief (default: empty)
--style <name>the style
--format <name>the format

rapid jobs

Lists jobs: id, state, title.

rapid open

rapid open [job] [--print]

Opens the screening page in your default browser, at the job named or the newest one, starting the daemon first when none answers. It prints the address; --print prints it and opens nothing.

rapid projects

rapid projects
rapid projects add <dir>
rapid projects remove <dir>

The folders rapid finds your projects in, and the projects in each: every folder directly inside one is a project, titled by its brief.md's first heading (or its name), and a chosen folder that holds a brief.md is a project itself (node_modules and dot folders are skipped). With none chosen, it's ~/rapid, where new videos go. add looks in another folder too; remove stops looking in one and leaves the folder as it is. The list is projects in $RAPID_HOME/config.json; the first add writes ~/rapid there with the new folder, so it keeps being found. These commands need no daemon; the screening page's jobs page lists what they find, with each project's jobs, and can add a folder and start a video in one too.

rapid job

rapid job <id>

A job's nodes: id, state, lane, type, label, wait and run times, and the first line of any error; then each choice the video made without you (chose: …).

rapid approve

rapid approve <node>

Approves a node that needs you. Only an approval node in needs_you can be approved.

rapid redo

rapid redo [options] <node>

Runs a node again, whatever its fingerprint says. A redo of a scene's build with a note starts the scene again, with your marks.

OptionMeans
--note <text>a note for the next attempt

rapid replan

rapid replan --note <text> <job>

Asks a video's storyboarder for the storyboard again, with a note saying what to change. The new storyboard waits for your approval like the first. Every scene whose storyboard entry changes is built again from its key frame, and the video is joined again.

OptionMeans
--note <text>required; what to change

rapid revise

rapid revise --note <text> [--scene <id> [--at <t> [--to <t>]]] <job>

Acts on your note on a video, done or still running, and runs it to the video again with no stops. With --scene and --at, a mark at that moment (or over the span to --to, in seconds from the scene's start) and a new round of that scene only; with --scene alone, that scene built again to the note; with neither, the storyboard again (pacing, order, length, the story) and the scenes it changes. Each scene round is numbered after the scene's earlier ones, so no earlier render is overwritten. Then the video is joined, mixed, and exported again.

OptionMeans
--note <text>required; what to change, as a direction
--scene <id>the scene it is about
--at <t>the moment, in seconds from the scene's start
--to <t>with --at, the end of a span

rapid cancel

rapid cancel <job>

Stops a job's running nodes and marks it cancelled.

rapid lanes

Slots, running, and queued, per lane.

rapid events

rapid events [options]

Streams events until Ctrl-C.

OptionMeans
--after <seq>resume after this seq (default: 0)
--job <id>only this job
--jsonone JSON event per line
--onceprint the events so far and exit

rapid lane

rapid lane <lane> -- <cmd...>

Runs one command through a lane as a one-node job, streams its output, and exits with its code. <lane> is think, gpu, web, encode, or cpu. Ctrl-C cancels the job and exits 130.

Rendering

These run without a daemon. Each prints one JSON line saying what it wrote. A scene is an .html file or a canvas module (.js, .mjs, .ts). --format and --style take a name (built in, installed, or pinned) or a folder; --project <dir> resolves them through that project's rapid.lock. A scene that links rapid:style needs --style.

rapid render

rapid render [options] <scene>

Renders a scene to MP4, with its box log (<out>.boxes.json) and cue scan (<out>.cues.json) beside it. An HTML scene whose meta names another frame than the format's is refused.

OptionMeans
--out <file>required; the MP4 to write
--format <ref>the format (needed for a canvas scene) (default: reel)
--project <dir>resolve the format through this project
--chunks <n>pages in parallel (default: 4)
--style <ref>the style the scene links as rapid:style

rapid still

rapid still [options] <scene>

Writes one frame of a scene as PNG.

OptionMeans
--t <seconds>the moment; give this or --key
--keythe scene's key frame: the moment its meta block names as key; an error if it names none
--out <file>required
--format <ref>the format (needed for a canvas scene) (default: reel)
--project <dir>
--style <ref>the style the scene links as rapid:style

rapid measure

rapid measure [options] <lines...>

Measures lines of type in the style's real faces. Each line is one argument; it prints one JSON line per line of type: text, class, px, width, height, measure (the frame less both margins), fit_px (the size that fills the measure), and fits.

OptionMeans
--style <ref>required; the style whose faces set the type
--kit <class>the kit class to set them in (default: display)
--px <n>the size to set them at (default: the class's own)
--format <ref>the format (default: reel)
--project <dir>resolve the style and format through this project

rapid sheet

rapid sheet [options] <scene>

Writes a contact sheet of a scene; with no times, the review times.

OptionMeans
--out <file>required
--times <list>seconds, comma separated
--render <base>a render (its path without .mp4) whose cues pick the times
--changed <spans>spans a:b,c:d whose starts and ends the times must cover
--max <n>at most this many frames (default: 12)
--microa micro strip: 0.3 s either side of the key and of every mark in --marks, and a second after the key
--marks <files>with --micro, reviews or directions whose marks on this scene the strip covers
--format <ref>the format (needed for a canvas scene) (default: reel)
--project <dir>
--style <ref>the style the scene links as rapid:style

rapid check

rapid check [options] <scene>

Runs the code checks on a scene's render, or on its key frame's still, and writes them as marks: { "pass": boolean, "marks": Mark[] }. On a still it runs only what a still can answer: placement, fonts, problems, and the layout checks (empty, with a bare top or bottom third; grid; scale) at the scene's meta.key.

OptionMeans
--render <base>the render, its path without .mp4; this or --still
--still <png>the key frame's still, from rapid still --key
--room <share>the most of the key frame that may be empty field, over the scene's own room
--out <file>required; the checks to write
--format <ref>the format (default: reel)
--style <ref>required; the style
--project <dir>
--musicthe video is cut to a track: each landing cue (land, hit, enter, drop, pop, kick) and each ducked cue more than two frames off the scene's beats is a mark, and more than five fails it

rapid join

rapid join [options] <renders...>

Joins scene renders (MP4s, in order) into one video. When every hand-off is a cut it copies them without re-encoding; otherwise it draws each transition from both scenes' frames, overlapping them by its duration, and encodes once at the render's quality. A match whose element moves across the cut by more than 8 px, or is missing on one side, is reported on stderr.

OptionMeans
--out <file>required
--transitions <spec>one per hand-off (see transitions), kind[:dur[:dir or el]]: cut, dissolve:0.5, snap-push:0.15:up, glyph-swallow:0.9:<data-el>, ...; or the list as JSON when a move carries an ease, a point, a colour, or settings. Every kind but a cut and a match overlaps at least 0.1 s
--style <ref>the style a transition's color token is read from
--project <dir>the project a style is resolved in

rapid video-sheet

rapid video-sheet [options] <scenes...>

The director's sheet of the cut: one row per scene (in video order) with its first, key, and last frames and where it sits in the cut, then every hand-off as the pair a viewer sees across it.

OptionMeans
--out <file>required
--transitions <spec>as rapid join takes them
--format <ref>the format (default: reel)
--style <ref>the style the scenes link
--project <dir>

rapid mix

rapid mix [options] <renders...>

Mixes a video's sound from its scenes' cue scans, each shifted to where its scene starts. Each render is its path without .mp4, in video order.

Cues with no instrument play nothing; the mix counts them by kind on stderr, and fails (exit 1) when the video has cues and none of them could be played.

OptionMeans
--durations <list>required; each scene's seconds, in the same order
--style <ref>required; its sound map picks the instruments
--out <file>required; the WAV to write
--music <file>a music bed
--music-at <seconds>where the bed enters (default: 0)
--music-from <seconds>where in the track the bed starts (default: 0)
--music-lufs <lufs>bring the track to this loudness first
--music-tail <seconds>fade the bed out over the video's last seconds (default: 0)
--map <file>the track's map, so a video that outlasts the track loops it from a downbeat
--transitions <spec>the join's transitions, so each scene's sound starts where its picture does
--format <ref>the format whose rate the overlaps are held to (default: reel)
--project <dir>

rapid mux

rapid mux [options] <video> <wav>

Puts the mix under the picture.

OptionMeans
--out <file>required

rapid phone

rapid phone [options] <video>

Makes a copy that fits the format's phone size.

OptionMeans
--out <file>required
--format <ref>the format (default: reel)
--project <dir>

Music and shots

rapid listen

rapid listen [options] <track>

Hears a track on this machine (allin1, run through uv in its own environment under $RAPID_HOME/listen, made on first use) and writes its map beside it, <track>.music.json: the tempo, every beat and downbeat, the labelled sections with their energy, and the moments (each build and drop), with a picture of them, <track>.music.png. A track is heard once: what the model heard is kept by the track's hash. A three-minute track takes a few minutes on the CPU.

OptionMeans
--out <file>the map to write (default: <track>.music.json)
--againhear it again, even if this track was heard before
--no-picturewrite the map only

rapid beats

rapid beats [options] [scene]

Prints the music under a video's scenes in each scene's own seconds (beats, downbeats, sections, builds, drops), from storyboard.json's music and the track's map, laid out the way the join lays the scenes. One scene, or every scene when none is named.

OptionMeans
--project <dir>the video project (default: .)
--format <ref>the format whose rate the overlaps are held to (default: reel)

rapid shot

rapid shot [options] <recipe>

Renders a Blender product shot from its recipe (shots/<id>.json): turntable, clay-metal, macro, or build. Writes the key stills (stills/front.png, hero.png, side.png, back.png), each pass's frames with alpha (<pass>/0001.png on), each pass as a VP9 clip with alpha (<pass>.webm), and manifest.json. Blender comes from RAPID_BLENDER, else the Mac's /Applications/Blender.app.

OptionMeans
--project <dir>the project the recipe and its model are in (default: .)
--out <dir>the shot folder (default: renders/shots/<id>)
--stillsonly the key stills
--pass <name>, --from <frame>, --to <frame>only these frames of one pass
--encodeonly encode the rendered passes as clips and write the manifest

Styles and formats

rapid style and rapid format take the same subcommands; extract and proof are style only. Each acts on packages of its own kind, and a failed one exits 1.

add

rapid style add [options] <source>

Installs from a folder, a .zip, an https address, github:owner/repo[/path][@ref], or <name>[@ref]: the folder styles/<name> (formats/<name> for a format) of rapid's GitHub repository, at a tag, branch, or commit, else the default branch. Prints <name>@<version> <sha256> and the installed folder.

list

rapid style list

The installed packages: name, version, the start of the hash, and the source.

use

rapid style use [options] <spec>

Pins <name>[@ref] in the project's rapid.lock, installing it if needed, as add does.

OptionMeans
--project <dir>the project folder (default: .)
--look<spec> is a draft folder, the project's own look: its version is stamped with what it holds (0.1.0-look.<hash>), then it is installed from the folder and pinned, so each change pins anew. A video made with --look runs this itself

check

rapid style check [options] [dir]

Checks a package folder (default .): its schema, hashes, and files, and for a style, that style.css styles the kit. Prints <name>@<version> ok <sha256>, or every reason it failed.

OptionMeans
--writerecompute the manifest's file list first
--publishcheck as a pull request to the styles repository is, proof required
--out <file>write the result as JSON, { "pass": true/false, "reasons": [...] }, and exit 0 either way, for a job that reads it

pack

rapid style pack [options] [dir]

Checks and packs a folder into its zip.

OptionMeans
--out <file>where to write it (default <name>-<version>.zip)

proof

rapid style proof [options] [dir]

Renders a style's sample scene (proof/scene.html, default dir .) into proof/example.mp4, proof/poster.png, and proof/golden-<n>.png, and records them in the manifest's proof. Prints <name>@<version>: <n> golden frames, example and poster written. See making a style.

OptionMeans
--format <ref>the format to render in (default: the first the style lists)
--times <list>golden frames at these seconds (default: a quarter, half, three quarters, and 95% of the scene)
--checkrender the golden frames again and compare, changing nothing; prints ok or DIFF per frame and exits 1 on drift

extract

rapid style extract [options] <sources...>

Drafts a style from reference stills and clips, live web pages, and folders of front-end code. See extracting a style.

Argument or optionMeans
sourcesstills and clips to measure, https:// pages to read in headless Chrome, and folders of theme code (a folder holding only stills and clips is taken as references)
--name <name>required; the draft style's name
--out <dir>required; an empty or new folder for the draft
--frames <n>frames sampled from each clip, 1–120 (default: 12)
--timeout <seconds>how long to wait for each web page at each width, 1–120 (default: 30)
--assets <dir>keep a web page's pictures, clips, backgrounds, vectors, and icons in a new or empty folder, with assets.json, screens/, and contact.png