# vod2pod-rss [![tests](https://github.com/madiele/vod2pod-rss/actions/workflows/rust.yml/badge.svg)](https://github.com/madiele/vod2pod-rss/actions/workflows/rust.yml) [![stable image](https://github.com/madiele/vod2pod-rss/actions/workflows/docker-image.yml/badge.svg?branch=stable)](https://github.com/madiele/vod2pod-rss/actions/workflows/docker-image.yml) [![beta image](https://github.com/madiele/vod2pod-rss/actions/workflows/docker-image-beta.yml/badge.svg)](https://github.com/madiele/vod2pod-rss/actions/workflows/docker-image-beta.yml) Converts a YouTube or Twitch channel into a full blown audio podcast feed. # Features - Completely converts the VoDs into a proper podcast RSS that can be listened to directly inside the client. - The VoDs are not downloaded on the server, so no need for storage while self-hosting this app. - VoDs are transcoded to MP3 192k on the fly by default, tested to be working flawlessly even on a Raspberry Pi 3-4. - also works on standard rss podcasts feed if you want to have a lower bitrate version to save mobile data. ## Limitations - Youtube channel avatar is not present and results are limited to 15 when no YouTube API key is set. # Usage ## Web UI - just go where you hosted vod2pod and you will find an easy to use UI to generate the feed ## Manually Generate A Podcast URL - In a web browser go to where you hosted vod2pod, es: http://myserver.com/ or http://localhost/ - In the web page that opens paste the channel you want to convert to podcast and copy the generated link. - Optionally goto : http://myserver.com/transcodize_rss?url=channel_url - An RSS will be generated. - Replace `channel_url` with the URL of the YouTube or Twitch channel you want to convert into a podcast. - YouTube: `http://myserver.com/transcodize_rss?url=https://www.youtube.com/c/channelname` - Twitch: `http://myserver.com/transcodize_rss?url=https://www.twitch.tv/channelname` - RSS/atom feed: `http://myserver.com/transcodize_rss?url=https://feeds.simplecast.com/aU_RzZ7j` - Add the domain to the whitelist. See configurations [below](#configurations) ## Add The URL To A Podcast Client - find a tutorial on how to add an rss feed to your favorite podcast app # Optional API Access - Twitch: Get your SECRET and CLIENT ID - YouTube: Enable more than 15 items in the RSS feed, channel avatar - API key - Enable API Access - APIs & Services > +Enable APIs and Services > Search "YouTube Data API" See configurations [below](#configurations) # Install ## Clone This Repository ``` git clone https://github.com/madiele/vod2pod-rss.git ``` ## Docker - Install [Docker Compose](https://docs.docker.com/compose/install/) - Precompiled images are available [here](https://hub.docker.com/r/madiele/vod2pod-rss/) for linux machines with arm64, amd64 and armv7 (raspberry pis are supported). ### Docker Compose ``` cd vod2pod-rss nano docker-compose.yml ``` See configurations [below](#configurations) ``` sudo docker compose up -d ``` #### Updating ``` sudo docker compose pull && sudo docker compose up -d sudo docker system prune ``` - To get notifications of new release follow [these instructions](https://docs.github.com/en/account-and-profile/managing-subscriptions-and-notifications-on-github/setting-up-notifications/about-notifications) #### Switching to the Beta branch The beta branch is a version of vod2pod that is always updated to the latest yt-dlp releases in a matter of days, if you have problems try it out first to see if they are fixed, then open an issue so that I can consider making a new stable release Also by being on the beta branch you might help me find bugs before I make any new stable release, so you'll help the project too To switch open the compose docker-compose.yml and edit the vod2pod image section from "latest" to "beta", then follow the steps to update ## Configurations ### Web Server Port - `ports`: "80:8080" (optional) Change 80 to another port if you already use the port 80 on your host - e.g. "81:8080" http://myserver.com:81/ ### Optional API Keys - `YT_API_KEY`: Set your YouTube API key (works without but the feed is limited to 15) - e.g. YT_API_KEY=AIzaSyBTCCEOHm - `TWITCH_SECRET`: Set your Twitch secret - `TWITCH_CLIENT_ID`: Set your Twitch client ID Note: These can also be set using Docker [.env files](https://docs.docker.com/compose/environment-variables/env-file/) ### Advanced YouTube Configuration - `YOUTUBE_YT_DLP_GET_URL_EXTRA_ARGS`: Additional arguments to pass to yt-dlp when extracting YouTube audio URLs - This variable allows you to pass custom arguments to yt-dlp for advanced configurations - Format: JSON array of strings, e.g. `["--arg1", "value1", "--arg2", "value2"]` - Useful for scenarios like: - **Using a proxy**: `YOUTUBE_YT_DLP_GET_URL_EXTRA_ARGS=["--proxy", "http://proxy.example.com:8080"]` - **Custom user-agent**: `YOUTUBE_YT_DLP_GET_URL_EXTRA_ARGS=["--user-agent", "Mozilla/5.0 Custom Agent"]` - Note: These arguments are applied in addition to the default yt-dlp arguments used by vod2pod-rss - Default: `[]` (empty array) ### Environment - `VOD2POD_RSS_HOST`: Set the host address to bind to (default: "0.0.0.0") - `VOD2POD_RSS_PORT`: Set the port to listen on (default: "8080") - `TRANSCODE`: Set to "false" to disable transcoding, usefull if you only need the feeds (default: "true") - `MP3_BITRATE`: Set the bitrate of the trascoded stream to your client (default: "192") - `SUBFOLDER`: Set the the root path of the app, useful for reverse proxies (default: "/") - `VALID_URL_DOMAINS`: (optional) Set a comma separated list of domain urls that are allowed to be converted into RSS (defaults to YouTube and Twitch urls) - `CACHE_TTL`: (optional) Set the time to live of the cache in seconds, default is 600 seconds (10 minutes) - `YOUTUBE_YT_DLP_GET_URL_EXTRA_ARGS` # Honorable Mentions These projects were fundamental for the success of vod2pod-rss, originally they handled the feed generation for youtube and twitch, now this is all done by vod2pod-rss internally so they are not used anymore, but were still helpful to get vod2pod-rss up and running fast. * Youtube support was possible thanks to the cool [podtube fork project by amckee](https://github.com/amckee/PodTube) consider dropping him a star. * Twitch support was possible thanks to [my fork](https://github.com/madiele/TwitchToPodcastRSS) of [lzeke0's TwitchRSS](https://github.com/lzeke0/TwitchRSS) drop a star to him too! ## Donations This is a passion project, and mostly made for personal use, but if you want to gift a pizza margherita, feel free! [!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/madiele) ## Contributing check the [CONTRIBUTING.md](CONTRIBUTING.md) to find a tutorial on how to setup your enviroment for develpment