Commit Graph

122 Commits

Author SHA1 Message Date
Mattias Tall
299338ff80 Fix double _cookie_args() call in download; fix diagnostic player client
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 10:01:24 +02:00
Mattias Tall
3e439f2d3a Add Node.js to Docker image; use web player client only
Node.js is required by yt-dlp to solve YouTube's n-challenge (format URL
deobfuscation). Without it the web client returns no video formats.

The tv and ios player clients were removed — both require GVS PO tokens
that we don't have, so they only produce warnings and block every request.
The web client with Node.js installed gives 30+ formats and works cleanly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 09:57:02 +02:00
Mattias Tall
98d986cd95 Fix cookie fallback breaking yt-dlp in Docker; add OAuth2 auth flow
- _cookie_args() no longer falls through to --cookies-from-browser when
  cookies_file is configured but missing. Firefox isn't installed in the
  Docker image, so that fallback caused yt-dlp to exit with empty stdout
  and every metadata fetch to return "Video not found on YouTube".
- fetch_video_metadata() now retries without auth args if the first call
  fails, so a broken cookie config can't block public video fetches.
- Add use_oauth2 setting + full device-auth flow (POST /settings/oauth2-init,
  GET /settings/oauth2-status) with OAuth2Section UI in Settings page.
- Add GET /settings/ytdlp-test diagnostics endpoint.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 09:53:02 +02:00
inputnoise
b3284b35da Set yt-dlp cache dir to /data/yt-dlp-cache for persistent OAuth tokens
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 21:56:41 +02:00
inputnoise
32af6c1c49 Try tv player client first to bypass datacenter IP bot detection
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 21:45:05 +02:00
inputnoise
4ab8245a93 Debug: log fetch_video_metadata cookie args and errors
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 21:42:02 +02:00
inputnoise
8c291f5c2d Hardcode download bind mount directly to /mnt/serverdata/youtube
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 21:31:40 +02:00
inputnoise
9487261e11 Hardcode download volume path to /mnt/serverdata/youtube
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 21:30:36 +02:00
inputnoise
28441ca726 Use named volume for downloads so DOWNLOAD_PATH from stack.env is respected on every redeploy
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 21:28:47 +02:00
inputnoise
a09f8ac5c2 Use print() for cookie debug log so it shows in container logs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 21:25:39 +02:00
inputnoise
d50ccf399f Log cookie args on download start for debugging 2026-05-25 21:19:26 +02:00
inputnoise
a2a84d2c04 Use iOS player client to bypass YouTube bot detection (fixes 'only images available') 2026-05-25 21:04:24 +02:00
inputnoise
5f5ca52b95 Add cookies.txt upload UI — drag/drop or click to upload, stored in data volume 2026-05-25 21:01:02 +02:00
inputnoise
56dd5f8360 Add cookies file support for Docker; auto-detect /data/cookies.txt 2026-05-25 20:57:04 +02:00
inputnoise
bcc425b6fb Fix volume permissions: entrypoint chowns /data to uid 1000, run app as non-root 2026-05-25 20:50:10 +02:00
inputnoise
03b10b6f86 Always install latest yt-dlp on build
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 20:38:25 +02:00
inputnoise
2a2ba0f41c Proxy /files/ through nginx to backend for video playback
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 20:32:16 +02:00
inputnoise
1a5d074de4 Remove exposed backend port — only frontend proxy needed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 20:27:45 +02:00
inputnoise
a652f6e7a8 Add stack.env for Portainer repository deployment
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 20:26:33 +02:00
inputnoise
a3b73fbf72 Remove unused JELLYFIN_URL config
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 20:25:08 +02:00
inputnoise
7194ec45ec Remove ALLOW_REGISTRATION env var — managed via admin UI instead
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 20:16:15 +02:00
inputnoise
1827dd6c4e Initial commit — YT Hub
Self-hosted personal YouTube management app.
FastAPI + SQLite backend, React + Vite + Tailwind frontend.
Dockerfiles and compose included for Portainer deployment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 20:09:04 +02:00