{"id":16837561,"url":"https://github.com/justinas/streamdemand","last_synced_at":"2026-05-17T20:09:59.466Z","repository":{"id":72696656,"uuid":"464216537","full_name":"justinas/streamdemand","owner":"justinas","description":"Streamlink on demand.","archived":false,"fork":false,"pushed_at":"2025-05-15T21:42:34.000Z","size":62,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-05-15T22:35:47.956Z","etag":null,"topics":["livestream","python","streamlink"],"latest_commit_sha":null,"homepage":"","language":"Nix","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/justinas.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-02-27T18:15:35.000Z","updated_at":"2025-05-15T21:42:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"ed5970e8-ad6e-416a-b801-abc5ebbb65c2","html_url":"https://github.com/justinas/streamdemand","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/justinas/streamdemand","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinas%2Fstreamdemand","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinas%2Fstreamdemand/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinas%2Fstreamdemand/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinas%2Fstreamdemand/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/justinas","download_url":"https://codeload.github.com/justinas/streamdemand/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/justinas%2Fstreamdemand/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33153665,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["livestream","python","streamlink"],"created_at":"2024-10-13T12:17:49.136Z","updated_at":"2026-05-17T20:09:59.435Z","avatar_url":"https://github.com/justinas.png","language":"Nix","funding_links":[],"categories":[],"sub_categories":[],"readme":"# streamdemand\n\nStreamlink on demand.\nA dead-simple HTTP proxy that allows your player to \"directly\"\nplay web streams, utilizing [streamlink](https://github.com/streamlink/streamlink).\n\n\u003c!-- vim-markdown-toc GFM --\u003e\n\n* [Running](#running)\n* [How it differs from streamlink's `--player-external-http` option](#how-it-differs-from-streamlinks---player-external-http-option)\n* [Common problems](#common-problems)\n    * [URLs containing anchors (hashes)](#urls-containing-anchors-hashes)\n\n\u003c!-- vim-markdown-toc --\u003e\n\n## Running\n\nUsing Python, in a virtual environment:\n\n```console\n$ pip install git+https://github.com/justinas/streamdemand.git\n$ gunicorn streamdemand:app\n```\n\nOr using Nix:\n\n```console\n$ nix-build https://github.com/justinas/streamdemand/archive/master.tar.gz\n$ ./result/bin/gunicorn streamdemand:app\n```\n\nThen, simply point your player to a stream you want to watch:\n\n```vlc\n$ vlc 'http://localhost:8000/_/youtube.com/watch?v=5qap5aO4i9A'\n```\n\nStreamdemand should work with all of the sites\n[supported by Streamlink](https://streamlink.github.io/plugin_matrix.html).\n\n## How it differs from streamlink's `--player-external-http` option\n\nThe `--player-external-http` option allows streamlink to serve the resolved stream through HTTP.\nHowever, this requires one to run an instance of streamlink per player / per client.\n\nStreamdemand works in a different way.\nAssuming you have it running on `localhost:8000`, you can point your player directly to e.g.\n`http://localhost:8000/_/youtube.com/watch?v=5qap5aO4i9A`.\nStreamdemand will resolve the stream URL using streamlink,\nand will redirect your player to the stream.\n\nThis way, you do not have to worry about interacting with the streamlink CLI.\nYou can even make an M3U playlist to feed into supporting apps,\nwith all of your favorite streams:\n\n```\n#EXTM3U\n#EXTINF:-1,Lofi Girl\nhttp://localhost:8000/_/youtube.com/watch?v=5qap5aO4i9A\n#EXTINF:-1,Monstercat\nhttp://localhost:8000/_/twitch.tv/monstercat\n#EXTINF:-1,LRT Lituanica\nhttp://localhost:8000/_/lrt.lt/mediateka/tiesiogiai/lrt-lituanica\n```\n\nI use a similar playlist to integrate the streams into the \"Live TV\" functionality of Jellyfin.\n\nAnother difference is that rather than proxying the stream data,\nStreamdemand simply issues a redirect to the actual stream URL,\nwhich the player then follows. As such, it uses very little additional resources.\n\n## Common problems\n\n### URLs containing anchors (hashes)\n\nIn an URL like `https://lnk.lt/tiesiogiai#infotv`,\nthe \"anchor\" part (`#infotv`) is not sent to the server by the HTTP client.\nDue to that, the hash symbol has to be URL-encoded for streamdemand to pick it up:\n`http://localhost:8000/_/https://lnk.lt/tiesiogiai%23infotv`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustinas%2Fstreamdemand","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjustinas%2Fstreamdemand","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustinas%2Fstreamdemand/lists"}