Skip to main content
Glama

Cocut

An open-source video editor where you and an AI agent edit the same timeline.

Cut, trim, layer, caption and mix in the browser while Claude Code, Codex or any MCP client edits the same project. Every change, yours or the agent's, appears live, is labelled with who made it, and can be undone. Motion graphics are generated by a built-in engine and can be split into separately editable layers.

中文说明

Cocut

Why

Agents are good at precise, repetitive, describable edits: "make every caption 52px", "shift everything after the chart by half a second", "add a lower third at 0:10". People are good at taste: what looks right, what feels late. Cocut puts both on one timeline:

  • One source of truth. The edit is a plain project.json. The editor, the cocut CLI and the MCP server all read and write it, atomically and versioned.

  • Live. When the agent changes something, the timeline updates in your browser within a quarter-second. Agent clips are marked orange.

  • Undoable. Every change from anyone is a snapshot. ⌘Z undoes the agent's last step as easily as your own.

Related MCP server: Valmera MCP Server

Features

Editing

  • Video, image, generated, audio and text tracks; any number of each. The first track is drawn on top.

  • Drag media from the bin, or drop files anywhere to import. Move clips, including across tracks, and trim their edges. Split at the playhead, delete, ripple delete, copy and paste. Snapping to clip edges, the playhead and markers.

  • Marquee select: drag across empty space. ⌘A, shift- or cmd-click, ⌥-click selects a clip and everything after it on its track.

  • Batch edit: with many clips selected, the inspector edits them all, showing mixed where values differ. "Make all look like the first", group and ungroup (⌘G), nudge, and find & replace across text.

  • Per-clip fades, opacity, position, scale and speed. Audio gain, fades, ducking under a voice track, and an optional musical ending, where the track lands on a downbeat and ends on a hit.

  • Text clips with size, width, alignment, colour and word-by-word highlight. Drag text directly on the picture.

  • Thumbnails and waveforms on the timeline, markers, zoom, and full keyboard control (? lists the shortcuts).

  • English and 中文 interface.

Generated motion graphics

  • Built-in templates: title, numbers (count-up with a grid of squares), lowerthird and bars. Each is a small JavaScript file in cocut/engine/templates/, so adding one is easy.

  • Split into editable elements. A generated clip can be re-rendered as separate layers: background, graphics, counters and text, each with transparency (VP9 + alpha) on its own track. Its text can come back as native text clips you can retype, restyle and retime.

Agents

  • In the editor: the AI tab sends a request to Claude Code (headless claude -p) or Codex (codex exec). Its commands and replies stream into the chat as it works.

  • From a terminal: any agent can use the cocut CLI; see AGENTS.md.

  • Over MCP: cocut mcp exposes the editor as tools to Claude Code, Codex and other MCP clients.

Export

  • H.264 + AAC MP4 at −14 LUFS, rendered by ffmpeg with exactly the same layout rules as the preview.

Install

Requires Python 3.9+, ffmpeg on your PATH (with libvpx-vp9 for transparent layers) and Chromium for Playwright (motion graphics).

git clone https://github.com/csy2443470971-ui/cocut && cd cocut
pip install -e .            # or: pip install numpy scipy soundfile pillow playwright
python3 -m playwright install chromium
pip install librosa         # optional: musical endings for music clips

Quick start

cocut new my-video --size 1920x1080      # or: python3 -m cocut.demo  (builds a demo project)
cocut serve                              # → http://localhost:8770

Projects live in ./cocut-projects/ by default (set COCUT_WORKSPACE to change it).

Working with agents

Claude Code, inside the editor: open the AI tab, type what you want, and press ⌘↩. Requires the claude CLI.

Claude Code over MCP:

claude mcp add cocut -- python3 -m cocut.cli mcp

Codex over MCP (~/.codex/config.toml):

[mcp_servers.cocut]
command = "python3"
args = ["-m", "cocut.cli", "mcp"]

Any agent with a shell:

