Metadata-Version: 2.5
Name: kinocut
Version: 2.0.0
Summary: Trusted, guardrailed video editing for AI agents. FFmpeg, Hyperframes, repurposing tools, Python client, CLI, and MCP server.
Project-URL: Homepage, https://kinocut.dev/
Project-URL: Documentation, https://github.com/KyaniteLabs/kinocut#readme
Project-URL: Repository, https://github.com/KyaniteLabs/kinocut
Project-URL: Bug Tracker, https://github.com/KyaniteLabs/kinocut/issues
Project-URL: Changelog, https://github.com/KyaniteLabs/kinocut/blob/master/CHANGELOG.md
Project-URL: Discussions, https://github.com/KyaniteLabs/kinocut/discussions
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: agents,ai,ai-video,chroma-key,claude,claude-code,cli,codex,color-grading,cursor,editing,ffmpeg,hyperframes,mcp,mcp-server,model-context-protocol,stabilization,subtitle,subtitles,transcription,video,video-automation,video-processing,whisper
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Multimedia :: Sound/Audio
Classifier: Topic :: Multimedia :: Video
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: anyio>=4.14.2
Requires-Dist: click>=8.3.3
Requires-Dist: cryptography>=50.0.0
Requires-Dist: mcp<2,>=1.28.1
Requires-Dist: pydantic-settings>=2.14.2
Requires-Dist: pydantic>=2.13.2
Requires-Dist: pyjwt>=2.15.0
Requires-Dist: python-multipart>=0.0.31
Requires-Dist: rich>=15.0.0
Requires-Dist: starlette>=1.3.1
Provides-Extra: ai
Requires-Dist: basicsr>=1.4; (python_version < '3.13') and extra == 'ai'
Requires-Dist: demucs>=4.0; extra == 'ai'
Requires-Dist: imagehash>=4.3; extra == 'ai'
Requires-Dist: numpy>=2.0.0; extra == 'ai'
Requires-Dist: openai-whisper>=20231117; extra == 'ai'
Requires-Dist: opencv-contrib-python>=4.10; extra == 'ai'
Requires-Dist: pillow>=12.3.0; extra == 'ai'
Requires-Dist: realesrgan>=0.3; (python_version < '3.13') and extra == 'ai'
Requires-Dist: setuptools>=83.0.0; extra == 'ai'
Requires-Dist: torch>=2.13.0; extra == 'ai'
Requires-Dist: torchaudio>=2.0; extra == 'ai'
Requires-Dist: torchcodec>=0.8; extra == 'ai'
Requires-Dist: torchvision>=0.28.0; (python_version < '3.13') and extra == 'ai'
Requires-Dist: urllib3>=2.8.0; extra == 'ai'
Provides-Extra: ai-scene
Requires-Dist: imagehash>=4.3; extra == 'ai-scene'
Requires-Dist: pillow>=12.3.0; extra == 'ai-scene'
Provides-Extra: all-ai
Requires-Dist: basicsr>=1.4; (python_version < '3.13') and extra == 'all-ai'
Requires-Dist: demucs>=4.0; extra == 'all-ai'
Requires-Dist: imagehash>=4.3; extra == 'all-ai'
Requires-Dist: numpy>=2.0.0; extra == 'all-ai'
Requires-Dist: openai-whisper>=20231117; extra == 'all-ai'
Requires-Dist: opencv-contrib-python>=4.10; extra == 'all-ai'
Requires-Dist: pillow>=12.3.0; extra == 'all-ai'
Requires-Dist: realesrgan>=0.3; (python_version < '3.13') and extra == 'all-ai'
Requires-Dist: scipy>=1.10; extra == 'all-ai'
Requires-Dist: setuptools>=83.0.0; extra == 'all-ai'
Requires-Dist: soundfile>=0.12; extra == 'all-ai'
Requires-Dist: torch>=2.13.0; extra == 'all-ai'
Requires-Dist: torchaudio>=2.0; extra == 'all-ai'
Requires-Dist: torchcodec>=0.8; extra == 'all-ai'
Requires-Dist: torchvision>=0.28.0; (python_version < '3.13') and extra == 'all-ai'
Requires-Dist: urllib3>=2.8.0; extra == 'all-ai'
Provides-Extra: audio
Requires-Dist: numpy>=1.24; extra == 'audio'
Provides-Extra: audio-ai
Requires-Dist: numpy>=1.24; extra == 'audio-ai'
Provides-Extra: audio-all
Requires-Dist: numpy>=1.24; extra == 'audio-all'
Requires-Dist: scipy>=1.10; extra == 'audio-all'
Requires-Dist: soundfile>=0.12; extra == 'audio-all'
Provides-Extra: audio-analysis
Requires-Dist: numpy>=1.24; extra == 'audio-analysis'
Provides-Extra: audio-enhanced
Requires-Dist: numpy>=1.24; extra == 'audio-enhanced'
Requires-Dist: scipy>=1.10; extra == 'audio-enhanced'
Requires-Dist: soundfile>=0.12; extra == 'audio-enhanced'
Provides-Extra: audio-midi
Requires-Dist: numpy>=1.24; extra == 'audio-midi'
Provides-Extra: client
Requires-Dist: pillow>=12.3.0; extra == 'client'
Provides-Extra: dev
Requires-Dist: numpy>=1.26; extra == 'dev'
Requires-Dist: pillow>=12.3.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest-cov>=6.0; extra == 'dev'
Requires-Dist: pytest-timeout>=2.3; extra == 'dev'
Requires-Dist: pytest-xdist>=3.6; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: pyyaml>=6.0.2; extra == 'dev'
Requires-Dist: rich>=15.0.0; extra == 'dev'
Requires-Dist: ruff>=0.15.11; extra == 'dev'
Requires-Dist: scikit-learn>=1.3; extra == 'dev'
Requires-Dist: webcolors>=1.13; extra == 'dev'
Provides-Extra: hyperframes
Provides-Extra: image
Requires-Dist: numpy>=1.26; extra == 'image'
Requires-Dist: pillow>=12.3.0; extra == 'image'
Requires-Dist: scikit-learn>=1.3; extra == 'image'
Requires-Dist: webcolors>=1.13; extra == 'image'
Provides-Extra: image-ai
Requires-Dist: anthropic>=0.96.0; extra == 'image-ai'
Requires-Dist: numpy>=1.26; extra == 'image-ai'
Requires-Dist: pillow>=12.3.0; extra == 'image-ai'
Requires-Dist: scikit-learn>=1.3; extra == 'image-ai'
Requires-Dist: webcolors>=1.13; extra == 'image-ai'
Provides-Extra: object-matte
Requires-Dist: numpy>=1.26; extra == 'object-matte'
Requires-Dist: onnxruntime>=1.17; extra == 'object-matte'
Requires-Dist: pillow>=12.3.0; extra == 'object-matte'
Provides-Extra: stems
Requires-Dist: demucs>=4.0; extra == 'stems'
Requires-Dist: setuptools>=83.0.0; extra == 'stems'
Requires-Dist: torch>=2.13.0; extra == 'stems'
Requires-Dist: torchaudio>=2.0; extra == 'stems'
Requires-Dist: torchcodec>=0.8; extra == 'stems'
Provides-Extra: transcribe
Requires-Dist: openai-whisper>=20231117; extra == 'transcribe'
Requires-Dist: setuptools>=83.0.0; extra == 'transcribe'
Requires-Dist: torch>=2.13.0; extra == 'transcribe'
Requires-Dist: urllib3>=2.8.0; extra == 'transcribe'
Provides-Extra: upscale
Requires-Dist: basicsr>=1.4; (python_version < '3.13') and extra == 'upscale'
Requires-Dist: numpy>=2.0.0; extra == 'upscale'
Requires-Dist: opencv-contrib-python>=4.10; extra == 'upscale'
Requires-Dist: pillow>=12.3.0; extra == 'upscale'
Requires-Dist: realesrgan>=0.3; (python_version < '3.13') and extra == 'upscale'
Requires-Dist: setuptools>=83.0.0; extra == 'upscale'
Requires-Dist: torch>=2.13.0; extra == 'upscale'
Requires-Dist: torchvision>=0.28.0; (python_version < '3.13') and extra == 'upscale'
Requires-Dist: urllib3>=2.8.0; extra == 'upscale'
Description-Content-Type: text/markdown

