Documentation
FrameWright
Designed Remotion template systems your coding agent assembles into real, full-length videos. You write a manifest; the template does the cinematography.
Introduction
A FrameWright template is a closed scene system for Remotion. It ships a fixed set of scenes, a theme engine, and strict schemas. Agents assemble — they never animate. There is no motion code for the model to write and nothing to render off-brand.
The pipeline is always the same four steps:
manifest → validate → stills → self-review → render
The agent picks scenes and writes copy into a JSON manifest. A validator checks the schema and the frame math. The template emits still frames the agent reviews against a QA bar. Only then does it render a real MP4 — locally, on your machine.
Installation
Prerequisites: Node ≥ 20 and a coding agent such as Claude Code.
Sign in — a browser one-time code; the CLI never sees your password:
framewright loginPull a template into your project:
framewright init app-launchThen open your coding agent and prompt it:
Use the app-launch skill to make a launch video for <your app>
If your registry is not running on port 3000, point the CLI at it with an environment variable:
FRAMEWRIGHT_REGISTRY=http://localhost:<port>
CLI reference
framewright loginOpens the browser OTP flow and stores your license key locally.
framewright init <template> [--dir --force --skip-install]Scaffolds a template. --dir sets the target folder, --force overwrites an existing one, and --skip-install skips dependency install.
framewright whoamiPrints the identity tied to your stored license key.
framewright logoutClears the stored key.
Error behaviors
- 401Not signed in — run
framewright login. - 402Template not purchased — unlock it on your account.
- 403Invalid or revoked key — sign in again.
Manifests
A manifest is the whole interface. It looks like this:
{
"format": "vertical", // or "horizontal"
"fps": 30,
"theme": {
"brandColor": "#22C55E",
"mode": "dark",
"vibe": "minimal"
},
"scenes": [
{ "scene": "LogoReveal", "durationInFrames": 90, "props": { ... }, "transition": "fade" },
{ "scene": "HookStatement", "durationInFrames": 82, "props": { ... }, "transition": "slide-up" },
{ "scene": "CTAClose", "durationInFrames": 130, "props": { ... }, "transition": "none" }
]
}Duration math. The total isn't just the sum of scene durations — transitions overlap adjacent scenes:
total = Σ durations − Σ transition overlaps fade → 12 frames slide-up → 15 frames wipe → 15 frames none → 0 frames
The validator prints the exact totals before anything renders, so the agent never guesses the runtime.
Scenes & QA
Each scene has typed props with hard character limits and a duration range. Copy that would overflow is rejected at validation, not discovered at render.
Every render is checked against a fixed QA bar:
- ·Safe zones:
150 / 170 / 60pxinsets (vertical) so nothing sits under platform chrome. - ·Headlines never below
56px, body never below36px. - ·Text contrast clears
4.5:1against its background. - ·Final frames are motion-settled — clean cuts, clean thumbnails.
Licensing
Sign in on your account page. App Launch is free with an account. Paid templates are $29 each (launch price, normally $49), or get All-Access for $99 (normally $199) to unlock every template — current and future — forever.
Your license key is shown once when issued. Regenerating a key invalidates the previous one everywhere, including any signed-in CLI.