Skip to main content

Shotcut CLI

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.

Prerequisites

  • Python 3.10+
  • lxml (XML manipulation)
  • click (CLI framework)

Optional (for interactive REPL):

  • prompt_toolkit

Optional (for rendering/media probing):

  • ffmpeg / ffprobe
  • melt (MLT CLI)

Install Dependencies

pip install lxml click prompt_toolkit

How to Run

All commands are run from the agent-harness/ directory.

One-shot commands

# Show help
python3 -m cli.shotcut_cli --help

# Create a new project
python3 -m cli.shotcut_cli project new --profile hd1080p30 -o my_project.mlt

# Open a project and show info
python3 -m cli.shotcut_cli --project my_project.mlt project info

# JSON output (for agent consumption)
python3 -m cli.shotcut_cli --json --project my_project.mlt project info

Interactive REPL

python3 -m cli.shotcut_cli repl
python3 -m cli.shotcut_cli repl --project my_project.mlt

Inside the REPL, type help for all available commands.

Command Reference

Project

project new --profile <profile> [-o path]   # Create new project
project open <path>                          # Open .mlt file
project save [path]                          # Save project
project info                                 # Show project details
project profiles                             # List available profiles
project xml                                  # Print raw MLT XML

Available profiles: hd1080p30, hd1080p60, hd1080p24, hd720p30, 4k30, 4k60, sd480p

Timeline

timeline show                                       # Visual timeline overview
timeline tracks                                     # List all tracks
timeline add-track --type <video|audio> [--name N]  # Add track
timeline remove-track <index>                       # Remove track
timeline add-clip <file> --track <n> [--in tc] [--out tc]  # Add clip
timeline remove-clip <track> <clip> [--no-ripple]   # Remove clip
timeline move-clip <track> <clip> --to-track <n>    # Move clip
timeline trim <track> <clip> [--in tc] [--out tc]   # Trim clip
timeline split <track> <clip> --at <tc>             # Split clip
timeline clips <track>                              # List clips on track
timeline add-blank <track> --length <tc>            # Add gap
timeline set-name <track> <name>                    # Rename track
timeline mute <track> [--unmute]                    # Mute/unmute
timeline hide <track> [--unhide]                    # Hide/unhide

Filters

filter list-available [--category video|audio]               # Browse filters
filter info <name>                                           # Filter details + params
filter add <name> [--track n] [--clip n] [--param k=v ...]  # Apply filter
filter remove <index> [--track n] [--clip n]                 # Remove filter
filter set <index> <param> <value> [--track n] [--clip n]   # Set param
filter list [--track n] [--clip n]                           # List active filters

Transitions

transition list-available [--category video|audio]            # Browse transitions
transition info <name>                                        # Transition details + params
transition add <name> --track-a <n> --track-b <n> [--in tc] [--out tc] [--param k=v ...]  # Add transition
transition remove <index>                                     # Remove transition
transition set <index> <param> <value>                        # Set param
transition list                                               # List active transitions

Available transitions: dissolve, wipe-left, wipe-right, wipe-down, wipe-up, bar-horizontal, bar-vertical, diagonal, clock, iris-circle, crossfade

Compositing

composite blend-modes                                 # List available blend modes
composite set-blend <track> <mode>                    # Set track blend mode
composite get-blend <track>                           # Get track blend mode
composite set-opacity <track> <value>                 # Set track opacity (0.0-1.0)
composite pip <track> <clip> [--x X] [--y Y] [--width W] [--height H] [--opacity O]  # Picture-in-picture

Available blend modes: normal, add, multiply, screen, overlay, darken, lighten, colordodge, colorburn, hardlight, softlight, difference, exclusion, hslhue, hslsaturation, hslcolor, hslluminosity, saturate

Media

media probe <file>                                 # Analyze media file
media list                                         # List media in project
media check                                        # Check all files exist
media thumbnail <file> -o <output> [--time tc]     # Extract thumbnail

Export

export presets                                     # List export presets
export preset-info <name>                          # Preset details
export render <output> [--preset name] [--overwrite]  # Render project

Available presets: default, h264-high, h264-fast, h265, webm-vp9, prores, gif, audio-mp3, audio-wav, png-sequence

Session

session status      # Current session state
session undo        # Undo last operation
session redo        # Redo
session save        # Persist session to disk
session list        # List saved sessions

Timecode Formats

The CLI accepts these timecode formats anywhere a time value is expected:

Format Example Meaning
HH:MM:SS.mmm 00:01:30.500 1 minute, 30.5 seconds
HH:MM:SS:FF 00:01:30:15 1 min 30 sec, frame 15
HH:MM:SS 00:01:30 1 minute 30 seconds
SS.mmm 90.5 90.5 seconds
Frame number 2715 Frame 2715

JSON Mode

Add --json before the subcommand for machine-readable output:

python3 -m cli.shotcut_cli --json --project p.mlt timeline clips 1

Running Tests

cd agent-harness
python3 -m pytest cli/tests/test_core.py -v

Example Workflow

# Create a project with two video tracks
python3 -m cli.shotcut_cli project new --profile hd1080p30 -o edit.mlt
python3 -m cli.shotcut_cli --project edit.mlt timeline add-track --type video --name "Main"
python3 -m cli.shotcut_cli --project edit.mlt timeline add-track --type audio --name "Music"

# Add clips (assuming media files exist)
python3 -m cli.shotcut_cli --project edit.mlt timeline add-clip intro.mp4 --track 1 --in 00:00:00.000 --out 00:00:05.000
python3 -m cli.shotcut_cli --project edit.mlt timeline add-clip main.mp4 --track 1 --in 00:00:00.000 --out 00:00:30.000

# Apply a brightness filter to the first clip
python3 -m cli.shotcut_cli --project edit.mlt filter add brightness --track 1 --clip 0 --param level=1.3

# View the timeline
python3 -m cli.shotcut_cli --project edit.mlt timeline show

# Save and render
python3 -m cli.shotcut_cli --project edit.mlt project save
python3 -m cli.shotcut_cli --project edit.mlt export render output.mp4 --preset h264-high --overwrite

Release files for cli-anything-shotcut 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cli-anything-shotcut 1.0.0
File Size Uploaded
cli_anything_shotcut-1.0.0.tar.gz 68.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cli-anything-shotcut 1.0.0
File Interpreter ABI Platform
cli_anything_shotcut-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 144.0 kB

Release files / cli_anything_shotcut-1.0.0.tar.gz

Download URL cli_anything_shotcut-1.0.0.tar.gz
Size 68.2 kB
Tags Source
SHA-256 checksum
How to use checksums
ddcbe6f01d57b6462cfb67714bb1f940b4d20996f0165a8b8112f54762345872
BLAKE2b-256 checksum
How to use checksums
f23e0171d0a1db705e6c22be0dd1ba395b9b0a3b9465f1c87cbd7b5493869367
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / cli_anything_shotcut-1.0.0-py3-none-any.whl

Download URL cli_anything_shotcut-1.0.0-py3-none-any.whl
Size 75.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5be4c32167f08ad14c9cc022fbf1289bd6ce78fff13957979df402eae44d0793
BLAKE2b-256 checksum
How to use checksums
79513056af7f461f68217da6cb1e77484f11cc0249ee3e66749b17e24ea55db5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page