Open-source, local-first podcast clipper powered by Claude. Your video, your transcripts, your clips — never leave your machine.
Takes a podcast episode (60–120 min) → outputs ready-to-post vertical clips with subtitles.
podcast.mp4 ──► ./clips/approved/clip_01.mp4
./clips/approved/clip_02.mp4
./clips/review/clip_03.mp4
...
Each clip is 30–90 s, vertical 9:16, with animated subtitles burned in.
Pipeline: Whisper (transcription) → Claude multi-agent curation (Finder → Critic → Ranker) → MTCNN face tracking (reframe) → ASS subtitles.
Azelia Clips runs entirely on your machine:
- Your videos never leave your laptop
- You bring your own LLM access — either Claude Code (uses your existing Claude subscription, no key) or an Anthropic API key
- MIT-licensed: fork it, rebrand it, ship your own product
- Self-update from the dashboard with one click; your data is preserved
The trade: you need a machine that can run Whisper (Apple Silicon or NVIDIA GPU recommended for speed) and you cover your own LLM access. In exchange you keep full control of your pipeline and your content.
If you scroll the commit history before May 2026 you'll see references to Supabase auth, telemetry, a Pro tier, and a Commons Clause license. That history is real — Azelia started as a hosted SaaS.
After shipping the pipeline and using it on my own podcast, I realized the people who would benefit most from a tool like this — podcasters with guests under NDA, indie creators who own their stack, anyone serious about their content — don't want to upload their audio to anyone. Including me.
So v0.1.0 is a deliberate rewrite: no central backend, no telemetry, no Pro tier, MIT license. Each install is an island. The git history is intentionally preserved as a record of that pivot. The v0.0.x-legacy tag marks the last commit before the rewrite.
curl -fsSL https://raw.githubusercontent.com/anju2246/azelia-clips/main/install.sh | bashInstalls into ~/.azelia/. Sets up Python venv, installs all deps (including Whisper + face tracking + diarization), adds azelia to your PATH.
git clone https://github.com/anju2246/azelia-clips.git
cd azelia-clips
python3 -m venv venv
source venv/bin/activate
pip install -e ".[all]"
cd web && npm install && npm run build && cd ..Requires Python 3.11+, Node 18+, FFmpeg, and (for diarization) a HuggingFace token.
azelia startOpens http://localhost:8000 in your browser. The first launch builds the dashboard (~1 min).
Onboarding: paste your Anthropic API key (or have Claude Code installed locally), then pick the folder where your podcast episodes live. That's it.
During onboarding (or in Settings → Workspace) you pick a folder that contains your episodes. Azelia expects each episode in its own subfolder, prefixed with EPNNN -, with a video file inside:
~/Podcasts/ ← whatever folder you pick
├── EP001 - First Episode Title/
│ └── video.mp4
├── EP002 - Another Episode/
│ └── video.mp4
└── EP003 - …/
└── video.mp4
Rules the scanner uses:
- Subfolder name must start with
EPNNN -(e.g.EP001 -,EP042 -). The number is the episode ID Azelia uses across runs. - The subfolder must contain a
.mp4. It prefers a file named exactlyvideo.mp4; otherwise it picks the first.mp4it finds. - Generated clips render next to the source, in
EP001 - …/clips/approved/clip_NN.mp4— never inside the install folder.
If you just want to try Azelia on a one-off file without organising a library, use the Upload tab in the dashboard — it accepts any .mp4/.mov/.mkv and renders into ~/.azelia/data/jobs/.
A more flexible layout (any folder, no
EPNNN -prefix) is on the roadmap for v0.1.1.
- Transcription: local Whisper (MLX on Apple Silicon, faster-whisper on Linux/CUDA). Nothing leaves your machine.
- Diarization: local ECAPA-TDNN by default; Pyannote 3.1 as opt-in if you set
HF_TOKEN. - Face tracking + reframe + subtitle burn: local FFmpeg.
- Multi-agent curation (Finder → Critic → Ranker → Captions): runs through the LLM you configured — Claude Code (uses your subscription, no key) or Anthropic API (your key). That's the only network hop, and you choose the provider.
v0.1.0 supports Claude Code + Anthropic API. Other providers (Ollama, Groq, OpenAI, Google) are on the v0.2 backlog.
When a new version ships, you'll see an Update now button in Settings → Workspace. Click it and:
- The server pulls the latest code from GitHub
- Reinstalls Python + JS dependencies
- Restarts itself cleanly
- The dashboard reconnects automatically
Your clips, transcripts, settings and SQLite DBs live in ~/.azelia/data/ — outside the install folder — so updates never touch them.
v0.1.0-beta (current): local-first foundation. Full pipeline runs end-to-end on your machine — transcription, multi-agent curation, face tracking, reframe, subtitle burn. Self-update from the dashboard works. Optional YouTube Shorts sync via OAuth pulls your existing analytics for context-aware ranking (tokens stored locally, encrypted).
This is an early beta. Things will break. Open issues freely.
azelia-clips/
├── packages/
│ ├── clips/ # Pipeline
│ │ ├── transcription/ # WhisperX / MLX-Whisper + Pyannote diarization
│ │ ├── curation/ # Finder → Critic → Ranker LLM agents
│ │ ├── vision/ # MTCNN face tracker + reframer
│ │ └── subtitles/ # ASS subtitle generator
│ └── core/ # Config, LLM router, taxonomy
├── server/ # FastAPI: routes, queue, jobs, system updates
├── web/ # Astro + React dashboard
├── scripts/self_update.sh # In-app self-update
└── install.sh # One-line installer (with restart-loop wrapper)
For details see ARCHITECTURE.md.
MIT. Use, modify, redistribute, build a competing product — all allowed.
Trademark on the name "Azelia" and the logo is not covered by MIT. Forks should use a different name.
See CONTRIBUTING.md. Contributors sign the CLA. Security issues: see SECURITY.md.
Azelia Clips — local-first clips for podcasters who own their stack.