CLI-Anything cli-anything-shotcut
git clone https://github.com/HKUDS/CLI-Anything
T=$(mktemp -d) && git clone --depth=1 https://github.com/HKUDS/CLI-Anything "$T" && mkdir -p ~/.claude/skills && cp -r "$T/shotcut/agent-harness/cli_anything/shotcut/skills" ~/.claude/skills/hkuds-cli-anything-cli-anything-shotcut && rm -rf "$T"
shotcut/agent-harness/cli_anything/shotcut/skills/SKILL.mdcli-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:
pip install cli-anything-shotcut
Prerequisites:
- Python 3.10+
(MLT CLI) — required for rendering and playbackmelt
/ffmpeg
— required for media probingffprobe
must be installed on your systemshotcut
Usage
Basic Commands
# 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:
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:
— Create new project (default:new [profile]
)hd1080p30
— Openopen <path>
file.mlt
— Save projectsave [path]
— Show project infoinfo
— Print raw MLT XMLxml
— Show session statusstatus
/undo
— Navigate operation historyredo
Media (two-step model):
— Import file into project bin, returnsmedia import <file> [--caption name]
(e.g.,clip_id
)clip0
— List all imported mediamedia
— Analyze a media fileprobe <file>
Timeline:
— Add a trackadd-track <video|audio> [name]
— List all trackstracks
— Visual timeline overviewshow
— Place imported clip on trackadd-clip <clip_id> <track> [in] [out] [--at time]
— List clips on a trackclips <track>
— Remove a clipremove-clip <track> <clip>
— Trim cliptrim <track> <clip> [--in tc] [--out tc]
— Split clip at timecodesplit <track> <clip> <at>
Filters:
— Browse available filterslist-filters [video|audio]
— Show filter detailsfilter-info <name>
— Add filter to clip, track, or globaladd-filter <name> [--track n] [--clip n] [key=val ...]
— List active filtersfilters [--track n] [--clip n]
— Remove filter by indexremove-filter <idx> [--track n] [--clip n]
— Set filter parameterset-filter <idx> <param> <value> [--track n] [--clip n]
— Keyframed volume (e.g.,volume-envelope [--track n] [--clip n] TIME=LEVEL ...
)00:00:00.000=1.0 00:00:03.000=0.35
— Ducking envelope (e.g.,duck [--track n] [--clip n] START..END ...
)00:00:06.000..00:00:09.000
Export:
— List export presetspresets
— Render to video filerender <output> [--preset name]
Command Groups
Project
Project management: new, open, save, info.
| Command | Description |
|---|---|
| Create a new blank project |
| Open an existing .mlt project file |
| Save the current project |
| Show detailed project information |
| List available video profiles |
| Print the raw MLT XML of the current project |
Timeline
Timeline operations: tracks, clips, trimming.
| Command | Description |
|---|---|
| Show the timeline overview |
| List all tracks |
| Add a new track to the timeline |
| Remove a track by index |
| Add an imported clip to a track by clip_id; supports for absolute placement |
| Remove a clip from a track |
| Move a clip between tracks or positions |
| Trim a clip's in/out points |
| Split a clip into two at the given timecode |
| List all clips on a track |
| Add a blank gap to a track |
| Set a track's display name |
| Mute or unmute a track |
| Hide or unhide a video track |
Filter Group
Filter operations: add, remove, configure effects.
| Command | Description |
|---|---|
| List all available filters |
| Show detailed info about a filter and its parameters |
| Add a filter to a clip, track, or globally |
| Remove a filter by index |
| Set a parameter on a filter |
| List active filters on a target |
| Create or replace a keyframed volume envelope on a track or clip |
| Build a practical ducking envelope over one or more time windows |
Media
Media operations: probe, list, check files.
| Command | Description |
|---|---|
| Import a media file into the project bin |
| Analyze a media file's properties |
| List all media clips in the current project |
| Check all media files for existence |
| Generate a thumbnail from a video file |
Export
Export/render operations.
| Command | Description |
|---|---|
| List available export presets |
| Show details of an export preset |
| Render the project to a video file |
Transition Group
Transition operations: dissolve, wipe, and other transitions.
| Command | Description |
|---|---|
| List all available transition types |
| Show detailed info about a transition type |
| Add a transition between two tracks |
| Remove a transition by index |
| Set a parameter on a transition |
| List all transitions on the timeline |
Composite Group
Compositing: blend modes, PIP, opacity.
| Command | Description |
|---|---|
| List all available blend modes |
| Set the blend mode for a track |
| Get the current blend mode for a track |
| Set the opacity of a track (0.0-1.0) |
| Set picture-in-picture position for a clip |
Session
Session management: status, undo, redo.
| Command | Description |
|---|---|
| Show current session status |
| Undo the last operation |
| Redo the last undone operation |
| Save session state to disk |
| List all saved sessions |
Examples
Create a New Project
Create a new shotcut project file.
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.
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.
cli-anything-shotcut --project myproject.json export render output.mp4 --overwrite
Deterministic Timeline Reconstruction
For rebuilds, prefer absolute placement over append-only clip insertion:
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
inserts blanks automatically when the target time lands in empty space.--at- The CLI rejects overlap with an existing clip.
- Prefer explicit
and--in
values so later absolute placement remains unambiguous.--out
Audio Automation
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 (
flag): Structured JSON for agent consumption--json
# 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:
- Always use
flag for parseable output--json - Check return codes - 0 for success, non-zero for errors
- Parse stderr for error messages on failure
- Use absolute paths for all file operations
- Verify outputs exist after export operations
- Prefer
when recreating a known edittimeline add-clip --at - Review final renders after keyframed volume or ducking changes
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