engine
Adds optional ElevenLabs text-to-speech voiceovers for video renders via an API key.
Produces platform-ready Facebook video packages with video, cover, captions, post copy, and QA report, formatted for Facebook's UI safe zones.
Produces platform-ready Instagram Reels video packages with video, cover, captions, post copy, and QA report, formatted for Instagram's UI safe zones.
Produces platform-ready TikTok video packages with video, cover, captions, post copy, and QA report, formatted for TikTok's UI safe zones.
Produces platform-ready YouTube Shorts video packages with video, cover, captions, post copy, and QA report, formatted for YouTube Shorts' UI safe zones.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@engineCreate a 30-second TikTok reel from this README with captions."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Turn a README, a paper, a web page or a folder of clips into a finished, captioned short video, one package per platform, without leaving Claude Code.
See what it makes · Quick start · How it works · Commands · Limits
Why
Turning knowledge into short videos usually means a timeline editor, a caption tool, a thumbnail tool and a checklist for every platform's safe zones and limits. video-studio compiles instead:
Grounded: every claim on screen cites a line in your sources.
verifyshows what is covered.Platform-ready: one
dist/<platform>/package each for TikTok, Instagram Reels, YouTube Shorts, LinkedIn and Facebook, with the video, cover, captions, post copy and a QA report.lintchecks captions and text against each app's UI.Made to be watched: plans follow a story arc with timed "reads", each list item, step or number appears as the voice says it, and Claude reviews contact sheets of its own render before handing it over.
Works with real footage: ingest recordings or YouTube/Vimeo/Loom links, transcribe them locally in ~99 languages, find the best short clips, keep a moving speaker in frame for vertical video, cut away to graphics while they talk, and trim pauses and filler words.
You stay in control: Claude proposes and waits for your approval; paid voices, model downloads and screen recordings ask you through Claude Code's approval dialog and follow your
policy.yamlspend limits; renders can be cancelled.Reproducible:
video.lockpins every tool, font, renderer and asset hash. Re-renders are cached scene by scene, anddiffandtestcatch regressions.Local-first: ffmpeg, system text-to-speech and local whisper.cpp. Claude writes the plan, so the plugin needs no LLM API key, and none of the features below need a paid service.
Related MCP server: MotionKit MCP Server
See what it makes
Everything below was made by the plugin itself: no hand editing.
This README as a reel. docs/media/hero.mp4 is a narrated 1080×1920 final render made from this README. It uses the animated-explainer structure, the technical style and a macOS Premium voice, and every line cites a README line. The project that makes it is examples/readme-hero:
The strips below are frames from preview renders (built-in ffmpeg renderer) made during development.
15 scene kinds. The strip shows kinetic text, a stat, a timeline, before/after, a quote, a map and a lower third, from a text-over-music reel with no voiceover:
4 style packs, on the same content. From left: the default, minimal, editorial, technical and energetic:
Languages. The Whisper paper (arXiv 2212.04356) as Hindi (top) and Japanese (bottom) versions made with localize: shaped Devanagari, Japanese line breaking and script-aware captions and covers:
Your own footage. A folder of clips cut to the beat of a bundled music bed, with text over the footage (aesthetic-broll and silent-vlog):
Quick start
Requirements: Node.js 22.13+ and a system FFmpeg with libass and libx264 (brew install ffmpeg on macOS). Nothing else to install: the engine is a single bundled file. Check your setup with /video-studio:doctor.
Inside Claude Code:
/plugin marketplace add harshil-1411/claude_plugin_video_studio
/plugin install video-studio@video-studio-marketplaceThen:
/video-studio:create README.md as a 30-second 9:16 reel for instagram and youtube-shortsClaude reads the source, proposes a hook, a scene plan and a storyboard, and waits for your approval. It then renders a preview, looks at it, then the final, and writes the packages:
dist/
├── reel.mp4 clean-master.mp4 captions.srt captions.vtt cover.jpg
├── video.lock render-manifest.json provenance.json video-spec.json
├── instagram/ video.mp4 cover.jpg captions.* post.json qa.json
└── youtube-shorts/ …Voice: macOS picks your best installed voice (add a Premium voice in System Settings → Accessibility → Spoken Content). An ElevenLabs key (
/plugin→ video-studio → Configure, stored in the OS credential store) is used only when yourpolicy.yamlallows it or you ask for it.HyperFrames renderer: richer motion graphics; needs Google Chrome and a one-time install (the render skill gives the command).
Video URLs:
brew install yt-dlpto ingest YouTube, Vimeo or Loom videos (subtitles become the transcript).Transcription: whisper.cpp (
brew install whisper-cpp); models are downloaded only after you approve.
git clone https://github.com/harshil-1411/claude_plugin_video_studio.git video-studio
cd video-studio && pnpm install
claude --plugin-dir .How it works
flowchart LR
A["Sources<br/>md · pdf · docx · pptx · url · repo<br/>video · audio · clip folders"] --> B["ingest<br/>ContentIR + evidence refs"]
B --> C["plan<br/>brief · grounded VideoSpec · storyboard"]
C -->|your approval| D["render<br/>voice · scenes · captions · music"]
D --> E["lint + QA<br/>platform contracts · WCAG · loudness"]
E --> F["dist/<platform>/<br/>video · cover · captions · post · qa"]Claude is the creative engine. Skills guide Claude to write the brief and the scene spec.
The engine does the rest. A bundled MCP server validates, renders, runs QA and packages. It is deterministic, cached and has no LLM calls.
Three contracts connect the stages:
ContentIR: the sources, with provenance.VideoSpec: a provider-neutral scene graph.RenderManifest: exactly what happened.
Their JSON Schemas are in
schemas/.Platform facts are data, not code:
platform-specs/*.yamlrecord each app's limits and UI masks, with a source URL and the date they were verified.
What you can make
Inputs | Markdown, text, PDF, DOCX, PPTX, web pages, local repos, video and audio files (local transcription in English or ~99 languages with detection, optional speaker turns for English conversations), folders of clips, video URLs (YouTube, Vimeo, Loom through your own optional |
Templates (18) | explain · educational · listicle · faceless-listicle · product-launch · devtool-launch · product-demo · product-ui · case-study · before-after · carousel-story · animated-explainer · text-over-music · talking-head · aesthetic-broll · silent-vlog · oddly-satisfying · ambient-slice-of-life |
Scene kinds (15) | typography · code · chart · stat · diagram · timeline · comparison · split_screen · quote · kinetic_text · lower_third · map · screenshot · cta · end_card, plus real footage with text overlays |
Voice | macOS |
Audio | 4 bundled CC0 music beds (ducked under speech), beat-synced cuts, native clip sound, crossfades, sound effects, −14 LUFS with true-peak headroom |
Footage | Crop, contain or blurred-pad fits, trim and speed, text overlays, automatic removal of baked-in letterbox bars, and |
Captions | 3–7 word phrases on plates, placed clear of each platform's UI, held long enough to read, broken at speaker changes, with keyword emphasis and sound-event cues like |
Looks | Style packs (minimal, editorial, technical, energetic) and brand kits (colours, fonts, weights, motion, a corner logo, forbidden treatments, banned phrases, pronunciation overrides such as |
Languages |
|
Checks | 30+ lint rules (platform UI zones, contrast, reading speed, caption timing, cues, story arc, cutaway rhythm, brand rules, footage quality), technical QA (loudness, black or frozen frames), |
Trust |
|
Control |
|
Examples
Example | What it shows |
The narrated hero reel above, grounded in a README snapshot | |
A 30 s explainer from Markdown notes (also the golden-frame test) | |
Every Phase 5 scene kind, the | |
A tiny web app to try |
Commands
Command | What it does |
| The whole flow, from a source or an idea to packages, with an approval step |
| Brief, grounded spec and storyboard, built on a story arc (hook, open loop, escalation, payoff, CTA); explains every validation issue |
| Local render (preview, then final; cancel anytime), technical QA, per-platform packages ( |
| Platform contract checks with a fix loop (UI zones, caption readability and sync, cuts on the beat, story arc); claim coverage against the sources |
| Contact sheets, frame strips and crops of a render (lint findings bordered), so Claude looks at the video before handing it over; a before/after page that plays two versions in sync (side by side, stacked or wipe) |
| Golden-frame regression tests; spec, lock and frame diffs between renders |
| Hook × cover A/B sets with an experiment manifest; new aspect, length or platform |
| Language versions from a translation sheet, re-timed for the language |
| Documents, web pages, repos, media files and video URLs; local transcription (language detection, speaker turns); standalone clips from a long talk, with shot sheets, subject tracking and cutaways; a reference video's format |
| Cleans up talking-head footage: shortens pauses, cuts filler words and drops retakes (dry run first, new asset on apply) |
| Records a scripted walk through your running app (inputs are blurred) |
| Checks ffmpeg, fonts, Chrome, whisper, HyperFrames and keys |
What it does not do (yet)
No generative video or avatars yet. Runway, HeyGen and fal.ai adapters are planned (Phase 7, needs keys). Until then those scenes render as titled placeholder cards. Sora is intentionally not supported.
No posting or analytics. It produces packages and post copy; you upload them. Platform "trending sounds" are added in each app, and
post.jsonreminds you of that.HyperFrames is optional. The built-in ffmpeg renderer covers every scene kind. The richer HyperFrames renderer needs its own install and Google Chrome.
Whisper models are downloaded only with your consent (about 148 MB; 488 MB for the speaker-turn model). You can supply SRT/VTT captions instead.
Speaker turns are English-only and label two alternating speakers (S1/S2); rename them if there are more.
Subject tracking is automatic on macOS only. Elsewhere Claude marks the subject from shot sheets.
No colour grading yet. Dark or bright footage gets a warning, not a fix.
Demo capture never starts your app. You start it and give the URL, and every step is approved first.
The roadmap is in docs/PLAN.md and the current state in docs/HANDOFF.md.
pnpm install
pnpm typecheck # tsc -b
pnpm test # vitest
pnpm schemas # regenerate schemas/*.schema.json
pnpm bundle # build dist/mcp.mjs (single-file ESM, committed)
pnpm smoke # start dist/mcp.mjs over stdio and check its tools
claude plugin validate --strict .claude-plugin/plugin.json # plugin + skills
claude plugin validate --strict . # marketplace
pnpm check # all of the above plus golden frames, stopping at the first failure
pnpm hooks # once: run pnpm check before every git pushAfter changing anything under packages/, rerun pnpm bundle and commit dist/mcp.mjs (pnpm check fails if the committed bundle is stale).
Package | Role |
| zod models → |
| project folders, cache, SQLite ledger, jobs |
| extractors (documents, web, repos, media) |
| ffmpeg, audio mix, captions, QA, ASR, beat detection |
| ffmpeg, footage and HyperFrames renderers; tokens, styles, scripts |
| platform contracts and layout zones |
| TTS backends |
| the MCP server ( |
Data lives next to the code: skills/, templates/, styles/, music/, fonts/ and platform-specs/.
Contributing
Guides for adding archetypes, style packs, platform packs and providers are in docs/contributing/. Ingested content is always treated as untrusted data: the plugin never executes code from sources.
License
Apache-2.0. See LICENSE. The bundled fonts are OFL-1.1 (see fonts/README.md), and the bundled music beds are CC0 (see music/README.md).
This server cannot be deployed
Maintenance
Related MCP Connectors
Build, run, schedule, and publish AI video pipelines to YouTube and TikTok from any MCP client.
Render video and run AI media tasks from a single declarative JSON request.
- tonpitOAuthcom.tonpit
Video production studio for AI agents: AI media, motion graphics as code, timeline and export.
1 Transcode, host and caption video from a prompt. Fifteen tools, nine read-only, nothing deletes.
Related MCP Servers
- FlicenseAqualityBmaintenanceEnables AI-powered video editing in IDEs through a pipeline-driven workflow, including proxy ingestion, motion graphics generation, and high-fidelity rendering.4-
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to validate and render branded videos from structured Video Specifications via the Model Context Protocol. Provides tools for health checks, video validation, and deterministic Remotion rendering.-
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to run project-scoped video editing workflows: propose and approve editing strategies, apply validated plans, review immutable versions, and export final renders via FFmpeg, with durable persistence and approval gates.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to turn natural-language creative direction, transcripts, and source media into fully structured, editable video projects, then verify and render delivery files.2MIT