github webtor-io/self-hosted v2.1.2

5 hours ago

Webtor v2.1.2 fixes the login session on instances opened over plain http by LAN address, and updates all 16 bundled services to builds that ran in production first.

Fixes

  • An instance opened over plain http by its LAN address (http://192.168.1.10:8080, http://nas.local:8080) now keeps its login session when DOMAIN is set to that address. Before, adding a magnet, Stream, Download, the library, the profile and the password login all failed with "CSRF token mismatch" (#116).
  • When the database is briefly unavailable, an instance without ADMIN_PASSWORD answers 503 instead of showing a login form for a password that does not exist. CSS, scripts and icons keep loading during such an outage.
  • Thumbnails can no longer take the web UI down. Frame extraction is limited to 2 processes with 2 threads and 1.5 GiB each, and videos larger than 4K get no extracted frame.
  • Downloads and Vault copies now receive only hash-verified data. Before, a bad chunk from a peer could be served before its hash check failed. Several other ways a cached file could be served with holes are fixed too.
  • The disk cleaner now deletes only torrent and transcode cache directories, and skips a torrent the seeder has open. Before, it could remove other directories in the data volume (such as lost+found), and files from under a running stream.
  • Vault: a container restart no longer turns saves in progress into failures with a 30-minute backoff. Hybrid torrents with padded files and pure v2 torrents can be saved, and a resumed upload no longer skips or duplicates part of a file.
  • A probe the viewer abandoned is no longer cached as a failure for an hour, so Watch and thumbnails work on the next try.
  • Magnets of very large v2 or hybrid torrents no longer exhaust the resolver's memory or keep the CPU busy after the request ends. A magnet with an all-zero info-hash is rejected as invalid instead of crashing the resolver.
  • Choosing audio or subtitle tracks across many files no longer starts failing after about 17 files.
  • Job logs of restarted jobs now expire instead of piling up in Redis.
  • API keys and tokens are redacted from the logs of the web UI, seeder, Vault and REST API.

New

  • Watch and Download progress is now one line naming the current stage, with a real progress bar. The detailed steps fold under "Show steps".
  • Download opens its own dialog, so a video that is already playing keeps playing.
  • "File info" on video and audio files lists the streams: codecs, resolution, languages, captions inside the file and an estimated bitrate.
  • The torrent page shows the transfer as a swarm → cache → you chain, with the speed of each link and a piece bar, and explains why a stream is waiting.
  • Library and Vault: a "Select" mode removes several items at once.
  • When a transcoding session dies, the player restarts the stream where the viewer was instead of spinning forever. A player that never starts says so.
  • iPhone and iPad on iOS 17.1+ play HLS through the web player by default. AirPlay is not available on this path; add ?mms=off to switch back to native playback.
  • With USE_EMBED=false, every embed surface is hidden and /embed shows a short "embedding is off" page. Embed codes now point at your own DOMAIN.
  • Optional FRAME_ANCESTORS sends a frame-ancestors policy on every page except the embedded player. It is empty by default, which sends no header, as before.

Breaking changes

  • Embedding the player on other sites now needs the instance served over https with DOMAIN=https://…. With an http DOMAIN, the session cookie is SameSite=Lax, so a cross-site frame has no session and the player cannot start. localhost and 127.0.0.1 count as different sites. Before, the cookie was always SameSite=None; Secure.

Internal

  • All 16 component images are refreshed. 15 are the exact builds running in production now; the web UI is the build production ran from 18 to 20 October.
  • Services finish in-flight requests on stop (WEB_SHUTDOWN_TIMEOUT, default 20s).
  • torrent-http-proxy holds at most 1 MiB of unsent data per connection, and detects an upstream that vanished in about 20 s instead of about 150 s. This is set by UPSTREAM_KEEPALIVE and UPSTREAM_TCP_USER_TIMEOUT; set both to 0 for the old behaviour.
  • The magnet resolver uses IPv4 only.
  • USE_GEOIP_API and GEOIP_API_SERVICE_* are gone from the web UI; leftover values are ignored.
  • New smoke scenarios cover the player embed (/show → /embed) and an instance opened under a LAN name over plain http.

Upgrade

  • No database schema migrations. The first time the seeder opens a torrent's completion database under the data volume, it adds two columns to it; going back to 2.1.1 keeps working.
  • Set DOMAIN to exactly the address browsers open, including scheme, host and port. On a LAN over plain http use DOMAIN=http://192.168.1.10:8080. Behind an https reverse proxy use DOMAIN=https://example.com and always open the instance at that address: plain http://<ip>:8080 will not keep the session. See "Setting a Custom Domain" in the README.
  • Back up persistent application data before upgrading.
  • Smoke tests passed on amd64 and arm64 for the exact release commit, 90cfdb4b509d49f11bf0158fc95bedd3609b73d2. docker pull ghcr.io/webtor-io/self-hosted:2.1.2.

Don't miss a new self-hosted release

NewReleases is sending notifications on new releases.