Avatar

ttyrex's blog

Own Your Podcasts With Magic!

— By ttyrex

A few months ago, while listening to my favorite podcasts on AntennaPod —the ultimate open-source player— I was disappointed to discover that the audio of an old episode had been silently replaced by an AI-generated voice. This warm, artificial female voice said the episode was no longer available and that I needed to install yet another app to listen to it. I wanted to give it a try, but that app forced me to create an account and click through 20 pages of consent forms, essentially reminding me—yet again in this era of surveillance capitalism—that I was trading my personal information just to hear a single episode.

a screen shows 404 not found

Yes, friends, this is the reality on many podcast platforms today, and I’m not even sure producers are aware of it. Every click and every digital action is tracked.

Since then, I’ve been searching online for projects that could prevent this from happening again. Unfortunately, none of the projects I found fully met my needs. Audiobookshelf and Podcast Grab looked promising but didn’t support several key features I had in mind.

Let me introduce AryPodr!

AryPodr [pronounced Harry Podder] handles your podcasts with a touch of magic 💫. I loved the funny little name so much that I couldn’t resist coming up with a fitting acronym: it stands for Automatically Replicates Your Podcast RSS.

a screen shows 404 not found

Here’s my approach

I want a self-hosted Podcast Server on my local network (self-hosted forever!) that can subscribe to upstream feeds and re-advertise them transparently as an RSS feed. My goal is to continue using AntennaPod as usual, keeping read/unread tracking intact. Essentially, this Podcast Server would act as a smart network proxy, generating a feed based on episodes stored locally. Additionally, because of the issues I faced earlier, I want it to save multiple versions of metadata and media files, rather than overwriting them, to preserve a full history of each episode.

I also found this approach useful in several other situations:

Automate Everything

I added a webhook whenever an episode is uploaded. My idea is to run some data analysis with local LLM models for fun —yes, I’m a data geek— but it can also be useful for notifications, transcoding, normalizing audio, or triggering any custom workflow. In my setup, I use Argo Workflows because I host everything on K3s. I should take some time soon to describe my self-hosted home infrastructure—it’s really reliable and makes installing and using open-source cloud alternatives much easier.

In the code, you can simply add a YAML like this, and your remote target will receive the path to the audio. From there, you can trigger whatever workflow you want.

webhooks:
  - url: http://my.super.server/new-episode-ready
    headers:
      Authorization: Bearer a-service-account-token-with-event-create-permission

Subscription Management

One tricky point —and the main area for improvement— is subscription management. For now, I rely on OPML files, which isn’t very convenient to maintain. You need to curl an endpoint on the API to get a fresh OPML file that you can import. Typically, you import once to start using Arypodr, then export each time to add a new feed. The exported file contains the updated URLs.

My plan to improve this was to rely on the gPodder API, but it seems the project is being deprecated in favor of the Open Podcast API. The good news is that AntennaPod is currently running some tests (as far as I can see on their Matrix channel), so I hope to introduce this once it’s ready. Honestly, easy server-side subscription management is the only feature that’s really missing here.

GitHub Repository: arypodr 💫

Quick start

If you want to give a try, here are the basics step once it is installed.

  1. Export OPML from your podcast app AntennaPod, Pocket Casts, etc. (export to-antenna.opml)

  2. Import into AryPodr

$ curl -X POST http://url.of.arypodr/admin/import/opml -F "file=@from-antenna.opml"
  1. AryPodr fetches upstream feeds and archives audio + artwork locally

  2. Export the AryPodr OPML → all feeds now point to your server

$ curl -X GET http://url.of.arypodr/feed/catalog.opml  > to-antenna.opml
  1. Update your player with the new OPML to replace your subscriptions (import to-antenna.opml)

A few other endpoints are also available for subscribing to feeds, deleting them, pausing the downloader worker, and more. Check out the API Reference for full details.

Last info, while working on this, I also discovered Gnome Podcasts. Very simple, and classy app.

Gnome Podcast

^EOF


🤖 Please note that I have used ChatGPT to help with my English in this article. If you come across any words that seem off topic or like a hallucination, please let me know. Thank you.


/podcast/ /diy/ /self-hosted/ /archive/