cocut show                                         # timeline with clip ids
cocut set size=52 y-=0.03 --kind text --by claude  # batch edit every text clip
cocut gen lowerthird V2 10 --params '{"name": "Ada Lovelace", "role": "Analyst"}'
cocut layers <clip> --text-clips                   # split a generated clip into editable elements
cocut shift 0.5 --range 7: --by codex              # move everything after 7 s
cocut undo

cocut -h lists every command and the selector flags (--ids, --track, --kind, --range, --text, --group, --author).

How it works

 browser editor ──┐                       ┌── cocut CLI  (people, Claude Code, Codex …)
                  ├──►  project.json  ◄───┤
 MCP clients ─────┘   (atomic, versioned) └── server: watches the file → pushes changes to every open editor
                              │
                    export.py → ffmpeg → MP4        engine/ → headless Chromium → generated clips / layers

More detail in docs/architecture.md.

Project format

{
  "meta":   { "name": "demo", "width": 1920, "height": 1080, "fps": 30, "version": 12 },
  "tracks": [ { "id": "T1", "kind": "text", "name": "Text" }, { "id": "V1", "kind": "video", "name": "Video" },
              { "id": "A1", "kind": "audio", "name": "Voice", "role": "voice" } ],
  "clips":  [ { "id": "c1a2b3", "track": "V1", "kind": "mg", "src": "assets/generated/g1/title.mp4",
                "start": 0, "in": 0, "out": 3, "opacity": 1, "fadeIn": 0, "fadeOut": 0, "x": 0, "y": 0, "scale": 1, "by": "human" },
              { "id": "c4d5e6", "track": "T1", "kind": "text", "text": "Hello", "start": 0.3, "dur": 2.4,
                "x": 0.06, "y": 0.86, "w": 0.88, "size": 58, "color": "#ECE6EA", "karaoke": true, "words": [ { "w": "Hello", "t": 0.5 } ], "by": "claude" } ],
  "markers": [ { "t": 3, "label": "Numbers" } ],
  "log":     [ { "at": 1760000000.0, "by": "claude", "what": "set size on 3 clip(s)" } ]
}

Status

Version 0.1. The editing model, the CLI, MCP, layer splitting and export are tested end to end. Still to come:

  • transitions beyond crossfades

  • keyframed properties

  • audio fades drawn on clips

  • multi-user (several people at once)

  • previewing a music ending before you export

Contributions are welcome; see CONTRIBUTING.md.

License

MIT. Any music, footage or fonts you put into a project keep their own licences.

Available Tools

4 tools
assetsC

Media in the project that can be placed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden but discloses nothing: not whether invocation is read-only, what it returns, whether it requires a project context, or what 'can be placed' implies operationally. The phrase 'can be placed' weakly hints these are usable resources, but no concrete behavior is stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short, front-loaded sentence with no filler, which is appropriate size-wise. However, its brevity comes from under-specification rather than from an efficient statement of a complete idea.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool the description is the only source of meaning, yet the agent learns neither the return shape nor what invocation does. With no output schema and no annotations, the fragment leaves the core behavior undefined.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to document; baseline 4 applies. The empty schema is consistent with the description, which also implies no inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The text is a noun fragment ('Media in the project that can be placed') with no verb, so the agent cannot tell whether the tool lists, retrieves, or selects assets. It adds a qualifier beyond the name 'assets' but does not distinguish this tool from siblings help, show, and run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, prerequisite, or alternative is mentioned. There is no indication of how 'assets' relates to 'show' or 'run', so the agent must guess when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

helpC

