Repository navigation
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.