{"id":13822731,"url":"https://github.com/passy/podserve","last_synced_at":"2025-04-28T17:21:12.429Z","repository":{"id":57656629,"uuid":"188671289","full_name":"passy/podserve","owner":"passy","description":"Serve a podcast feed from a directory with MP3s in it.","archived":false,"fork":false,"pushed_at":"2019-10-11T16:22:50.000Z","size":95,"stargazers_count":10,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-18T18:33:23.791Z","etag":null,"topics":["podcast","rss","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/passy.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}},"created_at":"2019-05-26T10:54:22.000Z","updated_at":"2023-04-04T15:34:50.000Z","dependencies_parsed_at":"2022-08-26T05:12:06.951Z","dependency_job_id":null,"html_url":"https://github.com/passy/podserve","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Fpodserve","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Fpodserve/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Fpodserve/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/passy%2Fpodserve/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/passy","download_url":"https://codeload.github.com/passy/podserve/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251352638,"owners_count":21575865,"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":["podcast","rss","rust"],"created_at":"2024-08-04T08:02:15.074Z","updated_at":"2025-04-28T17:21:12.408Z","avatar_url":"https://github.com/passy.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"\u003cimg height=\"200\" src=\"assets/logo.png\" alt=\"logo\"\u003e\n\n\u003e Turns a folder of MP3 files into a hosted RSS feed.\n\n## Usage\n\n```\npodserve [-d podcasts/] https://pod.example.com/prefix/\n```\n\nBy default, `podserve` will read the MP3s in a `podcasts/` subdirectory\nand serve them, generating an absolute URL based on the prefix URL\nprovided as first positional argument.\n\n`podserve` will extract ID3 tags and modification time to generate\nthe corresponding attributes on the RSS feed.\n\n## Advanced Configuration\n\nYou can set some additional configuration parameters through a config file.\nTo write a template with default values, run `podserve` with `--write-config`\nand specify the edited configuration when starting it later with `--config`.\n\n```\npodserve https://example.com/ --write-config config.toml\n$VISUAL ./config.toml\npodserve https://example.com/ --config config.toml\n```\n\n*Yes, the URL is required here for no reason other than to make my life easier.\nPRs welcome.*\n\n## Serving Static Files\n\n`podserve` uses Rocket and the Rocket-Contrib static file serving mechanism.\nThis, importantly, does not support range requests and is hence very ill-suited\nfor streaming podcasts. You may want to put a reverse proxy in front of this\n(which does of course takes the fun a bit out of this).\n\nFor nginx you may want to set up something like this:\n\n```nginx\nlocation /podcasts/ {\n    sendfile on;\n    tcp_nopush on;\n    tcp_nodelay on;\n    keepalive_timeout 65;\n\n    alias /srv/www/podserve/podcasts/;\n}\n\nlocation / {\n    proxy_pass http://127.0.0.1:{{ podserve_port }};\n}\n```\n\n## Caveats\n\nThis is by no means meant to be a used in production or production-like\nenvironments. There are deliberately few options to configure your feed.\nI'm happy to take Pull Requests to add more, but this is not meant to be\nfeature-complete.\n\nThe scenario I'm envisioning for this is that you have a bunch of drafts\nyou quickly want to share with your team or friends and instead of sharing\na Dropbox folder, you instead share an actual feed that people can subscribe\nto with their podcast players. This comes with the additional benefit that\nthey can download it to listen to it later and apply the usual audio filters\non on it.\n\n## LICENSE\n\n[MIT](/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpassy%2Fpodserve","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpassy%2Fpodserve","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpassy%2Fpodserve/lists"}