Skip to main content

Explainer Studio

CI PyPI

A command-line studio for narrated explainer videos with a clean, editorial house style. You write a script in Markdown. The studio narrates it with local TTS, aligns every word to the audio, and turns each scene into a HyperFrames HTML composition that is timed to the narration. It then renders a mastered 1920×1080 MP4 for YouTube, with captions and chapter markers.

script.md ──► narration (Kokoro, local; or ElevenLabs) ──► word timings (Whisper)
          ──► scenes/<id>.html (HyperFrames + GSAP, timed to cues) ──► cached per-scene renders
          ──► out/<slug>.mp4  (−14 LUFS)  +  out/<slug>.srt  +  out/<slug>.chapters.txt

Installation

Requirements

  • Linux (developed on Arch with an AMD GPU; the render uses Chromium's GPU capture)
  • uv, with Python 3.12 or 3.13 (kokoro-onnx doesn't support 3.14 yet)
  • Node.js with npx. The HyperFrames CLI is fetched on demand at the version pinned in tools/studio/common.py.
  • ffmpeg and Chromium
  • Optional: an ElevenLabs API key in .env (ELEVENLABS_API_KEY=…) for cloud narration

The first sync downloads the Kokoro-82M model to ~/.cache/hyperframes/tts and spaCy's en_core_web_sm to ~/.cache/hyperframes/spacy.

Install the studio

With the requirements in place, either install the studio command from PyPI or clone the repository.

From PyPI, to make videos in a folder of your own:

pip install explainer-studio       # or: uv tool install explainer-studio
mkdir my-videos && cd my-videos
studio new my-video "My Video"

The package is on PyPI. uv tool install puts studio on your PATH in its own isolated environment, and uvx --from explainer-studio studio … runs it without installing. With pip, install into a virtual environment (or use pipx install explainer-studio) so its dependencies stay separate from your system Python.

The folder you run studio in becomes the workspace. It holds episodes/, out/ and .env, and studio finds it from any subdirectory (or set STUDIO_ROOT). The house style (brand/) and scene templates ship with the package. To customise them, copy brand/ or templates/ from this repository into the workspace, and the studio uses your copy instead. Music beds and voice clips go in the workspace's brand/music/ and brand/voices/. Use studio wherever this README says uv run studio.

From a clone, to work on the studio itself or to use the example episodes:

git clone git@github.com:JoeMountWSWS/explainer-studio.git
cd explainer-studio
uv sync

Run commands from the repository root (or any folder below it). Confirm the install with uv run studio --help. The first sync of an episode downloads the Kokoro voice model and the spaCy English model, so it takes a little longer than later runs.

Install the agent skill

To have Claude Code drive the studio, install the make-explainer-video skill into your workspace:

cd my-videos
studio install-skill           # -> .claude/skills/make-explainer-video/
studio install-skill --user    # or for every project: ~/.claude/skills/

It installs the skill plus the references it reads (the studio guide, house-style spec and starter script). Start claude in the workspace and ask for a video, or run /make-explainer-video. Re-run the command with --force after upgrading the package to refresh it. From a clone the skill is already available with no installation. See Working with a coding agent.

Usage

Making a video with the studio is a loop of writing and listening. You write the script as plain Markdown, and the studio reads it aloud, works out exactly when each word is spoken, and hands those timings to your scenes so the visuals move in step with the voice. Change a sentence and only that sentence is re-recorded and only the affected scenes are re-rendered, so you can refine a five-minute video in seconds rather than starting over. Everything runs from one command, uv run studio, and nothing leaves your machine unless you choose cloud narration.

Quick start

uv run studio new my-video "My Video"   # scaffold episodes/my-video/
$EDITOR episodes/my-video/script.md     # write the script
uv run studio sync my-video             # narrate, align, stub scene files, write index.html
uv run studio status my-video           # words, estimated vs actual length, cues per scene
# design each episodes/my-video/scenes/<id>.html
uv run studio preview my-video          # HyperFrames Studio in the browser, with narration
uv run studio check my-video            # lint, layout and contrast audits (must pass)
uv run studio render my-video --draft   # quick review copy -> out/my-video-draft.mp4
uv run studio render my-video           # final -> out/my-video.mp4 + .srt + .chapters.txt
uv run studio thumbnail my-video        # out/my-video-thumbnail.jpg
uv run studio voices my-video           # audition Kokoro voice blends -> out/voice-samples/

Only scenes that have changed are re-rendered. Changing a paragraph of narration re-synthesises that paragraph and nothing else, and re-times the visuals that depend on it.

Writing a script

---
title: The Paris Commune
voice: bf_emma*0.6 + bf_isabella*0.4
speed: 0.85
---
## hook: Seventy-two days
> template: title

In the spring of 1871, the working class took power in a major city. {sub} This is the story of the Paris Commune.

Each ## id: Chapter title heading is a scene and a YouTube chapter. > template: chooses the starting pattern for the scene file (title, stat, quote, points, outro, blank). Other > lines are visual notes and are never spoken. {name} marks a cue that the scene can animate on, and {pause 1.5} inserts a pause.

The full documentation is at https://joemountwsws.github.io/explainer-studio/. AGENTS.md is the reference for coding agents: every front-matter setting, voice choice, the rules for authoring scenes, the render pipeline and known problems. Read brand/frame.md before designing scenes.

Layout

Path What it is
tools/studio/ The Python CLI (uv run studio …)
brand/ House style shared by every episode: design spec, CSS, fonts, GSAP, pronunciations
templates/ Starter script, scene patterns and thumbnail
episodes/<slug>/ One HyperFrames project per video. script.md is the source of truth
docs/ The documentation site (MkDocs), including notes such as British ElevenLabs voices
out/ Rendered deliverables (gitignored)

Worked examples: episodes/demo-paris-commune (Kokoro, 38s) and episodes/demo-elevenlabs (the same script narrated by ElevenLabs).

Working with coding agents

The studio is designed to be driven by Claude Code or another coding agent. AGENTS.md (loaded through CLAUDE.md) gives the agent the conventions it needs, the HyperFrames skills cover the composition format and motion, and the make-explainer-video skill (.claude/skills/make-explainer-video/, or studio install-skill for a pip install) walks Claude through the whole workflow. Start claude in the repository root or your workspace and ask for a video, or run /make-explainer-video. See Working with a coding agent.

Metadata

Release files for explainer-studio 0.1.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for explainer-studio 0.1.6
File Size Uploaded Provenance Actions
explainer_studio-0.1.6.tar.gz 1.4 MB With provenance Details for explainer_studio-0.1.6.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for explainer-studio 0.1.6
File Interpreter ABI Platform Actions
explainer_studio-0.1.6-py3-none-any.whl Python 3 none any Details for explainer_studio-0.1.6-py3-none-any.whl

Total release size: 2.9 MB

Release files / explainer_studio-0.1.6.tar.gz

Download URL explainer_studio-0.1.6.tar.gz
Size 1.4 MB
Tags Source
SHA-256 checksum
How to use checksums
c4217edd466a3d274a8218577d6b1d1b8c1af46bc6546e460757e71915cc414f
BLAKE2b-256 checksum
How to use checksums
8ed515f692328e88a16161930acaf03ee923d12d5c1ec663e331cd49a9b4da91
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / explainer_studio-0.1.6-py3-none-any.whl

Download URL explainer_studio-0.1.6-py3-none-any.whl
Size 1.5 MB
Tags Python 3
SHA-256 checksum
How to use checksums
8834da52b0c3587fb4ed2fabcba739183de3470b5e77a0d3c598411530134920
BLAKE2b-256 checksum
How to use checksums
cec87981d5e9ce2b4a0bfe8ad14b661d50ec0d0343fe80329922bf89a5c6dd0c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Security for explainer-studio 0.1.6

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for explainer_studio-0.1.6.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.6 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page