Skip to content

About

Open-source, local-first podcast clipper. Multi-agent curation (Finder → Critic → Ranker) on your laptop. MIT.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

Azelia Clips

Open-source, local-first podcast clipper powered by Claude. Your video, your transcripts, your clips — never leave your machine.

License Python Status


What it does

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.


Why this exists

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.


Why the rewrite?

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.


Install

One-line install (macOS / Linux)

curl -fsSL https://raw.githubusercontent.com/anju2246/azelia-clips/main/install.sh | bash

Installs into ~/.azelia/. Sets up Python venv, installs all deps (including Whisper + face tracking + diarization), adds azelia to your PATH.

From source

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.


Run

azelia start

Opens 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.


Podcast folder layout

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 exactly video.mp4; otherwise it picks the first .mp4 it 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.


What runs locally vs. through the LLM

  • 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.


Self-update

When a new version ships, you'll see an Update now button in Settings → Workspace. Click it and:

  1. The server pulls the latest code from GitHub
  2. Reinstalls Python + JS dependencies
  3. Restarts itself cleanly
  4. The dashboard reconnects automatically

Your clips, transcripts, settings and SQLite DBs live in ~/.azelia/data/ — outside the install folder — so updates never touch them.


Status

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.


Project structure

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.


License

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.


Contributing

See CONTRIBUTING.md. Contributors sign the CLA. Security issues: see SECURITY.md.


Azelia Clips — local-first clips for podcasters who own their stack.

About

Open-source, local-first podcast clipper. Multi-agent curation (Finder → Critic → Ranker) on your laptop. MIT.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages