-
V2.0.0 Stable
released this
2026-03-20 20:13:20 -04:00 | 20 commits to main since this releasev2.0.0
Complete rewrite of Catalogerr (now Catalogarr). Not backwards compatible with v1.x databases or configs.
Auth
- Redis-backed sessions replace API key auth in the frontend
- HttpOnly cookies, 8-hour sliding TTL
require_authmiddleware for page routes,require_api_keyfor API routes
Archive / Restore
- Archive active media to local drive — copies full folder tree including NFO and artwork, removes from Sonarr/Radarr, optionally deletes source
- Restore archived media to Sonarr/Radarr root folder with automatic rescan trigger
- Season-level restore for TV — diffs archive seasons against Sonarr episode files before showing picker
- Drive cold/online status — blocks restores on cold drives, auto-detects offline paths
Metadata
- NFO reader — parses Kodi/Jellyfin/Plex
.nfofiles and copies local artwork before any network call - Shoko connector for anime — set
SHOKO_URL+SHOKO_API_KEY, flag paths as anime in config - Enrichment waterfall: NFO → Sonarr/Radarr → TMDB
- All API keys read at call time, not module import — env changes apply without restart
Tasks
merge_duplicate_media— merges per-episode media rows caused by bad filename parsing, runs daily and on demand- All tasks have
max_instances=1andcoalesce=True - Tasks page shows live per-task status via SSE
Active Catalog
- Multi-select with archive modal
- Poster click = select, title click = detail page
Bug Fixes
X-Api-Keywas sent as query param to Sonarr/Radarr instead of header — enrichment was silently failingload_dotenvmissingoverride=True—.envvalues ignored when vars existed in shell environment- ZIP restore path traversal vulnerability
POST /drives,PUT /drives,DELETE /drives,POST /scanhad no authenticationconnector_mediaand related tables referenced but never created in schema- TV show ID hash collisions on identical cleaned titles
tasks/streamcrashing withqueue.Emptyinstead of yielding keep-alive- Episode regex
\d{1,2}only matched E01-E99 — episodes 100+ indexed as separate shows - Database migrations gated on condition that silently skipped on existing installs
- Connector
INSERTreferencedusernamecolumn that didn't exist in pre-migration DBs gunicorn==20.1.0→23.0.0(Python 3.13 compat,pkg_resourcesremoved)gevent==23.9.1→24.11.1(Python 3.13 compat, Cythonlongbuild failure)
Breaking Changes
- Session auth replaces API key frontend auth — existing sessions invalid after upgrade
- Run
python3 admin.pyafter upgrade to ensure schema migrations apply gunicorn.conf.pyreplaces old service file flags — update systemd unit if self-hosting
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
0 downloads