A podcast catch-up service running on your very own server!
I'm running one at podracer.zachn.me, feel free to take the service for a spin. I'm planning on keeping this up and available for free, but I'm not making any promises -- if it starts to get swamped I'll have to figure out something more scalable.
- Time shift podcasts - Have a favorite show that died out and want to relive it? PodRacer lets you experience it anew by creating a feed where the first episode was published today.
- Two rate-control modes
- Variable publishing rate - Do you want to catch up on serial podcast? Set the rate to be > 1x and PodRacer will scale the shifted publish dates, letting you slowly (or quickly) catch up to real time. Podcasts coming at you too fast? Set the rate to be < 1x to make a bi-weekly show weekly, or a weekly show bi-weekly.
- Publish every X days - For archived podcasts that have all episodes "published" on the same day, PodRacer can set a fixed amount of time between each episode, restoring the periodic publishing feel.
- Integrates new episodes - Once you catch up, PodRacer integrates the new episodes as they are published, seamlessly transferring you over to the "normal" listening experience.
- Self hosted - complete autonomy over your feeds.
PodRacer is most useful if you prefer to listen to your podcasts as they are published (i.e. they are dropped into a feed, and you just listen in order). It lets legacy content seamlessly fit into the stream of contemporary content.
Tests were done against Overcast (info). Other podcast players might have quirks I didn't see. Feel free to file a github issue and I'll do what I can to fix it up.
There is also a small utility tool podarch
, used to archive all the episodes of a given feed. See podarch -h
for usage.
I run this service on a Raspberry Pi 3.
rustup update && cargo update && cargo build --release
It's going to take a very long time to build. That's Rust.
Sometimes (not quite sure why only sometimes) my Pi3 struggles to build when multiple threads are enabled (the default). You can cargo clean && cargo build --release -j 1
to force building with only one thread. This will take way longer, but you don't run out of memory.
Builds go much faster on beefier hardware. Cross-compile by installing cross
(via cargo install cross
), then building for the Pi:
cross build --release --target=armv7-unknown-linux-gnueabihf --features vendored-openssl
The binary will end up in target/armv7-unknown-linux-gnueabihf/release
.
cargo run --release --bin podracer
Podcast clients will need to access the server remotely, so you will have to set up port forwarding in your router.
You can either run in a tmux instance or use nohup
and send it to the background. I've set it up as a systemd
service, but that is beyond the scope of this README.
If you wish to run PodRacer using docker, you can use the following run command:
docker run -d -v podracer_podcasts:/app/podcasts/ -p 41968:41968/tcp --name podracer ghcr.io/znielsen/podracer:latest
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
If you like it then you shoulda thrown a dollar at it.
If you found PodRacer useful, a donation would be great! Recommended $1/podcast (as in per feed run through the service, not per episode). No pressure, but supporting software you like is cool.
Zach Nielsen - @ZNielsen