<!-- mcp-name: tech.kyanitelabs/kinocut -->

# Kinocut

Your agent edits the video. You approve the cut.

Kinocut is a local, guardrailed video-editing MCP server, Python client and `kino`
CLI built on FFmpeg. Every edit is checked before FFmpeg runs, writes a new file
unless you allow an overwrite, and returns a structured result. Quality gates catch
black frames, silence and bad loudness, and a Video Receipt records what ran.
Formerly mcp-video.

## What your agent sees

By default the MCP server lists 18 tools: an 8-tool hot path (`video_info`,
`video_trim`, `video_merge`, `video_add_text`, `video_add_audio`,
`video_extract_frame`, `video_shorts`, `video_doctor`), eight operation families
that reach every other operation, and `list_operations` / `describe_operation`
to find and fetch them. `KINOCUT_TOOLS=profile:<name>` lists one job's tools by
name and `KINOCUT_TOOLS=all` lists all 206.

`video_review_card` turns a finished cut into a review card with a contact sheet
and Approve, Dig in and Try another range buttons for Hermes Desktop chat.

## Install and inspect

Requires Python 3.11 or newer, plus FFmpeg and ffprobe on `PATH`.

```bash
pip install kinocut==2.0.0
kino doctor
kino info input.mp4
```

Agent plugins launch a specific published version through uv. Follow the
[plugin instructions](https://github.com/KyaniteLabs/kinocut/tree/master/plugins/kinocut)
for the host you use. Kinocut also provides `from kinocut import Client`; the
older `mcp_video` import remains supported.

## Output safety

Prefer new output paths. Replacing an existing output requires explicit
`overwrite=true` (CLI `--overwrite`). Existing non-media artifacts also require
evidence that the same durable job created them. Agent configuration homes are
protected. Use one writer per output, check the result, and require human
visual/audio review before publishing.

## Optional model calls and network use

Ordinary local FFmpeg editing and color grading need no account, model SDK or
API key. Kinocut's optional vision calls default to `KINOCUT_VISION_MODE=off`.
For observations with your chosen provider, prepare local images through
Kinocut and inspect them with the host agent's image tools, including local
models. Kinocut does not automatically inherit the host's model configuration.

Kinocut's own optional product-description adapter requires an
Anthropic-compatible endpoint and explicit local or remote configuration.
The separate sampled-frame Anthropic QC path also requires explicit remote
permission and configuration. A local/custom product route cannot activate it.

Installing packages downloads dependencies. URL inputs download requested media;
font and model-weight features may fetch assets from GitHub. Explicit Revideo
installation runs `npm ci` and may download renderer/browser dependencies.
Revideo telemetry defaults off. Hyperframes is a separately installed CLI:
Kinocut sets telemetry opt-outs, skips passive update checks and disables
implicit capture/snapshot model analysis. Docker rendering and browser previews
without a verified opt-out require explicit telemetry consent.

These controls are not a network sandbox. Inspect executable scenes and project
assets before use. See the
[vision and network policy](https://github.com/KyaniteLabs/kinocut/blob/master/docs/VISION_PRIVACY.md)
for configuration, supported preview versions and limits.

[Documentation](https://github.com/KyaniteLabs/kinocut#readme) ·
[Release notes](https://github.com/KyaniteLabs/kinocut/releases) ·
[Issues](https://github.com/KyaniteLabs/kinocut/issues) ·
[Website](https://kinocut.dev/)
