moviestar 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,95 @@
1
+ Metadata-Version: 2.4
2
+ Name: moviestar
3
+ Version: 0.1.0
4
+ Summary: Video editing CLI for AI agents. Load videos, fuzzy-search transcripts, trim, and export with FFmpeg.
5
+ Author: James Dillard
6
+ License: BSL-1.1
7
+ Keywords: video,ffmpeg,ai,agents,cli,transcript,whisper,editing
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Environment :: Console
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Topic :: Multimedia :: Video
12
+ Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Requires-Python: >=3.10
17
+ Description-Content-Type: text/markdown
18
+ Requires-Dist: click>=8.0
19
+ Requires-Dist: faster-whisper>=1.0
20
+ Requires-Dist: rapidfuzz>=3.0
21
+ Provides-Extra: diarize
22
+ Requires-Dist: pyannote.audio>=3.0; extra == "diarize"
23
+
24
+ # moviestar
25
+
26
+ **Video editing CLI for AI agents.** Give your coding agent the ability to edit video.
27
+
28
+ Your agent loads a video, fuzzy-searches the transcript, trims to result-time ranges, snaps cuts to word boundaries, and renders with FFmpeg. All output is structured JSON. Source files are never modified — edits are described in a declarative spec and applied at render time.
29
+
30
+ ## Quick start
31
+
32
+ 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:
33
+
34
+ ```
35
+ Create a Python 3.10+ virtual environment, then:
36
+
37
+ pip install moviestar
38
+ moviestar --help
39
+
40
+ Read the --help output — it's your operational briefing.
41
+
42
+ Then load the video at ~/Downloads/podcast.mp4. Find the moment where
43
+ the host says "the bottom line, here's what I think." Trim to just
44
+ that sentence with --snap-to-words so the cuts don't land mid-word.
45
+ Export the result to ~/Desktop/clip.mp4 and tell me how long it is.
46
+ ```
47
+
48
+ The agent will work through `load → find → trim → export`, returning structured JSON at every step. No GUI, no timeline, no manual scrubbing.
49
+
50
+ ## What's in v0.1
51
+
52
+ **Browse:**
53
+ - `moviestar load` — index a video, transcribe with local Whisper.
54
+ - `moviestar skim` — fast browse: thumbnails + transcript over a range.
55
+ - `moviestar inspect` — dense thumbnails on demand at a configurable interval.
56
+ - `moviestar watch` — extract an MP4 segment for multimodal model analysis.
57
+ - `moviestar status` — current project state at a glance.
58
+
59
+ **Edit:**
60
+ - `moviestar trim` — append a trim to the edit spec (result-time semantics; stacks compose).
61
+ - `moviestar undo` — pop the last operation.
62
+ - `moviestar spec` — show the current spec (or `--edit` to replace).
63
+ - `moviestar find` — fuzzy-search the transcript for a phrase.
64
+
65
+ **Output:**
66
+ - `moviestar export` — render the spec's effective timeline to MP4.
67
+ - `moviestar screenshot` — single frame at a timecode (project-aware: `--at` is in result-time).
68
+
69
+ **Always-available:**
70
+ - `moviestar probe` — ffprobe metadata as JSON.
71
+ - `--dry-run` on every expensive command (`load`, `inspect`, `watch`, `export`, `spec --edit`).
72
+
73
+ Run `moviestar --help` for the full command list.
74
+
75
+ ## Why moviestar
76
+
77
+ 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.
78
+
79
+ - **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.
80
+ - **Deterministic.** Same input + same parameters = same output. No randomness, no hidden model calls.
81
+ - **Result-time semantics.** A second trim narrows the current result, not the original source. `find` matches resolve to both source-time and result-time so screenshots and exports compose cleanly.
82
+ - **Non-destructive.** Source files are never modified.
83
+
84
+ Full design and product principles in the project docs.
85
+
86
+ ## Requirements
87
+
88
+ - **Python 3.10+**
89
+ - **FFmpeg** on `PATH` (`brew install ffmpeg` / `apt install ffmpeg`)
90
+
91
+ 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]`.
92
+
93
+ ## Status
94
+
95
+ v0.1 — first public release. Core loop is working: load → browse → edit → export. The roadmap of what's next lives with the project.
@@ -0,0 +1,72 @@
1
+ # moviestar
2
+
3
+ **Video editing CLI for AI agents.** Give your coding agent the ability to edit video.
4
+
5
+ Your agent loads a video, fuzzy-searches the transcript, trims to result-time ranges, snaps cuts to word boundaries, and renders with FFmpeg. All output is structured JSON. Source files are never modified — edits are described in a declarative spec and applied at render time.
6
+
7
+ ## Quick start
8
+
9
+ 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:
10
+
11
+ ```
12
+ Create a Python 3.10+ virtual environment, then:
13
+
14
+ pip install moviestar
15
+ moviestar --help
16
+
17
+ Read the --help output — it's your operational briefing.
18
+
19
+ Then load the video at ~/Downloads/podcast.mp4. Find the moment where
20
+ the host says "the bottom line, here's what I think." Trim to just
21
+ that sentence with --snap-to-words so the cuts don't land mid-word.
22
+ Export the result to ~/Desktop/clip.mp4 and tell me how long it is.
23
+ ```
24
+
25
+ The agent will work through `load → find → trim → export`, returning structured JSON at every step. No GUI, no timeline, no manual scrubbing.
26
+
27
+ ## What's in v0.1
28
+
29
+ **Browse:**
30
+ - `moviestar load` — index a video, transcribe with local Whisper.
31
+ - `moviestar skim` — fast browse: thumbnails + transcript over a range.
32
+ - `moviestar inspect` — dense thumbnails on demand at a configurable interval.
33
+ - `moviestar watch` — extract an MP4 segment for multimodal model analysis.
34
+ - `moviestar status` — current project state at a glance.
35
+
36
+ **Edit:**
37
+ - `moviestar trim` — append a trim to the edit spec (result-time semantics; stacks compose).
38
+ - `moviestar undo` — pop the last operation.
39
+ - `moviestar spec` — show the current spec (or `--edit` to replace).
40
+ - `moviestar find` — fuzzy-search the transcript for a phrase.
41
+
42
+ **Output:**
43
+ - `moviestar export` — render the spec's effective timeline to MP4.
44
+ - `moviestar screenshot` — single frame at a timecode (project-aware: `--at` is in result-time).
45
+
46
+ **Always-available:**
47
+ - `moviestar probe` — ffprobe metadata as JSON.
48
+ - `--dry-run` on every expensive command (`load`, `inspect`, `watch`, `export`, `spec --edit`).
49
+
50
+ Run `moviestar --help` for the full command list.
51
+
52
+ ## Why moviestar
53
+
54
+ 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.
55
+
56
+ - **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.
57
+ - **Deterministic.** Same input + same parameters = same output. No randomness, no hidden model calls.
58
+ - **Result-time semantics.** A second trim narrows the current result, not the original source. `find` matches resolve to both source-time and result-time so screenshots and exports compose cleanly.
59
+ - **Non-destructive.** Source files are never modified.
60
+
61
+ Full design and product principles in the project docs.
62
+
63
+ ## Requirements
64
+
65
+ - **Python 3.10+**
66
+ - **FFmpeg** on `PATH` (`brew install ffmpeg` / `apt install ffmpeg`)
67
+
68
+ 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]`.
69
+
70
+ ## Status
71
+
72
+ v0.1 — first public release. Core loop is working: load → browse → edit → export. The roadmap of what's next lives with the project.
@@ -0,0 +1,42 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "moviestar"
7
+ version = "0.1.0"
8
+ description = "Video editing CLI for AI agents. Load videos, fuzzy-search transcripts, trim, and export with FFmpeg."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = {text = "BSL-1.1"}
12
+ authors = [{name = "James Dillard"}]
13
+ keywords = ["video", "ffmpeg", "ai", "agents", "cli", "transcript", "whisper", "editing"]
14
+ classifiers = [
15
+ "Development Status :: 3 - Alpha",
16
+ "Environment :: Console",
17
+ "Intended Audience :: Developers",
18
+ "Topic :: Multimedia :: Video",
19
+ "Topic :: Multimedia :: Sound/Audio :: Speech",
20
+ "Programming Language :: Python :: 3.10",
21
+ "Programming Language :: Python :: 3.11",
22
+ "Programming Language :: Python :: 3.12",
23
+ ]
24
+ dependencies = ["click>=8.0", "faster-whisper>=1.0", "rapidfuzz>=3.0"]
25
+
26
+ [project.optional-dependencies]
27
+ diarize = ["pyannote.audio>=3.0"]
28
+
29
+ [project.scripts]
30
+ moviestar = "moviestar.cli:cli"
31
+
32
+ [tool.setuptools.packages.find]
33
+ where = ["src"]
34
+
35
+ [tool.setuptools.package-data]
36
+ "moviestar.schema" = ["*.json"]
37
+
38
+ [tool.pytest.ini_options]
39
+ testpaths = ["tests"]
40
+ markers = [
41
+ "slow: tests that call real faster-whisper (skipped by default; use --run-slow to include).",
42
+ ]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,15 @@
1
+ """moviestar — video editing CLI for AI agents.
2
+
3
+ The version string is read from the installed package metadata so
4
+ ``pyproject.toml`` is the single source of truth (no drift between
5
+ ``__version__`` and the published version on PyPI). Falls back to a
6
+ sentinel only if the package isn't installed (e.g., running directly
7
+ from a checkout without `pip install -e`).
8
+ """
9
+
10
+ from importlib.metadata import PackageNotFoundError, version
11
+
12
+ try:
13
+ __version__ = version("moviestar")
14
+ except PackageNotFoundError: # pragma: no cover — only hit in non-installed checkouts
15
+ __version__ = "0.0.0+unknown"