Changelog
Track every improvement, fix, and feature across the Schrödinger's Copy stack.
schrodrive.org landing + live contributors
Landing site for schrodrive.org on Cloudflare Workers via opennextjs/cloudflare with live contributors page at /contributors
Landing env vars now mirror src/core/config.ts exactly — corrected PORT, PROVIDERS, ADD_STRATEGY, MOUNT_BASE, etc., and marked Media Manager as Coming Soon
Live version badge on homepage now fetches api.github.com/repos/.../releases/latest instead of hardcoded v0.11.2
PikPak now shows Community Tested (teal) instead of Untested to reflect community testing
SEO: next-sitemap, robots.txt, llms.txt, JSON-LD SoftwareApplication + 12 FAQs, www → apex 308, sitemap now committed
Favicon now uses README logo (assets/logo.png) via app/icon.png and proper 32×32 favicon.ico
arr-bridge persistence, mount defaults, organizer review
qBittorrent categories lost on restart — arr_categories now persisted in SQLite and restored on handleCategories (#78)
Tracked torrents lost on restart — arr_tracked_torrents persisted as state_json and restored on startArrBridge (#79)
Nested multi-file staging collisions — scanDirRecursive now returns path.relative and creates parent dirs (#80)
Mount cache defaults masked — MOUNT_OPTIONS default changed to "" so individual MOUNT_* are effective (#81)
Organizer identity review workflow — structured mediaParser + organizer_reviews tables and /api/organizer/review dashboard (#82)
DB scrub, shared base32, CI guards
Runtime databases (data/tokens.db) were committed — scrubbed from history via filter-branch, added to .gitignore, added guard.yml to fail PRs that add *.db
Base32 infohash handling used Buffer.from(..., base64) — extracted single base32ToHex to core/utils
IPv6 SSRF bypass — assertPublicHttpUrl now handles Bun vs Node hostname brackets
*arr bridge flakiness under bun test --parallel — added Map<port,Server> and per-suite tmpDir dbPath isolation
CONTRIBUTING.md and CONTRIBUTORS.md with live commit counts, plus scripts/fix-stale-history.sh
Multi-arch release images, CodeQL security review
Release Docker images (version tags) were amd64-only — every tagged release shipped only a linux/amd64 manifest despite :latest being multi-arch. Release builds now produce both linux/amd64 and linux/arm64
SSRF protection on .torrent URL fetching — URLs sourced from Prowlarr/Jackett search results are now validated to reject internal/private addresses before the server fetches them
Google Drive API query injection in the cloud link mount adapter — folder/file names are now correctly escaped
Incomplete URL scheme validation in the directory-listing scraper — data: and vbscript: links are now blocked alongside javascript:
ReDoS-prone regex in the Prowlarr/Jackett TMDB-suffix cleanup — search query length is now bounded before regex processing
Regression test suite for the SSRF guard and Drive query escaping
*arr bridge startup fix, dependency security bump, test infrastructure
The *arr bridge (fake qBittorrent API) failed to start under Express 5 — a dropped wildcard-route syntax left the bridge unbound on its port, so Radarr/Sonarr got connection-refused on 8282
next.js bumped to patch several high/moderate severity security advisories (App Router DoS, middleware/proxy bypass, SSRF in rewrites and Server Actions)
New unit/e2e/regression test suite (bun:test) plus a GitHub Actions CI pipeline and pre-commit hook running typecheck + tests on every change
Seerr (Overseerr + Jellyseerr merger) support, codebase deduplication
Seerr support — the merged successor to Overseerr + Jellyseerr, sharing the same API. New SEERR_URL/SEERR_API_KEY/SEERR_AUTH env vars take priority, with full backward compatibility for existing OVERSEERR_*/JELLYSEERR_* configs
/health endpoint now reports cloud-link pre-warm status (cloudLinksPreWarm) so deploy scripts can gate Plex start on cache readiness
Removed 600+ lines of duplicated code across 34 files via shared utility modules
Plex integration simplified — dropped the Docker-socket-dependent auto-start hack in favour of a simple reachability check
External WebDAV mounts, Plex auto-start safety, 429 spam fixes
External WebDAV mount support — mount third-party WebDAV servers (NAS shares, media servers) as read-only FUSE filesystems via rclone, configured via webdav.json or WEBDAV_MOUNTS env var
Organiser skip flag for WebDAV mounts — skipOrganiser: true (default) excludes pre-sorted content from organiser scans
Post-pre-warm Plex scan trigger — triggers Plex library scan after PROPFIND cache pre-warm completes
Zero-block Plex architecture — never-block PROPFIND with deferred FUSE mount, breadth-first pre-warm traversal
Rate-limit background refresh queue to suppress 429 log spam during pre-warm
Added rclone retry limits (--retries 1 --low-level-retries 3) to prevent D-state kernel hangs from 503 retry loops
Disk cache OOM fix — reduced MAX_DISK_CACHE_SIZE from 3000 to 500 to prevent OOM on serialisation for large directories
Two-phase pre-warm — signal bridge ready after depth-1 scan, full crawl continues in background
11-provider debrid ecosystem — the most provider support of any debrid automation tool
7 new debrid providers (11 total): Debrid-Link, Deepbrid, Offcloud, Put.io, MegaDebrid, Seedr, PikPak — each with full interface implementation
WebDAV bridge ports for all 7 new providers (9119–9127)
Download token rotation support for all 11 providers
AllDebrid status updated from Untested to In-testing with live accounts
Native *arr bridge
Native Radarr/Sonarr integration via built-in fake qBittorrent Web API v2 bridge — replaces Decypharr, RDT-Client, and other bridge tools
Zero external containers — full torrent lifecycle: receives magnet → submits to debrid → polls status → detects on mount → creates symlinks → reports completion
Dual pipeline support: Overseerr → SchröDrive (direct) AND Overseerr → Radarr/Sonarr → SchröDrive (bridge) simultaneously
README: Added comprehensive *arr bridge documentation with architecture diagrams and comparison table
.torrent file support, cloud storage mounts, STRM short-codes
.torrent file support — indexer results that return .torrent URLs are no longer discarded, implemented across all 11 providers
Cloud storage virtual mounts: Mega, Google Drive, Dropbox, OneDrive via rclone combine backend
STRM short-code service: stable 16-char codes that 302 redirect to ephemeral CDN URLs with 7-day TTL
Error video fallback: 10-second black MP4 served when download URLs are broken, preventing media player hangs
Anime output category: organiser now outputs anime to Anime/ instead of lumping into TV/
Cloud Link Manager: mount public shared folder links (Mega, GDrive, Dropbox) as FUSE directories
HTTP directory listing adapter: mount any open directory (Nginx autoindex, Apache mod_autoindex)
TV season packs classified as movies — added season-only pack detection patterns
Mount stability, persistent deduplication, Zurg-style mounts
Zurg-style organised mounts: WebDAV bridge presents virtual __all__/, anime/, shows/, movies/ directories
Jellyseerr support: JELLYSEERR_URL, JELLYSEERR_API_KEY, JELLYSEERR_AUTH as drop-in Overseerr replacements
Persistent Overseerr processed state and known_magnets in SQLite — survives container restarts
Mount health monitor: removed 502/503 from fatal error patterns — they are intentional for dead torrents and were causing unnecessary remounts during Plex streams
Repeated torrent re-adding: in-memory processed Set lost on restart now persisted to SQLite, plus infohash-based deduplication
Multi-token download rotation + self-healing
Multi-token download rotation: provider-agnostic token rotation inspired by Zurg, rotating on HTTP 503 bandwidth limits across all 11 providers
Unified media server stream detection: pauses background loops during active Plex, Jellyfin, and Emby streams
FUSE mount self-healing and port probing: auto-detects stale mounts, scans up to 20 sequential ports if WebDAV port is blocked
Graceful FUSE unmounting on shutdown (SIGTERM/SIGINT) and auto-updater exits — prevents orphaned rclone processes
RealDebrid repair robustness: propagation delays and automatic 404 retry loops when re-adding magnets
Mount service: EEXIST crash on startup with stale FUSE mount points from previous crashes
Rate limiter: recordSuccess() no longer clears active backoffs prematurely
SQLite persistence + Stremio addon + 11-provider repair
SQLite persistence layer with WAL journalling, 5 tables, graceful degradation, and daily pruning
Stremio addon server: SchröDrive exposes itself as an installable Stremio addon for searching and streaming
Torrent repair on all 11 providers (TorBox, RealDebrid, AllDebrid, Premiumize, Debrid-Link, Deepbrid, Offcloud, Put.io, MegaDebrid, Seedr, PikPak) with 3-phase repair cycle
Blacklist auto-migration from /tmp to ./data with SQLite backup and recovery
Feature parity — zero gaps vs competitors
Trakt, Mdblist, and Listrr watchlist integrations — 6 total watchlist sources
Torrentio, Comet, Zilean, and Mediafusion scrapers with shared Stremio helpers
Unified search layer: searchAll() merges indexer + scraper results with deduplication and SCRAPER_MODE config
3-phase torrent repair: same-provider → cross-provider → delete + blacklist + replacement search
Pre-emptive repair: detects stalling torrents (stuck >30min) and repairs before they die
Major release — replaces PD Zurg + TorBox Media Center
Plex, Jellyfin, and Emby watchlist integration with unified poller and library refresh
Dynamic per-endpoint rate limit learning with adaptive delays, persisted to JSON
Infringing content blocklist with JSON-backed storage, pattern matching, and provider attribution
AllDebrid and Premiumize provider implementations with full DebridProvider interface
Persistent torrent blacklist and dead torrent auto-lifecycle (10 failures → delete → blacklist → replace)
Runtime migrated from Node.js to Bun — Dockerfile, lockfiles, and all scripts updated
Full code documentation overhaul with JSDoc across 6 core files
Stay in superposition
Get notified of major releases and updates.
We respect your privacy. Unsubscribe any time.