Agent skill

Cassette Video Edit

by Cassette-Editor in 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.

MITAuto-check passedMedia & Creative

Install Cassette Video Edit

skills CLI
$ npx skills add Cassette-Editor/oh-my-cassette --skill cassette-video-edit -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Cassette-Editor/oh-my-cassette cassette-video-edit --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Cassette-Editor/oh-my-cassette.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/cassette-video-edit .claude/skills/cassette-video-edit && rm -rf skills-src

Use ~/.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/

Facts

Skill name
cassette-video-edit
GitHub stars
119
Used in
1 other repo
Token cost
~3.4k tokens
SKILL.md length
1,708 words
Files
4 (incl. references)
Skills in repo
3
Repo updated
First seen
Licence
MIT

At a glance

Edit, trim, cut, caption, subtitle, reframe, combine, add background music to, or export video, audio, and image files through Cassette.

  • Works in 6 steps: Call cassette_ingest_media once per… → Call cassette_list_assets and confirm… → Before the first edit, call… → …
  • The user asks to change
  • SKILL.md covers Courier doctrine, Safety and identity, The editing loop and Routing on typed state, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Cassette Video Edit is an agent skill from 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 this skill whenever the user asks to change, preview, or render a media file in the project — even if they never say "Cassette" or name a tool — for example "trim the intro off demo.mp4", "add subtitles to this clip", "make me a 30-second cut with music", "why is there dead air at the start". Drives the local Oh My Cassette stdio MCP tools in Codex or Claude as one…

Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/auth.md`, `references/music.md` and `references/previews.md`).

It sits in Media & Creative, covering Transcription, MCP servers and Video production. It works with Model Context Protocol, FFmpeg and Python. The repository describes itself as: 你的随身 AI 剪辑搭档 | Pocket AI co-editor for video montage — AI video editing plugin & MCP server for Claude Code, Codex, Hermes & OpenCode. The licence is MIT.

When your agent uses it

  • The user asks to change
  • Render a media file in the project — even if they never say Cassette
  • Name a tool — for example trim the intro off demo.mp4
  • Add subtitles to this clip

Example prompts

  • “Cassette”
  • “trim the intro off demo.mp4”
  • “add subtitles to this clip”
  • “/cassette-video-edit”

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Call cassette_ingest_media once per source asset. Omit session_id on the first call so the
  2. Call cassette_list_assets and confirm the intended files are present.
  3. Before the first edit, call cassette_config(session_id). If its source is default, present
  4. For each editing request, call cassette_run_job with the user's verbatim message and the same
  5. Relay what comes back (see routing below), then wait for the user's next instruction.
  6. Pass export=true only on a turn where the user expresses finish or export intent.

What it can do on your machine

Read from SKILL.md and the folder at commit 4bebe25. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Cassette Video Edit loads about 3.4k tokens when it runs, and up to ~5.3k if it reads all its reference files. Until then it costs about 167 tokens; SKILL.md has 1,708 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~167
When it runs · the whole SKILL.md, loaded when a task matches
~3.4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~5.3k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from Cassette-Editor/oh-my-cassette at commit 4bebe25, republished under its MIT licence (© Cassette-Editor). 1,708 words, ~3,360 tokens.

Download SKILL.mdSave it as .claude/skills/cassette-video-edit/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
cassette-video-edit
description
Edit, trim, cut, caption, subtitle, reframe, combine, add background music to, or export video, audio, and image files through Cassette. Use this skill whenever the user asks to change, preview, or render a media file in the project — even if they never say "Cassette" or name a tool — for example "trim the intro off demo.mp4", "add subtitles to this clip", "make me a 30-second cut with music", "why is there dead air at the start". Drives the local Oh My Cassette stdio MCP tools in Codex or Claude as one multi-turn conversation with the Cassette agent, with per-turn timeline previews, guided questions, and rendering only on explicit export.
version
2.1.0
license
MIT
metadata.tags
cassette, video, codex, claude, hermes, opencode, mcp, media-editing
metadata.category
media

Oh My Cassette local workflow

Cassette edits the media; you carry the messages. The cassette MCP server is a local stdio child process that opens no port and talks directly to the separate Cassette backend. Do not start or depend on the separate FastAPI web-demo server for this workflow — that is a different adapter. This is the canonical workflow for every supported MCP host, including Codex, Claude Code, Hermes, and OpenCode.

Two details live outside this file to keep it short. Read them when they apply:

  • references/auth.md — any auth_* error, or the user is not signed in on this machine.
  • references/music.md — any Jamendo/BGM request or jamendo_* error.
  • references/previews.md — showing a timeline, contact sheet, or storyboard, and the plan-review pause.

Courier doctrine

You are a courier between the user and the Cassette agent, not an editor or a brief writer.

  • Pass the user's editing words to cassette_run_job as message VERBATIM. Never rewrite, optimize, summarize, translate, or expand them. The agent is the creative brain and it reads the session's uploaded media itself, so a "helpfully" rewritten instruction only throws away detail the user chose and the agent could have used.
  • Relay the agent's questions and plans back verbatim too. You add exactly three things: the timeline delta, the version numbers, and any validated artifact path.
  • Do not call cassette_make_prompt. It is a legacy brief builder, kept only so the tool-name set stays stable.
  • Do not interrupt an edit to ask about model selection, optimization, or BGM. A fresh session uses GPT-5.6 Luna with xhigh thinking. Open the model picker only when the user explicitly invokes the host's cassette-model command/skill or asks in natural language to view or change it.

Safety and identity

  • Only files inside the active host project roots or explicitly configured media roots are ingestible. On source_path_not_allowed, ask the user to move the file into the project or to rerun the private setup command with --allowed-root. Do not go hunting for a path that works.
  • Keep the returned session_id and job_id. Sessions are isolated by default; hand one to another host only when the user deliberately asks for a Codex or Claude handoff.
  • Use only paths and resource links returned in artifacts. Never invent an export path or ask the MCP runtime to expose another local file.

The editing loop

One session is one continuous conversation on one persistent agent thread. The agent remembers every previous turn, so a follow-up like "make that title bigger" needs no context restating.

  1. Call cassette_ingest_media once per source asset. Omit session_id on the first call so the runtime generates one, then reuse the returned value everywhere.
  2. Call cassette_list_assets and confirm the intended files are present.
  3. Before the first edit, call cassette_config(session_id). If its source is default, present the returned choices and save the user's selection (including an accepted default).
  4. For each editing request, call cassette_run_job with the user's verbatim message and the same session_id.
  5. Relay what comes back (see routing below), then wait for the user's next instruction.
  6. Pass export=true only on a turn where the user expresses finish or export intent.

If the user explicitly asks for background music, cassette_match_exact_bgm takes a concrete title/artist and jamendo_music_matcher handles a configured mood/genre. Never switch providers automatically. cassette_match_bgm remains available only when the user explicitly asks for the legacy Free To Use provider. Read references/music.md before handling music.

One turn, end to end
User:  trim the dead air off the front of demo.mp4 and add a title card

You:   cassette_run_job(session_id="s_41k",
                        message="trim the dead air off the front of demo.mp4 and add a title card")
       → phase="succeeded"
         timeline_delta="v6→v9: trimmed 3.2s from head; added title card 0.0–2.5s"
         quality.timeline_ctl=<digest>, artifacts=[contact sheet]

       "v6→v9: trimmed 3.2s off the head and added a 2.5s title card. Nothing is rendered
        yet — want to see the contact sheet, or should I export?"

User:  export it

You:   cassette_run_job(session_id="s_41k", message="export it", export=true)
       → phase="review_required"
       cassette_review_completion(job_id="j_88", decision="export",
                                  reason="user asked to export; trim and title card both landed")
       → phase="exported", artifacts=[…/exports/j_88/demo_cut.mp4]

Note what did not happen: no status polling, no rewriting of the user's words, and no rendering until the user asked for it.

Routing on typed state

Treat the structured phase and next_action fields as authoritative. Do not decide routing, progress, or completion from keywords in prose.

cassette_run_job is the wait. It returns when the turn is settled, streaming MCP progress notifications when the host supports them, and answers with a terminal phase. Make exactly one call per user turn, then return control to the user. Never start a second corrective, retry, or "finish the plan" call until the user sends another message.

phasewhat it meanswhat you do
succeedededit committed, nothing renderedrelay data.job.timeline_delta + the digest, continue the conversation
needs_userthe agent asked a questionrelay it, then cassette_answer_question(job_id, response)
review_requiredexport turn awaiting judgementevaluate the result, then in the same assistant turn call cassette_review_completion(job_id, decision, reason) — only decision=export renders
exportedthe render finishedpresent the validated artifacts and their resource links
failed / cancelled / timed_outterminal errorreport the structured error and its runtime-derived next action
running / exportingthe call detached (wait=false) or was interruptedsee recovery below
Where the per-turn data lives

The envelope itself is thin — ok, phase, next_action, session_id, job_id, artifacts, data. Everything describing the turn hangs off data.job:

what you wantwhere it is
what changed this turndata.job.timeline_delta
the agent's plan checkpointsdata.job.plan_progress
the text digest of the timelinedata.job.quality.timeline_ctl
the contact sheet, when one existsdata.job.quality.contact_sheet_uri
measurements of the rendered filedata.job.quality.export_qc (on exported only)
resource links and export pathsartifacts[] — top level, not under data

Reading timeline_delta or quality off the top of the envelope yields nothing at all, which looks exactly like a turn that produced no preview. The digest is there on every settled turn; the contact sheet is best-effort and is simply absent when a sheet could not be built from the current frames, so check before offering to show one.

cassette_timeline answers in its own shape — data.ctl plus data.version, data.clip_count, and data.duration_sec — not under data.job. Same digest, different path from the run envelope.

cassette_review_completion takes reason as a required argument alongside job_id and decision (plus an optional summary) — omitting it fails the call with validation_error before anything renders. Write the judgement you actually made, in one line: it is the record of why this edit was considered finished, and it is the only place that judgement is captured.

On exported, the runtime has already measured the finished file into quality.export_qc (duration, fps, resolution, audio span, black_segments, and audio_levels with mean_dbfs/peak_dbfs). Read those numbers instead of probing the export yourself, and raise them with the user only when a field contradicts what they asked for.

An explicit user export request is already authorization to export. If that export turn returns review_required, inspect the attached timeline and resolve the gate in the same assistant turn. Do not ask the user to confirm export again merely because the Cassette agent's prose says it cannot render or lacks rendering capability: that prose is precisely why the typed supervisor review gate exists. Ask only when the timeline reveals a real defect or the requested result is genuinely ambiguous. Never start a second cassette_run_job to get past this gate.

A thread_busy error means a run is already live on this session's thread, often started from an open editor tab. Wait and retry rather than starting a second job.

On hosts that support MCP elicitation, the runtime may collect a needs_user answer itself and return the already-resumed result. Trust the returned phase and do not answer twice.

Show full SKILL.md (549 more words)Show less
Recovery, not polling

cassette_job_status re-attaches to a job whose call did not return — the host restarted, the call was cancelled, or the turn was deliberately started with wait=false. Call it once, act on the phase it reports, and stop. A settled turn never needs it.

job_id is the durable handle for that recovery: jobs persist private thread and interrupt metadata on disk, so a paused turn resumes after a supported MCP host restarts.

A long edit does not need managing. Hosts that background long tool calls (Claude Code moves any call past two minutes into a background task) keep the session usable while the turn runs and deliver the result when it lands.

Timeline grounding

  • Every user-visible statement about project state comes from cassette_timeline or the envelope's timeline_delta, never from memory. Name the version: "v42→v43: trimmed the intro to 4.0s."
  • Prefer relaying timeline_delta and plan_progress over re-describing the whole timeline.
  • The runtime hands out no editor deep link, and you must not construct or offer one. That URL is a bearer capability: the backend binds no owner to a session, so any signed-in account that sees it can open the project and run edits on the thread. Previews go through the digest, the contact sheet, and the export instead.
  • Route essentially everything through cassette_run_job. cassette_edit is an opt-in fast lane for small named changes (trim, retime, text, delete, undo) that stays disabled unless the operator sets CASSETTE_DIRECT_EDIT=1 — no shipping host config sets it, so assume it is off and reach for it only once a cassette_edit call has actually succeeded in this session or the user says they enabled it. When you do use it, read cassette_timeline first and pass expected_version from that read; a stale_timeline error means re-read and retry.

Model, thinking level, and updates

  • cassette_config(session_id) shows the current choice and the available options; adding model=… / thinking_level=… changes them. It accepts a product id (openai/gpt-5.6-luna) or a label ("GPT-5.6 Luna").
  • The selectable models are GPT-5.6 Luna and GPT-5.4 Mini. Thinking levels are off, minimal, low, medium, high, and xhigh. The default is GPT-5.6 Luna with xhigh thinking. The preference persists for the session and applies from the next turn, the same semantics as switching model between turns in the web editor. Never ask automatically; change it only when the user asks, and confirm in one line.
  • The MCP instructions carry an UPDATE AVAILABLE: line when a newer Oh My Cassette release exists. Mention it once per session with both version numbers and offer the command it names. Run that command only after the user explicitly agrees, and never re-offer in the same session — it replaces the plugin on disk, so tell the user the new version applies after the host reloads (/reload-plugins in Claude Code, a new task in Codex). Never fabricate a version or an update command; if the line is absent, the install is current and the subject does not come up.

Cancellation and handoff

  • Call cassette_cancel_job only when the user asks to stop the edit.
  • For a deliberate host handoff, provide the exact session_id and active job_id; the receiving host should begin with cassette_job_status rather than re-ingesting or starting a duplicate job.
  • Exported files remain under the shared Oh My Cassette data directory. Prefer the returned resource link or file URI over relocating the artifact.

© Cassette-Editor, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (references) in skills/cassette-video-edit of Cassette-Editor/oh-my-cassette.

  • SKILL.md
  • references/auth.md
  • references/music.md
  • references/previews.md

Open the folder on GitHubat commit 4bebe25

Used in 1 other repository

We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in Cassette-Editor/oh-my-cassette, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Cassette Video Edit 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.

Cassette Video Edit compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Cassette Video Edit this skillCassette-Editor/oh-my-cassette1191 repos~3.4kAutomated safety check: PassMIT
KinocutKyaniteLabs/kinocut198—~5.7kAutomated safety check: PassApache-2.0
Kinocut RepurposeKyaniteLabs/kinocut198—~1kAutomated safety check: PassApache-2.0
OpenStoryline Install HelperFireRedTeam/FireRed-OpenStoryline3.5k—~1.5kAutomated safety check: NotesApache-2.0
Blender MCP Videomicky-li-hd/VideoCoCo118—~1.1kAutomated safety check: PassNone
Env Setupwwwzhouhui/skills_collection283—~3.5kAutomated safety check: NotesNone

Similar skills

  • Kinocut

    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…

    198 GitHub stars~5.7k tokensUpdated yesterday
    Media & CreativeAuto-check passed
  • Kinocut Repurpose

    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.

    198 GitHub stars~1k tokensUpdated yesterday
    Media & CreativeAuto-check passed
  • OpenStoryline Install Helper

    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.

    3.5k GitHub stars~1.5k tokensUpdated 2 mo ago
    Media & CreativeAuto-check: notes
  • Blender MCP Video

    micky-li-hd/VideoCoCo

    A skill your agent uses for Blender MCP or Blender CLI video-generation work, especially when rendering scripted Blender scenes, debugging MCP port 9876, checking why blender is not on PATH…

    118 GitHub stars~1.1k tokensUpdated 2 mo ago
    Media & CreativeAuto-check passed
  • Env Setup

    wwwzhouhui/skills_collection

    Checking and provisioning the machine's environment for the video-agent-kit plugin — probing for ffmpeg/ffprobe that actually carry the encoders and filters we render with (libx264/aac/libmp3lame…

    283 GitHub stars~3.5k tokensUpdated 5 days ago
    Media & CreativeAuto-check: notes
  • VectCutAPI Video Editing

    sun-guannan/VectCutAPI

    Drives CapCut or JianYing through an HTTP and MCP API: create drafts, add video, audio, text, subtitles and effects, preview on the web and batch-produce videos.

    2.3k GitHub stars~2.1k tokensUpdated 7 days ago
    Media & CreativeAuto-check passed

More from Cassette-Editor/oh-my-cassette

  • Cassette Model

    Cassette-Editor/oh-my-cassette

    Show or change the Cassette editing model and thinking level for the current media session.

    119 GitHub starsUsed in 1 repo~374 tokens
    Auto-check passed
  • Cassette Gateway Video Edit

    Cassette-Editor/oh-my-cassette

    Add Hermes gateway media ingestion, background notification, and delivery behavior to the canonical cassette-video-edit MCP workflow.

    119 GitHub stars~4k tokensUpdated 5 days ago
    Auto-check passed

Questions about Cassette Video Edit

What does Cassette Video Edit do?

Edit, trim, cut, caption, subtitle, reframe, combine, add background music to, or export video, audio, and image files through Cassette. Cassette Video Edit is an agent skill from 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.

When should I use Cassette Video Edit?

Cassette Video Edit fits situations like: the user asks to change; render a media file in the project — even if they never say Cassette; name a tool — for example trim the intro off demo.mp4; add subtitles to this clip.

How do I install Cassette Video Edit in Claude Code?

Run `npx skills add Cassette-Editor/oh-my-cassette --skill cassette-video-edit -a claude-code`. Or copy the skill folder (skills/cassette-video-edit in Cassette-Editor/oh-my-cassette) into .claude/skills/cassette-video-edit in your project. Claude Code loads it when a task matches its description.

How do I install Cassette Video Edit in Codex?

Run `npx skills add Cassette-Editor/oh-my-cassette --skill cassette-video-edit -a codex`. Or copy the skill folder (skills/cassette-video-edit in Cassette-Editor/oh-my-cassette) into .agents/skills/cassette-video-edit in your project. Codex loads it when a task matches its description.

Can I use Cassette Video Edit in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Cassette-Editor/oh-my-cassette --skill cassette-video-edit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cassette-video-edit, .gemini/skills/cassette-video-edit, .github/skills/cassette-video-edit and .opencode/skills/cassette-video-edit in your project.

What does Cassette Video Edit need to run?

SKILL.md names no scripts, command-line tools or credentials: Cassette Video Edit is instructions for the agent only.

Does Cassette Video Edit access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Cassette Video Edit safe to install?

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.

What licence does Cassette Video Edit use?

Cassette Video Edit is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Cassette Video Edit use?

About 3.4k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.9k tokens, read only when the agent opens those files.

What are the alternatives to Cassette Video Edit?

Skills that share tags, products or a category with Cassette Video Edit: Kinocut (KyaniteLabs/kinocut, 198 stars), Kinocut Repurpose (KyaniteLabs/kinocut, 198 stars), OpenStoryline Install Helper (FireRedTeam/FireRed-OpenStoryline, 3.5k stars) and Blender MCP Video (micky-li-hd/VideoCoCo, 118 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Cassette Video Edit?

Cassette-Editor (a GitHub organization) maintains it in Cassette-Editor/oh-my-cassette, which has 119 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 5, 2026.

Source: Cassette-Editor/oh-my-cassette on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.