{"id":46510289,"url":"https://github.com/nosoop/moombox","last_synced_at":"2026-03-06T16:03:20.327Z","repository":{"id":256753213,"uuid":"856293287","full_name":"nosoop/moombox","owner":"nosoop","description":"YouTube livestream downloader manager.","archived":false,"fork":false,"pushed_at":"2026-01-16T17:07:34.000Z","size":170,"stargazers_count":12,"open_issues_count":6,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-17T05:33:21.944Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/nosoop.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":"2024-09-12T10:29:39.000Z","updated_at":"2026-01-16T17:05:13.000Z","dependencies_parsed_at":"2025-03-10T13:36:01.761Z","dependency_job_id":"1c1be7fb-2b97-4c6b-96a1-5a841190e8cc","html_url":"https://github.com/nosoop/moombox","commit_stats":null,"previous_names":["nosoop/moombox"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/nosoop/moombox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nosoop%2Fmoombox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nosoop%2Fmoombox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nosoop%2Fmoombox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nosoop%2Fmoombox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nosoop","download_url":"https://codeload.github.com/nosoop/moombox/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nosoop%2Fmoombox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30184885,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T14:42:24.748Z","status":"ssl_error","status_checked_at":"2026-03-06T14:42:14.925Z","response_time":250,"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":[],"created_at":"2026-03-06T16:03:15.351Z","updated_at":"2026-03-06T16:03:20.322Z","avatar_url":"https://github.com/nosoop.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# moombox\n\nWeb frontend for [moonarchive][] to manage downloads of multiple YouTube livestreams and\npremieres.\n\nDesign shamelessly ripped off from [hoshinova][], an equivalent frontend for [ytarchive][].\n\n![image](https://github.com/user-attachments/assets/4f268e8d-f553-4b14-afd8-8d3a51b5911a)\n\n[moonarchive]: https://github.com/nosoop/moonarchive\n[hoshinova]: https://github.com/HoloArchivists/hoshinova\n[ytarchive]: https://github.com/Kethsar/ytarchive\n\n## Installation\n\n### via Python\n\nPython 3.11 or newer is required.\n\n```sh\npython -m venv .venv\nsource .venv/bin/activate # or .venv\\Scripts\\activate.bat on Windows\npip install git+https://github.com/nosoop/moombox\n\n# run the application with a single worker since all of the state is within the process\nhypercorn moombox.app:create_app() -w 1\n```\n\n### via Docker / Podman\n\nmoombox is also available as a containerized application that can be run via Docker or Podman.\nThis method isn't as extensively tested, so please let me know whether or not you have problems\nconfiguring moombox this way.\n\nThe current iteration of the container uses `ffmpeg` as it's available in Debian Bookworm.\n\n```sh\n# the working directory is set to '/data' in the application\npodman run -p 5000:5000 -v /opt/moombox:/data ghcr.io/nosoop/moombox\n```\n\nYou must mount a writable path on the host to `/data` so moombox can generate `/data/staging`\nand `/data/output` directories.  The `staging` directory should be attached to a fast storage\ndevice as it'll be used while downloading and muxing the final file before being moved to\n`/data/output`.\n\nYou can also pass `--user` to run moombox as a different user if executing `docker` or `podman`\nas root.  Make sure that, if it already exists, `/data/config/database.db3` is writable.\n\n#### via Docker Compose\n\nYou may also run moombox using Docker Compose instead.\n\n1. Copy [config.container.toml](config.container.toml) to `./data/config/config.toml` and make\nthe necessary user-specific modifications.\n2. Start the container using the provided [docker-compose.yml][] file:\n   ```sh\n   docker compose up -d\n   ```\n\n[docker-compose.yml]: docker-compose.yml\n\n## Configuration\n\nConfiguration is controlled by a `config.toml` in\n[the instance path, as described by Flask][instance-path].  See `config.example.toml` for\ndocumentation on the features.\n\nIf you launch moombox without a configuration file, the \"Configuration\" tab in the web interface\nwill tell you which location it expects one in.\n\nYou can set the `MOOMBOX_INSTANCE_PATH` environment variable to override the location.\nThe Docker / Podman releases set the instance path to `/data/config` this way, and you should\nmount a folder to that location when running it (as described in the installation instructions).\n\n[instance-path]: https://flask.palletsprojects.com/en/stable/config/#instance-folders\n\n\u003e [!IMPORTANT]\n\u003e These days, a proof-of-origin token is practically a requirement when downloading from\n\u003e YouTube.  [moonarchive's section on proof-of-origin downloads][pot-dl] covers this\n\u003e extensively.\n\u003e \n\u003e It is strongly recommended to set both `downloader.po_token` and either\n\u003e `downloader.visitor_data` or `downloader.cookie_file` before downloading a file; otherwise\n\u003e YouTube may block your connection from accessing videos.  To obtain that information:\n\u003e\n\u003e - `po_token`: See [yt-dlp \u0026rarr; PO Token for GVS][pot-gvs].\n\u003e - `visitor_data`: See the above; the value you want can be retrieved using\n\u003e   `ytcfg.get('VISITOR_DATA')` in the browser console.\n\u003e - `cookie_file`: See [yt-dlp \u0026rarr; Exporting YouTube cookies][yt-cookies].\n\n[pot-dl]: https://github.com/nosoop/moonarchive?tab=readme-ov-file#proof-of-origin-downloads\n[pot-gvs]: https://github.com/yt-dlp/yt-dlp/wiki/PO-Token-Guide#po-token-for-gvs\n[yt-cookies]: https://github.com/yt-dlp/yt-dlp/wiki/Extractors#exporting-youtube-cookies\n\n## License\n\nReleased under the MIT license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnosoop%2Fmoombox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnosoop%2Fmoombox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnosoop%2Fmoombox/lists"}