manimvox-cli
Skill2 starsChanged 20 days agoMITView on GitHub
The manimvox command line and how to read its output: doctor, new, brief, draft, render, check brief|theme|layout|audio, voices, add, join, index, package and skills. Use when running any manimvox command, choosing flags, or working out why a command or check failed.
- Installs packages
In this repository13 other files it gives its agents.
- AGENTS.mdAGENTS.md
- docs/agents.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- manimvox-animationSkill
- manimvox-blocksSkill
- manimvox-conceptSkill
- manimvox-coreSkill
- manimvox-creativeSkill
- manimvox-paperSkill
- manimvox-playlistSkill
- manimvox-prSkill
- manimvoxSkill
- manimvox-voiceSkill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 0 are distinctive, and 9 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 13
Run manimvox doctor first.
- Very specific: line 31
After a system package is installed, reinstall manimvox so it rebuilds against it.
- Very specific: line 33
Ask the user before installing anything: a system package, manimvox itself, or a voice extra.
- Very specific: line 64
When post.music is set, check audio checks the narration-only render in build/ and says so.
- Very specific: line 88
No terminal prompt: never block waiting for an answer.
- Very specific: line 89
Cannot view images: do not skip the visual check.
- Very specific: line 102
When the framework has no file tools of its own, use read_project_file, write_project_file and list_project_files.
- Very specific: line 103
When the framework has no skills loader, call read_skill with a skill's name (and a file it links to) to read it.
- Very specific: line 121
After upgrading manimvox, run manimvox skills update.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
manimvox command line
Every command prints plain lines and exits 0 on success, 1 on a failed check or error, 2 on a bad argument. Nothing prompts unless a person is at a terminal. Run commands from inside the project folder (or any folder below it): manimvox finds series.json by walking up.
Setup
Run manimvox doctor first. Each line starts with one of three marks:
| Mark | Meaning | What to do |
ok | present | nothing |
FAIL | a required part is missing; the line ends with → and the fix | apply that fix, run manimvox doctor again |
-- | a voice engine that is not ready (not an error) | ignore unless you need that voice; see manimvox-voice |
doctor exits 1 if any line is FAIL. It checks Python 3.11+, cairo, manimpango, av, manim, the fonts Pango can see, and each voice engine.
The usual fix is a system package for Manim's text rendering:
| OS | Command |
| macOS | brew install cairo pkg-config |
| Debian / Ubuntu | sudo apt install libcairo2-dev libpango1.0-dev pkg-config python3-dev |
| Windows | nothing; reinstall manimvox if cairo is missing |
After a system package is installed, reinstall manimvox so it rebuilds against it.
Ask the user before installing anything: a system package, manimvox itself, or a voice extra. If you cannot ask, the answer is no: stop and report the exact command that is needed.
The commands
EP is ep01, 1, or the episode's file stem; it must be listed in series.json.
| Command | Flags | Writes | Exit | Tool |
manimvox doctor | none | nothing | 1 if any FAIL | doctor |
manimvox new DIR | --series NAME (required), --tagline T, --voice E:V | DIR/ with series.json, BRIEF.md, FACTS.md, SERIES.md, .gitignore, episodes/, out/, research/ | 1 if DIR already holds a project | new_project |
manimvox brief [ANSWERS.json] | --schema, --force | BRIEF.md from the answers (by question id), the rest left open; --schema prints the questions as JSON instead | 1 if BRIEF.md already holds answers without --force | write_brief; the questions are brief_questions |
manimvox draft EP | --every SECONDS (default 5, above 0) | sheets/<stem>/s_NN.png, build/<stem>/layout.json | 1 on layout findings or a Manim error, 2 on a bad --every | draft |
manimvox sheets EP | --every SECONDS (default 5, above 0) | sheets/<stem>/s_NN.png from out/<stem>.mp4, else the last draft | 1 if there is no video yet, 2 on a bad --every | contact_sheet |
manimvox render EP | --voice E:V, -y / --yes | out/<stem>.mp4, out/<stem>.srt | 1 on a Manim error, a voice problem or audio check: FAILED | render |
manimvox check brief | none | nothing | 1 if a question in BRIEF.md is still open | check |
manimvox check theme | none | nothing | 1 on any failure | check |
manimvox check layout EP | none | nothing | 1 on findings | check |
manimvox check audio EP | none | nothing | 1 if a line is silent | check |
manimvox voices [ENGINE] | --prepare ENGINE[:VOICE], -y | model files in the cache | 1 on a voice error | voices; --prepare is prepare_voice |
manimvox add [BLOCK ...] | --list, --force | blocks/<block>.py, blocks/__init__.py | 1 on an unknown block or one already in the project without --force | add_block; --list is list_blocks |
manimvox join [EP ...] | -o OUT.mp4, --no-cards | out/<Series>.mp4 and .srt (title card, then the episodes in order, each with its own end card) | 1 if an episode is not rendered or the frame rates differ | join |
manimvox index | none | out/index.html | 1 on error | index |
manimvox package | none | share/<Name>/, share/<Name>-720p/ and a zip of each | 1 on error | package |
manimvox skills install|check|update|remove | see Skills in your agents | the skill folders of your coding agents | 1 on a problem, 2 with no terminal and no flag | none: a shell-only command |
Notes:
-y/--yes(orMANIMVOX_ASSUME_YES=1) answers yes to download prompts. Use it only with the user's go-ahead.draftrenders 480p at 10 fps with no voice.renderrenders 1080p at 30 fps with the voice and ends with the audio check.check layoutreads the report of the lastdraft; rundraftfirst or it says so.indexandpackageuse only episodes that have a finishedout/<stem>.mp4. Render first.renderprints apost:line for each step ofseries.jsonpost(music bed, burned captions, end card), orpost: skipped until the audio check passes. See manimvox-voice.- When
post.musicis set,check audiochecks the narration-only render inbuild/and says so. - Blocks are in manimvox-blocks.
- Voice choice, engines and pronunciation are in manimvox-voice. Ask the user before using an online voice: the narration text leaves the machine.
Reading the output
Brief check. manimvox check brief prints one line per open question, such as BRIEF.md: 'How it opens' is still open; ask, or decide it and mark it (chosen by the agent), and ends brief check: ok or brief check: N question(s) open. Ask the person, or decide and write the answer followed by (chosen by the agent). See brief.
Theme check. manimvox check theme prints one line per failure and ends theme check: ok or theme check: N failure(s). A line such as theme: accent: contrast 3.10 on bg, 3.40 on panel; text needs 4.5 means that colour is too dim for text. Lighten it in series.json under theme (text roles need 4.5:1, hues and named colours 3:1) and say in the theme's source that it was lightened for the video and from what. Other lines name a font Pango cannot load, a value that is not a #RRGGBB hex, or an empty source. A note: roles from the kit's neutral default line is not a failure: those roles were left out of the theme.
Layout findings. draft prints one line per problem, then layout check: ok or layout check: N finding(s). Two kinds, each with the time in the draft:
layout: <text>: leaves the stage (left, bottom) at 0:42: the text crosses the safe stage. Shrink it, shorten it or move it in.layout: <text>: overlaps '<other>' at 1:05: two texts collide. Space them or split the scene.
Fix every finding, then draft again. A draft that exits 0 only proves the code runs and nothing overlaps; look at the picture too.
Contact sheets. draft writes sheets/<stem>/s_01.png, s_02.png, and so on. Each is a 3 by 3 grid of frames taken every --every seconds, left to right, top to bottom, so sheet 1 holds the first 9 samples. Use --every 5 to survey and --every 1 to look closely at a busy scene. Old sheets for the episode are replaced on each draft.
Audio check. After render, audio check: ok (N lines, all audible) is the finish line. audio check: FAILED K of N lines are silent lists each silent line with its time and text. Run manimvox check audio EP to re-check, then render again; if the same line stays silent, reword it. Other failures say a file is missing or has no audio track: render again.
Render errors. When Manim fails, manimvox prints manim failed for <stem>: and the last 25 lines of Manim's output. The real error is usually the last line (a NameError, TypeError, or a kit message). Fix the episode file and run the command again. Voice errors are one line; see manimvox-voice.
When you have no terminal or cannot view images
- No terminal prompt: never block waiting for an answer. manimvox itself never prompts without a terminal; it declines downloads instead. Pass
--yesonly when the user has said yes to that download. - Cannot view images: do not skip the visual check. Run
manimvox check layout EPafter a draft and treat its findings as the sheet review. Say in your report that you could not look at the sheets.
Without a shell
An agent built on a Python framework calls the same commands as tools. The Tool column above names the tool for each command.
- The tools work on one project folder, where the command uses the current folder. A framework adapter pins them to the folder it was built for, so they take no folder argument and reach nothing outside it. Called as plain functions, each tool that works on a project takes
project(andnew_projecttakesdirectory) instead. - A relative
outputforjoinis read against the project folder. - Each manimvox tool returns JSON with
ok, the paths it wrote, and its findings or report. The file tools andread_skillreturn plain text instead, anderror: ...when they fail. ok: falsewitherrormeans the tool could not run. Do what the error says, then call it again.ok: falsewithouterroris a failed check, as when the command exits1. Fix the findings and run the step again.renderandprepare_voicetakeallow_download. Passtrueonly after the user has agreed to that download. Without it, a missing model is refused and never fetched. The tools never wait for an answer.contact_sheetwrites the sheets of the finished video, or of the last draft, so you can look at the picture again without drafting.- When the framework has no file tools of its own, use
read_project_file,write_project_fileandlist_project_files. They only reach files inside the project. - When the framework has no skills loader, call
read_skillwith a skill's name (and a file it links to) to read it.
Skills in your agents
These skills reach a coding agent through manimvox skills. Run it only with the user's go-ahead; it writes into each agent's skills folder.
| Command | What it does |
manimvox skills install | puts the eleven skills in each agent's skills folder. With npx present it hands off to npx skills; --native forces manimvox's own installer |
manimvox skills check | prints <folder>: ok, or which skills are outdated, missing or broken; exits 1 on any of those |
manimvox skills update | installs again, in the mode (link or copy) each folder already uses |
manimvox skills remove | deletes only the manimvox skills, never another entry |
Flags by subcommand: install takes --agent ID (repeatable), --global or --project, --copy, --native, -y / --yes; check takes --global or --project; update takes --global or --project and -y / --yes (nothing to ask, so it changes nothing); remove takes --global or --project and -y / --yes. --global works on every project, --project (the default) on this one.
install,updateandremovetouch only the eleven manimvox skills. Anything else at one of those names is left untouched with a message ("exists and is not a manimvox skill; left untouched") and the command exits1, on thenpxpath too: it checks before handing off and does not runnpxif anything would be overwritten.check,updateandremovelook in every known agent folder for the scope, not only the detected agents.checkandupdateexit1and say so when nothing is installed.- With no terminal,
installneeds--yeson every path, native included (add--agent IDto choose agents; without it every detected agent gets the skills, or the shared.agents/skillsfolder when none is detected) andremoveneeds--yes; otherwise they exit2. Annpxfound in the current folder is ignored; the built-in installer runs instead. On a terminal,--yesskips the questions. - After upgrading manimvox, run
manimvox skills update.
Speed
- Render at most two finals at once; more is slower overall.
- A draft takes about 30 seconds.
- The very first run builds a font cache and can take several minutes. Do not interrupt it.
- Cached narration is keyed by the spoken text, so only changed lines are re-synthesised on a re-render.
Files a project holds
| Path | What it is |
series.json | manimvox (the version that wrote it, set by manimvox new), series, tagline, voice, speed, pron, theme, episodes (each with n, stem, cls, title; optional level, blurb) |
FACTS.md | every claim the video makes, with its source and a label |
SERIES.md | the outline each episode is written against |
episodes/ | one epNN_name.py per episode |
research/ | source material |
out/ | finished .mp4 and .srt, and index.html |
blocks/ | blocks copied by manimvox add, owned by the project |
sheets/ | contact sheets from drafts |
build/ | Manim's working files and the layout report (safe to delete; check audio needs it when post.music is set) |
.manimvox/tts | cached narration audio |
share/ | packages from manimvox package |
build/, .manimvox/, sheets/, media/ and share/ are listed in the project's .gitignore. To write episodes, see manimvox-core.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

