Releases: helliott20/prunerr
v1.4.1
Full Changelog: v1.4.0...v1.4.1
v1.4.0
What's Changed
- feat: light/dark mode toggle and mobile responsiveness by @helliott20 in #19
Full Changelog: v1.3.2...v1.4.0
v1.3.2
- Fixed: Scheduled library scan was crashing with
conditions is not iterablewhen any rule used v2 nested conditions. The scheduler had its own legacy evaluator that only understood v1 flat arrays. Now routes through the v2 rules engine, which handles both formats.
Full Changelog: v1.3.1...v1.3.2
v1.3.1
Patch release with fixes from the v1.3.0 rollout.
- Fixed dashboard episode count showing 0 (was hardcoded — now sums actual episode counts from shows)
- Fixed API key auth blocking the web UI on Tailscale and reverse proxy setups
- Fixed TypeScript strict mode errors that broke the Docker build
Full Changelog: v1.3.0...v1.3.1
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.
v1.2.3
v1.2.2
Full Changelog: v1.2.1...v1.2.2
v1.2.1
Full Changelog: v1.2.0...v1.2.1
v1.2.0
What's New
Tracearr Support
Prunerr now supports Tracearr as an alternative to Tautulli for watch history tracking. Choose your preferred provider in Settings — both work seamlessly with the scanner.
- Incremental sync — first sync fetches your full watch history, subsequent syncs only grab new sessions. No more waiting 2+ minutes every time.
- Persistent cache — watch history is stored locally in SQLite so lookups are instant.
- Configurable lookback — set how far back to fetch history (default 365 days).
- One-click setup — toggle between Tautulli and Tracearr in Settings. Dashboard setup wizard updated to accept either.
Sync Improvements
- Reconnect on refresh — if you reload the page during a sync, the console picks up where it left off instead of showing "sync already running".
- Live progress — Tracearr cache building shows real-time progress in the sync console.
Library Exclusions
- Robust purge — excluding a library now removes items by library key, Plex ID, and title matching. Catches orphaned items too.
- Orphan cleanup — items not found in any included Plex library are automatically removed.
Deletion Workflow
- Sonarr/Radarr guards — deletion actions are disabled when no arr service is configured. Queue page shows a warning banner with a link to Settings.
- Delete All Now — new button to force-process all queue items regardless of grace period.
- Process Queue — only processes expired items. Tooltip explains when nothing is ready.
Library UX
- Protect/unprotect toggle — clicking protect on an already-protected item now removes protection.
- Bulk unprotect — select protected items and the bar shows "Unprotect".
- Improved protected badge — compact corner badge instead of full-width strip.
- External links — Tracearr link appears on media items when configured.
Other
- Overseerr renamed to Seerr throughout the UI.
- Service refresh now triggers correctly for all credential changes (was only Sonarr/Radarr/Seerr before).
- Storage trends chart works with a single data point.
- Dashboard activity limited to 8 items with link to full log.
Breaking Changes
None. Existing Tautulli setups continue to work unchanged.
Migration
- Migration 10 adds the
watch_history_cachetable for Tracearr data. - Migration 9 adds
library_keycolumn for library exclusion tracking. - Both run automatically on startup.
Full Changelog: v1.1.14...v1.2.0
Full Changelog: v1.1.14...v1.2.0
v1.1.14
Full Changelog: v1.1.13...v1.1.14
Full Changelog: v1.1.13...v1.1.14