Open source · Powered by Claude

Turn any topic into a narrated animation.

Chalkboard is a pipeline of agents that writes a script, verifies it, generates Manim animation code, synthesizes a voiceover, and renders everything to a final .mp4. Fully automated.

MIT Python 3.10+ · No vendor lock in · Runs locally
Rendered output · 1920×1080 · chalkboard theme
sample · binary search
Binary search — flip to the middle
CC 0:00 / 0:12

Six agents. One video.

Each stage runs as a separate Claude agent with retry logic. Failures in one step don't cascade — they loop and correct.

01
Init
02
Script
03
Verify
04
</>
Animate
05
Visual QA
06
Render
median run · 3m 42s · medium effort retries allowed · up to 3 per stage parallel safe · sandboxed via Docker

Not just a wrapper. A whole studio.

Everything you'd normally paste prompts into four different tools for — handled in one repeatable run.

01

stage · verify

Every claim gets checked before it gets rendered.

A dedicated verifier agent reads the draft script, annotates numerical claims, dates, and causal statements, and rewrites anything that won't hold up. Only the clean version proceeds.

fact_check.jsonl
"Binary search runs in O(log n) time."
cite · CLRS ch. 2 · verified
"Invented by John von Neumann in 1946."
disputed · first published 1946 by Mauchly; rewriting…
"Requires the input array to be sorted."
cite · Knuth TAOCP vol. 3 · verified
02

stage · animate

Manim scene code, written for you.

The generator reads the approved script beat by beat and emits valid Manim, positioned, timed, and tagged with chapters. Code that won't compile bounces back for a revision before a frame is rendered.

scene_binary_search.py
class BinarySearch(Scene):
    def construct(self):
        arr = [3, 7, 12, 19, 25, 31, 47]
        boxes = VGroup(*[Square() for _ in arr])
        boxes.arrange(RIGHT, buff=0.15)
        # chapter: introduce the array
        self.play(LaggedStart(*[Write(b) for b in boxes]))
03

stage · visual qa

Claude watches the render, not just the code.

After rendering, frames are sampled at fixed intervals. Claude flags overlapping text, elements that run off the canvas, unreadable contrast, and obscured labels, then dispatches another render with targeted fixes.

qa_report · 6 frames sampled
19 PASS t=0:04
overlapping… midpoint FLAG t=0:11
mid PASS t=0:17
1 flag · reshooting frame 011 with offset Y +0.4 · eta 14s
04

stage · finalize

Captions and chapters, ready on day one.

Every render produces an .srt, embedded chapter atoms, and a pasteable YouTube chapter list. No extra post production pass.

binary-search.srt · 3 of 7
0:00 Here's a sorted list of seven numbers. Ch 1 · Setup
0:12 Binary search works like a dictionary — flip to the middle. Ch 2 · Idea
0:28 Each step cuts the search space in half. Ch 3 · Analysis

Tune the script before it's a video.

Pick an audience, a tone, a template, and a theme. Your prompt doesn't change, but Chalkboard retargets the output.

Audience

Tone

Template

Theme

TTS backend

Effort

script preview · binary search · beginner · casual
est. 1m 20s · 160 wpm render · ~3m 40s

What the final cut looks like.

Short explainer videos, rendered locally. Each has captions, chapters, and a full source script on disk.

packets 1:26
How the Internet Actually Works
medium · chalkboard
O(1) lookup 0:55
How Hash Tables Actually Work
medium · chalkboard
SQL NoSQL 1:02
SQL vs NoSQL Databases
medium · compare
encrypted ↯ client server 0:50
How HTTPS Keeps Your Data Safe
medium · howto

Three ways in. Pick yours.

Chalkboard is in closed beta. Run it yourself today, sign in with an invite code, or drop your name on the waitlist.

MIT License
01

Run it yourself.

Clone the repo, add your Claude key, run the server.

01 Clone & install

Requires Python 3.10+, Docker, ffmpeg.

$ git clone https://github.com/nicglazkov/Chalkboard.git
$ cd Chalkboard
$ pip install -r requirements.txt
02 Add API keys
$ cp .env.example .env
# then edit .env:
ANTHROPIC_API_KEY=sk-ant-…
TTS_BACKEND=openai
OPENAI_API_KEY=sk-…
03 Run
# web UI — localhost:8000
$ python run_server.py

# or one-shot from terminal
$ python main.py --topic "B-trees" --effort medium
Fastest
02

Join the closed beta.

Sign in with an invite code and start making videos right away — we've set everything up for you.

Free while in beta. Invite code required, everything else is handled for you.
New invites weekly
03

No code? Get notified.

Invites open in batches. We'll email when yours does.

You're on the list. We'll email you when batch #4 opens.

Your next explainer is four minutes away.

Clone it, feed it a topic, let the agents do the rest. Runs on your machine, uses your Claude key.

Tweaks Live