A file-first podcast manager built with TypeScript and Bun/Node.js and designed for folks who like to manage and self-host the content they enjoy. What differentiates pddl from similar apps is the ability to transcode episodes and then regenerate the podcast feeds using those transcoded episodes.
- Import an OPML feed of podcasts.
- Download podcast feeds and episodes.
- Transcode episodes with FFMPEG.
- Record (archive) list of downloaded episodes.
- Update podcast feed file to point to local files.
- Runs on Linux.
- Runs on Windows.
- Runs on OSX.
- Customizable folder names.
- Customizable file/episode names.
- Customizable log levels.
- Per-podcast transcode settings.
Run with bun run index.ts
. Or generate a single-file executable with bun build ./index.ts --compile --outfile bin/pddl
.
pddl uses Bun environment variables for configuration. See example.env for valid options.
A much more elegant solution using TOML is in the works.
Any file server (Cady, NGINX, etc.) will work but if you want to enjoy life I suggest using Tailscale's awesome serve
command. For example, tailscale serve --bg --set-path podcasts /home/user/Public/podcasts
. See the Tailscale Serve docs for details.
There are now 😏 ... I've tried quite a few other options but none of them measured up to what I wanted. Most of them could do the downloading part and some could even handle naming but the only two I recall finding that regenerated the feeds so that I could serve the content were Podfetch and Podgrab but neither handled transcoding. So I built my own thing.