Cassette Video Edit
Cassette-Editor/oh-my-cassette
Edit, trim, cut, caption, subtitle, reframe, combine, add background music to, or export video, audio, and image files through Cassette.
Use Kinocut for guarded video editing, source-backed planning, FFmpeg operations, media analysis, subtitles, audio workflows, Hyperframes or Revideo rendering, repurposing packages, and release…
$ npx skills add KyaniteLabs/kinocut --skill kinocut -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install KyaniteLabs/kinocut kinocut --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/KyaniteLabs/kinocut.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/kinocut .claude/skills/kinocut && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "kinocut" agent skill from https://github.com/KyaniteLabs/kinocut/tree/master/skills/kinocut into .claude/skills/kinocut/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kinocut", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/KyaniteLabs/kinocut/tree/master/skills/kinocutType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add KyaniteLabs/kinocut --skill kinocut -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install KyaniteLabs/kinocut kinocut --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/KyaniteLabs/kinocut.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/kinocut .agents/skills/kinocut && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "kinocut" agent skill from https://github.com/KyaniteLabs/kinocut/tree/master/skills/kinocut into .agents/skills/kinocut/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kinocut", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add KyaniteLabs/kinocut --skill kinocut -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install KyaniteLabs/kinocut kinocut --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/KyaniteLabs/kinocut.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/kinocut .cursor/skills/kinocut && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "kinocut" agent skill from https://github.com/KyaniteLabs/kinocut/tree/master/skills/kinocut into .cursor/skills/kinocut/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kinocut", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/KyaniteLabs/kinocut.git --path skills/kinocut--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add KyaniteLabs/kinocut --skill kinocut -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install KyaniteLabs/kinocut kinocut --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/KyaniteLabs/kinocut.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/kinocut .gemini/skills/kinocut && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "kinocut" agent skill from https://github.com/KyaniteLabs/kinocut/tree/master/skills/kinocut into .gemini/skills/kinocut/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kinocut", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install KyaniteLabs/kinocut kinocutInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add KyaniteLabs/kinocut --skill kinocut -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/KyaniteLabs/kinocut.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/kinocut .github/skills/kinocut && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "kinocut" agent skill from https://github.com/KyaniteLabs/kinocut/tree/master/skills/kinocut into .github/skills/kinocut/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kinocut", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add KyaniteLabs/kinocut --skill kinocut -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install KyaniteLabs/kinocut kinocut --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/KyaniteLabs/kinocut.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/kinocut .opencode/skills/kinocut && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "kinocut" agent skill from https://github.com/KyaniteLabs/kinocut/tree/master/skills/kinocut into .opencode/skills/kinocut/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kinocut", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
kinocutUse Kinocut for guarded video editing, source-backed planning, FFmpeg operations, media analysis, subtitles, audio workflows, Hyperframes or Revideo rendering, repurposing packages, and release…
Kinocut is an agent skill from KyaniteLabs/kinocut. Use Kinocut for guarded video editing, source-backed planning, FFmpeg operations, media analysis, subtitles, audio workflows, Hyperframes or Revideo rendering, repurposing packages, and release checkpoints through an MCP server, Python client, or CLI. Trigger when an agent needs to inspect, plan, edit, render, validate, or package local media safely.
Its SKILL.md is about 5.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).
It sits in Media & Creative, covering Video production, Motion graphics and MCP servers. It works with Model Context Protocol, HeyGen, Python and FFmpeg. The repository describes itself as: Guardrailed video editing MCP server for AI agents. FFmpeg, Hyperframes, repurposing tools, Python client, and CLI. Local, fast, free. The licence is Apache-2.0.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 09ee220. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
uvxpipFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uvx and pip, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Kinocut loads about 5.7k tokens when it runs. Until then it costs about 90 tokens; SKILL.md has 2,607 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from KyaniteLabs/kinocut at commit 09ee220, republished under its Apache-2.0 licence (© KyaniteLabs). 2,607 words, ~5,718 tokens.
.claude/skills/kinocut/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Use Kinocut when an agent needs a structured video-editing surface instead of hand-writing FFmpeg commands. It exposes MCP tools, a Python client, and a CLI for editing, analysis, subtitles, audio, Hyperframes, layered compositing, and local repurposing workflows.
Published 1.16.1 and the matching development checkout have 203 MCP tools / 177 CLI commands; inspect the installed schemas before using development additions.
Desktop-local execution is available; native Android/iOS clients and a complete
browser processing application remain unimplemented. Recommended service/client
work is described in docs/PLATFORM_PARITY.md.
kino doctor then kino --format json info <file>.search_tools with the user's task (for example, "remove filler words" or "keep face in frame"), then inspect the returned tool's required inputs. Plan with video_intent for supported intents (optional goal= compiles a cutfile; a 360/desk/table/x4 goal also proposes a 360_assembly_plan). Check that the proposal actually satisfies the request before rendering.video_cutfile_render, video_edit, workflow, or a single engine tool). For 360: video_review_decide approve/reject on that plan, then render — never render a proposed plan. .insv is rejected; need a stitched 360 MP4. Guide: docs/360_ASSEMBLY.md.video-quality-check / assert_quality. Sync repurpose and shorts-package fail-closed at score 80 unless skipped/allow_fail.Depth (rescue, salvage, composite, Hyperframes, thin sound S12): docs/TOOLS.md, docs/RESCUE.md, docs/WORKFLOWS.md. Workflow allowlist: probe, trim, resize, convert, crop, add_text, merge, composite_layers, burn_in.
Load the relevant guide when needed. Use source evidence for editorial choices; preserve names, numbers, negation, and qualifications. Report missing evidence or unsupported actions instead of inventing source claims, timestamps, or capabilities. A planning tool proposes an edit; its existence does not mean the required detector or model has run. Code owns timing, transforms, validation, and execution; human review remains separate from model judgment.
Use revideo_materialize, revideo_install, and revideo_render when the
caller needs an inspectable staged project. Use revideo_render_job for the
same guarded steps in one call. A supplied scene is trusted executable
TypeScript: inspect it before use and never run untrusted scene code. Dependency
installation may access npm; rendering runs locally against Kinocut's pinned
template. The render receipt binds observed media and output bytes to the exact
bounded on-disk job-file digest. .mp4, .webm, and .mov select pinned MP4,
WebM, and ProRes 4444 exporter modes and are verified before publication. Verify the receipt against the output bytes, run video_quality_check
and video_release_checkpoint, then require human visual review.
../../README.md for install and the safety contract.kino doctor before FFmpeg / Hyperframes / AI extras.uvx --from kinocut kino.composite-layers --dry-run, batch jobs, and CI-friendly JSON output.Use when the source is a stitched equirect 360 MP4 from any camera (Insta360, Ricoh Theta, GoPro MAX, DJI Osmo 360, …) and the ask is two virtual cameras as split / switch / PiP / single.
video_intent(verb="reformat_vertical", goal="desk 360 split 9:16", source=ABS_PATH) or Client.propose_360_assembly(...).video_review_decide / Client.decide_360_assembly with approve or reject.Client.render_360_assembly or video_review_decide + output_path).There is no video_360_* MCP tool and no kino 360 command. In published 1.16.1, kino intent reformat_vertical --goal "desk 360 split 9:16" --source PATH
also proposes a nested sphere_plan. Save that plan as its own JSON artifact;
after actual human review, kino review-decide PLAN.json accept --output OUTPUT
approves and renders it. reject never renders; changed source identity blocks
rendering. Director hooks accept an injected JSON proposer; a configured model
name alone does not execute a model. Cloud proposals require allow_cloud;
directors never write pixels.
video_mix_audio, CLI mix-audio --sounds JSON, and
Client.mix_audio use one AAC encode and copy the picture. Gains can clip;
listen before delivery. CLI duck-audio joins existing video_duck_audio and
Client.duck_audio; neither provides governed audio-bed receipts or automatic
delivery loudness normalization.trim --accurate; convert --two-pass --target-bitrate KBPS
(MP4/MOV); fade --crf; and add-audio --mix --duration-policy loop_audio
map to shared controls. Mixed pad_audio remains unsupported.
normalize-audio --lufs --lra --true-peak-dbtp --fade-seconds exposes loudness
and boundary-fade controls; verify the resulting soundtrack and delivery spec.hls-segment joins video_hls_segment/Client.hls_segment for local
packaging; it does not publish or host a stream.video_estimate_operation, CLI estimate, and
Client.estimate_operation return local heuristics, dimensionless cost units,
and no billing currency. Do not present them as measured cloud latency/cost.The optional object-matte extra is available in published 1.16.1. Use the existing hyperframes-remove-background / hyperframes_remove_background command. Default model is people. For catalog SKUs, jewelry, bottles, shoes, packaging, or anything that is not a person:
hyperframes_remove_background(info=true) — lists models, no download.pip install "kinocut[object-matte]" then model="birefnet-general".--mask-interval 3 on product video. Optional equipment overlay for leftover turntable/stand/tripod/sweep.composite-layers. Keep every src inside the spec directory.Do not invent video_product_matte; this is not a new MCP tool. Do not fall back to the people model when the object extra is missing. Guide: docs/PRODUCT_MATTE.md. Example: examples/product-matte/.
Use video_rescue_*, rescue-*, or Client.rescue_* when the request is to fix one local
clip while preserving its source, story, and timeline.
Required sequence:
safe_repairs, recommendations, unavailable_repairs, blocked_repairs,
previews, package intents, capabilities, and estimate to the user.safe_repairs; omitting the ID list means all safe IDs in the reviewed plan.Never render directly from an unreviewed plan. Never add recommendation IDs, unavailable
IDs, or blocked IDs to approval. Never use cloud tools, burn rescue captions, rewrite the
source, or treat unavailable as automatic failure. A cancellation or verification failure
must remain unpromoted or quarantined.
Use video_ingest, video_preflight, and video_inspect_temporal (or their flat CLI and
Python equivalents) when generated footage needs evidence before an edit decision. Ingest
first, then address the asset by its returned hash. Never replace that asset id with a host
path or construct an AssetRecord at the public boundary. Temporal inspection returns the
full sampled-frame and motion-strip package, deterministic findings, and explicit unavailable
provider capabilities. Provider absence is expected and must not trigger a download or a
network fallback.
The report also retains chronological motion_coherence measurements, coverage,
gaps and advisory transitions. Review every flagged interval and intended cut, then
watch the complete assembled film. Python Client.record_motion_acceptance(...),
published MCP video_record_motion_acceptance, and CLI record-motion-acceptance
record the separate source/report-bound viewing attestation and dispositions.
CLI accepts either inline --report-json JSON or --report-file PATH (UTF-8 JSON,
bounded for longform producer output). Watched intervals and dispositions also
support --watched-intervals-file and --dispositions-file instead of their
inline JSON flags. File admission uses dedicated producer/evidence-count byte
caps; inline JSON retains its 1 MiB cap and OS argument limits;
incomplete viewing or an unresolved needs_fix cannot grant acceptance. See
docs/QUALITY_EVIDENCE.md. The receipt records a human attestation, not a score
that proves someone watched or approved the film. MCP/CLI nest the hashed receipt
under receipt; attestation_verified_by_system remains false. Require explicit
human inputs; never invent viewing, reviewer identities, dispositions, or approval.
Use video_verdict, video_acceptance_eval, video_body_swap, and video_salvage (or
their flat CLI and Python equivalents) for exact-asset editorial decisions and derivative
recovery. A non-approved verdict may capture agent analysis, but an approved disposition
must bind an active, exact human decision with explicit requirement, role, and artifact
evidence. Acceptance evaluation is derived rather than an approval action, and every
salvage output starts in a fresh non-approved review slot.
Never invent a decision id, pass an unstored approval, or look for a force/override route. Body swap rejects duration mismatch unless the caller chooses an explicit policy. Salvage requires an existing private project, a stored source asset, a bounded recipe policy, and an exact acceptance-spec id.
Acceptance evaluation takes active stored acceptance_spec_id and verdict_ids, never
caller-built evidence objects. Public body swap always takes project_dir first and both
source paths must resolve to active assets in that exact project.
Read docs/AI_VIDEO_REVIEW_AND_SALVAGE.md before operating this workflow. Treat every
derivative as new non-approved work and keep the explicit human visual/audio gate before
publication.
Use the matching video_* MCP tool, flat CLI command, or Client method when the request
needs semantic retrieval, ordinary cleanup edits, subject-aware transforms, restoration,
composition, creative coordination, or remote egress. Pass JSON-compatible evidence and
intent; present the returned plan and diff before any separate render step.
Never invent source descriptions, hide uncertainty, infer approval from a plan, or treat a missing local executor as permission to use a cloud provider. Remote work requires a separate egress manifest and approval. A planner that lacks evidence or capability must abstain.
For video_crop, use upright display-pixel coordinates. Explicit width and height
must be even; percentage crops derive even encoded dimensions while preserving
pixel offsets. video_fade measures the bounded primary-picture window, including
delayed starts; a longer audio tail does not define the visible fade window.
Use composite-layers / video_composite_layers when the edit is an ordered stack of image, video, or solid layers, especially lower thirds, picture-in-picture variants, blurback plates, masks/mattes, or platform-specific layout variants.
Prefer this path over raw FFmpeg filtergraphs when an agent needs transforms, opacity, start/duration windows, mask/matte alpha sources, or a receipt that can be reviewed before publishing.
Plan-first flow:
canvas, ordered layers, and explicit output.kino composite-layers --spec layers.json --dry-run --save-layer-plan layer-plan.json.video-quality-check, storyboard or thumbnail, and video_release_checkpoint.The compositor supports allowlisted full-canvas and positioned blend modes (multiply, screen, overlay, darken, lighten) with opacity and timing windows; receipts remain layer_plan v2. Non-normal blends support opacity and start/duration windows in two geometries: full-canvas at {0,0} without explicit sizing, or a positioned rectangle with both positive integer width and height and an integral nonnegative in-canvas position. RGB blending avoids applying color arithmetic to subsampled chroma planes. Scale, rotation/pivot, mask/matte, fractional positions and out-of-canvas rectangles remain deferred and fail closed with unsupported_blend_geometry. Video layers and video masks begin playback at their declared start. Keep all sources and masks inside the spec directory. Output is video-only; anchor is a position alias distinct from pivot. Rotation + mask, audio compositing and full NLE adapters remain deferred. Inspect the receipt before human review; do not treat this as a full NLE replacement.
When the edit is a multi-step job (not a single tool call), use the workflow engine to plan, validate, render, recover, and prove it from one JSON job-spec — through video_workflow_* (MCP), workflow-* (CLI), or Client.workflow_* (Python). Ops are a small allowlist (probe | trim | resize | convert | crop | add_text | merge | composite_layers | burn_in) bound to vetted engines; media references are symbolic (@sources.*, @work/*, @outputs.*) and workspace-confined; everything fails closed. See ../../docs/WORKFLOWS.md.
Plan → validate → render → inspect → resume:
workflow-validate --spec job.json — cheap structural gate; renders nothing.workflow-plan --spec job.json --save-plan plan.json — dry-run op graph + source probes/hashes; renders zero media.workflow-render --spec job.json --save-receipt receipt.json — execute sequentially; emit a provenance receipt (per-step hashes, cleanup manifest, determinism caveat). Add --all-variants for batch variants.workflow-inspect --receipt receipt.json — read-only integrity re-check + human-review pointers before trusting a receipt.workflow-render --spec job.json --resume receipt.json — resume a job that failed with intermediates kept (fail-closed on a changed spec).Receipts store workspace-relative paths only — keep specs and example receipts free of home paths, usernames, and tokens.
kino info <file> or the MCP/Python equivalent.preview for quick visual review.repurpose-plan before repurpose.inspect, snapshot, or still before full render.shorts-plan-show → shorts-review → shorts-render → shorts-package.sound-capabilities then sound-plan-validate / sound-voice-batch / sound-mix-render / sound-qa-loudness / sound-qa-asr (or kino sound <action>).docs/SOUND_INPUT_VALIDATION.md for field-specific compatibility rules.docs/SOUND_ASR_REQUESTS.md.SoundLoudnessRequest plus project root and inspect within_tolerance; successful measurement can be noncompliant. FFmpeg is required, and the no-input fixture is labelled as a demo. See docs/SOUND_LOUDNESS_REQUESTS.md.SoundMasterRequest and explicit root to sound-master-render; see docs/SOUND_MASTER_REQUESTS.md. Inspect the verified ZIP, actual normalization mode and measured final policy compliance, then listen before release. Input channels are preserved; existing output is never replaced.SoundDubRequest and explicit project root to sound-voice-batch; see docs/SOUND_DUB_REQUESTS.md. V2 adds explicit close_mic_dry or off_screen_distance profiles (docs/SOUND_SPEECH_SPATIAL.md); inspect processed cue hashes and use the retained mix manifest. This optional eSpeak NG path does not translate, clone voices or apply mastering; legacy plan mode remains a labelled synthetic demo.sound_mix_render, or use sound-mix-render --request-json request.json --project-root .. Verify the ZIP receipt and decoded media; assembly is not loudness mastering or human listening acceptance. See docs/SOUND_MIX_REQUESTS.md for format, filesystem, cancellation and resource limits.docs/SOUND_ROUTING_REQUESTS.md. V2/V3 support envelopes, sends and final bus sidechains (docs/SOUND_AUTOMATION_REQUESTS.md, docs/SOUND_SEND_REQUESTS.md, docs/SOUND_SIDECHAIN_REQUESTS.md). Inspect graph hashes, independent source-window evidence and the separate measured sidechain summaries. Send cycles and unsupported parameters/effects are rejected.docs/SOUND_LAYER_REQUESTS.md. Layer ducking uses a pre-send/fader detector; final bus sidechains use fixed post-send/fader detectors. Inspect both completed releases and truncated recovery, with each effect's hash and measured summary. Bed ducking affects only the separate bed. Scene schedules remain unsupported. Listen to seams and gain recovery before acceptance.source_resampling.profile: soxr_vhq_pcm16_guarded_v1; see docs/SOUND_RATE_CONVERSION.md. It normalizes clips, bed and layers before trimming/routing and preserves original source identities. Same-rate copies need no backend; rate changes require FFmpeg/libsoxr with no fallback. Verify conversion hashes and all source-window evidence. Channel conversion, other sample formats and dither remain unsupported.source_windows in the receipt. A ducked bed adds to existing ambience clips.video-quality-checkstoryboard or thumbnailvideo_release_checkpoint through MCP or Client.release_checkpoint() through Pythonkino doctor
kino --format json 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
# subtitles accept .srt, .vtt, or authored .ass; SRT/VTT render dimension-aware.
# Add --style "FontSize=24,PrimaryColour=&H00FFFFFF&" to override force_style;
# omit --style to preserve an authored .ass file's PlayRes, styles, and positions.
kino resize clip.mp4 --aspect-ratio 9:16
kino composite-layers --spec layers.json --dry-run --save-layer-plan layer-plan.json
kino composite-layers --spec layers.json -o composite.mp4 --save-layer-plan layer-plan.json
kino video-quality-check clip.mp4
kino repurpose-plan clip.mp4 --platforms youtube-shorts instagram-reel tiktok
kino repurpose clip.mp4 --platforms youtube-shorts instagram-reel tiktok
# Saved-plan stream shorts (after a plan exists under PLAN_DIR):
kino shorts-plan-show PLAN_DIR --format json
kino shorts-review PLAN_DIR --candidate-id candidate_01 --decision approve
kino shorts-render PLAN_DIR --candidate-id candidate_01
kino shorts-package PLAN_DIR --candidate-id candidate_01
# Thin sound public join (local-first; not full-episode completion):
kino --format json sound-capabilities
kino --format json sound plan-validate
kino --format json sound-voice-batch
kino --format json sound-qa-loudnessfrom kinocut import Client
video = Client()
plan = video.composite_layers(
"layers.json",
output="composite.mp4",
save_layer_plan="layer-plan.json",
dry_run=True,
){
"mcpServers": {
"kinocut": {
"command": "uvx",
"args": ["--from", "kinocut", "kino"]
}
}
}composite-layers/video_composite_layers for ordered layer stacks instead of hand-written filtergraphs.© KyaniteLabs, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/kinocut of KyaniteLabs/kinocut.
Open the folder on GitHubat commit 09ee220
Kinocut next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Kinocut this skillKyaniteLabs/kinocut | 198 | — | ~5.7k | Automated safety check: Pass | Apache-2.0 | |
| Cassette Video EditCassette-Editor/oh-my-cassette | 119 | 1 repos | ~3.4k | Automated safety check: Pass | MIT | |
| OpenStoryline Install HelperFireRedTeam/FireRed-OpenStoryline | 3.5k | — | ~1.5k | Automated safety check: Notes | Apache-2.0 | |
| ShowtimeFavioVazquez/showtime | 220 | — | ~3k | Automated safety check: Pass | MIT | |
| Content To Videoarchitectds/modeldock | 117 | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Cassette ModelCassette-Editor/oh-my-cassette | 119 | 1 repos | ~374 | Automated safety check: Pass | MIT |
Cassette-Editor/oh-my-cassette
Edit, trim, cut, caption, subtitle, reframe, combine, add background music to, or export video, audio, and image files through Cassette.
FireRedTeam/FireRed-OpenStoryline
Installs, repairs and starts a local source checkout of FireRed-OpenStoryline, from prerequisites and a venv to resources, config and the MCP and web servers.
FavioVazquez/showtime
A skill your agent uses when the user wants a video made, edited or finished: a launch or promo, product demo, explainer, trailer or teaser, tutorial or walkthrough, a screen recording turned into a…
architectds/modeldock
Turn arbitrary source content (README, article, story, slides, deck, data/report, product description, tutorial text, audio/transcript, or a bare topic) into a finished, high-quality MP4 video.
Cassette-Editor/oh-my-cassette
Show or change the Cassette editing model and thinking level for the current media session.
Cassette-Editor/oh-my-cassette
Add Hermes gateway media ingestion, background notification, and delivery behavior to the canonical cassette-video-edit MCP workflow.
KyaniteLabs/kinocut
Use the current Kinocut tools to turn one local video path into a short platform-ready clip package with manifests, review artifacts, and human approval gates.
Works with
Categories
Use Kinocut for guarded video editing, source-backed planning, FFmpeg operations, media analysis, subtitles, audio workflows, Hyperframes or Revideo rendering, repurposing packages, and release…. Kinocut is an agent skill from KyaniteLabs/kinocut. Use Kinocut for guarded video editing, source-backed planning, FFmpeg operations, media analysis, subtitles, audio workflows, Hyperframes or Revideo rendering, repurposing packages, and release checkpoints through an MCP server, Python client, or CLI.
Kinocut fits situations like: an agent needs to inspect; package local media safely.
Run `npx skills add KyaniteLabs/kinocut --skill kinocut -a claude-code`. Or copy the skill folder (skills/kinocut in KyaniteLabs/kinocut) into .claude/skills/kinocut in your project. Claude Code loads it when a task matches its description.
Run `npx skills add KyaniteLabs/kinocut --skill kinocut -a codex`. Or copy the skill folder (skills/kinocut in KyaniteLabs/kinocut) into .agents/skills/kinocut in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add KyaniteLabs/kinocut --skill kinocut -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/kinocut, .gemini/skills/kinocut, .github/skills/kinocut and .opencode/skills/kinocut in your project.
Going by SKILL.md and its folder, Kinocut needs the command-line tools its instructions call (uvx and pip). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use uvx and pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Kinocut is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.7k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Kinocut: Cassette Video Edit (Cassette-Editor/oh-my-cassette, 119 stars), OpenStoryline Install Helper (FireRedTeam/FireRed-OpenStoryline, 3.5k stars), Showtime (FavioVazquez/showtime, 220 stars) and Content To Video (architectds/modeldock, 117 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
KyaniteLabs (a GitHub organization) maintains it in KyaniteLabs/kinocut, which has 198 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 9, 2026.
Source: KyaniteLabs/kinocut on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.