--- name: "cli-anything-shotcut" description: >- Command-line interface for Shotcut - A stateful command-line interface for video editing, built on the MLT XML format. Designed for AI ag... --- # cli-anything-shotcut A stateful command-line interface for video editing, built on the MLT XML format. Designed for AI agents and power users who need to create and edit Shotcut projects without a GUI. ## Installation This CLI is installed as part of the cli-anything-shotcut package: ```bash pip install cli-anything-shotcut ``` **Prerequisites:** - Python 3.10+ - `melt` (MLT CLI) — required for rendering and playback - `ffmpeg` / `ffprobe` — required for media probing - `shotcut` must be installed on your system ## Usage ### Basic Commands ```bash # Show help cli-anything-shotcut --help # Start interactive REPL mode cli-anything-shotcut # Create a new project cli-anything-shotcut project new -o project.json # Run with JSON output (for agent consumption) cli-anything-shotcut --json project info -p project.json ``` ### REPL Mode When invoked without a subcommand, the CLI enters an interactive REPL session with undo/redo support: ```bash cli-anything-shotcut # or with a project: cli-anything-shotcut --project my_project.mlt ``` #### REPL Commands **Workflow:** Always `media import` first to get a `clip_id`, then use `add-clip` to place it on the timeline. **Project & Session:** - `new [profile]` — Create new project (default: `hd1080p30`) - `open ` — Open `.mlt` file - `save [path]` — Save project - `info` — Show project info - `xml` — Print raw MLT XML - `status` — Show session status - `undo` / `redo` — Navigate operation history **Media (two-step model):** - `media import [--caption name]` — Import file into project bin, returns `clip_id` (e.g., `clip0`) - `media` — List all imported media - `probe ` — Analyze a media file **Timeline:** - `add-track [name]` — Add a track - `tracks` — List all tracks - `show` — Visual timeline overview - `add-clip [in] [out] [--at time]` — Place imported clip on track - `clips ` — List clips on a track - `remove-clip ` — Remove a clip - `trim [--in tc] [--out tc]` — Trim clip - `split ` — Split clip at timecode **Filters:** - `list-filters [video|audio]` — Browse available filters - `filter-info ` — Show filter details - `add-filter [--track n] [--clip n] [key=val ...]` — Add filter to clip, track, or global - `filters [--track n] [--clip n]` — List active filters - `remove-filter [--track n] [--clip n]` — Remove filter by index - `set-filter [--track n] [--clip n]` — Set filter parameter - `volume-envelope [--track n] [--clip n] TIME=LEVEL ...` — Keyframed volume (e.g., `00:00:00.000=1.0 00:00:03.000=0.35`) - `duck [--track n] [--clip n] START..END ...` — Ducking envelope (e.g., `00:00:06.000..00:00:09.000`) **Export:** - `presets` — List export presets - `render [--preset name]` — Render to video file ## Command Groups ### Project Project management: new, open, save, info. | Command | Description | |---------|-------------| | `new` | Create a new blank project | | `open` | Open an existing .mlt project file | | `save` | Save the current project | | `info` | Show detailed project information | | `profiles` | List available video profiles | | `xml` | Print the raw MLT XML of the current project | ### Timeline Timeline operations: tracks, clips, trimming. | Command | Description | |---------|-------------| | `show` | Show the timeline overview | | `tracks` | List all tracks | | `add-track` | Add a new track to the timeline | | `remove-track` | Remove a track by index | | `add-clip` | Add an imported clip to a track by clip_id; supports `--at` for absolute placement | | `remove-clip` | Remove a clip from a track | | `move-clip` | Move a clip between tracks or positions | | `trim` | Trim a clip's in/out points | | `split` | Split a clip into two at the given timecode | | `clips` | List all clips on a track | | `add-blank` | Add a blank gap to a track | | `set-name` | Set a track's display name | | `mute` | Mute or unmute a track | | `hide` | Hide or unhide a video track | ### Filter Group Filter operations: add, remove, configure effects. | Command | Description | |---------|-------------| | `list-available` | List all available filters | | `info` | Show detailed info about a filter and its parameters | | `add` | Add a filter to a clip, track, or globally | | `remove` | Remove a filter by index | | `set` | Set a parameter on a filter | | `list` | List active filters on a target | | `volume-envelope` | Create or replace a keyframed volume envelope on a track or clip | | `duck` | Build a practical ducking envelope over one or more time windows | ### Media Media operations: probe, list, check files. | Command | Description | |---------|-------------| | `import` | Import a media file into the project bin | | `probe` | Analyze a media file's properties | | `list` | List all media clips in the current project | | `check` | Check all media files for existence | | `thumbnail` | Generate a thumbnail from a video file | ### Export Export/render operations. | Command | Description | |---------|-------------| | `presets` | List available export presets | | `preset-info` | Show details of an export preset | | `render` | Render the project to a video file | ### Transition Group Transition operations: dissolve, wipe, and other transitions. | Command | Description | |---------|-------------| | `list-available` | List all available transition types | | `info` | Show detailed info about a transition type | | `add` | Add a transition between two tracks | | `remove` | Remove a transition by index | | `set` | Set a parameter on a transition | | `list` | List all transitions on the timeline | ### Composite Group Compositing: blend modes, PIP, opacity. | Command | Description | |---------|-------------| | `blend-modes` | List all available blend modes | | `set-blend` | Set the blend mode for a track | | `get-blend` | Get the current blend mode for a track | | `set-opacity` | Set the opacity of a track (0.0-1.0) | | `pip` | Set picture-in-picture position for a clip | ### Session Session management: status, undo, redo. | Command | Description | |---------|-------------| | `status` | Show current session status | | `undo` | Undo the last operation | | `redo` | Redo the last undone operation | | `save` | Save session state to disk | | `list` | List all saved sessions | ### Preview Preview bundles and live preview sessions for iterative editing review. | Command | Description | |---------|-------------| | `preview recipes` | List preview recipes | | `preview capture` | Render a low-res preview bundle | | `preview latest` | Return the latest existing bundle | | `preview live start` | Start a live preview session and publish the first bundle | | `preview live push` | Publish a new bundle into the live session | | `preview live status` | Query current live-session state without rendering | | `preview live stop` | Stop the live session without deleting artifacts | Typical `quick` bundle contents: - `preview.mp4` - several sampled frames - midpoint `hero.png` - `summary.json` with project facts Poll mode is supported: ```bash cli-anything-shotcut --json --project edit.mlt preview live start --recipe quick --mode poll --source-poll-ms 500 ``` `preview live status --json` includes session refs and a compact `trajectory_summary` so agents can cheaply understand the latest few publishes. Viewer commands: ```bash cli-hub previews inspect /path/to/bundle-or-session cli-hub previews html /path/to/bundle-or-session -o page.html cli-hub previews watch /path/to/session --open cli-hub previews open /path/to/bundle-or-session ``` ## Examples ### Create a New Project Create a new shotcut project file. ```bash cli-anything-shotcut project new -o myproject.json # Or with JSON output for programmatic use cli-anything-shotcut --json project new -o myproject.json ``` ### Interactive REPL Session Start an interactive session with undo/redo support. ```bash cli-anything-shotcut # Enter commands interactively # Use 'help' to see available commands # Use 'undo' and 'redo' for history navigation ``` ### Export Project Export the project to a final output format. ```bash cli-anything-shotcut --project myproject.json export render output.mp4 --overwrite ``` ### Deterministic Timeline Reconstruction For rebuilds, prefer absolute placement over append-only clip insertion: ```bash cli-anything-shotcut --project myproject.mlt media import intro.mp4 cli-anything-shotcut --project myproject.mlt timeline add-clip clip0 \ --track 1 --in 00:00:00.000 --out 00:00:04.000 --at 00:00:00.000 cli-anything-shotcut --project myproject.mlt media import broll.mp4 cli-anything-shotcut --project myproject.mlt timeline add-clip clip1 \ --track 1 --in 00:00:10.000 --out 00:00:16.000 --at 00:00:08.000 ``` - `--at` inserts blanks automatically when the target time lands in empty space. - The CLI rejects overlap with an existing clip. - Prefer explicit `--in` and `--out` values so later absolute placement remains unambiguous. ### Audio Automation ```bash cli-anything-shotcut --project myproject.mlt filter volume-envelope \ --track 2 \ --point 00:00:00.000=1.0 \ --point 00:00:03.000=0.35 \ --point 00:00:05.000=1.0 cli-anything-shotcut --project myproject.mlt filter duck \ --track 2 \ --window 00:00:06.000..00:00:09.000 \ --window 00:00:15.000..00:00:18.000 \ --normal 1.0 --duck 0.25 ``` The CLI maintains session state with: - **Undo/Redo**: Up to 50 levels of history - **Project persistence**: Save/load project state as JSON - **Session tracking**: Track modifications and changes ## Output Formats All commands support dual output modes: - **Human-readable** (default): Tables, colors, formatted text - **Machine-readable** (`--json` flag): Structured JSON for agent consumption ```bash # Human output cli-anything-shotcut project info -p project.json # JSON output for agents cli-anything-shotcut --json project info -p project.json ``` ## For AI Agents When using this CLI programmatically: 1. **Always use `--json` flag** for parseable output 2. **Check return codes** - 0 for success, non-zero for errors 3. **Parse stderr** for error messages on failure 4. **Use absolute paths** for all file operations 5. **Verify outputs exist** after export operations 6. **Prefer `timeline add-clip --at`** when recreating a known edit 7. **Review final renders** after keyframed volume or ducking changes 8. **Use `preview capture` or `preview live ...` to validate pacing, cuts, and filter effects visually** 9. **Read returned artifact paths** such as `hero.png` and `preview.mp4`; JSON payloads reference files on disk 10. **Use `preview live status --json` before reading the full `trajectory.json`** 11. **Use `cli-hub previews ...` only to inspect/open existing bundles or live sessions** ## More Information - Full documentation: See README.md in the package - Test coverage: See TEST.md in the package - Methodology: See HARNESS.md in the cli-anything-plugin ## Version 1.0.0