For agents and developers

Ask Claude for an ad. Or call it from code.

One pipeline behind three doors: a CLI, an HTTP API and an MCP server with seven tools. All of it ships in one Docker image that renders on CPU.

  • Claude Code Works today
  • Any MCP client Works today
  • Cursor, VS Code Via MCP · untested
  • ChatGPT app Coming soon
  • Hosted API keys Coming soon
Claude Code · motiontyped MCP · scripted preview
  1. Make a 4:5 and a 9:16 ad for https://acme-inbox.example
  2. I'll run the MotionTyped pipeline on that URL.
  3. motiontyped · generate { "url": "https://acme-inbox.example", "aspects": ["4:5", "9:16"] }
  4. run 20261020-1737-a1b2
    ingestbrandstoryboardassetsrenderqa
  5. motiontyped · get_run { "runId": "20261020-1737-a1b2" }
  6. Done. Two files in runs/20261020-1737-a1b2/: 4x5.mp4 and 9x16.mp4, 20 scenes, QA passed in both formats. Want me to regenerate the hook scene with a different angle?

Interfaces

Three doors, one pipeline.

# full pipeline: ingest → brand → storyboard → assets → render → QA
motiontyped generate https://example.com \
  --brief "AI inbox for ecommerce brands" \
  --style kinetic-serif --aspects 4:5,9:16 \
  --qa full            # or structural; --template forces the no-LLM path

# one stage at a time
motiontyped ingest https://example.com --out runs/x
motiontyped storyboard --run <id> --style punch-sans
motiontyped render runs/<id>/storyboard.json --aspect 9:16
motiontyped qa --run <id> --aspect 4:5

# edit one scene
motiontyped regenerate-scene --run <id> --scene s05 \
  --instruction "lead with the pricing feature"

# clip templates
motiontyped template render chat-message-reveal --set headline="Replies in seconds."

From a source checkout, prefix commands with pnpm: pnpm motiontyped generate …. In Docker, the image runs the CLI directly.

MCP tools

Seven tools an agent can call.

ToolWhat it does
generateThe whole pipeline from a URL; returns a run id
get_runStage, progress, file paths and QA per aspect
ingest_urlScrape a site into product.json with sources and quotes
generate_storyboardWrite and validate the storyboard for a run
render_videoRender a storyboard to one or more aspects
qa_videoStructural and vision QA for a rendered aspect
regenerate_sceneRe-prompt one scene with an instruction and re-render only it

Under the hood

Plain files, strict schemas.

Every stage is a pure function with its own CLI entry and writes into runs/<id>/. Nothing is hidden in a database.

  • Node 22, TypeScript, pnpm workspaces, Remotion, Hono, zod
  • Structured LLM output, validated by zod and semantic rules, re-prompted with the exact errors (max 3 tries)
  • Works without an API key: template storyboard and structural QA
  • Uses your Claude Code login when there is no key
  • Self-hosted Firecrawl is supported; Playwright is the fallback
  • Seeded randomness only: two renders give byte-identical frames, tested
  • Local web UI: runs, live stage tracker, scene drawer, compare

Run it on your machine.

Docker, a key or a Claude Code login, and a URL.

Get started

Two ways in. One is ready today.

Hosted app

Coming soon

Paste a URL in your browser and get the ad back. No Docker, no keys. We are building it now.

  • Accounts, projects and credits when it launches
  • The waitlist gets a sample cut for their URL first
  • Pricing is indicative until launch
Join the waitlist

Self-host

Runs today

The same pipeline in one Docker image on your machine, with your Anthropic key or a Claude Code login. CPU only.

docker run --rm -e ANTHROPIC_API_KEY=sk-… \
  -v "$PWD/runs:/app/runs" \
  motiontyped generate https://your-product.com
Self-host guide

The source is not public yet: the self-host guide has a one-line request form and we send access by email. Everything the hosted app will do, the self-hosted version does today.