Repository navigation
Releases
v0.7.0 — Backup adapter
Added
bin/backup.sh [raws-dir]— pushes raws to any rclone-supported backend (Google Drive, S3, plain paths, etc.) viaVIDEO_BACKUP_REMOTE. Non-fatal when unset or rclone isn't installed. No backend credentials touch this repo — rclone's own config holds those.video backupsubcommand.
Corrected
- docs/ROADMAP.md's Opus Clip note was stale ("if/when a public API exists") — a public API now exists (developer.opus.pro v2). It still needs an operator API-key decision before it can be built.
Seventh release — see .pHive/epics/backup-adapter/ for design/story detail.
🤖 Generated with Claude Code
v0.6.0 — Local dashboard
Added
bin/dashboard.py— a stdlib-only (http.server) local web view of work/ and clips/: an index of every slug, a per-slug detail page (review, suggested clips, thumbnail), and path-traversal-guarded media serving. Binds to 127.0.0.1 only, no authentication — a local dev convenience tool.video dashboard [port]subcommand.
Known gaps (tracked in docs/ROADMAP.md)
review.mdrenders as escaped plain text, not rendered Markdown (v1 simplification, no new dependency introduced for it).
Sixth and final release of this autonomous plan→execute→ship run — see .pHive/epics/dashboard/ for design/story detail.
🤖 Generated with Claude Code
v0.5.0 — Thumbnail generator
Added
bin/thumbnail.py— extracts VIDEO_THUMBNAIL_COUNT candidate frames via ffmpeg (always, free, local), and optionally asks the judge provider to pick the best "hook frame" via a new optionalpick_frame(image_paths, prompt) -> intprovider capability.bin/lib/providers/gemini.pyandmock.pyboth implementpick_frame; picking degrades gracefully (frames stay, exit 0) on a missing key, unsupported provider, or any error.video thumbnailsubcommand.
Known gaps (tracked in docs/ROADMAP.md as 🚧)
- The real Gemini frame-pick is unverified end-to-end (no key in this environment) — extraction and the mock-provider pick path are fully verified.
Fifth release in the autonomous Hive plan→execute→ship loop — see .pHive/epics/thumbnail-generator/ for design/story detail.
🤖 Generated with Claude Code
v0.4.0 — Provider abstraction and batch mode
Added
- Provider abstraction —
review.py's Gemini-specific calls moved behindbin/lib/providers/(interface:review(video_path, transcript, prompt) -> str), selected viaVIDEO_JUDGE_PROVIDER(defaultgemini). A network-freemockprovider proves the interface is pluggable and makesreview.pyitself CI-testable. bin/batch.sh [raws-dir]— runs the full pipeline unattended over every raw video in a folder; a failing video doesn't abort the batch, a summary prints at the end.bin/videogainedreframeandbatchsubcommands (fixing a gap wherereframewas never wired in).
Known gaps (tracked in docs/ROADMAP.md)
- Only one real judge provider ships (Gemini) — the abstraction is proven via the mock, not a second real backend.
Fourth release in the autonomous Hive plan→execute→ship loop — see .pHive/epics/batch-provider-abstraction/ for design/story detail.
🤖 Generated with Claude Code
v0.3.0 — Resumability and a smoke-test harness
Added
- Resumability — every stage (
ingest.sh,transcribe.sh,review.py,caption.sh,reframe.sh,clip.sh) skips work whose output already exists;VIDEO_FORCE=1to redo.review.py's skip needs no API key, so a re-run on an already-reviewed slug costs nothing. tests/smoke.sh— an automated smoke-test harness (synthetic ffmpeg-generated sample, never committed) covering ingest/caption/clip/reframe + resumability, now running in CI on every push/PR (.github/workflows/smoke.yml).
Known gaps (tracked in docs/ROADMAP.md as 🚧)
review.pyandtranscribe.sh's real-transcription path are intentionally excluded from automated CI (real paid API call / real whisper binary needed) — still manually verifiable per AGENTS.md's Testing section.caption.sh's burn-in resumability skip is implemented but unverified — same missing-libass gap as burn-in itself.
Third release in the autonomous Hive plan→execute→ship loop — see .pHive/epics/test-harness-resumability/ for design/story detail.
🤖 Generated with Claude Code
v0.2.0 — Config file and reframe
Added
- Optional
.videorc/video.tomlconfig-file fallback for every tool (bin/lib/videoconfig.py) — env vars always win over the config file. bin/reframe.sh— 9:16 and 1:1 center-crop exports of cut clips (VIDEO_REFRAME_ASPECTSto configure).
Known gaps (tracked in docs/ROADMAP.md as 🚧)
- Reframe is a plain center crop — no face/subject-aware centering (would need a real detection-model dependency).
Second release in the autonomous Hive plan→execute→ship loop — see .pHive/epics/reframe-config/ for the design/story detail.
🤖 Generated with Claude Code
v0.1.0 — Transcription, auto-captions, and a real CLI
First tagged release.
Added
bin/transcribe.sh— local Whisper (whisper.cpp by default, or any binary viaVIDEO_WHISPER_BIN) transcript ofingest.sh's extracted audio →transcript.vtt/.txt.review.pynow feeds the transcript (when present) into the Gemini judge prompt for better clip picks.bin/caption.sh—.srtfrom the transcript, plus optional caption burn-in into cut clips (VIDEO_CAPTION_BURN=1).bin/video— one CLI entrypoint wrapping all six stages (pull|ingest|transcribe|review|caption|clip) with--help.
Known gaps (tracked in docs/ROADMAP.md as 🚧)
- Whisper transcription's happy path is implemented but unverified end-to-end (no whisper binary in CI/dev yet).
- Caption burn-in requires an ffmpeg build with
libass; a plainbrew install ffmpegmay not include it.caption.shdetects this and degrades gracefully.
Planned and executed via Hive (/plugin-hive:plan + /plugin-hive:execute) — see .pHive/epics/transcribe-caption-cli/ for the full design discussion and story-level detail.
🤖 Generated with Claude Code