Finalist
Addy
Generate podcast-style ad reads from any YouTube video; Addy ingests a transcript, clones the voice, lets claude choose natural ad breaks, writes the ad copy, and voices it with Cartesia TTS.
Core trick
Feeds a YouTube transcript to an LLM that picks ad break points, then voices each ad with a cloned voice via Cartesia TTS.
Description
Generate podcast-style ad reads from any YouTube video; Addy ingests a transcript, clones the voice, lets claude choose natural ad breaks, writes the ad copy, and voices it with Cartesia TTS.
README excerpt
# Addy
Generate podcast-style ad reads from any YouTube video; Addy ingests a transcript, clones the voice, lets claude choose natural ad breaks, writes the ad copy, and voices it with Cartesia TTS.
## Features
- Transcript to ads in one command: run `addy` and get finished MP3s in your output folder.
- Dual LLM support: Claude (agentic placement with Exa research) or Gemini for placement/copy.
- Voice cloning ready: uses a Cartesia voice ID; optional emotion + speed controls per ad.
- Multi-sponsor aware: loads sponsors from config, places each at most once, skips if no good fit.
- XML-safe prompting/parsing with fallbacks to handle messy model output.
## Requirements
- Python deps: `uv sync` installs everything.
- System: `ffmpeg` (brew install ffmpeg).
- Env: create `.env` (see `sample.env` if present) with `ANTHROPIC_API_KEY`, `CARTESIA_API_KEY`, `GOOGLE_API_KEY`, optional `EXA_API_KEY`.
- Gemini model: shell `GEMINI_MODEL`, then `GEMINI_MODEL` in `~/.env`, then the legacy `gemini-3.5-flash` default.
## Quickstart
```bash
uv sync
source .venv/bin/activate
addy
```
## Configuration (`dwarkesh.json` example)
```json
{
"video": "https://www.youtube.com/watch?v=BYXbuik3dgA",
"output": "output",
"model": "gemini", // "claude" or "gemini"
"voice": "<cartesia-voice-id>",
"sponsors": [
{"id": "acme", "title": "Acme", "content": "Short ad blurb", "tags": ["tag1", "tag2"]}
]
}
```
- `video`: full YouTube URL or 11-char ID.
- `output`: directory for gener