vod2pod-rss¶
vod2pod-rss converts YouTube channels and playlists into podcast RSS feeds, enabling them to be subscribed to in any podcast client (including Audiobookshelf). Audio is transcoded to MP3 on the fly — no local storage required. Available at vod2pod.hdhomelab.com.
Deployment¶
vod2pod-rss runs in Kubernetes (media namespace) as a stateless Deployment backed by an in-memory Redis cache. The YouTube API key is injected via ExternalSecret.
graph LR
Client -->|HTTPS| Gateway[Cilium Gateway]
Gateway --> vod2pod[vod2pod-rss :8080]
vod2pod -->|cache| Redis[Redis in-memory]
vod2pod -->|YouTube Data API v3| YouTube[(YouTube)]
vod2pod -->|stream audio| yt-dlp[yt-dlp internal]
Vault -->|ExternalSecret| K8sSecret[K8s Secret]
K8sSecret -->|YT_API_KEY| vod2pod
-
URL
-
Namespace
media -
Storage
None — stateless, Redis cache is in-memory only
-
Image
madiele/vod2pod-rss -
Config
flux/apps/noah/media/vod2pod-rss/ -
Feed pattern
https://vod2pod.hdhomelab.com/<youtube-url>
Usage¶
The feed URL pattern is:
Construct a feed URL by appending any YouTube channel or playlist URL:
https://vod2pod.hdhomelab.com/transcodize_rss?url=https://www.youtube.com/@channelname/videos
https://vod2pod.hdhomelab.com/transcodize_rss?url=https://www.youtube.com/playlist?list=PLxxxxxx
Add it to Audiobookshelf as a podcast RSS feed. With the YouTube API key configured, up to 500 episodes are returned per feed.
Example feeds
Secrets¶
| Vault path | Key | Used as |
|---|---|---|
vod2pod-rss |
youtube-api-key |
YT_API_KEY env var |
The YouTube API key is a YouTube Data API v3 key from the homelab-apis Google Cloud project. It removes the default 15-episode limit and raises it to 500 per feed.
Manual secret
Unlike database credentials, this secret must be written to Vault manually — there is no tofu module that provisions it:
Audiobookshelf Integration¶
Audiobookshelf uses ssrf-req-filter to block requests to private/internal IPs (SSRF protection). Since vod2pod-rss runs inside the cluster, its ClusterIP falls in the 10.x.x.x range and gets blocked by default.
Resolution: Add vod2pod-rss hostnames to ABS's SSRF whitelist via SSRF_REQUEST_FILTER_WHITELIST in the Audiobookshelf deployment:
- name: SSRF_REQUEST_FILTER_WHITELIST
value: "vod2pod.hdhomelab.com,vod2pod-rss,vod2pod-rss.media.svc.cluster.local"
This is already configured in flux/apps/noah/media/audiobookshelf/deployment.yaml.
Known Limitations¶
Episode file size is inaccurate
The <enclosure length> field in the RSS feed reflects the original video file size, not the transcoded MP3 size. Since transcoding happens on-the-fly, the actual audio size isn't known ahead of time. This is cosmetic only — playback is unaffected.
Key Environment Variables¶
| Variable | Value |
|---|---|
YT_API_KEY |
From Vault via ExternalSecret |
REDIS_ADDRESS |
vod2pod-redis |
REDIS_PORT |
6379 |
MP3_BITRATE |
192 |
TRANSCODE |
true |
TZ |
Asia/Hong_Kong |