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 whenDOMAINis 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_PASSWORDanswers 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=offto switch back to native playback. - With
USE_EMBED=false, every embed surface is hidden and/embedshows a short "embedding is off" page. Embed codes now point at your ownDOMAIN. - Optional
FRAME_ANCESTORSsends aframe-ancestorspolicy 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 httpDOMAIN, the session cookie isSameSite=Lax, so a cross-site frame has no session and the player cannot start.localhostand127.0.0.1count as different sites. Before, the cookie was alwaysSameSite=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_KEEPALIVEandUPSTREAM_TCP_USER_TIMEOUT; set both to 0 for the old behaviour. - The magnet resolver uses IPv4 only.
USE_GEOIP_APIandGEOIP_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
DOMAINto exactly the address browsers open, including scheme, host and port. On a LAN over plain http useDOMAIN=http://192.168.1.10:8080. Behind an https reverse proxy useDOMAIN=https://example.comand always open the instance at that address: plainhttp://<ip>:8080will 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.