尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
Local-first podcast clipping app: drop in a podcast and generate faithful vertical clips.
翻译准备中
正在加载完整 README。
查看完整 README ↗A local-first podcast clipping studio with full-transcript ranking, face-aware reframing, and word-accurate captions. Built entirely in Rust.
Clipping Factory turns a podcast MP4 into a set of strong, distinct vertical clips. Every result is one continuous excerpt with word-timed captions and clean, face-aware framing.
The goal is simple: find clips worth posting without rewriting the speaker, inventing context, or hiding weak edits behind effects.
No account. No cloud upload. No required AI model. The built-in ranker scans the full transcript, and a deterministic validator rejects clips that depend on missing context or overlap stronger ones.
| More useful candidates | Keeps every strong, distinct candidate instead of stopping at an arbitrary quota. |
| Faithful excerpts | Never rewrites, reorders, splices, or invents speech. |
| Feed-ready video | Produces 9:16 H.264/AAC MP4s at the source's native window size, up to 1080×1920. |
| Word-accurate captions | The highlighted word is the one being spoken, timed from whisper.cpp's DTW alignment. Impact, Clean, Pop, and Cinema styles with per-clip restyling in seconds. |
| Clip controls | Opt-in per clip: auto-cut silence/filler, zoom cuts on emphasis beats, hook title, progress bar. |
| Export pack | Every clip ships with .srt, .vtt, .meta.json (title/description/hashtags), and a poster still. |
| Honest ranking | Composite score and selection reason on every clip, plus what was rejected and why. |
| ~99 languages | Whisper transcription auto-detects the language, or you pick it per project. |
| Private by default | Keeps video, audio, transcripts, project state, and rendering on your machine. |
Drop MP4 → Inspect → Extract audio → Transcribe → Find candidates
→ Validate → Review candidates → Analyze framing → Render → Preview and download
The first supported setup is macOS on Apple Silicon.
# Media and transcription runtimes
brew install ffmpeg-full whisper-cpp
# Rust toolchain — skip this if Rust is already installed
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Download the base transcription model once (multilingual)
mkdir -p ~/.clipping-factory/models
curl -L -o ~/.clipping-factory/models/ggml-base.bin \
"https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.bin"
# Run from the repository root
cargo run --release
The studio opens at http://localhost:4571. Drop in one MP4, pick the caption style, accent color, framing, language, and clip length, then click Make clips. Nothing is uploaded or transcribed until you do. The optional Focus field steers selection toward a topic ("clips about pricing", "where they argue"): it reaches the configured provider as an editorial directive, and under local ranking it falls back to keyword matching. Left blank, selection stays the generic best-clips ranking.
With Review candidates before rendering on (the default), the run pauses after validation: each accepted candidate lists its headline, range, score, selection reason, and the exact transcript words it would cover — press Play to watch the range straight from the source. Drop the weak ones and Render kept frames and renders only those; Render all skips the decision and renders everything. Keyboard: ↑/↓ between cards, Space previews, D drops, K brings back, Enter renders. Sort by score or time. The review survives refresh and restarts — the server stores it.
Later, on any finished, failed, or cancelled project, Render more reopens the list: rendered candidates are marked, and any unrendered one — including a candidate you dropped earlier — can be rendered without redoing the work.
Install FFmpeg through your package manager and build whisper.cpp:
cmake -B build
cmake --build build -j --target whisper-cli
Set CF_WHISPER_BIN to the resulting whisper-cli path if it is not already on your PATH.
ggml-base is the fast default and covers ~99 languages. For English podcasts, ggml-small.en.bin gives noticeably cleaner transcripts at about 2.4× the transcription time. Models are found in ~/.clipping-factory/models/, ./models/, and ~/.cache/whisper.cpp/; the largest one wins, and English-only weights (ggml-*.en.bin, up to medium.en) win over multilingual ones of any size. A project that needs another language switches to the best multilingual model found. CF_WHISPER_MODEL overrides discovery.
Language is chosen per project at upload: Auto-detect is the default, or pick a specific language to skip detection. Non-English sources need a multilingual model.
Local ranking is the default and needs no API key. The studio's AI connection control is marked Coming soon while model-assisted selection is finished; the providers below are wired in the backend but not yet offered in the studio.
| Provider | Default model | Notes |
|---|---|---|
| Local ranking | — | Scans the full transcript locally. No key required. |
| Local endpoint | — | Ollama, llama.cpp, or LM Studio. Model-assisted, fully offline. |
| OpenAI | gpt-4o-mini | Accepts another chat-completions model name. |
| Anthropic | claude-opus-5 | Optional alternative provider. |
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