Skip to content

v1.10.0 — extractor plugins + headless-browser fallback

Choose a tag to compare

@antlis antlis released this 30 Sep 20:09
· 2 commits to main since this release
415d1e4

Added

  • Extractor plugins (PLUGIN_DIR, ENABLE_PLUGINS): drop .py files exposing match() + resolve() into a directory and they resolve non-YouTube pages yt-dlp can't handle, before yt-dlp runs. Same contract as tg-media-bot / tg-mpv-bot; see examples/plugin_example.py. Docker mounts ./plugins at /plugins. The referer/headers a plugin returns are passed to ffmpeg via MediaStream(headers=…); a file:// media playlist gets ffmpeg's protocol whitelist widened.
  • Headless-Chromium fallback (ENABLE_BROWSER_FALLBACK, BROWSER_FALLBACK_TIMEOUT): when yt-dlp can't extract a non-YouTube page, the page is opened in headless Chromium (Playwright), the player's media request is captured and streamed. Opt-in in the Docker image via the INSTALL_BROWSER=true build arg (~450 MB); no-ops without it.
  • New dependencies: playwright, curl_cffi, pycryptodomex (the latter two are what extractor plugins typically need).

Fixed

  • /vplay <link> failed with "couldn't build the thumbnail: InvalidUrlClientError" for pages yt-dlp has no extractor for — the metadata lookup returns no thumbnail and thumb() raised on it before the resolvers ever ran. thumb() now falls back to the bundled background image whenever the thumbnail is empty or can't be fetched.