Model or dataset
vincentsch/explainroo avatar
vincentsch/explainroo

explainroo lets a coding agent produce a narrated MP4 on your own machine

Explainer videos and product demos made by your AI agent. Free and open source: a local voice (Kokoro), word timing (Whisper) and a canvas renderer turn a script into a narrated MP4.

629 stars40 forksJavaScriptMIT

At a glance

What is it?
explainroo is an MIT licensed tool that turns two files an agent writes into a narrated explainer video, with Kokoro for the voice, Whisper for word timing and a headless Chrome canvas for the drawings, all local. The interesting part is the check step, because an agent cannot watch a video, so the tool gives it stills and layout checks instead.
Who is it for?
explainroo suits developers who want their coding agent to produce explainer videos and product demos without sending the script or the recording to a third party service, and it suits teams that already ship video. It does not suit people who want a general video editor, and it does not suit anyone without ffmpeg and a local Chrome install.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 3 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The agent writes two files, everything else is the tool's job

The interface is deliberately narrow. An explainer video is described as a short video where a voice explains a topic and drawings appear while it speaks, and for explainroo the agent writes exactly two files. script.md holds the words the voice says, and scenes.js draws the pictures with a bit of JavaScript, where each drawing can appear on a word from the script. Everything after that is automated, and the result is an MP4 file. The framing of the tool is a coding agent as the producer, and the README states it works with Claude Code, Codex, Pi and other coding agents, working best with Claude Code and Opus 5.5. The prompt to hand an agent is short enough to paste.

text
Make me a short explainer video about [your topic].
Use explainroo for it: clone https://github.com/vincentsch/explainroo,
read its AGENTS.md and follow the steps.

The repository ships an AGENTS.md and a CLAUDE.md, and the published files list includes both alongside the bin, src, engine, fonts, templates and skills directories, so the agent instructions travel with the package rather than living on a website.

Kokoro for the voice, Whisper for the timing, Chrome for the frames

Three local components do the work, and the split explains the architecture. The voice is Kokoro, an open voice model, which reads the script aloud in English, Spanish, French, Italian, Brazilian Portuguese, Hindi, Japanese or Mandarin Chinese, and it has 54 voices and needs no account or API key. You can also use an ElevenLabs voice or record the narration yourself, so the local model is the default rather than the only option. The timing comes from Whisper, which listens to the narration and notes when each word is spoken, which is how a drawing knows which word to appear on. The pictures are drawn by Chrome running in the background, with hand drawn looking lines from Rough.js, 1,800 icons from Lucide, and scenes that can show charts, math formulas, code that changes step by step, your own screenshots and video clips such as screen recordings. The dependency list in package.json lines up with this: kokoro-js, @huggingface/transformers, playwright-core for the browser, roughjs, phonemizer, mathjax, harfbuzzjs for text shaping, plus opencc-js and pinyin-pro for the Chinese language support.

An agent cannot watch a video, so the checks are stills and heuristics

This is the part that makes the tool usable by an agent at all. Because an agent cannot watch a video, explainroo gives it other ways to check its own work. It saves stills of the scenes and a sheet of small frames for the whole video. A layout check finds text that is cut off or overlaps, and a speech check finds words the voice got wrong. There is also a size aware check, because a feed sized player has different constraints, and for that case the command `explainroo check videos/<name> --view-width 854` also flags small text. That last one is a nice detail, since a caption that reads fine on a desktop can be unreadable in a 854 pixel wide player. The checks are not a guarantee of quality, they are the set of signals an agent can act on without seeing the result, and the design assumes the agent will iterate until the checks pass. The rendering stage is Chrome via Playwright, which is also why the tool needs a local browser rather than a headless rendering service.

Six looks, and sizes that respect platform overlays

The styling is a setting rather than a theme system. There are six built-in looks, paper, clean, chalk, blueprint, midnight and editorial, and you change a video's look with one setting in video.json. A project can also bring its own look, a small JSON file with its colors, fonts and background. The sizes are picked for the destination, with wide for YouTube, tall for Shorts, TikTok and Reels, 4:5 for Instagram and LinkedIn posts, and a square size as well. The documentation notes that Shorts, TikTok and Reels put their own buttons over the video, and explainroo keeps your text out of those spots, which is the kind of platform-specific detail that is either handled or it is not. One project can render several sizes, and the command `explainroo render videos/demo --size tiktok` writes the TikTok version next to the wide one. Tall, 4:5 and square videos get captions that light up word by word, which follows from the word level timing that Whisper already produced.

