1.6.0 (2026-10-09)
Features
- api: support pack filename shows the InfiniDysk version that generated it (#1609) (0f1e775)
- ui: manage files in compact tree and list views with health filters (#1546) (d83a6c1)
- webdav: stream traces separate connection, permit, and failed-attempt waits per request (#1661) (738a87c)
- webdav: stream traces show what each playback stall was waiting on (#1674) (9fd1869)
Bug Fixes
- arr: Sonarr repairs no longer resolve to a different series whose folder name shares a prefix (#1620) (c4a4229)
- arr: stop false "Imports are taking longer than expected" alerts (#1673) (34a32e2)
- db: recheck pending history cleanup under the SQLite write lock (#1599) (e3f079d)
- deps: Bump brace-expansion from 2.1.4 to 2.1.7 in /frontend (#1603) (de57eb3)
- deps: Bump github/codeql-action (#1629) (3544821)
- deps: Bump ip-address from 10.4.0 to 10.7.2 in /frontend (#1596) (be46762)
- deps: Bump proxy-addr from 2.0.7 to 2.0.8 in /frontend (#1647) (a03cd96)
- deps: Bump source-map-js from 1.2.1 to 1.2.2 in /frontend (#1648) (44428f2)
- deps: Bump the npm-minor-and-patch group across 1 directory with 8 updates (#1601) (aec5115)
- deps: Bump the npm-minor-and-patch group across 1 directory with 9 updates (#1642) (1709f13)
- deps: Bump the nuget-minor-and-patch group with 1 update (#1602) (edb7aa4)
- deps: Bump zensical from 0.0.62 to 0.0.64 in the docs-python group (#1600) (8064d1e)
- deps: Bump zensical from 0.0.64 to 0.0.65 in the docs-python group (#1626) (0ad6d23)
- deps: Bump zensical from 0.0.65 to 0.0.66 in the docs-python group (#1641) (a388993)
- health: health checks no longer appear stuck at 0% for hours on dead releases (#1611) (8927443)
- health: replace releases that break during playback instead of keeping them as damaged (#1631) (e250e47)
- nntp: playback and imports no longer stall when a provider refuses extra connections (#1623) (5b5260e)
- nntp: skip reconnect pacing when the caller cancels a read (#1658) (6f8a40c)
- nntp: treat 481 "maximum connections per user" as a connection limit (#1668) (c50c2f9)
- queue: fail over when a provider returns another post's first segment (87a6f87)
- queue: imported files keep their Usenet post date when Queue Pipelining is enabled (#1637) (036cbea)
- queue: preserve playback for NZBs with omitted interior parts (#1594) (b3396fe)
- queue: skip unavailable optional first-segment metadata (#1625) (b9604a2)
- ui: reserve scrollbar gutter in media preview to stop resize loop (#1672) (ec9f606)
- usenet: classify corrupt decoded bodies as health-neutral discards (#1678) (ffca62a)
- usenet: distinguish connection-open failures from local admission waits (#1619) (7f46bc3)
- usenet: playback no longer stalls when read-ahead fallbacks hold every failover slot (#1657) (279ead3)
- usenet: share DATE liveness validation for probes and keepalives (#1665) (1a5276a)
- webdav: bound view response copies and handle length overruns (#1592) (d79c480)
- webdav: open full read-ahead window after the first segment is read (#1653) (f830550)
- webdav: seeking near the end of some files no longer fails (#1656) (4cdc4a0)
Performance Improvements
- api: resolve filtered tree directories with one descendant scan (#1671) (9838c46)
- queue: faster seeking and smoother playback in multi-volume RAR releases (#1636) (40595d9)
- queue: imports with queue pipelining enabled no longer download archive headers twice (#1622) (b0df768)
- queue: RAR releases stream faster after the first volume (#1634) (85de0cf)
- usenet: multi-volume imports no longer stall on throttled reconnects (#1621) (b010c99)
- webdav: disable thread-pool unfair semaphore spinning to cut streaming CPU (#1614) (e406258)
- webdav: memory returns to idle after playback stops (#1617) (37fba57)
- webdav: new streams and seeks use less memory while ramping up (#1618) (f399e97)
- webdav: PAR2-verified files now stream at full speed (#1664) (4d5fc59)
- webdav: pause prefetch when shared streams have no readers (#1675) (b73f56a)
- webdav: playback keeps moving when one article is slow to arrive (#1660) (4bbffc2)
- webdav: releases with very large articles start playing faster and use less memory (#1635) (c7d0da7)
- webdav: seeks and playback starts no longer wait on one slow first article (#1670) (54934ff)
- webdav: smoother playback across multi-volume archive boundaries (#1659) (f9db281)
- webdav: smoother playback across RAR volume boundaries (#1630) (13b1bee)
- webdav: smoother playback with far shorter stalls between Usenet articles (#1638) (6260e1d)
- webdav: smoother playback with fewer stalls while streaming (#1606) (31c837f)
UX
- ui: cleaner import queue with labelled bulk actions and mobile-friendly rows (#1649) (799ab83)
- ui: cleaner, mobile-friendly health page (#1650) (e114301)
Highlights
This release is all about playback. 1.6.0 removes the waits that caused stutter: slow articles, RAR volume boundaries, refused connections, and seeks that blocked on one first article.
Benchmarks: 1.5.1 vs 1.6.0
Same machine, real Usenet provider, 20 connections. Versions were alternated run by run to cancel out provider drift.
Sustained streaming (60 s reads)
| File type | 1.5.1 | 1.6.0 | Change |
|---|---|---|---|
| Stored RAR4 | 42 MB/s | 131 MB/s | ≈3× |
| Stored RAR5 | 72 MB/s | 147 MB/s | ≈2× |
| Direct MKV | 124 MB/s | 167 MB/s | +34% |
| PAR2-verified file | 7–9 MB/s | 48–83 MB/s | 6–9× |
| Slowest 5% of seconds, RAR5 | 14 MB/s | 111 MB/s | ≈8× |
| Slowest 5% of seconds, RAR4 | 3 MB/s | 80 MB/s | ≈27× |
Stalls, seeking and playback start
| Metric | 1.5.1 | 1.6.0 |
|---|---|---|
| Longest stall, direct MKV | 2.1 s | 72 ms |
| Longest stall, stored RAR5 | 576 ms | 53 ms |
| Throughput after a seek, RAR4 | ~8 MB/s | ~35 MB/s |
| Throughput after a seek, RAR5 | ~7 MB/s | ~31 MB/s |
| Playback start, RAR5 | 928 ms | 461 ms |
| Playback start, RAR4 | 749 ms | 469 ms |
| First byte, cold RAR5 open | 121 ms | 46 ms |
| CPU per GB streamed | — | ~46% less |
Medians per version. Throughput depends on your provider and connection count, so treat these as relative gains.
What changed under the hood
- Interleaved streaming batches: one slow connection no longer holds up the next article
- RAR and multi-volume releases play smoothly across volume boundaries
- Seeks and playback starts no longer wait on one slow first article
- PAR2-verified files stream with full read-ahead
- Providers that refuse extra connections (
481/502) no longer stall playback or imports - Memory returns to idle after playback stops
Explorer replaces Files
Browse /content in a compact Tree or a flat List. Filter the whole library by health, next scan, library link, category, indexer, repair outcome, size, and date. You can also requeue a health check or request an *Arr replacement for a single file, right from the row.
Recommended: turn on *Arr "Remove Completed"
Tip
In Radarr/Sonarr go to Settings → Download Clients → InfiniDysk. Turn on Show Advanced, then enable Remove Completed. Completed Download Handling → Enable must also be on.
Why: a history entry protects its file from Remove Orphaned Files, even after the *Arr upgrades or re-grabs and stops using it. Without this setting, superseded grabs pile up in History. Turning it on lets the *Arr clear the entry right after import.
It never deletes your content. Imported files, symlinks, and .strm files keep working, and Health repair and PAR2 recovery still work. Profile grabs aren't affected.
See Connect Radarr/Sonarr → Remove Completed.
Health & repair
- Releases that break during playback are now replaced instead of kept as damaged
- Zero-tolerance replacement is available if you want a release swapped on the first missing or corrupt article (see the Repairs docs)
- Health checks no longer sit at 0% for hours on dead releases
- No more false "Imports are taking longer than expected" alerts
- Sonarr repairs no longer match a different series whose folder name shares a prefix
Also
- Cleaner, mobile-friendly Queue and Health pages
- Stream traces now show what each stall was waiting on (connection, permit, failed attempt), which makes support packs far more useful
- Imports with Queue Pipelining keep the Usenet post date and no longer fetch archive headers twice
Upgrading
docker pull ghcr.io/infinidysk/infinidysk:latest