{"id":22118528,"url":"https://github.com/znielsen/podracer","last_synced_at":"2025-07-14T19:42:39.424Z","repository":{"id":37077034,"uuid":"309807729","full_name":"ZNielsen/PodRacer","owner":"ZNielsen","description":"A podcast catch-up service","archived":false,"fork":false,"pushed_at":"2025-02-17T02:21:22.000Z","size":43564,"stargazers_count":4,"open_issues_count":22,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-02T07:04:40.590Z","etag":null,"topics":["hacktoberfest","hacktoberfest2021","hacktoberfest2022","podcasts","rocket","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZNielsen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-03T21:09:44.000Z","updated_at":"2025-02-17T02:21:25.000Z","dependencies_parsed_at":"2024-08-23T20:03:33.339Z","dependency_job_id":"eea9f36d-2b64-426e-aa61-6e6e0b5f6417","html_url":"https://github.com/ZNielsen/PodRacer","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ZNielsen/PodRacer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZNielsen%2FPodRacer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZNielsen%2FPodRacer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZNielsen%2FPodRacer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZNielsen%2FPodRacer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZNielsen","download_url":"https://codeload.github.com/ZNielsen/PodRacer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZNielsen%2FPodRacer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265336610,"owners_count":23749193,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest","hacktoberfest2021","hacktoberfest2022","podcasts","rocket","rust"],"created_at":"2024-12-01T13:51:49.344Z","updated_at":"2025-07-14T19:42:39.399Z","avatar_url":"https://github.com/ZNielsen.png","language":"Rust","funding_links":["https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=Y8HPAAJZTVT8E\u0026currency_code=USD"],"categories":[],"sub_categories":[],"readme":"# PodRacer\n\n[![CodeFactor](https://www.codefactor.io/repository/github/znielsen/podracer/badge)](https://www.codefactor.io/repository/github/znielsen/podracer)\n[![Better Uptime Badge](https://betteruptime.com/status-badges/v1/monitor/6cu8.svg)](https://betteruptime.com/?utm_source=status_badge)\n![GitHub repo size](https://img.shields.io/github/repo-size/znielsen/podracer)\n![GitHub contributors](https://img.shields.io/github/contributors/znielsen/podracer)\n![GitHub stars](https://img.shields.io/github/stars/znielsen/podracer?style=social)\n![GitHub forks](https://img.shields.io/github/forks/znielsen/podracer?style=social)\n\nA podcast catch-up service running on your very own server!\n\nI'm running one at [podracer.zachn.me](http://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.\n\n## Features\n\n- **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_.\n- **Two rate-control modes**\n  - **Variable publishing rate** - Do you want to catch up on serial podcast? Set the rate to be \u003e 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 \u003c 1x to make a bi-weekly show weekly, or a weekly show bi-weekly.\n  - **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.\n- **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.\n- **Self hosted** - complete autonomy over your feeds.\n\nPodRacer 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.\n\nTests were done against [Overcast](https://apps.apple.com/us/app/overcast/id888422857) ([info](https://overcast.fm/podcasterinfo)). 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.\n\n## Podcast Archiver\n\nThere is also a small utility tool `podarch`, used to archive all the episodes of a given feed. See `podarch -h` for usage.\n\n## Installation\n\nI run this service on a Raspberry Pi 3.\n\n```bash\nrustup update \u0026\u0026 cargo update \u0026\u0026 cargo build --release\n```\n\nIt's going to take a very long time to build. That's Rust.\n\nSometimes (not quite sure why only sometimes) my Pi3 struggles to build when multiple threads are enabled (the default). You can `cargo clean \u0026\u0026 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.\n\nBuilds go much faster on beefier hardware. Cross-compile by installing `cross` (via `cargo install cross`), then building for the Pi:\n\n```bash\ncross build --release --target=armv7-unknown-linux-gnueabihf --features vendored-openssl\n```\n\nThe binary will end up in `target/armv7-unknown-linux-gnueabihf/release`.\n\n### Start the server\n\n```bash\ncargo run --release --bin podracer\n```\n\nPodcast clients will need to access the server remotely, so you will have to set up [port forwarding](https://www.howtogeek.com/66214/how-to-forward-ports-on-your-router/) in your router.\n\n### Keeping the process alive\n\nYou 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.\n\n## Docker method\n\nIf you wish to run PodRacer using docker, you can use the following run command:\n\n```bash\ndocker run -d -v podracer_podcasts:/app/podcasts/ -p 41968:41968/tcp --name podracer ghcr.io/znielsen/podracer:latest\n```\n\n## Contributing\n\n### License\n\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e)\n- MIT license ([LICENSE-MIT](LICENSE-MIT) or \u003chttp://opensource.org/licenses/MIT\u003e)\n\nat your option.\n\n### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any\nadditional terms or conditions.\n\n### Donating\n\nIf you like it then you shoulda thrown a dollar at it.\n\nIf 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.\n\n[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=Y8HPAAJZTVT8E\u0026currency_code=USD)\n\n### Maintainers\n\n[Zach Nielsen](https://github.com/ZNielsen) - @ZNielsen\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fznielsen%2Fpodracer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fznielsen%2Fpodracer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fznielsen%2Fpodracer/lists"}