Get started

Introduction

manimotion is an HTTP API that turns a STEM prompt into a narrated lecture video. You send a topic. We plan beats, generate voice, animate with Manim or Remotion, sync audio to the cut, and return an MP4 URL.

What is manimotion?

Think of it as “text → lecture video as a service.” Built for apps, tutors, and tools that need explainers on demand — not for editing timelines by hand.

  • Public API with an x-api-key header
  • Async jobs (create, then poll)
  • Math-heavy scenes (Manim) and motion-graphics scenes (Remotion)
  • Optional BYO storage so MP4s land in your bucket

How a job works

Under the hood, every request goes roughly like this:

  • Router picks engine (or uses the one you forced)
  • Beat sheet plans visuals + narration + timing together
  • TTS runs first so animation targets real speech length
  • Code is generated, rendered, synced, uploaded
  • You get video_url when status is completed

Endpoints (the whole public surface)

MethodPathPurpose
POST/video/requestCreate a lecture job
GET/video/status/{job_id}Poll status + video URL

Quick taste

Switch language with the tabs. Every example also shows the response shape.

create.sh
curl -sS -X POST "$MANIMOTION_API/video/request" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $MANIMOTION_KEY" \
  -d '{
    "prompt": "Explain Bayes theorem with a medical testing example",
    "engine": "auto",
    "storage": {
      "inline": {
        "provider": "r2",
        "bucket": "my-lectures",
        "access_key_id": "'"$R2_ACCESS_KEY_ID"'",
        "secret_access_key": "'"$R2_SECRET_ACCESS_KEY"'",
        "account_id": "'"$R2_ACCOUNT_ID"'",
        "public_url": "'"$R2_PUBLIC_BASE_URL"'"
      }
    }
  }'
RESPONSEresponse.json
{
  "job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "queued",
  "cached": false,
  "video_url": null,
  "engine": null
}

Where to go next

New to the API? Do the Quickstart. Building for real? Read the API reference. Hacking on the repo? See Contributing.