{"id":23554097,"url":"https://github.com/marcopiovanello/yt-dlp-web-ui","last_synced_at":"2025-05-14T12:11:38.359Z","repository":{"id":42159971,"uuid":"429576319","full_name":"marcopiovanello/yt-dlp-web-ui","owner":"marcopiovanello","description":"A terrible web ui and RPC server for yt-dlp. Designed to be self-hosted.","archived":false,"fork":false,"pushed_at":"2025-03-30T08:29:17.000Z","size":13642,"stargazers_count":1418,"open_issues_count":60,"forks_count":131,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-11T15:56:58.710Z","etag":null,"topics":["download-manager","golang","raspberrypi","rpc-server","self-hosted","webui","youtube-dl","yt-dlp","yt-dlp-rpc","yt-dlp-wrapper"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcopiovanello.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":"marcopiovanello","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":["https://paypal.me/marcofw"]}},"created_at":"2021-11-18T20:52:25.000Z","updated_at":"2025-04-11T14:46:13.000Z","dependencies_parsed_at":"2023-12-30T10:24:00.873Z","dependency_job_id":"b8661ad8-d4c3-431f-9e5a-df11964e2ed8","html_url":"https://github.com/marcopiovanello/yt-dlp-web-ui","commit_stats":{"total_commits":452,"total_committers":27,"mean_commits":16.74074074074074,"dds":0.3495575221238938,"last_synced_commit":"ef0d7ba5f8978db6e080592e0220ae5b0cfd6fa9"},"previous_names":["marcopiovanello/yt-dlp-web-ui","marcopeocchi/yt-dlp-web-ui"],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcopiovanello%2Fyt-dlp-web-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcopiovanello%2Fyt-dlp-web-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcopiovanello%2Fyt-dlp-web-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcopiovanello%2Fyt-dlp-web-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcopiovanello","download_url":"https://codeload.github.com/marcopiovanello/yt-dlp-web-ui/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254140766,"owners_count":22021220,"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":["download-manager","golang","raspberrypi","rpc-server","self-hosted","webui","youtube-dl","yt-dlp","yt-dlp-rpc","yt-dlp-wrapper"],"created_at":"2024-12-26T12:03:57.411Z","updated_at":"2025-05-14T12:11:33.345Z","avatar_url":"https://github.com/marcopiovanello.png","language":"Go","funding_links":["https://ko-fi.com/marcopiovanello","https://paypal.me/marcofw"],"categories":["Go","Software","self-hosted"],"sub_categories":["Media Management"],"readme":"\u003e [!NOTE]  \n\u003e A poll is up to decide the future of yt-dlp-web-ui frontend! If you're interested you can take part.  \n\u003e https://github.com/marcopiovanello/yt-dlp-web-ui/discussions/223\n\n# yt-dlp Web UI\n\nA not so terrible web ui for yt-dlp. \n\nHigh performance extendeable web ui and RPC server for yt-dlp with low impact on resources.\n\nCreated for the only purpose of *fetching* videos from my server/nas and monitor upcoming livestreams. \n\n**Docker images are available on [Docker Hub](https://hub.docker.com/r/marcobaobao/yt-dlp-webui) or [ghcr.io](https://github.com/marcopiovanello/yt-dlp-web-ui/pkgs/container/yt-dlp-web-ui)**.\n\n```sh\ndocker pull marcobaobao/yt-dlp-webui\n```\n```sh\n# latest dev\ndocker pull ghcr.io/marcopiovanello/yt-dlp-web-ui:latest\n```\n\n## Donate to yt-dlp-webui development\n[PayPal](https://paypal.me/marcofw)\n\n*Keeps the project alive!* 😃\n\n## Community stuff\nFeel free to join :)\n\n[Discord](https://discord.gg/GZAX5FfGzE)\n\n## Some screeshots\n![image](https://github.com/user-attachments/assets/fc43a3fb-ecf9-449d-b5cb-5d5635020c00)\n![image](https://github.com/user-attachments/assets/3210f6ac-0dd8-403c-b839-3c24ff7d7d00)\n![image](https://github.com/user-attachments/assets/16450a40-cda6-4c8b-9d20-8ec36282f6ed)\n\n## Video showcase\n[app.webm](https://github.com/marcopiovanello/yt-dlp-web-ui/assets/35533749/91545bc4-233d-4dde-8504-27422cb26964)\n\n## Settings\n\nThe currently avaible settings are:\n-   Server address\n-   Switch theme\n-   Extract audio\n-   Switch language\n-   Optional format selection\n-   Override the output filename\n-   Override the output path\n-   Pass custom yt-dlp arguments safely\n-   Download queue (limit concurrent downloads)\n\n## Format selection\n\nThis feature is disabled by default as this intended to be used to retrieve the best quality automatically.\n\nTo enable it just go to the settings page and enable the **Enable video/audio formats selection** flag!\n\n## [Docker](https://github.com/marcopiovanello/yt-dlp-web-ui/pkgs/container/yt-dlp-web-ui) run\n```sh\ndocker pull marcobaobao/yt-dlp-webui\ndocker run -d -p 3033:3033 -v \u003cyour dir\u003e:/downloads marcobaobao/yt-dlp-webui\n```\n\nOr with docker but building the container manually.\n\n```sh\ndocker build -t yt-dlp-webui .\ndocker run -d -p 3033:3033 -v \u003cyour dir\u003e:/downloads yt-dlp-webui\n\ndocker run -d -p 3033:3033 \\\n  -v \u003cyour dir\u003e:/downloads \\  \n  -v \u003cyour dir\u003e:/config \\ # optional\n  yt-dlp-webui\n\n```\n\nIf you opt to add RPC authentication...\n```sh\ndocker run -d \\\n    -p 3033:3033 \\\n    -e JWT_SECRET randomsecret\n    -v /path/to/downloads:/downloads \\\n    -v /path/for/config:/config \\ # optional\n    marcobaobao/yt-dlp-webui \\\n    --auth \\\n    --user your_username \\\n    --pass your_pass\n```\n\nIf you wish for limiting the download queue size...\n\ne.g. limiting max 2 concurrent download.\n```sh\ndocker run -d \\\n    -p 3033:3033 \\\n    -e JWT_SECRET randomsecret\n    -v /path/to/downloads:/downloads \\\n    marcobaobao/yt-dlp-webui \\\n    --qs 2\n```\n\n### Docker Compose\n```yaml\nservices:\n  yt-dlp-webui:\n    image: marcobaobao/yt-dlp-webui\n    ports:\n      - 3033:3033\n    volumes:\n      - \u003cyour dir\u003e:/downloads # replace \u003cyour dir\u003e with a directory on your host system\n    healthcheck:\n      test: curl -f http://localhost:3033 || exit 1\n    restart: unless-stopped\n```\n\n### ⚡ One-Click Deploy\n\n| Cloud Provider | Deploy Button |\n|----------------|---------------|\n| AWS | \u003ca href=\"https://deploystack.io/deploy/marcopiovanello-yt-dlp-web-ui?provider=aws\u0026language=cfn\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/deploystackio/deploy-templates/refs/heads/main/.assets/img/aws.svg\" height=\"38\"\u003e\u003c/a\u003e |\n| DigitalOcean | \u003ca href=\"https://deploystack.io/deploy/marcopiovanello-yt-dlp-web-ui?provider=do\u0026language=dop\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/deploystackio/deploy-templates/refs/heads/main/.assets/img/do.svg\" height=\"38\"\u003e\u003c/a\u003e |\n| Render | \u003ca href=\"https://deploystack.io/deploy/marcopiovanello-yt-dlp-web-ui?provider=rnd\u0026language=rnd\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/deploystackio/deploy-templates/refs/heads/main/.assets/img/rnd.svg\" height=\"38\"\u003e\u003c/a\u003e |\n\n\u003csub\u003eGenerated by \u003ca href=\"https://deploystack.io/c/marcopiovanello-yt-dlp-web-ui\" target=\"_blank\"\u003eDeployStack.io\u003c/a\u003e\u003c/sub\u003e\n\n## [Prebuilt binaries](https://github.com/marcopiovanello/yt-dlp-web-ui/releases) installation\n\n```sh\n# download the latest release from the releases page\nmv yt-dlp-webui_linux-[your_system_arch] /usr/local/bin/yt-dlp-webui\n\n# /home/user/downloads as an example and yt-dlp in $PATH\nyt-dlp-webui --out /home/user/downloads\n\n# specifying yt-dlp path\nyt-dlp-webui --out /home/user/downloads --driver /opt/soemdir/yt-dlp\n\n# specifying using a config file\nyt-dlp-webui --conf /home/user/.config/yt-dlp-webui.conf\n```\n\n### Arguments\n```sh\nUsage yt-dlp-webui:\n  -auth\n        Enable RPC authentication\n  -conf string\n        Config file path (default \"./config.yml\")\n  -db string\n        local database path (default \"local.db\")\n  -driver string\n        yt-dlp executable path (default \"yt-dlp\")\n  -fl\n        enable file based logging\n  -host string\n        Host where server will listen at (default \"0.0.0.0\")\n  -lf string\n        set log file location (default \"yt-dlp-webui.log\")\n  -out string\n        Where files will be saved (default \".\")\n  -pass string\n        Password required for auth\n  -port int\n        Port where server will listen at (default 3033)\n  -qs int\n        Queue size (concurrent downloads) (default 2)\n  -session string\n        session file path (default \".\")\n  -user string\n        Username required for auth\n  -web string\n        frontend web resources path\n```\n\n### Config file\nBy running `yt-dlp-webui` in standalone mode you have the ability to also specify a config file.\nThe config file **will overwrite what have been passed as cli argument**.\nWith Docker, inside the mounted `/conf` volume inside there must be a file named `config.yml`.\n\n```yaml\n# Simple configuration file for yt-dlp webui\n\n---\n# Host where server will listen at (default: \"0.0.0.0\")\n#host: 0.0.0.0\n\n# Port where server will listen at (default: 3033)\nport: 8989\n\n# Directory where downloaded files will be stored (default: \".\")\ndownloadPath: /home/ren/archive\n\n# [optional] Enable RPC authentication (requires username and password)\nrequire_auth: true\nusername: my_username\npassword: my_random_secret\n\n# [optional] The download queue size (default: logical cpu cores)\nqueue_size: 4 # min. 2\n\n# [optional] Full path to the yt-dlp (default: \"yt-dlp\")\n#downloaderPath: /usr/local/bin/yt-dlp\n\n# [optional] Enable file based logging with rotation (default: false)\n#enable_file_logging: false\n\n# [optional] Directory where the log file will be stored (default: \".\")\n#log_path: .\n\n# [optional] Directory where the session database file will be stored (default: \".\")\n#session_file_path: .\n\n# [optional] Path where the sqlite database will be created/opened (default: \"./local.db\")\n#local_database_path\n\n# [optional] Path where a custom frontend will be loaded (instead of the embedded one)\n#frontend_path: ./web/solid-frontend\n```\n\n### Systemd integration\nBy defining a service file in `/etc/systemd/system/yt-dlp-webui.service` yt-dlp webui can be launched as in background.\n\n```\n[Unit]\nDescription=yt-dlp-webui service file\nAfter=network.target\n\n[Service]\nUser=some_user\nExecStart=/usr/local/bin/yt-dlp-webui --out /mnt/share/downloads --port 8100\n\n[Install]\nWantedBy=multi-user.target\n```\n\n```shell\nsystemctl enable yt-dlp-webui\nsystemctl start yt-dlp-webui\n```\nIt could be that yt-dlp-webui works correctly when started manually from the console, but with systemd, it does not see the yt-dlp executable, or has issues writing to the database file. One way to fix these issues could be as follows:\n```shell\ncd\nmkdir yt-dlp-webui-workingdir\n# optionally move the already existing database file there:\nmv local.db yt-dlp-webui-workingdir\nnano yt-dlp-webui-workingdir/my.conf\n```\nThe config file format is described above; make sure to include the `downloaderPath` setting (the path can possibly be found by running `which yt-dlp`). For example, one could have:\n```\ndownloadPath: /stuff/media\ndownloaderPath: /home/your_user/.local/bin/yt-dlp\nlog_path: /home/your_user/yt-dlp-webui-workingdir\nsession_file_path: /home/your_user/yt-dlp-webui-workingdir\n```\nAdjust the Service section in the `/etc/systemd/system/yt-dlp-webui.service` file as follows:\n```\n[Service]\nUser=your_user\nGroup=your_user\nWorkingDirectory=/home/your_user/yt-dlp-webui-workingdir\nExecStart=/usr/local/bin/yt-dlp-webui --conf /home/your_user/yt-dlp-webui-workingdir/my.conf\n```\n\n## Manual installation\n```sh\n# the dependencies are: yt-dlp, ffmpeg, nodejs, go, make.\n\nmake all\n```\n## Open-API\nNavigate to `/openapi` to see the related swagger.\n\n\n## Extendable\nYou dont'like the Material feel?\nWant to build your own frontend? We got you covered 🤠\n\n`yt-dlp-webui` now exposes a nice **JSON-RPC 1.0** interface through Websockets and HTTP-POST\nIt is **planned** to also expose a **gRPC** server.\n\nFor more information open an issue on GitHub and I will provide more info ASAP.\n\n## Custom frontend\nTo load a custom frontend you need to specify its path either in the config file ([see config file](#config-file)) or via flags.\n\nThe frontend needs to follow this structure:\n```\npath/to/my/frontend\n├── assets\n│   ├── js-chunk-1.js (example)\n│   ├── js-chunk-2.js (example)\n│   ├── style.css (example)\n└── index.html\n```\n\n`assets` is where the resources will be loaded.  \n`index.html` is the entrypoint.\n\n## Nix\nThis repo adds support for Nix(OS) in various ways through a `flake-parts` flake. \nFor more info, please refer to the [official documentation](https://nixos.org/learn/).\n\n## What yt-dlp-webui is not\n`yt-dlp-webui` isn't your ordinary website where to download stuff from the internet, so don't try asking for links of where this is hosted. It's a self hosted platform for a Linux NAS.\n\n## Troubleshooting\n-   **It says that it isn't connected.**\n    - In some circumstances, you must set the server ip address or hostname in the settings section (gear icon).\n-   **The download  doesn't start.**\n    - Simply, yt-dlp process takes a lot of time to fire up. (yt-dlp isn't fast especially if you have a lower-end/low-power NAS/server/desktop. Furthermore some yt-dlp builds are slower than others)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcopiovanello%2Fyt-dlp-web-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcopiovanello%2Fyt-dlp-web-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcopiovanello%2Fyt-dlp-web-ui/lists"}