Castmagic is a transcript plus a set of prompts. A local app runs Whisper on an audio file, then runs a folder of editable prompt templates over the transcript for show notes, chapters, key quotes, a newsletter draft and social posts, and saves the results next to the recording. That is one sitting with faster-whisper and any language model. What you give up is the studio around it: clip and audiogram rendering with captions, shared team spaces, one-click imports from YouTube, Spotify and Zoom, and an API. The quality of the outputs then depends on prompts you tune yourself.
Build me a local audio-to-content tool to replace Castmagic for my podcast episodes. Requirements:
- Python 3.11 FastAPI backend with a server-rendered UI (Jinja2 + htmx). `./run.sh` serves
http://127.0.0.1:4720. ffmpeg must be on the PATH; exit with a clear message if not.
- Import: drop in an mp3, m4a, wav, mp4 or mov. Copy it to ./data/episodes/<id>/ and extract 16 kHz
mono audio with ffmpeg. No URL imports.
- Transcription: faster-whisper with word timestamps and the VAD filter (model from .env, default
`small`) and a progress bar. Save transcript.json plus .srt and .txt, and show the transcript
next to an audio player: click a word to seek, edit a word to update the files.
- Prompts: a ./prompts/ folder of Markdown templates with a front-matter title, starting with
show-notes.md, chapters.md, key-quotes.md, newsletter.md, linkedin-post.md and x-thread.md.
The UI lists, edits and adds them. Placeholders: {{transcript}}, {{title}}, {{guest}}.
- Generate: run the selected prompts over the transcript against an OpenAI-compatible endpoint
(LLM_BASE_URL, LLM_MODEL, LLM_API_KEY in .env; local Ollama works). Split long transcripts into
chunks of about 6,000 tokens and merge the results. Save each output as
./data/episodes/<id>/outputs/<prompt>.md, keep earlier versions, and print the token count of every run.
- Chat: a box that answers questions about one episode and quotes the timestamp of each passage
it relies on.
- Chapter check: every chapter timestamp must be inside the audio length and in ascending order;
drop or fix the bad ones and say so.
- Export: a ZIP per episode with the transcript (.txt, .srt, .vtt), all outputs and the audio.
- Single user. No accounts, no telemetry, local-first; the only outbound call is the language model
endpoint, and with Ollama the app works offline.
- Out of scope: audiograms and clip rendering, URL and RSS imports, teams, an API.
- README: the models to download, the .env keys, how to write a prompt template.Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Castmagic.
Add feed import to the audio-to-content tool in this folder. Requirements:
- FEED_URL in .env; a command `import-feed` that reads the RSS feed with `feedparser`, lists
episodes not yet imported and downloads the enclosures into ./data/episodes/.
- Store the episode title, date and description as metadata and pass them into the prompt
placeholders {{title}} and {{date}}.
- Skip enclosures larger than 500 MB and say so.
- Update the README with a cron example.Add clip rendering to the audio-to-content tool in this folder. Requirements: - Select a start and end in the transcript view and render an MP4 with ffmpeg: a 1080x1080 background in a color from .env, an animated waveform (showwaves) and the spoken words as burned-in ASS captions timed from the word timestamps. - Cap clips at 90 seconds and show the output path. - Provide the cover image path as an optional setting. - Update the README.
Add a style guide to the audio-to-content tool in this folder. Requirements: - A ./style/ folder where I drop up to ten past posts as Markdown files. - A "Build style guide" button that asks the language model for a one-page description of my voice (sentence length, openings, words I avoid) from those files and saves it as ./style/guide.md, which I can edit. - Prepend the guide to every prompt run and show it in the output header so I can see it was used. - Update the README.
Podcasters and agencies pay to skip prompt tuning: upload an episode, get show notes, chapters, quotes and social drafts in a consistent format, plus clips to post. The subscription buys time saved per episode, and because hours are a library total, heavier users climb the tiers.
Estimate · Transcription runs on your machine. The only running cost is language model tokens, typically cents per episode on a small hosted model and nothing with Ollama. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Hobby | $29 | $19 | 30 transcribed hours (library total), up to 3 spaces, 50 GB storage, 3 seats, standard support, no API. |
| Starter | $69 | $48 | 100 transcribed hours, up to 10 spaces, 250 GB, 5 seats, API access and an onboarding call. |
| Team | $199 | $139 | 400 transcribed hours, up to 25 spaces, 1 TB, unlimited seats with 5 included, priority support, API and an onboarding call. |
| Business & Scale | — | $699 | Custom volume, seats and storage, SLA and dedicated support for studios, platforms and publishers. |
Yes. An AI coding agent such as Claude Code, Codex or Cursor can build a usable personal version in one session with the prompt on this page, running on your own machine.
About $29 a month on the Hobby plan, $348 a year (checked 2026-10-19).
Audiogram and clip rendering from the Studio; Imports from YouTube, TikTok, Instagram, Spotify, Zoom and Google Drive; Team spaces, shared recordings and an onboarding call; A community prompt library, an API and webhooks; AI image generation and a media library for the clips and covers. If any of those matter to you, keep paying.
Yes: Scriberr (open source), Buzz (open source), whisper.cpp (open source).