{"id":22180536,"url":"https://github.com/s1m0n38/morningstreams","last_synced_at":"2026-05-03T22:03:13.104Z","repository":{"id":52407110,"uuid":"380429811","full_name":"S1M0N38/morningstreams","owner":"S1M0N38","description":"Expose acestreams from morningstream  in your local network","archived":false,"fork":false,"pushed_at":"2022-08-27T11:50:31.000Z","size":95,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-02T09:18:31.943Z","etag":null,"topics":["acestream","docker","m3u8","macos","morningstreams","python","rpi"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/S1M0N38.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":"2021-06-26T06:20:06.000Z","updated_at":"2024-03-22T03:17:48.000Z","dependencies_parsed_at":"2022-08-18T18:51:18.759Z","dependency_job_id":null,"html_url":"https://github.com/S1M0N38/morningstreams","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/S1M0N38%2Fmorningstreams","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/S1M0N38%2Fmorningstreams/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/S1M0N38%2Fmorningstreams/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/S1M0N38%2Fmorningstreams/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/S1M0N38","download_url":"https://codeload.github.com/S1M0N38/morningstreams/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":236272978,"owners_count":19122528,"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":["acestream","docker","m3u8","macos","morningstreams","python","rpi"],"created_at":"2024-12-02T09:18:37.000Z","updated_at":"2026-05-03T22:03:13.089Z","avatar_url":"https://github.com/S1M0N38.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# morningstreams\n\n\u003e This content is not affiliated with, endorsed, sponsored, or specifically\n\u003e approved by Morningstreams.\n\n\u003e This project is the successor of the simple script\n\u003e [morniningstream.py](https://gist.github.com/S1M0N38/7f8ca02279447ea3ed8529a450e61c11).\n\nSometimes I want to watch acestream on my **computer** and sometimes on my\n**TV** (with LG WebOS) so I came up with the following solution which suited to\nboth circumstances. I expose a [m3u8](https://en.wikipedia.org/wiki/M3U)\nplaylist on my local network which streams point to a running acestream engine\nusing [acestream HTTP API](https://docs.acestream.net/en/developers/api-reference/#playback-endpoints).\n\nI decided to automate the whole process of starting a\nmorningstreams stream in a single python CLI\nprogram. It can be run on **macOS** and on **raspberry pi**.\n\n## :arrow_down: Installation\n\n```bash\nuv tool install morningstreams\n```\n[uv](https://docs.astral.sh/uv/) is an extremely fast Python package manager.\nYou can also use [pipx](https://pypa.github.io/pipx/) or your favorite package\nmanager.\n\n## :zap: Usage\n\n- You need a morningstreams account\n- A VPN is suggest but not necessary \n([install VPN on RPI](https://gist.github.com/S1M0N38/77ad8d3cb5e481aa802d43636881279c))\n\nI develop and test this program on macOS (Intel processor with Big Sur) and on\nRaspberry Pi (Raspberry Pi 3 Model B with Raspbian 11).\n\nIf you are on macOS [Docker](https://docs.docker.com/desktop/install/mac-install/)\nmust be run it the background while using this program.\n\nTo install the acestream engine use\n```bash\nmorningstreams install\n```\nThis operation is required to be run only the first time. You can run it again\nif you want to reinstall acestream engine (on raspberry you likely need a reboot\nand the run `morningstreams install` again). \n\nAuthenticate with\n```bash\nmorningstreams login\n```\nThis command will ask to input your morningstreams credentials and store them\nfor the future. If you don't want to type the credentials you can provide them\nusing `MORNINGSTREAMS_USERNAME` and `MORNINGSTREAMS_PASSWORD` environment\nvariables (Even if you use env vars you must run `morningstreams login`).\n\nRun the acestream engine in the background, get streams from morningstreams and\nexpose m3u8 playlist on your local network with\n```bash\nmorningstreams run\n```\n\u003ckbd\u003eCtrl+C\u003c/kbd\u003e quit the program in a clean manner.\n\n### Options\n\nThe Command Line Interface (CLI) is pretty minimal; when in doubt just use\n`--help`. Here are some examples\n\n```\n$ morningstreams --help\n\nUsage: morningstreams [OPTIONS] COMMAND [ARGS]...\n\n  Expose acestreams from morningstreams in you local network.\n  Source code: https://github.com/S1M0N38/morningstreams\n\nOptions:\n  --help  Show this message and exit.\n\nCommands:\n  install  Install acestream engine\n  login    Login and store credentials for furture logins\n  logout   Delete login credentials if exists\n  run      Expose streams on your local network\n  status   Show login status\n```\n\n```\n$ morningstreams run --help\n\nUsage: morningstreams run [OPTIONS]\n\n  Expose streams on your local network\n\nOptions:\n  --ip TEXT               Ip where playlist is exposed.  [default: 127.0.0.1]\n  --port INTEGER          Port where playlist is exposed.  [default: 8080]\n  --server / --no-server  Expose playlist.m3u8.  [default: server]\n  --engine / --no-engine  Start acestream engine.  [default: engine]\n  --help                  Show this message and exit.\n```\n\n## :tv: Watch the streams\n\nSuppose that the program is running and exposing the playlist at \n`http://192.168.178.101:8080/playlist.m3u8` (I was able to specify the ip using\nthe `--ip` option). Every device in you local network visiting this address will\nsee the playlist. I can watch streams with:\n\n- a TV with LG WebOS thanks to F-Player\n- a computer using a video player which support HTTP Live Stream protocol\n\nOn computer I use [mpv](https://mpv.io/) with some options\n```bash\nmpv --no-resume-playback --rebase-start-time=no\\\n    --cache=no --cache-pause-wait=3 --audio-buffer=0\\\n    --stream-buffer-size=4k --pause=no\\\n    http://192.168.178.101:8080/playlist.m3u8\n```\nJust use an alias in your .zshrc/.bashrc to avoid to type this all the time:\n`alias f1=\"mpv --no-resume-play...\"`.\n\n\n## :wrench: How it works \n\n```\n┏━━━━━━━━━━━━━━━━━━━━━morningstreams━━━━━━━━━━━━━━━━━━━━━┓\n┃                                                        ┃\n┃                                      GET acestream ids ┃\n┃                   ┌─────────────┐──────────────────────╋─────▶┌────────────────────────┐\n┃                   │   client    │                      ┃      │ api.morningstreams.com │\n┃                   └─────────────┘◀─────────────────────╋──────└────────────────────────┘\n┃                          │           acestream ids     ┃\n┃                          │                             ┃\n┃                  generate playlist                     ┃\n┃                          │                             ┃GET playlist.m3u8\n┃ server───────────────────┼────────────────────────┐◀───╋─────────────────┌──────────────┐\n┃ │                        ▼                        │    ┃                 │ video player │\n┃ │ ┏━playlist.m3u8━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ │────╋────────────────▶└──────────────┘\n┃ │ ┃ #EXTM3U                                     ┃ │    ┃playlist.m3u8                   ▲\n┃ │ ┃ #EXTINF:-1, Server 1                        ┃ │    ┃                        stream  │\n┃ │ ┃ http://[--ip]:[--port]/ace/getstream?id=13f…┃ │    ┃                                │\n┃ │ ┃ #EXTINF:-1, Server 2 (backup)               ┃ │    ┃ ┌────────────────────────┐     │\n┃ │ ┃ http://[--ip]:[--port]/ace/getstream?id=3e8…┃ │    ┃ │    acestream engine    │     │\n┃ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │    ┃ │   (wrapped in docker   │     │\n┃ └─────────────────────────────────────────────────┘    ┃ │container if necessary) │◀────┘\n┃                                                        ┃ │                        │\n┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ └────────────────────────┘\n```\n\n## :ballot_box_with_check: TODOs\n- [ ] Explain how it works\n- [ ] Healthcheck while stream is running\n- [ ] Option to automatically start player\n- [ ] Weekend schedule\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs1m0n38%2Fmorningstreams","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fs1m0n38%2Fmorningstreams","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs1m0n38%2Fmorningstreams/lists"}