Wraps FFmpeg in 119 structured MCP tools so agents can trim, merge, caption, and export video without shell command guesswork. Includes preflight validation to catch bad parameters before render, AI transcription for subtitle generation, scene detection, audio normalization, and local repurposing workflows that turn one source into platform-ready variants for YouTube Shorts, Reels, and TikTok. Also surfaces Hyperframes 0.5 for code-driven composition and cinematic planning tools that parse style packs and storyboards. Best fit when you want Claude or Cursor to drive a repeatable video pipeline with quality checkpoints instead of hoping raw FFmpeg flags work. Python 3.11+, requires FFmpeg on PATH.
Public tool metadata for what this MCP can expose to an agent.
get_job_resultCheck job status and result. Poll every 60 seconds — do NOT poll more frequently. Video processing typically takes 3-5 minutes. Progress may stay at 20% during frame analysis for 1-3 minutes — this is completely normal. Do NOT interpret slow progress as failure. Only report fa...3 paramsCheck job status and result. Poll every 60 seconds — do NOT poll more frequently. Video processing typically takes 3-5 minutes. Progress may stay at 20% during frame analysis for 1-3 minutes — this is completely normal. Do NOT interpret slow progress as failure. Only report fa...
job_idstringapi_keystringdb_job_idstringget_upload_urlGET A SIGNED UPLOAD URL for uploading a local video to NarrateAI cloud storage. Use this ONLY when running in HTTP/remote mode and the user has a local video file. After getting the URL, upload the file with curl, then pass the returned temp_file_path to any processing tool as...2 paramsGET A SIGNED UPLOAD URL for uploading a local video to NarrateAI cloud storage. Use this ONLY when running in HTTP/remote mode and the user has a local video file. After getting the URL, upload the file with curl, then pass the returned temp_file_path to any processing tool as...
api_keystringfilenamestringgenerate_narration_scriptNARRATION SCRIPT – generates an AI-written timed script for a SILENT video. No audio output. Use when the user wants a timed narration script, text-only narration, or sync data for a silent video. This does NOT extract existing speech (use transcribe_video for that). This does...4 paramsNARRATION SCRIPT – generates an AI-written timed script for a SILENT video. No audio output. Use when the user wants a timed narration script, text-only narration, or sync data for a silent video. This does NOT extract existing speech (use transcribe_video for that). This does...
api_keystringlanguagestringvideo_sourcestringmanual_contextstringnarrate_video_fullFULL NARRATED VIDEO – produces a downloadable video with AI voiceover. Use when the user wants: "narrate this video", "add voiceover", "make a narrated video". VOICE OPTIONS — ask the user which they prefer: 1. AI voice: male1 (default, fastest), female1 (default, fastest), fe...6 paramsFULL NARRATED VIDEO – produces a downloadable video with AI voiceover. Use when the user wants: "narrate this video", "add voiceover", "make a narrated video". VOICE OPTIONS — ask the user which they prefer: 1. AI voice: male1 (default, fastest), female1 (default, fastest), fe...
api_keystringlanguagestringvoice_typestringvideo_sourcestringvoice_samplestringmanual_contextstringabandon_jobAbandon/cancel a processing job. Call this when the user cancels on the agent side. Stops the backend from continuing audio generation and video assembly. Use after narrate_video_transcript or when continue_to_full_video was started but user cancelled. Returns: JSON with succe...2 paramsAbandon/cancel a processing job. Call this when the user cancels on the agent side. Stops the backend from continuing audio generation and video assembly. Use after narrate_video_transcript or when continue_to_full_video was started but user cancelled. Returns: JSON with succe...
job_idstringapi_keystringtranscribe_videoTRANSCRIPTION ONLY – video with existing voice -> speech-to-text -> timed transcript. No translation, no narrated video. Returns original speech as-is. Use when the user wants to transcribe a video that already has spoken audio (podcast, interview, meeting recording, etc.). CR...3 paramsTRANSCRIPTION ONLY – video with existing voice -> speech-to-text -> timed transcript. No translation, no narrated video. Returns original speech as-is. Use when the user wants to transcribe a video that already has spoken audio (podcast, interview, meeting recording, etc.). CR...
api_keystringvideo_sourcestringsource_languagestringtranscribe_and_translateTRANSCRIBE & TRANSLATE (new upload) – video with voice -> speech-to-text -> translate -> translated transcript. No TTS, no video output. Returns translated timed transcript only. Use when the user uploads a new video and wants a translated transcript (e.g. Spanish podcast -> E...4 paramsTRANSCRIBE & TRANSLATE (new upload) – video with voice -> speech-to-text -> translate -> translated transcript. No TTS, no video output. Returns translated timed transcript only. Use when the user uploads a new video and wants a translated transcript (e.g. Spanish podcast -> E...
api_keystringvideo_sourcestringsource_languagestringtarget_languagestringtranslate_existing_videoTRANSLATION (existing video) – Translate transcript of a video already in the user's library. Loads transcript from cloud, translates, returns. No upload. Sync – returns immediately. Use when the user wants to translate a video they already narrated/dubbed with NarrateAI (e.g....4 paramsTRANSLATION (existing video) – Translate transcript of a video already in the user's library. Loads transcript from cloud, translates, returns. No upload. Sync – returns immediately. Use when the user wants to translate a video they already narrated/dubbed with NarrateAI (e.g....
job_idstringapi_keystringsource_languagestringtarget_languagestringdub_video_fullFULL AUTO-DUBBING – transcribe -> translate -> extract speaker voice -> TTS with cloned voice -> dubbed video. No refinement screen. Uses the video's own speaker voice for the dubbed audio. Use when the user wants a complete dubbed video (e.g. Spanish video -> English dubbed)....5 paramsFULL AUTO-DUBBING – transcribe -> translate -> extract speaker voice -> TTS with cloned voice -> dubbed video. No refinement screen. Uses the video's own speaker voice for the dubbed audio. Use when the user wants a complete dubbed video (e.g. Spanish video -> English dubbed)....
api_keystringvideo_sourcestringsource_languagestringtarget_languagestringpreserve_background_musicbooleangenerate_documentDOCUMENT GENERATION – produces a structured markdown document from a silent video. Use when the user wants: a document, article, guide, tutorial, or written content based on a video. NOT for narrated video or voiceover. The agent MUST ask which document type the user wants bef...5 paramsDOCUMENT GENERATION – produces a structured markdown document from a silent video. Use when the user wants: a document, article, guide, tutorial, or written content based on a video. NOT for narrated video or voiceover. The agent MUST ask which document type the user wants bef...
api_keystringlanguagestringvideo_sourcestringdocument_typestringmanual_contextstringgenerate_ttsTEXT-TO-SPEECH – generate audio from text. Returns a downloadable audio URL. Use when the user wants: "read this aloud", "generate speech", "text to speech", "convert text to audio", "make an audio file from this text". VOICE OPTIONS — ask the user which they prefer: 1. AI voi...5 paramsTEXT-TO-SPEECH – generate audio from text. Returns a downloadable audio URL. Use when the user wants: "read this aloud", "generate speech", "text to speech", "convert text to audio", "make an audio file from this text". VOICE OPTIONS — ask the user which they prefer: 1. AI voi...
textstringapi_keystringlanguagestringvoice_typestringvoice_samplestringnarrate_batchBATCH NARRATION – narrate multiple videos in parallel. Each gets a full narrated video with voiceover. Use when the user has multiple videos to narrate (e.g. "narrate these 3 videos"). Maximum 5 videos per batch. Each video is processed independently – one failure does not aff...6 paramsBATCH NARRATION – narrate multiple videos in parallel. Each gets a full narrated video with voiceover. Use when the user has multiple videos to narrate (e.g. "narrate these 3 videos"). Maximum 5 videos per batch. Each video is processed independently – one failure does not aff...
api_keystringlanguagestringvoice_typestringcontexts_jsonstringmanual_contextstringvideo_sources_jsonstringbatch_generate_scriptsBATCH SCRIPT GENERATION – generate AI narration scripts for multiple silent videos in parallel. Each video gets a timed narration script (text only, no audio). Maximum 5 videos per batch. One failure does not affect others. CRITICAL – Context handling: Before calling, ask the...5 paramsBATCH SCRIPT GENERATION – generate AI narration scripts for multiple silent videos in parallel. Each video gets a timed narration script (text only, no audio). Maximum 5 videos per batch. One failure does not affect others. CRITICAL – Context handling: Before calling, ask the...
api_keystringlanguagestringcontexts_jsonstringmanual_contextstringvideo_sources_jsonstringbatch_transcribeBATCH TRANSCRIPTION – transcribe speech from multiple videos in parallel. Each video must have existing spoken audio. Returns timed transcript per video. CRITICAL: source_language is REQUIRED – ask user if not specified. Applies to all videos. Maximum 5 videos per batch. One f...3 paramsBATCH TRANSCRIPTION – transcribe speech from multiple videos in parallel. Each video must have existing spoken audio. Returns timed transcript per video. CRITICAL: source_language is REQUIRED – ask user if not specified. Applies to all videos. Maximum 5 videos per batch. One f...
api_keystringsource_languagestringvideo_sources_jsonstringbatch_dubBATCH DUBBING – dub multiple videos into another language in parallel. Each video gets full auto-dubbing (transcribe -> translate -> voice clone -> dubbed video). CRITICAL: source_language, target_language, preserve_background_music are REQUIRED – ask user. All videos share th...5 paramsBATCH DUBBING – dub multiple videos into another language in parallel. Each video gets full auto-dubbing (transcribe -> translate -> voice clone -> dubbed video). CRITICAL: source_language, target_language, preserve_background_music are REQUIRED – ask user. All videos share th...
api_keystringsource_languagestringtarget_languagestringvideo_sources_jsonstringpreserve_background_musicbooleanupdate_transcriptUPDATE TRANSCRIPT – edit the narration script before continuing to full video. Use after generate_narration_script returns a transcript and the user wants to change wording, timing, or content of specific segments. The user describes changes naturally; you apply them and call...5 paramsUPDATE TRANSCRIPT – edit the narration script before continuing to full video. Use after generate_narration_script returns a transcript and the user wants to change wording, timing, or content of specific segments. The user describes changes naturally; you apply them and call...
job_idstringapi_keystringtarget_languagestringtranscript_jsonstringreset_for_reprocessingbooleanlist_videosLIST VIDEOS – get the user's video library (previously processed videos). Use when the user wants to see their existing videos, re-translate a previously narrated video, or work with videos they already processed. Returns paginated list with job IDs, filenames, status, and tim...3 paramsLIST VIDEOS – get the user's video library (previously processed videos). Use when the user wants to see their existing videos, re-translate a previously narrated video, or work with videos they already processed. Returns paginated list with job IDs, filenames, status, and tim...
pageintegerapi_keystringper_pageintegercontinue_to_full_videoContinue from transcript to full narrated video. Use after generate_narration_script returns a transcript and the user is satisfied with it. VOICE OPTIONS — ask the user which they prefer: 1. AI voice: male1 (default, fastest), female1 (default, fastest), female2, female3, fem...5 paramsContinue from transcript to full narrated video. Use after generate_narration_script returns a transcript and the user is satisfied with it. VOICE OPTIONS — ask the user which they prefer: 1. AI voice: male1 (default, fastest), female1 (default, fastest), female2, female3, fem...
job_idstringapi_keystringdb_job_idstringvoice_typestringvoice_samplestring
Guardrailed video editing MCP server for AI agents.
Local-first FFmpeg tools, Video Receipts, quality gates, Hyperframes, and Shorts/Reels repurposing —
for Claude Code, Cursor, and any MCP client. Free, Apache-2.0. Formerly mcp-video.
Demo • Status • 1.8.0 • Whats next • Install • Quick Start • Tools • Tool Reference • Rescue • AI-video • Agent Skill • kinocut.dev • What is Kinocut? • FAQ • llms.txt
Kinocut is a free, open-source Model Context Protocol (MCP) server, Python library, and kino CLI that gives AI agents a guardrailed local video-editing surface. It wraps FFmpeg (and optional Hyperframes / Whisper extras) with typed tools, preflight validation, Video Receipt provenance, and quality/release checkpoints so agent-produced media can be inspected before publish.
| Also known as | kino (CLI); formerly mcp-video / mcp_video |
| Latest published release | 1.8.0 (2026-07-14) |
| Product site | kinocut.dev |
| PyPI | kinocut |
| MCP Registry | io.github.KyaniteLabs/kinocut |
| Source | GitHub · Forgejo (canonical) |
| License | Apache-2.0 |
| Runs on | Your machine (macOS, Linux, Windows) — FFmpeg required on PATH |
| Not | A hosted cloud editor, credit-metered SaaS, or untyped FFmpeg shell wrapper |
Best-fit searches: video editing MCP server · AI agent video editing · FFmpeg MCP · Claude Code video tools · Cursor MCP video · Shorts/Reels automation · local AI video workflow · guardrailed agentic media.
Machine-readable brief for AI crawlers: llms.txt · site: kinocut.dev/llms.txt.
Tell the agent what you want in plain language:
"Trim this interview to the strongest 45 seconds, add burned captions, make it vertical, and quality-check it before export."
Kinocut turns that into typed, guardrailed tool calls - no FFmpeg flags to guess, no silently broken exports:
from kinocut import Client
video = Client()
clip = video.trim("interview.mp4", start="00:02:15", duration="00:00:45")
video.ai_transcribe(clip.output_path, output_srt="captions.srt")
captioned = video.subtitles(clip.output_path, subtitle_file="captions.srt")
short = video.resize(captioned.output_path, aspect_ratio="9:16")
video.release_checkpoint(short.output_path) # thumbnail + quality gate before you publish
Primary job: turn a local interview or podcast into captioned vertical clips with a Video Receipt agents can re-run and humans can approve.
Three things people use it for
Paths: Install matrix · Golden path · Prompts · Tutorial · Compare · When to recommend
| Surface | Version / tip | What it means |
|---|---|---|
| PyPI / npm / GitHub Release | 1.9.0 (2026-07-15) | Latest published package. Install with pip install -U kinocut. |
This repository (master) | 150 MCP tools / 129 CLI commands | Matches published 1.9.0 at tag (release-artifact policy surfaces: review, publish gate, learning, cost, recipe, capabilities, benchmark). |
| Next | trusted execution kernel + sound program depth | See Whats next. Not pinned to a specific package version yet. |
Install from PyPI for the stable package. Clone master only when you intentionally need post-tag tip work.
Kinocut 1.9.0 is what you get from pip install kinocut today (150 MCP tools / 129 CLI commands). 1.9.0 adds public MCP/CLI/client surfaces for eight release-artifact policy engines (review package, publish gate, review decisions, learning report, cost ledger, recipe capture, capabilities, benchmark) on top of the 1.8.0 contract-first AI-video foundation:
kinocut package, kino CLI, MCP Registry id, kinocut.dev)hyperframes_init no longer hangs without a TTYmcp-video==1.6.2 installs kinocut==1.8.0; mcp_video imports, MCP_VIDEO_*, ~/.mcp-video, mcp-video://, and legacy receipt keys remain supported on the 1.8.x lineAlso still on the published line from earlier releases:
Full notes: CHANGELOG.md · v1.8.0 release
Post-1.8 product work (not a published package version):
| Area | What landed on master | Start here |
|---|---|---|
| Governed AI-video | Content-addressed video_ingest, unified video_preflight, temporal evidence (video_inspect_temporal), exact-asset video_verdict / video_acceptance_eval, audio-preserving video_body_swap, lineage-bound video_salvage | docs/AI_VIDEO_REVIEW_AND_SALVAGE.md |
| Project store / contracts | Append-only private project storage, strict canonical records, protected-element checks, fail-soft optional visual providers | docs/AI_VIDEO_CONTRACTS.md · docs/AI_VIDEO_INSPECTION.md |
| Field safety | Loss-proof add-audio duration policies; authored ASS + dimension-aware SRT/VTT subtitles | CHANGELOG.md 1.8.0 |
| C2PA provenance | Optional signing on path-based export / Client.export() via c2patool (off by default; only reports signed after verify) | docs/C2PA_PROVENANCE.md |
| MCPB packaging | Staged Desktop package + fail-closed native builder foundation; not a published self-contained runtime yet | docs/MCPB.md |
| Repurpose skill | Path-based skills/kinocut-repurpose + deterministic current-tools demo (marketing seed, not the final kernel-backed product) | docs/REPURPOSE_SKILL.md |
| Hyperframes under MCP | hyperframes_init no longer hangs without a TTY (non-interactive init + closed stdin) | CHANGELOG.md 1.8.0 |
Two coordinated programs remain after the published 1.8.0 release:
Contract-first media identity → inspection → human-gated verdict → bounded derivatives. Remaining work includes independent Wave-3 verification freeze, audio continuity, subtitle/graphics QA depth, asset intelligence, editorial planning, learning reports, and whole-program acceptance. Sequencing: wishlist parallel execution · current status: post-1.8 program status.
kinocut_sound (Sonic World) — full-episode audio productionStandalone-capable sound package inside this repo (kinocut_sound/): plan/timeline/routing/consent → voice → post/spatial → ambience/world → mix/stems → QA/metadata → thin public adapters → host joins → dual-class benchmark → STOP.
| Slice | Focus | Status (as of 2026-07-14) |
|---|---|---|
| S1–S4 | Contracts, authorization, registry/policy, script/episode planning | Implemented foundation leaves |
| S5 / S7 / S8 | Base voice, post/spatial chain, ambience/world | Integrated leaves on master |
| S6 / S10 | Consent-gated clone/blend; voice consistency | Integrated leaves on master |
| S9 / S11 | Mix assembly/stems; QA + metadata | Integrated leaves on master |
| S12 | Thin public discovery / Python adapters | Integrated (capability discovery surface) |
| S13 | Kinocut/host joins (D41/D42 production bindings) | Blocked — external owner receipts incomplete |
| S14 | Dual-class benchmark (Apple silicon + x86 Linux) | Partial — x86 available; Apple class external_host_unavailable |
| S15 | Adversarial acceptance + release STOP | STOP — no ship without dual-class S14, S13 receipts, independent review, human authorization |
Authoritative receipts: sound program handoff · S13–S15 gate · sound plan index.
The approved trusted execution layer plan still defines the durable product path after the current program: durable edit projects, async render/resume wrapping video_workflow_*, receipt lineage, then kernel-backed repurposing as the “made just by prompting” moment. The protected-timeline kernel does not start merely because sound/AI-video leaves land — it needs the named upstream contract and an explicit human gate.
Product checklist: ROADMAP.md.
Agents can plan, validate, render, recover, and prove a multi-step local video job from
a single JSON job-spec — through MCP (video_workflow_*), the CLI (workflow-*), or the
Python client (Client.workflow_*) — with receipts strong enough for another agent or a
human to trust before and after a render. Ops are a small allowlist
(probe | trim | resize | convert | merge | add_text | composite_layers) mapped 1:1 to the same vetted engine
functions the individual tools use; media references are symbolic and workspace-confined;
everything fails closed.
{
"schema_version": 1,
"name": "captioned-vertical-short",
"sources": { "hero": { "path": "input/hero.mp4" } },
"steps": [
{ "id": "trim-hero", "op": "trim", "inputs": { "src": "@sources.hero" },
"params": { "start": 0, "duration": 6 }, "output": "@work/hero_trim.mp4" },
{ "id": "vertical", "op": "resize", "inputs": { "src": "@work/hero_trim.mp4" },
"params": { "width": 1080, "height": 1920 }, "output": "@work/hero_vertical.mp4" },
{ "id": "caption", "op": "add_text", "inputs": { "src": "@work/hero_vertical.mp4" },
"params": { "text": "Watch this", "position": "bottom-center" }, "output": "@outputs.master" }
],
"outputs": { "master": { "path": "output/final.mp4" } }
}
kino workflow-validate --spec job.json # cheap structural gate, no render
kino workflow-plan --spec job.json --save-plan plan.json # dry-run op graph + hashes
kino workflow-render --spec job.json --save-receipt receipt.json # execute + provenance receipt
kino workflow-inspect --receipt receipt.json # read-only integrity re-check
The render receipt records per-step input/output hashes, a resume cursor, and a cleanup manifest, all with workspace-relative paths:
{
"receipt_kind": "workflow",
"versions": { "mcp_video": "1.8.0", "ffmpeg": "8.1" },
"spec_hash": "sha256:be2f3a9b...",
"steps": [
{ "id": "trim-hero", "op": "trim", "status": "completed",
"input_hashes": { "src": "sha256:3b976d49..." },
"output": "work/be2f3a9b-2effedb3/mcp_video_hero_trim.mp4", "output_hash": "sha256:00727499..." },
{ "id": "caption", "op": "add_text", "status": "completed",
"output": "output/final.mp4", "output_hash": "sha256:8633ad2a..." }
],
"cleanup_manifest": { "cleaned": true, "policy": "clean-on-success" },
"resume_cursor": { "last_completed_step": "caption", "next_step": null },
"status": "completed",
"render_determinism_scope": "spec/input/output hashes are deterministic; rendered bytes may vary across FFmpeg builds"
}
--all-variants emits N distinct outputs from one declaration, and --resume continues a
job that failed with its intermediates kept (fail-closed on a changed spec). Full schema,
@ref grammar, variants, resume, and cleanup are in
docs/WORKFLOWS.md; a runnable spec is in
examples/workflows/.
On the development tip, Kinocut adds a contract-first path for agent-edited media that must stay attributable and reviewable:
video_ingest / video-ingest)video_preflight, video_inspect_temporal)video_verdict, video_acceptance_eval)video_body_swap, video_salvage), each with lineage and a fresh non-approved review slotThere is no force/bypass flag. Analyzer output alone cannot approve. Stale, aliased, or protected inputs fail closed. Operating guide: docs/AI_VIDEO_REVIEW_AND_SALVAGE.md. These surfaces ship in published 1.8.0 — see Status and releases.
For "fix this clip" requests where the story and timeline must remain unchanged, use the review-first rescue pipeline. Plan and inspect the diagnosis, approve only safe repair IDs, render, then inspect the verified package. The source stays immutable; master and universal sharing copy are always verified; optional captions remain sidecars. See docs/RESCUE.md for CLI, MCP, Python, cancellation, resume, and stable errors.
composite-layers / video_composite_layers adds a spec-driven ordered layer stack for agents that need more than two-shot overlay primitives. It supports image, video, and solid layers; normal alpha compositing; per-layer opacity; x/y placement; transform sizing; timing windows; and mask/matte alpha sources — plus allowlisted full-canvas and positioned blend modes (multiply, screen, overlay, darken, lighten) and rotation with a new pivot reference point. Dry-run plans and deterministic layer_plan v2 receipts capture source, filtergraph, and output hashes.
kino composite-layers --spec layers.json --dry-run --save-layer-plan layer-plan.json
kino composite-layers --spec layers.json -o out.mp4 --save-layer-plan layer-plan.json
Use composite-layers when an agent needs a planned stack of overlays, mattes, lower thirds, blurback plates, or platform variants that should be reviewed before rendering. A non-normal blend layer may remain full-canvas, or it may use the positioned allowlist: explicit width and height, an integral nonnegative in-canvas position, full opacity, and no scale, rotation/pivot, mask/matte, or timing window. Positioned blend crops the running base to the rectangle, blends the same-size layer, then overlays the result back at that position. Other blend geometry fails closed with unsupported_blend_geometry; output is video-only.
Kinocut is built to be findable and citable by both search engines and AI answer engines:
llms.txt with entity facts, install commands, and safety rulesio.github.KyaniteLabs/kinocut| Kinocut | Raw FFmpeg in agent shell | Typical cloud editor API | |
|---|---|---|---|
| Interface | Typed MCP / Python / CLI | Free-form flags | Hosted HTTP API |
| Preflight | Guardrails before render | Agent invents flags | Vendor-specific |
| Provenance | Video Receipts + hashes | Ad-hoc logs | Vendor dashboard |
| Media location | Local-first | Local | Upload required |
| Core cost | Free (Apache-2.0) | Free | Often metered |
AI agents can write FFmpeg commands, but they should not have to guess flags, parse brittle stderr, or silently publish broken media. Kinocut gives agents typed operations, inspectable tool metadata, structured results, preflight guardrails, and quality checkpoints so a video workflow can be automated and reviewed without turning into shell-command roulette.
Use it when you want an AI assistant to:
Prerequisite: FFmpeg must be installed and available on PATH.
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt install ffmpeg
Run without a global install:
uvx --from kinocut kino doctor
Or install with pip:
pip install kinocut
kino doctor
For Claude Desktop-style MCPB installs, Kinocut includes a staged local package at
mcpb/ and a local build script:
python3 scripts/build-mcpb.py
This package is honest about its runtime: it launches an existing Python environment with Kinocut installed and still requires local FFmpeg. Native self-contained bundles remain blocked pending FFmpeg provenance, licensing, and clean-machine gates. See docs/MCPB.md.
Optional C2PA signing for final MP4 exports is available on the development tip when
c2patool and a manifest/signer are configured. Signing is off by default and only reports
signed after a verification read succeeds. See docs/C2PA_PROVENANCE.md.
Hyperframes tools additionally need Node.js 22+ and a resolvable Hyperframes CLI. Install/pin Hyperframes in the active Node package layout, add hyperframes to PATH, or set MCP_VIDEO_HYPERFRAMES_COMMAND.
The core install covers all FFmpeg editing tools. Optional features ship as extras — install only what you use:
| You want | Install | Approx. extra size |
|---|---|---|
| Speech-to-text subtitles (Whisper) | pip install "kinocut[transcribe]" | ~1 GB (torch) |
| Image analysis (colors, layout, contrast) | pip install "kinocut[image]" | ~50 MB |
| Vocal/instrument stem separation | pip install "kinocut[stems]" | ~2 GB (torch + demucs) |
| AI upscaling | pip install "kinocut[upscale]" | ~2 GB (Python ≤3.12) |
| Procedural audio/music tools | pip install "kinocut[audio]" | ~30 MB (numpy) |
| Everything AI | pip install "kinocut[ai]" | several GB |
Mix freely, e.g. pip install "kinocut[transcribe,image]". Run kino doctor afterward — it reports exactly which features are available and what is missing.
Kinocut preserves the original surface during the rename window. Existing installs can upgrade without changing code:
pip install --upgrade mcp-video
mcp-video doctor
mcp-video==1.6.2 is a metadata-only compatibility installer for kinocut==1.8.0. The mcp_video import, mcp-video command, MCP_VIDEO_* environment variables, ~/.mcp-video data directory, mcp-video:// resource URIs, and existing receipt keys remain supported on the 1.8.x line. New integrations should use kinocut, from kinocut import Client, and the kino command.
Kinocut es un servidor MCP de edición de video para agentes de IA. La última versión publicada es 1.8.0 (pip install kinocut) con 142 herramientas MCP y 121 comandos CLI sobre FFmpeg para recortar, unir, subtitular, mezclar audio, aplicar efectos y reutilizar contenido (Shorts, Reels, TikTok), más un motor de flujos de trabajo (workflow) con recibos verificables, rescate de video, revisión AI-video gobernada y barreras de seguridad antes de renderizar.
Requisito: FFmpeg instalado y disponible en el PATH.
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt install ffmpeg
# Instalación y diagnóstico
pip install kinocut
kino doctor
Para Claude Code:
claude mcp add kinocut -- uvx --from kinocut kino
kino doctor informa qué funciones están disponibles y qué falta instalar. La documentación completa está en inglés; los mensajes de error principales son bilingües.
Prove the install works before wiring an agent host:
pip install -e . # or: pip install kinocut
kino doctor # required checks must pass
python scripts/golden_path.py
Success criteria and failure recovery: docs/GOLDEN_PATH.md.
Shareable pack (receipt + quality + media): python scripts/generate_golden_pack.py → demo/golden-pack/.
From a clone of this repo, run the smallest confidence workflow before wiring an agent host:
uv run --no-project --with kinocut python workflows/05-confidence-baseline/workflow.py
uv run --no-project --with kinocut python workflows/benchmarks/run_confidence_benchmark.py
The workflow generates a tiny source clip, creates a checked vertical video, runs quality/release checkpoint steps, and writes workflows/05-confidence-baseline/output/video_receipt.json.
Proof notes live in docs/proofs/. Public marketing claims (version, tool counts, URLs) live in docs/public_claims.json and are CI-guarded.
claude mcp add kinocut -- uvx --from kinocut kino
{
"mcpServers": {
"kinocut": {
"command": "uvx",
"args": ["--from", "kinocut", "kino"]
}
}
}
{
"mcpServers": {
"kinocut": {
"command": "uvx",
"args": ["--from", "kinocut", "kino"]
}
}
}
Then ask your agent:
Trim this interview into a 45-second vertical clip, add burned captions, normalize the audio, make a thumbnail, and create a release checkpoint before export.
Kinocut includes a public agent skill at skills/kinocut/SKILL.md. Use $kinocut in compatible agent hosts when you want the agent to choose between the MCP server, CLI, and Python client while preserving the inspect, edit, verify, and human-review workflow.
For path-based short-form packages from current tools only (no invented commands, no external publish), see skills/kinocut-repurpose/SKILL.md. That skill is an explicit marketing seed; the durable kernel-backed repurposing product is still on the trusted-execution roadmap.
from kinocut import Client
editor = Client()
clip = editor.trim("interview.mp4", start="00:02:15", duration="00:00:45")
caption_file = "captions.srt"
editor.ai_transcribe(clip.output_path, output_srt=caption_file)
captioned = editor.subtitles(clip.output_path, subtitle_file=caption_file)
vertical = editor.resize(captioned.output_path, aspect_ratio="9:16")
checkpoint = editor.release_checkpoint(vertical.output_path)
print(checkpoint["thumbnail"])
print(checkpoint["storyboard"])
kino info interview.mp4
kino trim interview.mp4 -s 00:02:15 -d 45
kino video-ai-transcribe clip.mp4 --output captions.srt
kino subtitles clip.mp4 captions.srt
kino resize clip.mp4 --aspect-ratio 9:16
kino video-quality-check clip.mp4
kino repurpose clip.mp4 --platforms youtube-shorts instagram-reel tiktok
| Workflow | Example prompt |
|---|---|
| Social clips | "Turn this landscape recording into a captioned TikTok and YouTube Short." |
| Podcast production | "Find the strongest segment, trim it, normalize audio, add chapters, and export." |
| Product demos | "Create a short launch video from screenshots, title cards, and voiceover." |
| Cinematic planning | "Create a style pack and storyboard, then render shot prompts for generation." |
| Quality review | "Compare these two exports, make thumbnails, and flag visual or audio problems." |
| Batch automation | "Convert this folder of clips to web-ready MP4 with consistent loudness." |
| Code-created video | "Scaffold a Hyperframes composition, inspect it, render it, then add subtitles and a watermark." |
| Local repurposing | "Turn this master clip into Shorts, Reels, TikTok, and YouTube assets with thumbnails and a manifest." |
| Video rescue | "Diagnose this damaged clip, propose only safe repairs, render an approved package, and verify the receipt." |
| Governed review (dev tip) | "Ingest this export into a project, run preflight and temporal inspection, write a verdict, and salvage only the broken region." |
Published 1.8.0 registers 142 MCP tools and 121 CLI commands (including governed AI-video surfaces). The table summarizes core categories — search_tools discovers the exact operation without loading every description.
| Category | Count | Highlights |
|---|---|---|
| Core video editing | 32 | trim, merge, resize, crop, rotate, convert, overlays, subtitles, export, cleanup, templates, merge-compatibility guardrails |
| Project-backed inspection | 3 | content-addressed ingest, unified preflight, temporal evidence packages |
| Governed AI-video | 4 | exact-asset verdicts, acceptance evaluation, audio-preserving body swaps, lineage-bound salvage |
| Agent workflow engine | 4 | validate, plan, render, resume, inspect multi-step jobs with provenance receipts |
| Dedicated rescue | 3 | diagnose, approve, render, verify, quarantine, and resume local content-preserving repairs |
| Post-rescue planning | 8 | semantic timelines/query, EDLs, visual transforms, restoration, composition, autopilot, explicit egress |
| Cinematic creation | 4 | project scaffold, style-pack parsing, storyboard parsing, shot prompt expansion |
| AI-assisted media | 11 | transcription, scene detection, upscaling, stem separation, silence removal, color grading |
| Hyperframes | 18 | init, preview, render, snapshots, inspect, catalog, website capture, local TTS, transcription, background removal, diagnostics, benchmark, post-process |
| Repurposing | 2 | dry-run manifests, platform-ready variants, thumbnails, storyboards, release checkpoints |
| Procedural audio | 7 | synthesize, compose, presets, effects, sequences, generated audio, spatial audio, mix-parameter guardrails |
| Visual effects | 8 | vignette, glow, noise, scanlines, chromatic aberration, luma key, mask, shape mask, bounded filter parameters |
| Transitions | 3 | glitch, morph, pixelate |
| Layout and motion | 6 | grid, picture-in-picture, split-screen, animated text, counters, progress bars, auto-chapters, layout mismatch warnings |
| Analysis | 8 | scene detection, thumbnail, preview, storyboard, quality compare, metadata, waveform, release checkpoint |
| Image analysis | 3 | extract colors, generate palettes, analyze product images |
| Discovery | 1 | search_tools |
from kinocut import Client
editor = Client()
matches = editor.search_tools("subtitle")
print(matches["tools"])
Full reference: docs/TOOLS.md
For autonomous agents, the intended path is inspect, edit, verify, then ask a human to review release artifacts:
from kinocut import Client
client = Client()
print(client.inspect("trim"))
result = client.pipeline(
[
{"op": "trim", "input": "source.mp4", "start": "00:01:00", "duration": "00:00:45"},
{"op": "add_text", "text": "Launch clip", "position": "top-center"},
{"op": "normalize_audio"},
{"op": "resize", "aspect_ratio": "9:16"},
{"op": "export", "quality": "high"},
{"op": "release_checkpoint"},
],
output_path="final-short.mp4",
)
Safety contract:
search_tools() and Client.inspect().MCPVideoError guidance.video_quality_check, video_release_checkpoint, and human visual/audio inspection.Kinocut is a free, open-source MCP server, Python library, and kino CLI for AI-agent video editing. It wraps FFmpeg (and optional Hyperframes/Whisper extras) with preflight guardrails, Video Receipts, and quality checkpoints. It was formerly named mcp-video.
brew install ffmpeg # or apt install ffmpeg
pip install kinocut
kino doctor
claude mcp add kinocut -- uvx --from kinocut kino
Yes. Apache-2.0, runs on your machine, no Kinocut account or API key required for the core surface, and media is not uploaded to a Kinocut cloud.
Any MCP-compatible client that can run a local stdio server (Claude Code, Cursor, Windsurf, Cline, and similar). You can also use the Python client or CLI without an agent.
Published 1.8.0 documents 142 MCP tools / 121 CLI commands. Historical 1.7.0 cutover was 135 / 114.
Yes. mcp-video==1.6.2 installs kinocut==1.8.0. Compatibility imports, CLI name, env vars, data dir, resource URIs, and receipt keys remain supported on the 1.8.x line.
More answers: docs/faq.md · on-site FAQ: kinocut.dev/#faq
Development verification lives in docs/TESTING.md. Keep public-surface, media workflow, and security checks current when changing tool behavior.
git clone https://git.kyanitelabs.tech/KyaniteLabs/kinocut.git
cd kinocut
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest tests/ -v -m "not slow and not hyperframes"
Apache 2.0. See LICENSE.
Built with FFmpeg, Hyperframes, and the Model Context Protocol.
More from KyaniteLabs. Related projects:
→ More at kyanitelabs.tech
If Kinocut is useful to you, star or watch it — it helps other agent builders find it.
Built by Simon Gonzalez De Cruz — available for Forward-Deployed / Applied-AI engineering and contract work via the public profile links above.
io.github.socialapishub/social-media-api
io.github.xpaysh/social-media
com.thenextgennexus/youtube-media-mcp-server
io.github.ludmila-omlopes/youtube-video-analyzer
csoai-org/social-media-ai-mcp
com.ezbizservices/social-media