- Python 98%
- Shell 2%
- Implement centralized cross-platform path resolver and binary detection - Add asymmetric Ed25519 licensing system with HWID node-locking - Add native desktop window shell with pywebview and PyInstaller spec - Revamp dashboard UI with Obsidian & Amber theme and 3-step workflow stepper - Remove legacy Plan Z references and introduce customizable brand rules Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|---|---|---|
| assets | ||
| bin | ||
| brand | ||
| config | ||
| keys | ||
| lib | ||
| resources | ||
| shots | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| build_dist.py | ||
| ClipByClick.desktop | ||
| clipbyclick.spec | ||
| desktop.py | ||
| Dockerfile.build_windows | ||
| PACKAGING_PROMPT.md | ||
| README.md | ||
| requirements.txt | ||
| run_app | ||
| run_finish | ||
| run_intake | ||
ClipsByClicks (Plan Z)
Raw long-form footage in, reviewed short clips out. Built for Plan Z — a Persian "real-life school" for Iranian Gen Z — turning weekly recordings into titled, captioned, thumbnailed vertical shorts.
Pipeline
| Step | Script | In → Out |
|---|---|---|
| 1 Listen | bin/01_listen.py |
work/<week>/raw/ → transcript.json (whisper, stable seg_ids) |
| 2 Pick | bin/02_pick.py |
transcript.json → candidates.json (LLM sees seg_id+text only, never timestamps) |
| 3 Review | dashboard (bin/dashboard.py) |
tap yes/no per candidate → decisions.json + approved.json |
| 4 Cut | bin/04_cut.py |
approved.json → roughcuts/<week>/<id>.mp4 (uncropped, source aspect) |
| 5 Label | bin/05_label.py |
approved clip → labels/<week>/<id>/copy.json + thumb.jpg |
Every LLM string passes a deterministic brand gate (lib/brandcheck.py,
parsed live from brand/planz-brand.md) with one repair retry — violations
are dropped, never guessed. Steps are idempotent: re-runs skip finished
work via checksums and output validation.
Quickstart
cp .env.example .env # add API keys
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
./run_intake 2026-W39 # transcribe + pick, then review in the browser
python bin/dashboard.py # http://127.0.0.1:8420 (loopback only)
./run_finish 2026-W39 # cut roughcuts + labels for approved picks
Needs on the machine: ffmpeg, whisper.cpp binary + model (paths in
config/settings.yaml), and the OPENCODE_GO_API_KEY (or GEMINI_API_KEY)
the configured provider uses. Gemini traffic goes through the proxy in
config/settings.yaml (gemini.proxy).
Layout
bin/ 01_listen, 02_pick, dashboard, 04_cut, 05_label, run_intake/finish
lib/ clips (ffmpeg), llm (JSON client), brandcheck, thumbnail, progress
config/ settings.yaml — paths, models, render + thumbnail grade
brand/ planz-brand.md — voice, NEVER-SAY list, citable facts
assets/ bundled Vazirmatn font for thumbnails
shots/ dashboard screenshots
work/ roughcuts/ labels/ per-week outputs (git-ignored)
copy.json holds the finished title, caption, ≤8 hashtags, and thumbnail
headline — per platform ceilings enforced in code. Thumbnails render from
the source frame with a fixed grade, so the same clip always yields the
same pixels.