• V2.0.0 27d2687db5

    V2.0.0 Stable

    patrick19368 released this 2026-03-20 20:13:20 -04:00 | 20 commits to main since this release

    v2.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_auth middleware for page routes, require_api_key for 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 .nfo files 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=1 and coalesce=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-Key was sent as query param to Sonarr/Radarr instead of header — enrichment was silently failing
    • load_dotenv missing override=True.env values ignored when vars existed in shell environment
    • ZIP restore path traversal vulnerability
    • POST /drives, PUT /drives, DELETE /drives, POST /scan had no authentication
    • connector_media and related tables referenced but never created in schema
    • TV show ID hash collisions on identical cleaned titles
    • tasks/stream crashing with queue.Empty instead 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 INSERT referenced username column that didn't exist in pre-migration DBs
    • gunicorn==20.1.023.0.0 (Python 3.13 compat, pkg_resources removed)
    • gevent==23.9.124.11.1 (Python 3.13 compat, Cython long build failure)

    Breaking Changes

    • Session auth replaces API key frontend auth — existing sessions invalid after upgrade
    • Run python3 admin.py after upgrade to ensure schema migrations apply
    • gunicorn.conf.py replaces old service file flags — update systemd unit if self-hosting
    Downloads