{"id":28616722,"url":"https://github.com/arabcoders/ytptube","last_synced_at":"2026-04-26T21:02:01.076Z","repository":{"id":209054876,"uuid":"723091894","full_name":"arabcoders/ytptube","owner":"arabcoders","description":"A WebUI for yt-dlp with concurrent downloads support, presets and scheduled tasks and many more.","archived":false,"fork":false,"pushed_at":"2026-02-04T22:30:12.000Z","size":18504,"stargazers_count":805,"open_issues_count":0,"forks_count":22,"subscribers_count":4,"default_branch":"dev","last_synced_at":"2026-02-05T10:54:06.904Z","etag":null,"topics":["concurrency","downloader","self-hosted","youtube","yt-dlp","ytptube"],"latest_commit_sha":null,"homepage":"","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/arabcoders.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"2023-11-24T16:59:47.000Z","updated_at":"2026-02-04T22:28:29.000Z","dependencies_parsed_at":"2024-02-02T16:27:37.564Z","dependency_job_id":"86f67f26-2886-463b-994d-924ac73a1271","html_url":"https://github.com/arabcoders/ytptube","commit_stats":null,"previous_names":["arabcoders/ytptube"],"tags_count":648,"template":false,"template_full_name":null,"purl":"pkg:github/arabcoders/ytptube","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arabcoders%2Fytptube","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arabcoders%2Fytptube/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arabcoders%2Fytptube/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arabcoders%2Fytptube/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arabcoders","download_url":"https://codeload.github.com/arabcoders/ytptube/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arabcoders%2Fytptube/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29134252,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T20:50:26.975Z","status":"ssl_error","status_checked_at":"2026-02-05T20:49:26.082Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["concurrency","downloader","self-hosted","youtube","yt-dlp","ytptube"],"created_at":"2025-06-12T03:01:55.057Z","updated_at":"2026-04-26T21:02:01.065Z","avatar_url":"https://github.com/arabcoders.png","language":"Python","funding_links":[],"categories":["Python","Self-hosted"],"sub_categories":["Methodology"],"readme":"# YTPTube\n\n![Build Status](https://github.com/arabcoders/ytptube/actions/workflows/main.yml/badge.svg)\n![MIT License](https://img.shields.io/github/license/arabcoders/ytptube.svg)\n![Docker Pull](https://img.shields.io/docker/pulls/arabcoders/ytptube.svg)\n![gchr Pull](https://ghcr-badge.elias.eu.org/shield/arabcoders/ytptube/ytptube)\n\n**YTPTube** is a web-based GUI for [yt-dlp](https://github.com/yt-dlp/yt-dlp), designed to make downloading videos from \nvideo platforms easier and user-friendly. It supports downloading playlists, channels, live streams and \nincludes features like scheduling downloads, sending notifications, and built-in video player.\n\n# Screenshots\nExample of the regular view interface.\n![Short screenshot](https://raw.githubusercontent.com/ArabCoders/ytptube/dev/sc_short.jpg)\n\nExample of the Simple mode interface.\n![Short screenshot](https://raw.githubusercontent.com/ArabCoders/ytptube/dev/sc_simple.jpg)\n\n# YTPTube Features.\n\n* Multi-download support.\n* Random beautiful background.\n* Handles live and upcoming streams.\n* A dual view mode for both technical and non-technical users.\n* Schedule channels or playlists to be downloaded automatically with support for creating custom download feeds from non-supported sites. See [Feeds documentation](FAQ.md#how-can-i-monitor-sites-without-rss-feeds).\n* Send notification to targets based on selected events. includes [Apprise](https://github.com/caronc/apprise?tab=readme-ov-file#readme) support.\n* Support per link options.\n* Support for limits per extractor and overall global limit.\n* Queue multiple URLs at once.\n* Powerful presets system for applying `yt-dlp` options. with a pre-made preset for media servers users.\n* A simple file browser.\n* A built in video player **with support for sidecar external subtitles**. `Require ffmpeg to be in PATH in non-docker setups`.\n* Basic authentication support.\n* Supports `curl-cffi`. See [yt-dlp documentation](https://github.com/yt-dlp/yt-dlp?tab=readme-ov-file#impersonation). `In docker only`.\n* Bundled `pot provider plugin`. See [yt-dlp documentation](https://github.com/yt-dlp/yt-dlp/wiki/PO-Token-Guide). `In docker only`.\n* Support using [flaresolverr/flaresolverr](https://github.com/flaresolverr/flaresolverr) to bypass Cloudflare protections for yt-dlp and internal http client. See [related FAQ](FAQ.md#how-to-bypass-cf-challenges).\n* Automatic updates for `yt-dlp` and custom `pip` packages. `In docker only`.\n* Conditions feature to apply custom options based on `yt-dlp` returned info.\n* Custom browser extensions, bookmarklets and iOS shortcuts to send links to YTPTube instance.\n* A bundled executable version for Windows, macOS and Linux. `MacOS version is untested`.\n\nPlease read the [FAQ](FAQ.md) for more information.\n\n# Installation\n\n## Run using docker command\n\n```bash\nmkdir -p ./{config,downloads/files,downloads/tmp} \u0026\u0026 docker run -itd --rm --user \"${UID}:${UID}\" --name ytptube \\\n-e YTP_TEMP_PATH=/downloads/tmp -e YTP_DOWNLOAD_PATH=/downloads/files \\\n-p 8081:8081 -v ./config:/config:rw -v ./downloads:/downloads:rw \\\nghcr.io/arabcoders/ytptube:latest\n```\n\nThen you can access the WebUI at `http://localhost:8081`.\n\n\u003e [!NOTE]\n\u003e If you are using `podman` instead of `docker`, you can use the same command, but you need to change the user to `0:0`\n\u003e it will appears to be running as root, but it will run as the user who started the container.\n\n## Using compose file\n\nThe following is an example of a `compose.yaml` file that can be used to run YTPTube.\n\n```yaml\nservices:\n  ytptube:\n    user: \"${UID:-1000}:${UID:-1000}\" # change this to your user id and group id.\n    image: ghcr.io/arabcoders/ytptube:latest\n    container_name: ytptube\n    restart: unless-stopped\n    environment:\n      - YTP_TEMP_PATH=/downloads/tmp\n      - YTP_DOWNLOAD_PATH=/downloads/files\n    ports:\n      - \"8081:8081\"\n    volumes:\n      - ./config:/config:rw\n      - ./downloads:/downloads:rw\n```\n\n\u003e [!IMPORTANT]\n\u003e Make sure to change the `user` line to match your user id and group id.\n\n```bash\nmkdir -p ./{config,downloads/files,downloads/tmp} \u0026\u0026 docker compose -f compose.yaml up -d\n```\n\nThen you can access the WebUI at `http://localhost:8081`.\n\n\u003e [!NOTE]\n\u003e you can use podman-compose instead of docker-compose, as it supports the same syntax. However, you should change the \n\u003e user to `0:0` it will appears to be running as root, but it will run as the user who started the container.\n\n## Unraid\n\nFor `Unraid` users You can install the `Community Applications` plugin, and search for **ytptube** it comes \npre-configured.\n\n# API Documentation\n\nFor simple API documentation, you can refer to the [API documentation](API.md).\n\n# Disclaimer\n\nThis project is not affiliated with yt-dlp or any other service.\n\nIt’s a personal project designed to make downloading videos from the internet more convenient. It’s not intended for \npiracy or any unlawful use.\n\nAI-based tools may have been used to assist with parts of this project. Regardless of how a change is produced, every \nchange is reviewed and approved by the human maintainer before it is included.\n\nThis project was built primarily for my own needs and preferences. The UI might not be the most polished or visually \nrefined, but I’m happy with it as it is. You can, however, create and load your own UI for complete customization.\n\nContributions are welcome, but I may decline changes that don’t align with my vision for the project. Unsolicited pull \nrequests may be ignored. For suggestions or feature requests, please open a discussion or join the Discord server.\n\n# Social contact\n\nIf you have short or quick questions, you are free to join my [discord server](https://discord.gg/G3GpVR8xpb) and ask\nthe question. keep in mind it's solo project, as such it might take me a bit of time to reply.\n\n# Donation \n\nIf you feel like donating and appreciate my work, you can do so by donating to children charity. For example [Make-A-Wish](https://worldwish.org). \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farabcoders%2Fytptube","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farabcoders%2Fytptube","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farabcoders%2Fytptube/lists"}