Video editing CLI for AI agents. Load multi-camera footage, search transcripts, compose timelines, route audio, and extract clips with FFmpeg.
Project description
moviestar
Video editing CLI for AI agents. Give your coding agent the ability to edit video.
Your agent loads one or many videos, fuzzy-searches the transcript, composes a timeline across multiple cameras, routes which source's audio plays, and renders with FFmpeg — or extracts any number of standalone clips in one pass. All output is structured JSON. Source files are never modified — edits are described in a declarative spec and applied at render time.
Quick start
Make sure FFmpeg is on PATH (brew install ffmpeg on Mac), create a Python 3.10+ venv, then paste this into Claude Code, Cursor, or any coding agent:
Create a Python 3.10+ virtual environment, then:
pip install moviestar
moviestar --help
Read the --help output — it's your operational briefing.
Then load the video at ~/Downloads/podcast.mp4. Find the moment where
the host says "the bottom line, here's what I think." Trim to just
that sentence with --snap-to-words so the cuts don't land mid-word.
Export the result to ~/Desktop/clip.mp4 and tell me how long it is.
The agent will work through load → find → trim → export, returning structured JSON at every step. No GUI, no timeline, no manual scrubbing.
For a multi-camera recording, the agent can load cam1.mp4 cam2.mp4 screenshare.mp4, concat ranges from each into one timeline, pick whose mic plays with --audio-from, and export the synced result.
What's in v0.2
Browse:
moviestar load— index one or more videos, transcribe with local Whisper.--as <name>names sources;--addappends to an existing project.moviestar skim— fast browse: thumbnails + transcript over a range (--text-onlyfor transcript alone).moviestar inspect— dense thumbnails on demand at a configurable interval.moviestar watch— extract an MP4 segment for multimodal model analysis.moviestar status— current project state at a glance.moviestar history— step-by-step edit lineage for a source.
Edit (multi-source):
moviestar trim— append a trim to a source's edit spec (result-time semantics; stacks compose).moviestar cut— remove a range from the middle of a source's result.moviestar concat— stitch ranges from one or more sources into a single composition.--audio-from <source>routes which source's audio plays across the cut.moviestar undo— pop the last operation (or the last concat).moviestar spec— show the current spec (or--editto replace,--resetto clear).moviestar find— fuzzy-search the transcript across every source;--contextreturns the surrounding timestamped segments.
Every source-specific command takes --source <id>, required only when a project has more than one source.
Output:
moviestar export— render the composition (or a single source's edit) to MP4,moviestar-clips/export.mp4by default.moviestar clip— extract one standalone clip to its own MP4 (source-time, leaves the edit spec untouched).moviestar batch— extract many standalone clips from a JSON recipe in one atomic, frame-exact pass.moviestar clean— preview or delete generated media artifacts.moviestar screenshot— single frame at a timecode (project-aware:--atis in result-time).
Always-available:
moviestar probe— ffprobe metadata as JSON.--dry-runon every expensive command (load,inspect,watch,export,clip,batch,concat,spec --edit).
Run moviestar --help for the full command list.
Why moviestar
Video editing tools are built for humans with GUIs. Agents don't have hands on a timeline or eyes on a canvas. moviestar is the hands; the agent is the brain.
- Verbose by default. Every command returns rich structured JSON — agents can discard what they don't need, but can't invent data the CLI didn't provide.
- Deterministic. Same input + same parameters = same output. No randomness, no hidden model calls.
- Result-time semantics. A second trim narrows the current result, not the original source.
findmatches resolve to both source-time and result-time so screenshots and exports compose cleanly. - Multi-source native. Load many cameras into one workspace, compose a timeline across them, and route audio per-composition — the same structured CLI the single-source flow uses.
- Non-destructive. Source files are never modified.
Full design and product principles in the project docs.
Requirements
- Python 3.10+
- FFmpeg on
PATH(brew install ffmpeg/apt install ffmpeg)
The package weighs ~210MB on install — faster-whisper ships local transcription out of the box (no API keys, no cloud round-trip). Diarization is opt-in: pip install moviestar[diarize].
Status
v0.2 — multi-source editing, multicam audio routing, and clip extraction. Load one camera or many, compose a timeline across them, route audio, and extract standalone clips. The roadmap of what's next lives with the project.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file moviestar-0.2.1.tar.gz.
File metadata
- Download URL: moviestar-0.2.1.tar.gz
- Upload date:
- Size: 195.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bcbd3dee656b01573e56cfe1518a442189f9ef2bd76469ef459ba20d1c6419e0
|
|
| MD5 |
1e39af31f20a5a15affb60b9d16f064d
|
|
| BLAKE2b-256 |
b5e8f6124f197b2678cf2b939c3ed6c1e24278ee2cdc089024cd7d1492ad56a7
|
Provenance
The following attestation bundles were made for moviestar-0.2.1.tar.gz:
Publisher:
publish.yml on jdilla1277/moviestar
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
moviestar-0.2.1.tar.gz -
Subject digest:
bcbd3dee656b01573e56cfe1518a442189f9ef2bd76469ef459ba20d1c6419e0 - Sigstore transparency entry: 1823356147
- Sigstore integration time:
-
Permalink:
jdilla1277/moviestar@8fa78c5fa74d7f6830c2cb8f859d6da8d74b22ba -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/jdilla1277
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8fa78c5fa74d7f6830c2cb8f859d6da8d74b22ba -
Trigger Event:
release
-
Statement type:
File details
Details for the file moviestar-0.2.1-py3-none-any.whl.
File metadata
- Download URL: moviestar-0.2.1-py3-none-any.whl
- Upload date:
- Size: 92.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c75c696fa38a166817a49c8cb0c53d33a0214a3d2828f6830078e40b99d2f7b5
|
|
| MD5 |
206f4399ed653a432c32c4afc21d8677
|
|
| BLAKE2b-256 |
b2cf7c5002405693e8d02697e65b5384232678f92834a8083f3813383df48392
|
Provenance
The following attestation bundles were made for moviestar-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on jdilla1277/moviestar
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
moviestar-0.2.1-py3-none-any.whl -
Subject digest:
c75c696fa38a166817a49c8cb0c53d33a0214a3d2828f6830078e40b99d2f7b5 - Sigstore transparency entry: 1823356161
- Sigstore integration time:
-
Permalink:
jdilla1277/moviestar@8fa78c5fa74d7f6830c2cb8f859d6da8d74b22ba -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/jdilla1277
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8fa78c5fa74d7f6830c2cb8f859d6da8d74b22ba -
Trigger Event:
release
-
Statement type: