{"id":13961554,"url":"https://github.com/reibitto/podpodge","last_synced_at":"2026-01-27T07:42:44.323Z","repository":{"id":38385225,"uuid":"300843303","full_name":"reibitto/podpodge","owner":"reibitto","description":"Convert YouTube playlists to audio-only RSS feeds for podcast apps to consume.","archived":false,"fork":false,"pushed_at":"2024-08-15T18:25:05.000Z","size":560,"stargazers_count":48,"open_issues_count":28,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-28T07:34:33.038Z","etag":null,"topics":["akka-http","itunes","podcast","quill","rss","scala","swagger","tapir","youtube","youtube-dl","yt-dlp","zio"],"latest_commit_sha":null,"homepage":"","language":"Scala","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/reibitto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-10-03T09:27:57.000Z","updated_at":"2024-10-27T14:22:11.000Z","dependencies_parsed_at":"2024-07-19T07:51:33.824Z","dependency_job_id":"c399f4b9-f310-41be-bdca-fdcced92e4da","html_url":"https://github.com/reibitto/podpodge","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/reibitto/podpodge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reibitto%2Fpodpodge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reibitto%2Fpodpodge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reibitto%2Fpodpodge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reibitto%2Fpodpodge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reibitto","download_url":"https://codeload.github.com/reibitto/podpodge/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reibitto%2Fpodpodge/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266253505,"owners_count":23900051,"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":["akka-http","itunes","podcast","quill","rss","scala","swagger","tapir","youtube","youtube-dl","yt-dlp","zio"],"created_at":"2024-08-08T17:01:15.692Z","updated_at":"2026-01-27T07:42:44.297Z","avatar_url":"https://github.com/reibitto.png","language":"Scala","funding_links":[],"categories":["Scala"],"sub_categories":[],"readme":"# Podpodge\n\n![Scala CI](https://github.com/reibitto/podpodge/actions/workflows/scala.yml/badge.svg)\n\n## What is it?\n\nPodpodge is a server + client for converting YouTube playlists (or plain audio files in a directory) into audio-only RSS\nfeeds that podcast apps can consume.\n\nPodpodge is written using [pekko-http](https://pekko.apache.org/docs/pekko-http/current/) +\n[tapir](https://tapir.softwaremill.com) + [ZIO](https://zio.dev) + [Quill](https://getquill.io/). It's still a work in\nprogress in the sense that it doesn't have the nicest front-end yet (a Scala.js + [Slinky](https://slinky.dev/)\nfront-end will be coming). Though it does have built-in Swagger integration so that you don't have to construct the API\nrequests yourself for interacting with the DB and getting the RSS feed.\n\n## Requirements\n\n- You need to obtain a [YouTube API Key](https://developers.google.com/youtube/registering_an_application) and set\nthe `PODPODGE_YOUTUBE_API_KEY` environment variable.\n- [youtube-dl](https://github.com/ytdl-org/youtube-dl) or [yt-dlp](https://github.com/yt-dlp/yt-dlp) must be installed (there's an [open issue](https://github.com/reibitto/podpodge/issues/6) for automatically downloading it)\n\n_* The above are only requirements if `sourceType` is `youTube`. For `directory` you can ignore this._\n\n## Usage\n\nRun the server either using sbt (`sbt run`) or create an executable jar (`sbt assembly`) and run that. This will run the\nPodpodge server at http://localhost:8080 by default (this can be changed with `PODPODGE_HOST` and `PODPODGE_PORT`). For\nexample, you might want to change `PODPODGE_HOST` to your network IP (like 192.168.1.100 or whatever it's set to) so that\nyou can access it from your phone on the same local network. Of course the other option is to host it on a \"proper\" public\nserver so that you can access it from anywhere.\n\nTo register a YouTube playlist as a Podcast, call the `POST /podcast/{sourceType}` route (where `sourceType` can be set\nto `youTube` or `directory`). You can do this with the built-in Swagger integration (which is the default top-level page).\n\nThe playlist ID is what appears in the address bar when visiting a YouTube playlist page, like https://www.youtube.com/playlist?list=YOUTUBE_PLAYLIST_ID\n\n*Note:* Private playlists aren't supported (might be possible after [this issue](https://github.com/reibitto/podpodge/issues/1) is addressed). Using unlisted playlists is the closest alternative for now.\n\nIf successful, this should return you a JSON response of the Podcast. You can then use the `POST /podcasts/check` route to check for new episodes:\n\n(*Note:* There is an [issue](https://github.com/reibitto/podpodge/issues/8) for setting up CRON-like schedules per Podcast for automatic checks)\n\nOnce that's done, you can access the RSS feed URL and put it into whatever podcast app you use. It'll look something like this (the ID may be different if you have multiple podcasts):\nhttp://localhost:8080/podcast/1/rss\n\n## Contributing\n\nPodpodge is fairly barebones and I mainly made it for myself because similar apps I tried at the time didn't quite work for me.\nPlus, this was an exercise to learn how akka-http/pekko-http + ZIO + Quill (and eventually Slinky) work together. There are a bunch\nmore features that could potentially be added and I created some issues for those. Feel free to take any if you'd like.\nContributions are always welcome! \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freibitto%2Fpodpodge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freibitto%2Fpodpodge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freibitto%2Fpodpodge/lists"}