v1.3.0
Big update — collections support, a completely rebuilt rules engine, API key security, and a bunch of performance and UX improvements.
Collections
You can now sync movie collections from Radarr (things like "Harry Potter Collection", "Marvel Cinematic Universe"). Protect entire collections to stop any of their items from being cleaned up, or queue a whole collection for deletion in one go.
Collections sync automatically after every library scan, and there's a dedicated Collections page to browse, search, and manage them.
Rules Engine v2
The rules engine has been completely rebuilt. You now get:
- Three ways to build rules — Templates (personalised suggestions from your library), Easy Setup (plain English sentence builder), and a full Custom Builder with nested AND/OR/NOT condition groups
- 28 condition fields across quality, ratings, watch history, collections, and metadata
- Live preview that shows matching items, reclaimable storage, and poster art as you build
- Searchable dropdowns for fields and users — just start typing
- Priority system so higher-priority rules win when items match multiple rules
Existing v1 rules auto-upgrade to v2 format, so nothing breaks.
API Key Authentication
The API now requires authentication for external access. A key is auto-generated on first startup — find it in Settings. The web UI is exempt (same-origin), so nothing changes for normal use.
Pass the key in an X-Api-Key header for scripts, automation, or adding Prunerr to nzb360.
You can also set it via the PRUNERR_API_KEY environment variable.
Data Improvements
- Tags now sync from Radarr/Sonarr (previously empty — only Plex labels were pulled)
- Plex users sync automatically after scans (needed for per-user watch rules)
- Expanded metadata — genres, studio, ratings (IMDb/TMDB/RT), codecs, HDR, runtime, language, and more are all pulled during scans
Performance
- Memoized card components to reduce re-renders when scrolling large libraries
- Removed staggered animations that were causing jank on pages with lots of items
- Lazy image loading with async decoding across all pages
- Reduced dashboard polling frequency
- Batch database queries for collection protection checks (eliminated N+1 queries)
UX Polish
- Polished search input with smooth loading animations
- Rich loading skeletons that match the actual card layout
- Smooth transitions between loading, content, and empty states
- Activity timeline shows human-readable labels instead of raw action codes
- Storage values over 1000 GB display as TB
- Protected items in the library link directly to their protecting collection
- Collections count on the dashboard
Security
- API key auth on all external endpoints
- Depth limit on rule condition trees (prevents malicious payloads)
- API key excluded from settings export/import
- Collection protection enforced across all deletion endpoints
Docs
Full documentation is now in the wiki — installation, configuration, rules, collections, API reference, mobile setup (nzb360), and troubleshooting.