17 Commits

Author SHA1 Message Date
Julien Calixte
782b397845 fix: skip DASH/HLS to bypass YouTube n-challenge requirement
DASH/HLS formats require n-challenge solving (needs JS runtime).
Skipping them falls back to progressive streams which carry audio
and don't need challenge solving.
2026-03-23 22:49:45 +01:00
Julien Calixte
cd23581870 fix: use tv_embedded player client to bypass n-challenge requirement
tv_embedded doesn't need n-challenge solving, falling back to web.
2026-03-23 22:47:42 +01:00
Julien Calixte
c5c0f21fbf fix: install Node.js and use web client for YouTube n-challenge solving
- ios player client doesn't support cookies, switch to web
- Node.js is required for yt-dlp to solve YouTube's n-challenge;
  without it only image formats are served
2026-03-23 22:44:44 +01:00
Julien Calixte
149a6a3cdd debug: log yt-dlp stderr to diagnose extraction failures 2026-03-23 22:42:42 +01:00
Julien Calixte
0c9a833c14 fix: use iOS player client to bypass YouTube bot detection
YouTube restricts available formats for bot-like requests. Specifying
player_client=ios,web makes yt-dlp impersonate the iOS app which has
broader format access without requiring cookies.
2026-03-23 22:39:48 +01:00
Julien Calixte
b5031c6614 fix: use bestaudio/best/b format selector for broader yt-dlp compatibility 2026-03-23 22:33:56 +01:00
Julien Calixte
210b2b0dcf fix: remove --format flag from yt-dlp to avoid unavailable format errors
--extract-audio + --audio-format mp3 handles conversion regardless of
source format, so the explicit --format bestaudio/best was unnecessarily
restrictive.
2026-03-23 22:32:13 +01:00
Julien Calixte
880c23dbe5 fix: upgrade yt-dlp to 2025.x to fix YouTube extraction
YouTube regularly breaks older yt-dlp versions. Bumped the minimum version
and added a separate Docker layer for yt-dlp so it can be upgraded without
busting the main pip cache.
2026-03-23 22:29:25 +01:00
Julien Calixte
075c621614 fix(sw): skip caching non-http/https requests 2026-03-23 22:26:56 +01:00
Julien Calixte
974f2ea326 fix: normalize YouTube URLs before passing to yt-dlp
Converts youtu.be short URLs to youtube.com/watch?v= format and strips
tracking/share parameters (si=, is=, feature=, etc.) that can confuse yt-dlp.
2026-03-23 22:25:02 +01:00
Julien Calixte
0b597e0b01 feat(pwa): rename short_name to Transcript 2026-03-23 22:23:41 +01:00
Julien Calixte
42540752af fix(pwa): switch service worker to network-first strategy
Cache-first was preventing updates from reaching users. Network-first
always fetches fresh content and only falls back to cache when offline.
Also bumps cache version to evict stale cache-first entries.
2026-03-23 19:33:27 +01:00
Julien Calixte
57910462e4 feat: add YouTube cookies upload via web UI
Adds a Settings panel to upload a cookies.txt file directly from the
browser, persisted in a named Docker volume. yt-dlp uses the file
when present to bypass YouTube bot detection.
2026-03-23 19:32:51 +01:00
Julien Calixte
c49ecab33f feat: add images 2026-03-23 19:28:17 +01:00
Julien Calixte
da1f3566c2 feat: turn into a pwa 2026-03-23 19:25:34 +01:00
Julien Calixte
1afe86b79a fix: no ports for Traefik 2026-03-23 19:13:01 +01:00
Julien Calixte
8e137ace86 init 2026-03-23 18:54:10 +01:00