Every cocut command and the selector flags.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: not whether output is a plain list, formatted usage text, or per-command detail. It is a low-risk read-only style tool, but with zero annotation coverage the absence of any output/behavior statement is a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence fragment with no padding, and the key content is stated immediately. It loses a point only because the fragment lacks a verb, making it terse to the point of grammatical incompleteness rather than efficiently structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and no parameters, the description is the only source of information, and it leaves the return shape and scope of 'every cocut command' unexplained. For a discovery/help entry point that agents rely on to route to the right tool, this is under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema declares zero parameters, so there is nothing for the description to document and the baseline of 4 applies. The mention of 'selector flags' is content of the help output, not an input, so it adds no parameter meaning either way.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The fragment names the resource content ('every cocut command and the selector flags') but supplies no verb, so it is unclear whether the tool lists command names, prints usage text, or returns documentation. 'Selector flags' and 'cocut command' are undefined jargon that the agent cannot resolve from this definition or its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this versus the siblings 'show', 'assets', or 'run'. A help tool is largely self-explanatory, but nothing here confirms that this is the discovery entry point or when an agent should prefer it over just invoking a command directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

runB

Run any cocut command (without the leading 'cocut'), e.g. "text 'Hello' T1 2 3 --y .8", "set size+=4 --track T1", "split 12.5", "gen title V2 0 --params '{"text":"Hi"}'", "layers c1a2b3 --text-clips", "undo". See help.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYesthe cocut command line, without 'cocut'

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that arbitrary commands are executed, but does not mention side effects, whether commands can modify or destroy project state, permissions required, output format, or error behavior. Examples like 'undo' and 'split' imply mutation but safety context is absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, followed by illustrative examples. The single sentence with examples is efficient, though the inline examples make it slightly denser than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a generic command executor with no output schema, the description explains command formatting and points to `help`. However, it omits return-value behavior, error handling, and safety context, leaving gaps an agent would need to infer or test.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and already describes the single `command` parameter. The description adds meaningful value with concrete examples of command syntax ('text ...', 'set size+=4 ...', 'undo'), clarifying format beyond the schema's minimal description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Run any cocut command'. The examples clarify the scope of commands. It points to the `help` sibling for command help, but does not explicitly differentiate itself from `show` or `assets` beyond the generic execution role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through examples and the note to omit the leading 'cocut'. The 'See `help`' pointer routes agents to a sibling for command help, but there is no explicit guidance on when to use `run` versus `show` or `assets`.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

showA

The timeline: tracks, clip ids and times. Call this first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It only says what data is shown and to call it first; it does not state whether the operation is read-only, whether it requires permissions, or any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short fragments with no wasted words. It front-loads the resource and then adds the ordering instruction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with no parameters, no output schema, and no annotations, the description gives the return contents and usage order. It remains incomplete on behavioral traits such as read-only safety and return format, which leaves gaps for an agent deciding how to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description does not need to compensate for missing parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ('the timeline') and its contents ('tracks, clip ids and times'), so an agent can tell it surfaces timeline data. However, it provides no verb and does not differentiate this tool from siblings such as help, assets, or run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Call this first' gives explicit ordering guidance, indicating this tool should be invoked before others. It does not name alternatives or state when not to use it, but the sequencing context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.1.0
    • First observedassets
    • First observedhelp
    • First observedrun
    • First observedshow

TDQS

B3.3/5.0

Scored across 4 tools

Disambiguation4/5

Each tool has a distinct primary role: help for command discovery, show for timeline state, assets for media inventory, and run for executing commands. The broad run tool could theoretically duplicate show/assets/help, but the descriptions frame those as dedicated convenience tools, leaving only minor boundary ambiguity.

Naming Consistency4/5

All four names are single lowercase tokens, so casing and style are consistent and readable. They do not follow an action-object verb_noun pattern, mixing noun-like (help, assets) and verb-like (show, run) names, but this is a minor deviation for a CLI wrapper.

Tool Count5/5

Four tools is well-scoped for a CLI-style wrapper: three small helpers plus one universal command executor. No tool feels redundant, and the count avoids bloating the surface with one tool per command.

Completeness5/5

Because run can execute any cocut command, the surface provides a universal escape hatch for timeline edits, generation, layering, splitting, and undo. help exposes command syntax, while show and assets cover timeline and media inspection, leaving no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers