{"id":50439959,"url":"https://github.com/willuhmjs/wytui","last_synced_at":"2026-05-31T18:31:15.098Z","repository":{"id":354001105,"uuid":"1221743495","full_name":"willuhmjs/wytui","owner":"willuhmjs","description":"Will's YouTube User Interface. Fully-featured YTDL web UI. ","archived":false,"fork":false,"pushed_at":"2026-05-26T05:09:09.000Z","size":898,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T05:28:24.613Z","etag":null,"topics":["ytdl"],"latest_commit_sha":null,"homepage":"http://wytui.willuhmjs.com/","language":"Svelte","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/willuhmjs.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":"2026-04-26T16:16:22.000Z","updated_at":"2026-05-26T05:09:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/willuhmjs/wytui","commit_stats":null,"previous_names":["willuhmjs/wytui"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/willuhmjs/wytui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willuhmjs%2Fwytui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willuhmjs%2Fwytui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willuhmjs%2Fwytui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willuhmjs%2Fwytui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/willuhmjs","download_url":"https://codeload.github.com/willuhmjs/wytui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willuhmjs%2Fwytui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33744444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["ytdl"],"created_at":"2026-05-31T18:31:14.240Z","updated_at":"2026-05-31T18:31:15.092Z","avatar_url":"https://github.com/willuhmjs.png","language":"Svelte","funding_links":[],"categories":[],"sub_categories":[],"readme":"# wytui\n\nA self-hosted web UI for [yt-dlp](https://github.com/yt-dlp/yt-dlp), built with SvelteKit 5. Download videos from any yt-dlp compatible platform.\n\n## Features\n\n- **Download profiles** — Pre-configured presets (4K, 1080p, 720p, 480p, MP3, AAC, FLAC) and custom profiles\n- **Two-tier storage** — Temporary cache with configurable quota + permanent library organized by uploader\n- **Jellyfin integration** — Auto library scan, thumbnail artwork, and deep-link to Jellyfin search\n- **Subscriptions** — Monitor channels/playlists, auto-download new content on a schedule; backfill by date or download entire channels\n- **Livestream monitors** — Watch livestreams, auto-download when live\n- **File reconciliation** — Automatically detects and removes DB records for files deleted externally (e.g. via Jellyfin)\n- **Real-time progress** — Server-Sent Events for live download status\n- **OIDC authentication** — OpenID Connect SSO with admin/user roles\n- **Mobile-friendly** — Web Share API on iOS for save-to-photos\n\n## Quick Start\n\n### Docker Compose\n\nThe `docker-init.sh` script automatically generates secure random credentials on first run:\n\n```bash\n./docker-init.sh up -d\n```\n\nThis creates a `.env` file with secure random passwords. The file is auto-generated if it doesn't exist.\n\n**Manual setup** (if you prefer):\n\n```bash\n# Generate secure secrets\nexport POSTGRES_PASSWORD=$(openssl rand -hex 32)\nexport AUTH_SECRET=$(openssl rand -hex 32)\n\n# Save to .env file\necho \"POSTGRES_PASSWORD=$POSTGRES_PASSWORD\" \u003e .env\necho \"AUTH_SECRET=$AUTH_SECRET\" \u003e\u003e .env\n\ndocker compose up -d\n```\n\n\u003e 💾 **Important**: The `.env` file contains your database password. Back it up securely!\n\n### Helm\n\n```bash\nhelm install wytui oci://ghcr.io/willuhmjs/wytui\n```\n\nWith custom values:\n\n```bash\nhelm install wytui oci://ghcr.io/willuhmjs/wytui -f values.yaml\n```\n\nThe chart includes a bundled PostgreSQL by default. To use an external database:\n\n```yaml\npostgresql:\n  enabled: false\n  secret:\n    url: \"postgresql://user:pass@host:5432/wytui?schema=public\"\n```\n\n### Environment Variables\n\n| Variable | Description |\n|---|---|\n| `DATABASE_URL` | PostgreSQL connection string |\n| `AUTH_SECRET` | Session signing secret |\n| `AUTH_TRUST_HOST` | Set `true` behind a reverse proxy (optional) |\n| `ORIGIN` | Public URL of the app (optional, defaults to `http://localhost:3000`) |\n| `ADMIN_USERNAME` | Auto-create admin user, skipping the setup wizard (optional) |\n| `ADMIN_PASSWORD` | Password for the auto-created admin user (optional) |\n| `OIDC_ISSUER_URL` | OIDC issuer URL (optional) |\n| `OIDC_CLIENT_ID` | OIDC client ID (optional) |\n| `OIDC_CLIENT_SECRET` | OIDC client secret (optional) |\n| `OIDC_DISPLAY_NAME` | OIDC provider display name (optional, defaults to \"SSO\") |\n\n## OIDC Authentication\n\nwytui supports OpenID Connect for single sign-on. Set the `OIDC_ISSUER_URL`, `OIDC_CLIENT_ID`, and `OIDC_CLIENT_SECRET` environment variables to enable it.\n\nWhen configuring your OIDC provider, use the following redirect URL:\n\n```\nhttps://\u003cyour-wytui-domain\u003e/auth/oidc/callback\n```\n\nUsers who sign in via OIDC are created with a default `user` role. An admin can promote them from the admin panel.\n\n## Tech Stack\n\n- **Frontend**: SvelteKit 5 (Svelte with runes)\n- **Database**: PostgreSQL with Prisma ORM\n- **Auth**: Auth.js with OIDC support\n- **Real-time**: Server-Sent Events (SSE)\n- **Styling**: Custom dark theme CSS\n\n## Legal Disclaimer\n\nThis software is provided \"as is\" for personal and educational use. Users are solely responsible for ensuring their use complies with all applicable laws, terms of service, and copyright regulations. The developers assume no liability for misuse.\n\n## License\n\nMIT License — see LICENSE file for details. The MIT license covers this software's code only; it does not grant rights to any third-party content.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilluhmjs%2Fwytui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwilluhmjs%2Fwytui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilluhmjs%2Fwytui/lists"}