The render writes more than an MP4

A render produces a set of artefacts rather than a single file. Every render also writes subtitle files in .srt and .vtt format that YouTube and LinkedIn accept, a cover image for the thumbnail, and YouTube chapters when the script names them. The `--format gif` flag makes a GIF for a README or a post, and `--transparent --format mov` makes a video with a transparent background, described as useful for putting a diagram over camera footage in a video editor. The `explainroo export` command writes a small web player that draws the video sharp at any size and embeds with an iframe. ffmpeg is what puts it all together into the MP4, with the subtitle files, the YouTube chapters and the cover image. Pace is a single setting as well, where "pace": 1.2 in a video's video.json makes the voice, the pauses and the animations 20 percent quicker, the music getting a little quicker too, and the range running from 0.7 to 1.6 with 1 as normal.

Product demos rebuild your screens from your code

The feature that goes beyond explainer content is product demos, the videos software companies make to show their app. The agent rebuilds the app's screens from its code or its website, with the same colors, fonts and button labels, and then a mouse pointer clicks through the screens and types into fields. The README is cut off mid-sentence on this, so the details of how the screens are captured and how faithfully they are reproduced are not described in what is published. The mechanism is at least consistent with the rest of the design, since the same Chrome-based canvas renderer that draws the scenes would be the thing drawing a reconstructed interface. There is also a sound design layer, with explainroo making its own background music for each video and adding small sound effects, the music getting quieter while the voice speaks, and a camera that moves in on what the voice is talking about when there is time and pulls back at the end so the last frame shows the whole idea. Things arrive with a little spring, and the final video has motion blur, like a film camera.

Local by default, with one paid exception

The privacy and cost story is stated directly. None of the voice, timing and rendering work leaves your computer, and it costs nothing. The coding agent itself is a separate service with its own terms and prices, which the README is careful to distinguish. There is one optional paid path: if you want, the agent can also make illustrations with an AI image model through OpenRouter, and you pay for each image. The package metadata matches that description, with a description line that says pure JavaScript, local voice, no API keys, and a Node engine requirement of 20.11 or later. The package is an ES module with a single binary entry point at bin/explainroo.js, and the test script is node --test, so the test suite runs on the Node built-in runner. The repository has no tagged release history beyond the recent 0.2 to 0.4 line, and the last push to main was on 2026-10-20, with version 0.4.1 published the same day. The release notes describe a project shipping fast, with 0.4 filming each scene with a camera that follows the narration and 0.4.1 keeping arrow and chart labels whole while a shot holds.

Editorial conclusion

explainroo suits developers who want their coding agent to produce explainer videos and product demos without sending the script or the recording to a third party service, and it suits teams that already ship video. It does not suit people who want a general video editor, and it does not suit anyone without ffmpeg and a local Chrome install. Before adopting it, read AGENTS.md as the project asks, run one of the examples under examples/ end to end, and check the quality of the Kokoro voice for your language against the list of supported ones before building a workflow around it.

Frequently asked questions

How do I make a video with explainroo?

The agent clones the repository, reads its AGENTS.md and follows the steps. The agent writes script.md with the spoken words and scenes.js with the drawings, and the tool produces the MP4.

Does explainroo need an API key or a paid account?

No. The voice, timing and rendering run locally and cost nothing, and the Kokoro voice needs no account or API key. The coding agent is a separate service with its own terms, and AI illustrations through OpenRouter are optional and paid per image.

Which languages can explainroo narrate?

The Kokoro voice reads the script in English, Spanish, French, Italian, Brazilian Portuguese, Hindi, Japanese or Mandarin Chinese, with 54 voices available.

How does explainroo check a video that an agent cannot watch?

It saves stills of the scenes and a sheet of small frames for the whole video, and it runs a layout check for text that is cut off or overlaps plus a speech check for words the voice got wrong. The check command also takes a view width, so explainroo check videos/<name> --view-width 854 flags small text.

What video sizes and formats does explainroo produce?

It renders wide, tall for Shorts, TikTok and Reels, 4:5 for Instagram and LinkedIn, and square. A render also writes .srt and .vtt subtitles, a cover image and YouTube chapters, with --format gif for a GIF and --transparent --format mov for a transparent background.

Official sources

  1. License: MIT
  2. Project website
  3. README
  4. Releases
  5. vincentsch/explainroo on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/vincentsch-explainroo.svg)](https://hysenlabs.com/projects/vincentsch-explainroo)

Was this useful?