{"slug": "a-claude-code-plugin-that-makes-narrated-explainer-videos-on-your-own-gpu", "title": "A Claude Code plugin that makes narrated explainer videos on your own GPU", "summary": "A developer publishing as lewislf released claude-code-video-studio, a Claude Code plugin that produces narrated explainer videos entirely on the user's own GPU, with voice from OmniVoice, music from MusicGen, scenes in HTML/SVG/GSAP rendered by HyperFrames and covers from SDXL via ComfyUI, avoiding paid voice, music or video APIs. The plugin installs via `claude plugin marketplace add lewislf/claude-code-video-studio` and `claude plugin install video-studio@claude-code-video-studio`, and outputs one MP4 per video plus a 1.35x sped-up cut, a light phone copy, a 1280x720 cover and YouTube title, description and chapters. The author's example, a 13-minute video on neurotechnology titled \"Your mind under terms of use\" made for a Computers and Society assignment at UFES, was produced in Brazilian Portuguese and dubbed into English with the same pipeline; a Claude plan is still required for the script.", "body_md": "**Narrated explainer videos made on your own GPU, with Claude Code directing.**\n\n[Quick start](#quick-start) ·\n  [What you get](#what-you-get) ·\n  [Why local](#why-local) ·\n  [How it works](#how-it-works) ·\n  [Setup](#setup) ·\n  [Português](https://github.com/lewislf/claude-code-video-studio/blob/main/README.pt-BR.md)\n\nScript, voice, music, animated scenes, assembly, sped-up version and cover, all on your machine. Voice on OmniVoice, music on\nMusicGen, scenes in HTML/SVG/GSAP rendered by [HyperFrames](https://github.com/heygen-com/hyperframes), cover on SDXL via\nComfyUI. No voice, music or video API to pay for.\n\nMade with this: *Your mind under terms of use*, 13 minutes on neurotechnology (assignment for Computers and Society,\nUFES). It was made in Brazilian Portuguese and then dubbed into English with this pipeline. Full code in\n[`examples/your-mind/`](https://github.com/lewislf/claude-code-video-studio/blob/main/examples/your-mind).\n\nClick the player to watch in 1080p (716 MB), or the [light 26 MB copy](https://github.com/lewislf/claude-code-video-studio/releases/download/your-mind/your-mind-en-phone.mp4). Description\nand chapters in the [release](https://github.com/lewislf/claude-code-video-studio/releases/tag/your-mind); the\n[original Portuguese cut](https://github.com/lewislf/claude-code-video-studio/releases/tag/sua-mente) has its own.\n\nInstall the skills as a Claude Code plugin:\n\n```\nclaude plugin marketplace add lewislf/claude-code-video-studio\nclaude plugin install video-studio@claude-code-video-studio\n```\n\nThen ask in plain words. Some prompts that work:\n\n- \"make a narrated video about why the sky is blue, 3 minutes\"\n- \"redo scene 12, the diagram is too small\"\n- \"swap the voice for a British one\"\n- \"make the final version at 1.35x and send it to my phone\"\n- \"write the YouTube description with chapters\" / \"make a cover\"\n\nThe `narrated-video` skill knows the steps; scenes go to subagents with the `studio/AGENT.md` briefing; the `ai-cover` skill\nmakes the thumbnail. The machine still needs the [setup](#setup) below.\n\n- one MP4 per video, with the narration over a low music bed and a thin progress bar;\n- a sped-up cut (1.35x by default) and a light phone copy;\n- the voice cloned from a reference clip, in any language OmniVoice speaks, with 3 takes per sentence and whisper picking the clearest one;\n- scenes timed to the word: an animation fires on the instant the voice says it;\n- patching: redo one scene (`patch.py` ) or the whole audio (`swap_audio.py` ) without rebuilding the rest;\n- dubbing: a new language over the same timeline, with `.srt` subtitles (`examples/your-mind/dub.py` , how the example became\nEnglish);\n- YouTube title, description and chapters, and a 1280x720 cover.\n\nSimilar projects, by what their READMEs say (November 2026):\n\n|  | Voice | Music | Visuals | \n|---|---|---|---|\n| **this repo** | OmniVoice, local, voice cloning | MusicGen, local | HyperFrames scenes written by Claude, rendered locally | \n| [OpenMontage](https://github.com/calesthio/OpenMontage) | Piper offline, or cloud TTS | royalty-free library or Suno | stock footage, or paid image/video APIs | \n| [video_explainer](https://github.com/prajwal-y/video_explainer) | ElevenLabs or Edge TTS (online) | MusicGen, local | Remotion | \n| [Pixelle-Video](https://github.com/AIDC-AI/Pixelle-Video) | Edge TTS (online) or Index-TTS | your own files | ComfyUI images or image APIs | \n\nThe script still comes from Claude Code, so you need a Claude plan. Everything after it runs on your GPU.\n\nA video is a folder with a `script.py`. The script is the single source: the voice, the timing of each scene and the assembly all come from it.\n\n```\nSCENES = [\n  (\"sky\", \"The sky\", [\n    (\"Look up on a clear day. The sky is blue.\", 0.5, {\"a\": \"sky\"}),\n    (\"But sunlight is white.\", 1.4, {\"a\": \"prism\"}),\n  ]),\n]\n```\n\nEach segment (spoken text, pause, visual) becomes a clip with the exact duration of the speech. Scenes are Python functions that\nreturn HTML; `word(\"sky\", 0, \"blue\")` gives the instant the voice says \"blue\", and the animation fires there.\n\n```\nscript.py ──> tts.py ──> assets/voice/*.wav + durations.json ──> transcribe.py ──> words/*.json\n                                   │                                                  │\n                                   └──────────> scenes/<group>/build_*.py <───────────┘\n                                                        │  scenes.py render\nmusic.py ──> assets/music.mp3 ──> assemble.py <── assets/clips/*.mp4\n                                        │\n             progress_bar.sh ──> deliver.sh ──> renders/v1-bar-1.35x.mp4 (+ mobile)\n```\n\nThe narration language is `LANG` in `script.py` (ISO code, default `\"en\"`). Any language OmniVoice supports works; the example\nvideo is pt-BR. The voice is cloned from a reference clip, and the clip's accent carries over, so the reference has to be in\nthe narration's language. `studio/voices/` has eight English references made with OmniVoice voice design (deep male US and UK,\nolder male US, low female US, two takes each) and one Portuguese (`deep_narrator`). Without `VOICE`, English uses\n`en_deep_us_b` and other languages use `deep_narrator`; set `VOICE = \"en_deep_uk_a\"` to pick another, or point it at your own clip.\n\nThe same pipeline without the skills:\n\n```\ncp -r template ~/videos/my-video && cd ~/videos/my-video\nST=~/claude-code-video-studio/studio; PY=~/.venvs/studio/bin/python   # the env from Setup\n\n$PY $ST/tts.py generate && $PY $ST/tts.py pick          # voice, 3 takes per sentence, keeps the one whisper understands best\npython3 $ST/transcribe.py                               # timing of each word\n$PY $ST/music.py                                        # music\npython3 $ST/scenes.py render g1                         # scenes of group g1 -> clips\npython3 $ST/assemble.py                                 # renders/v1.mp4\n$ST/progress_bar.sh v1 v1-bar && $ST/deliver.sh v1-bar  # progress bar and 1.35x version\n```\n\n| Folder | What it has | \n|---|---|\n| `studio/` | the pipeline (voice, words, music, scenes, assembly, patching, delivery) and the scene engine | \n| `template/` | minimal 20 s project to copy | \n| `skills/` | `narrated-video` and`ai-cover` for Claude Code | \n| `examples/your-mind/` | the UFES video in English: 72 scenes, script, dub, briefings. Rendering needs the assets (voice, article pages, trailers), which were left out of the repo | \n\nNVIDIA GPU (tested on an 8 GB RTX 5070), Linux with `systemd-run` (the scripts set memory caps), ffmpeg, Node 22+ (for\n`npx hyperframes@0.8.185`). The voice, word timing and music share one Python 3.11 environment:\n\n```\npython3.11 -m venv ~/.venvs/studio\n~/.venvs/studio/bin/pip install torch torchaudio torchvision --index-url https://download.pytorch.org/whl/cu128\n~/.venvs/studio/bin/pip install \"omnivoice @ git+https://github.com/debpalash/VoiceStudio@73b83768bdc02dd7068c5c2fefcfa0530fa622e4\" \\\n  faster-whisper transformers accelerate soundfile librosa\n```\n\nThe environment takes about 9 GB. Tested from scratch with torch 2.11 (cu128), VoiceStudio at the pinned commit, faster-whisper\n1.2.1 and transformers 5.22; the template video renders end to end. Install `torchvision` from the PyTorch index together with\ntorch: the copy pip pulls in for `omnivoice` does not match the cu128 build and breaks the import. The OmniVoice and MusicGen\nweights download from Hugging Face on the first run. The cover needs ComfyUI with SDXL base (see `skills/ai-cover/SKILL.md`).\n`taskline`, if installed, shows progress.\n\nEverything runs on your machine. The plugin sends no data anywhere: no telemetry, no API calls of its own. It downloads:\n\n- the OmniVoice, whisper and MusicGen weights from Hugging Face, on the first run of each step;\n- `hyperframes@0.8.185` from npm through`npx` , to render the scenes and time the words (it uses a local headless Chrome);\n- GSAP 3.14.2 from cdn.jsdelivr.net and the fonts from fonts.googleapis.com, loaded by the scene pages while they render;\n- the Python packages in [Setup](#setup) , when you install them.\n\nThe skills run the scripts in `studio/` with `python3`, `ffmpeg` and `systemd-run`, inside the video's own folder, and the\n`ai-cover` skill talks to a ComfyUI server on `127.0.0.1`.\n\nThe code here is MIT, but the models have their own terms, and they decide what you can do with the video:\n\n- MusicGen weights (`facebook/musicgen-small` ): CC-BY-NC 4.0,**non-commercial** . On a monetized channel, swap the music for\na track you have rights to.\n- OmniVoice: the `omnivoice` package (VoiceStudio) is AGPL-3.0; the`k2-fsa/OmniVoice` weights follow their model card.\n- SDXL base: CreativeML Open RAIL++-M.\n\nVoice and music are AI-generated; say so in the video description.\n\nMade by [lewislf](https://github.com/lewislf) and [FeLiPeOLi7](https://github.com/FeLiPeOLi7).\n\nCode under [MIT](https://github.com/lewislf/claude-code-video-studio/blob/main/LICENSE). The film and trailer clips cited in `examples/your-mind/film/assets/CREDITS.md`\nbelong to their owners and are not in the repo. The [fly photo](https://github.com/lewislf/claude-code-video-studio/blob/main/examples/your-mind/scenes/g3_writing_mapping/assets/fly.jpg) is by Alexis (iNaturalist), CC BY 4.0.", "url": "https://wpnews.pro/news/a-claude-code-plugin-that-makes-narrated-explainer-videos-on-your-own-gpu", "canonical_source": "https://github.com/lewislf/claude-code-video-studio", "published_at": "2026-11-11 18:39:46+00:00", "updated_at": "2026-11-11 18:50:41.183354+00:00", "lang": "en", "topics": ["ai-tools", "generative-ai", "ai-products", "developer-tools"], "entities": ["lewislf", "Claude Code", "claude-code-video-studio", "OmniVoice", "MusicGen", "HyperFrames", "ComfyUI", "SDXL"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/a-claude-code-plugin-that-makes-narrated-explainer-videos-on-your-own-gpu", "markdown": "https://wpnews.pro/news/a-claude-code-plugin-that-makes-narrated-explainer-videos-on-your-own-gpu.md", "text": "https://wpnews.pro/news/a-claude-code-plugin-that-makes-narrated-explainer-videos-on-your-own-gpu.txt", "jsonld": "https://wpnews.pro/news/a-claude-code-plugin-that-makes-narrated-explainer-videos-on-your-own-gpu.jsonld"}}