Catalogerr Changelog
v1.2.0 (2025-10-26 - live_build)
- Added: Drives now get assigned UUIDv4 IDs instead of auto-increment integers (guarantees global uniqueness across installs).
- Added: Poster re-cache now also processes
connector_media entries, caching posters locally from their stored URLs.
- Added: Detailed terminal logging for poster caching (metadata + connector_media paths clearly shown).
- Changed:
run_poster_cache upgraded with DB-first logic — pulls poster/backdrop directly from DB if present before attempting external lookups.
- Changed: Drive insert logic now explicitly inserts
(id, path) using UUIDs — no more NULL IDs in drives table.
- Fixed: Connector poster caching now respects fallback posters and won’t leave broken URLs in DB.
- Fixed: Metadata re-cache ensures both
poster_url and backdrop_url always resolve to cached or fallback files (never left NULL).
- Known: Connector poster caching still depends on external APIs if DB URLs are invalid — retry logic planned for
v1.2.1.
v1.1.3 (2025-10-25 - live_build)
- Added:
install.sh installer script (auto-download release, setup directories, generate configs, and register systemd service).
- Added: Automatic
.env + config.yaml generation with secure defaults and interactive admin password prompt.
- Added: Installer dynamically creates
catalogerr-api.service with correct user/group, working directory, and gunicorn binary path.
- Added: Admin registration script (
admin.py) ensures admin user + API key seeded directly into the database.
- Added: Poster re-cache flow now includes IMDb Guess Fallback — if TMDB + Sonarr/Radarr fail, system attempts to guess via IMDb search before fallback.
- Changed: Poster caching order now standardized (TMDB → IMDb → Sonarr/Radarr → borrow connector_media → IMDb guess → fallback).
- Changed: Poster caching task now includes detailed terminal logging (branch taken per media, source used, final cached path).
- Changed: Installer now ensures
backups/, db/, and static/posters directories are created with proper permissions for runtime user.
- Changed:
install.sh detects current sudo user (not always "docker") and applies correct ownership across files and DB.
- Improved: DB schema initialization inside
admin.py — guarantees users and api_keys tables exist.
- Fixed: Permission errors when restoring backups — installer explicitly sets
/etc/Catalogerr_live/backups writable by service user.
- Fixed: Systemd
WorkingDirectory mismatches by creating the unit dynamically instead of shipping a static file.
- Known:
install.sh still considered experimental — further testing required across different distros (Ubuntu/Debian/Alpine).
v1.1.2 (2025-10-24 - live_build)
- Added: Archive detail page now displays enriched metadata (overview, genres, rating, TMDB link).
- Added: Archive detail now shows related Seasons, Episodes, and Files tables with sizes.
- Added: Redundancy stats now calculate Archive-only, Active-only, and Both (protected) media coverage.
- Changed: Drive
total_size values in DB (e.g. 2 TB, 1 TB) are now correctly parsed into bytes for capacity/utilization stats.
- Changed: Utilization per-drive now computes percentage using parsed capacity (supports TB/GB text values in DB).
- Changed: Stats page: redundancy coverage now shows clear percentages based on archive vs active cross-matching.
- Fixed: API keys are now correctly reused from DB instead of regenerating on each login (prevents mismatched session keys).
- Fixed: API key clearing on logout now properly closes all SSE streams and wipes
localStorage.
- Improved:
api.js updated to always nuke stale keys before saving new ones and block reconnect loops.
- Improved: Frontend SSE handling – streams are skipped until a fresh key is confirmed after login.
- Changed: Login page redesigned: centered form fields, improved spacing, added logo + subtitle for better UX.
- Changed: Redirect flow: invalid/missing API key forces user to
/invalid_api with clear error messaging.
- Changed: UI: Improved layout for archive details — posters, backdrops, and metadata are better aligned with Servarr-style UX.
v1.1.1 (2025-10-15 - live_build)
- Changed: Frontend: All templates now consistently import
/static/js/api.js for API helpers.
- Fixed: Duplicate
apiKey / apiFetch declarations that caused redirect loops.
- Fixed:
toggleSection not defined in settings.html due to missing script scope.
- Refactored: Dashboard, Tasks, Settings, and Stats pages updated to use a single API key flow (
X-Api-Key).
- Reorganized project structure for easier development:
services/ → core logic (auth, tasks, jobs, settings, stats, utils)
routes/ → all Flask blueprints (tasks.py, catalog.py, system.py, etc.)
modules/ → connector + poster handling logic
static/js/api.js → shared API helpers (fetch, SSE, key handling)
templates/ → cleaned up, removed inline duplicate API code
- 🐛 Fixed: SSE endpoints now accept
?api_key= consistently (no more 401 spam).
- 🔧 Changed: Version bump: internal cleanup release before adding new Phase 2 features.
v0.1.0 (2025-10-04 - dev_build)
- Added: Apps page (
/connector) to manage external connectors (Sonarr/Radarr)
- Added: Sonarr/Radarr connector UI (add/edit/test) with Sonarr-style cards, masked keys, and modal form
- Added: Connector config persisted to
connector.yaml via modules.connector
- Added: Connector APIs:
GET /api/v3/connectors – list connectors
POST /api/v3/connectors – add/update connector
GET /api/v3/connectors/test/<app_type> – handshake / test connection
- Added: Background task
connector_stats (every 5m) to ping Sonarr/Radarr (/system/status, /queue, /diskspace) and store snapshots
- Added: Background task
connector_media_sync to import full libraries from Sonarr (/series) and Radarr (/movie)
- Added: Background task
media_poster_backfill to enrich posters via TMDB (fallback-safe)
- Added: Active Catalog page (
/active-catalog) powered by /api/v3/catalog/active
- Added: Active Media Detail (
/api/v3/catalog/active/<id>) with deep links back to native apps
- Added: UNIQUE constraint on
(connector_id, external_id) in connector_media + duplicate cleanup
- Added: Sidebar buttons for Apps (🔌) and Active Catalog (📺)
- Added: Logo integration in sidebar with clickable link back to home
- Added: Favicon/logo support for browser tabs
- Added: Static Changelog page to track changes and fixes
- Added: API endpoint
/api/v3/enrich to re-enrich metadata posters
- Added: Poster caching with SHA1-hashed filenames in
/static/poster
- Added: Automatic fallback strategy for posters (TMDB → title search → default)
- Changed: Frontend sends stored
apiKey as X-Api-Key; backend auth check tightened
- Changed: Environment editor widgets are now collapsible and persist state with localStorage
- Fixed: Scheduler task registration (stable IDs, correct kwargs)
- Fixed: 404 issues for missing posters by forcing re-cache and DB update
- Fixed: Sidebar logo sizing and alignment to left
v0.0.9 (2025-09-28)
- Added: Basic Flask API endpoints (
/api/v3 mimic)
- Added: SSE stream for scan status
- Fixed: Missing static file path in Docker
- Known: Env editor page missing collapsible widgets