- Dashboard stat pill shows active streams and queue count
- Streaming widget on dashboard — live view of active sessions with channel, quality, and user info
- Auto-generates sidebar quick link when configured
- Fixed widget response format to return JSON
{success, html}(was returning raw HTML string)
- Plex now has its own standalone integration module (
integrations/plex.py) - Three detection modes — choose per your setup:
- Scrobble (90%): Plex's native watched event. Zero config, most reliable.
- Stop + Threshold: Process when you stop at ≥ your threshold % (e.g. 50%). Scrobble fires automatically as a safety net — if the stop event is missed (crash, autoplay, network drop) processing happens at 90% instead. Episodes are never double-processed.
- Polling: Background thread checks
/status/sessionsevery N minutes at custom threshold.
- Allowed Users filter — comma-separated Plex usernames; blank = all users
- Webhook URL:
http://your-episeerr:5002/api/integration/plex/webhook(Plex Pass required) - Dashboard "Now Playing" widget driven by the same webhook (all modes)
- Stale-state fallback: widget falls back to polling when webhook state is > 5 min old
- Tautulli moved to its own module (
integrations/tautulli.py), no longer hardcoded - Tautulli is now optional — only needed if you prefer its watch history over Plex's native API
- Override Plex toggle: when enabled, all watch-history lookups (grace period, dormant detection) use Tautulli instead of Plex
- Webhook URL updated:
http://your-episeerr:5002/api/integration/tautulli/webhook - Legacy URL
/webhookstill works — existing Tautulli setups continue without changes ⚠️ If you use Plex native webhooks for episode detection, do NOT also configure a Tautulli "Watched" webhook — use one or the other, not both
setup.htmlhardcoded Plex/Tautulli card removed — both now appear in auto-generated Integrations sectionsetup_completecheck updated: Sonarr + any media server (Plex, Jellyfin, Emby) satisfies setupget_media_server()endpoint now includes Plex directly (not via Tautulli)get_optional_integrations()excludes Plex and Tautulli from the optional sidebar section- Auth bypass list updated for new integration webhook endpoints
- Watch history router
get_episode_watch_history(rating_key)added — routes to Tautulli (if override enabled) or Plex get_plex_series_watch_history()added — queries maxlastViewedAtacross all episodes in a seriessettings_db.py: addedget_plex_config()andget_tautulli_config()with env fallback
- Plex Watchlist: TV shows stuck on "Requested" —
episodeFileCountnested understatisticsin Sonarr API, not top-level - Plex Watchlist: TV shows never showed "Watched" —
mark_item_watchednow setswatched=True/status='watched'for TV - Plex Polling:
session_keynow read fromMetadata.sessionKey(was reading fromPlayerwhich is empty/UUID) - Plex Polling: session match now falls back to title/season/episode if key doesn't match
- Plex Polling:
session_keyalways non-empty — content-based fallback prevents polling thread never starting - Plex Polling: threshold checked on every play/pause/resume webhook event — triggers immediately without waiting for next poll interval
- Tautulli movie detection:
{season_num}sends"0"for movies (not empty) — detection now treats0/"0"as absent - Tautulli: movie detection no longer requires
themoviedb_idto be present; logs a clear warning if missing - Tautulli:
{show_name}is TV-only — addedplex_movie_titlefield using{title}for movie title
- Detection Method field now renders as a dropdown in setup UI (was rendering as a text input)
- Fixed critical bug in PlaybackProgress mode: episode was marked as processed before
process_episode()ran, and a duplicate dedup check insideprocess_episode()caused it to immediately returnFalse— subprocess never executed despite logs claiming success - Dedup check now happens before the "In trigger range" log so duplicate ticks are silent at debug level
- Per-tick progress % log demoted to debug — no more log spam during playback
process_episode()now logs Sonarr series lookup result, assigned rule, and full media_processor output on failure- Sonarr series not found returns
Falseimmediately with a clear warning instead of silently continuing
use :custom tag— alternate URL for configs (HTTP can open in iframe, HTTPS always opens externally)- Alternate URL added to quick link configs
🔐 Auth
- Webhook endpoints for Jellyfin, Emby, and Jellyseerr integrations are now exempt from authentication — external services no longer receive
401 UnauthorizedwhenREQUIRE_AUTH=true
🛠️ Fixes
- Episeerr starts cleanly even when Sonarr is offline — tag reconciliation and delay profile sync log a warning instead of erroring out
/api/series-statsreturns503 Sonarr unavailable(instead of crashing) when Sonarr is unreachable at startup or during operation- Series and Rules pages show an empty list instead of a 500 error when Sonarr is down
- Config cleanup scheduler skips silently when Sonarr is unreachable, preventing accidental series removal from config
- Fix —
get_rule_for_seriesphantom import removed frommedia_processor.py; replaced with inline lookup overconfig['rules'](function never existed, caused import error during webhook processing)
- Webhook URLs Changed - Update webhook configurations:
- Jellyfin:
/jellyfin-webhook→/api/integration/jellyfin/webhook - Emby:
/emby-webhook→/api/integration/emby/webhook - Jellyseerr:
/seerr-webhook→/api/integration/seerr/webhook
- Jellyfin:
🏗️ Integrations Refactor
- Jellyfin, Emby, and Jellyseerr migrated to modular integration system (~1500 lines refactored)
- Self-contained integration modules with auto-discovery
- Easier maintenance and future extensibility
🔐 Security
- Optional password authentication
- Session-based login with configurable timeout (default 24 hours)
- Localhost bypass for admin access
- Environment variables:
REQUIRE_AUTH,AUTH_USERNAME,AUTH_PASSWORD
🎨 UI/UX
- Reorganized System Links with clearer categories (Required Services, Media Servers, Optional Integrations, Custom Links)
- Docker integration now supports optional web UI URL
- All configured media servers shown (Plex, Jellyfin, Emby)
- Sidebar rearranged and cleaned up
- Docker integration added — select compose/stack or all containers for sidebar display
- Notifications: Added notification option if episodes released but not in library
- New Cyber Neon Theme
- Always Have — new rule parameter with expression syntax for episodes that should always be present and protected from cleanup
- Expression examples:
s1(full season),s1e1(pilot),s1, s*e1(showcase),s1-3(season range) - Processes on rule assignment — monitors and searches matching episodes
- Protected from Grace and Keep cleanup; only Dormant overrides it
- Expression examples:
- Series page selection — list icon on every poster (grid) and table row launches the selection flow
- Plex integration — watchlist sync, now-playing widget; TV shows → pending selection, movies → Radarr
- Plex/Spotify now-playing widgets on dashboard
- Rule picker on selection page — dropdown pre-selects current rule; Apply to reassign or pick episodes manually
- Jellyfin Detection Method Overhaul: Changed default to Webhook-Triggered Polling
- Emby Polling Improvements: Increased default poll interval to 900s
- Database Optimization: Form handler saves only method-specific fields
- Centralized logging with
LOG_LEVELenv var support - Log rotation (10MB max, 5 backups)
- Reduced log spam by ~90%
- Cosmetic fixes; removed duplicate "recently downloaded" on dashboard
- Plugin System (beta): Dashboard integrations with auto-discovery
- Initial integrations: Radarr, Sabnzbd, Prowlarr
- Setup Page: Configure services via GUI at /setup
- Emby Support: Full webhook integration
- Quick Links: Auto-populated sidebar links
- Database Configuration: All settings stored in DB with .env fallback
- Fixed mobile layout
- Series Management in Rules Tab
- Fixed Duplicate Search Bug (removed
episeerr_defaulttag system) - Fixed UI layout (content behind sidebar)
- Enhanced README with setup guides
- Pilot Protection: Global and per-rule settings to always keep S01E01
- Dashboard Page with activity feed, stats cards, 7-day episode calendar
- Rules Management Page
- Download Tracking with green "Ready" badge
- Tag System Overhaul: Removed
episeerr_defaulttag; direct rule tagsepiseerr_[rule_name] - Tag Drift Detection: Auto-corrects tag mismatches
- Auto-Cleanup: Deleted series removed from config automatically
- Auto-cleanup of deleted series from config
- Smart Jellyfin mode detection
- Webhook string/integer tag handling
- Orphaned tag detection in watch webhooks
- Case-sensitivity fix in drift detection
- Jellyfin configuration detection fix
- Rule descriptions (optional tooltip field)
- Orphaned tag detection on startup, cleanup, and Clean Config
- Enhanced drift detection in multiple locations
- Case-insensitive tag matching
- Automatic tag system: rule-specific tags auto-created in Sonarr
- Tag migration: one-time bulk sync on first startup
- Drift detection: auto-corrects when tags manually changed in Sonarr
- Delay profile integration: Episeerr tags managed in Sonarr delay profiles
Major documentation restructure v2.0 - Complete reorganization for clarity and discoverability
- New folder structure: Organized into getting-started, core-concepts, features, configuration, guides, troubleshooting, reference
- Deletion System Guide: Comprehensive explanation of Keep vs Grace vs Dormant with bookmark system
- Tags & Auto-Assign Guide: Clear explanation of
episeerr_defaultandepiseerr_selecttag behavior - Quick Start Guide: Get running in 5 minutes
- First Series Tutorial: Step-by-step walkthrough for beginners
- Rules Explained: Conceptual guide to GET/KEEP/Action settings
- Webhooks Explained: Why webhooks exist and how they work
- Learning paths: Different guides for different user types (new users, power users, specific features)
- Main README.md: Streamlined with better navigation and links to full documentation
- Documentation index:
docs/README.mdnow serves as comprehensive navigation hub - File organization: Moved all docs into logical folders with clear naming
- Content consolidation: One authoritative source per topic, eliminated duplication
- Tag confusion: Clearly documented that tags are temporary signals, not permanent labels
- Deletion confusion: Comprehensive guide explains bookmark system and when deletions happen
- "Tag disappeared" issue: Documentation now explains this is normal and expected behavior
- Clear separation between concepts and how-to guides
- Better cross-linking between related topics
- Consistent formatting across all documentation
- Improved discoverability with table of contents and quick links
- Fixed duplicate dry run check in
delete_episodes_in_sonarr_with_logging()
- Removed
data/activity/files from git tracking - Updated
.gitignoreto exclude data, logs, config, and temp folders - Cleaned up accidentally committed runtime data
- Grace Periods reimagined as Bookmark System for inactive shows
- Grace Watched: Keeps last watched episode as reference point, deletes older watched episodes
- Grace Unwatched: Keeps first unwatched episode as bookmark, deletes extra unwatched episodes
- Result: Maximum 2 episodes per inactive show (last watched + next unwatched)
- Grace cleanup no longer applies Get rule - Get rule only runs on watch webhooks
- grace_cleaned flag: Prevents repeated processing of already-bookmarked shows
- Grab webhook support: Series marked as cleaned when new episodes grabbed
- Smart cleanup loop: Shows missing next episodes stay in cleanup until grab webhook fires
- Master safety switch: Global dry_run_mode always overrides rule-level settings
- Sonarr Grab event handling: Stops checking loop for incomplete series when content becomes available
- Grace cleanup no longer re-downloads same episodes every 5 days
- Incomplete series properly handled - keeps checking until content available
- Master dry_run_mode setting now cannot be overridden by individual rules
- Storage savings: Inactive shows reduced to 1-2 episodes instead of full seasons
Grace Bookmark Philosophy:
- Watched: Delete all except last watched (keeps reference point for catch-up)
- Unwatched: Delete all except first unwatched (keeps bookmark for resume)
- Ignores Keep/Get rules during cleanup (those only apply during active watching)
- Marks series as "cleaned" when bookmarks established
- Stops processing until activity resumes
Cleanup Loop Behavior:
- Has bookmark → Mark grace_cleaned=true → Skip on future cleanups
- Missing bookmark → grace_cleaned=false → Check every cleanup cycle
- Watch webhook → Clear grace_cleaned=false → Re-enter grace period after inactivity
- Grab webhook → Set grace_cleaned=true → Exit checking loop
Webhooks Required:
- Watch webhook (Tautulli/Jellyfin): Updates activity_date, clears grace_cleaned flag
- Grab webhook (Sonarr): Sets grace_cleaned flag to stop checking loop
Master Safety:
- Global dry_run_mode=true: ALL deletions forced to pending queue regardless of rule settings
- Rule dry_run=true: That specific rule uses pending queue
- Rule dry_run=false + Global=false: Direct deletion allowed
- Configure Sonarr webhook to include "On Grab" event in addition to "On Series Add"
- grace_cleaned field will be added automatically to config.json as series are processed
- Highly recommended: Set dry_run_mode: true in global settings during initial testing
- After grace runs: Each show has 1-2 episodes (reference + bookmark)
- Missing episodes: Series stays in cleanup loop until Sonarr grabs the content
Complete Series (Countdown):
Initial: S1E1-S1E13 (13 episodes)
After Grace Cleanup:
- S1E1 (last watched - your reference point)
- S1E2 (first unwatched - your bookmark)
- grace_cleaned = true
Result: Won't process again until you watch S1E2
Space Saved: 11 episodes
Incomplete Series (Stranger Things):
Initial: S5E1-S5E4 watched, no S5E5 available yet
After Grace Cleanup:
- S5E4 (last watched - your reference point)
- No unwatched exists
- grace_cleaned = false
Result: Checks every cleanup cycle
When S5E5 grabbed: grace_cleaned = true, stops checking
Space Saved: 3 episodes
Active Series Returns:
You watch S1E2 (webhook fires)
→ grace_cleaned = false
→ Get rule applies: Gets S1E3
→ After 5 days inactive: Grace cleanup runs again
→ Bookmarks to S1E2 + S1E3
→ grace_cleaned = true
- Grace Periods now override Keep/Get settings for maximum flexibility
- Grace Watched: Deletes ALL watched episodes after inactivity (keeps position in config only)
- Grace Unwatched: Deletes unwatched episodes after deadline (keeps next episode file as resume point)
- Both preserve your position so you can resume anytime
- Position preservation: Grace Watched keeps last_season/last_episode in config (no file kept)
- Resume point file: Grace Unwatched keeps the next unwatched episode file on disk
- Auto-resume for mid-season breaks: Grace Watched simulates watch event during cleanup to check for new episodes
- Smart cleanup: When cleanup runs, checks if new episodes exist and monitors them automatically
- Grace periods now truly independent of Keep/Get settings
- Mid-season breaks no longer lose your position
- Can resume shows months later without manual intervention
- Grace Watched: Deletes all watched files, simulates last watched episode during cleanup
- Grace Unwatched: Sorts unwatched episodes, keeps first one, deletes rest
- Position data persists in config even when episode files are deleted
- Cleanup simulation triggers Get rule to check for new episodes in Sonarr
- Existing grace periods will use new behavior automatically
- No config changes needed
- Test with dry run first to see new deletion patterns
- After grace cleanup: watched files deleted (position kept), 1 unwatched file remains
- Pending Deletions System: Comprehensive approval queue for all cleanup operations
- All deletions now queue for review before execution when dry run is enabled
- Hierarchical organization: Series → Season → Episode
- Multiple approval levels: individual episodes, entire seasons, whole series, or bulk selection
- Rejection cache: Rejected episodes won't reappear for 30 days
- Enhanced logging with detailed deletion reports showing:
- Reason for deletion (Grace Period, Keep Rule, Dormant Series, etc.)
- Data source (Tautulli watch history vs Sonarr air date)
- Date value used in decision
- Rule name that triggered the deletion
- File size to be reclaimed
- Real-time notification badge showing combined pending requests + pending deletions
- New
/pending-deletionspage with collapsible series/season view - API endpoints for programmatic access to pending deletions queue
- Dry Run Mode now enabled by default for all new installations
- Provides safety net against accidental mass deletions
- Existing installations require manual migration (add
dry_run_mode: truetoglobal_settings.json) - Can be configured globally (Admin → Scheduler) or per-rule (Admin → Dry Run Settings)
- Navigation updated: "Pending Requests" renamed to "Pending"
- Now serves as unified entry point for both episode selection requests and pending deletions
- Badge shows combined count of both pending items
- Unified Pending Page: Enhanced to show both episode selection requests and deletion queue
- Tab-free design with separate cards for each type
- Summary cards show quick stats and link to detailed views
- Improved deletion logic to prevent edge cases in multi-viewer households
- Enhanced error handling in cleanup operations
- Better context tracking for why episodes are targeted for deletion
- New
pending_deletions.pymodule for queue management - New
pending_deletions.htmltemplate with Bootstrap accordion interface - Storage-efficient rejection cache using episode ID + expiry date pairs
- Migration system auto-adds
dry_run_modefield to existingglobal_settings.json - Backward compatible - existing cleanup behavior unchanged if dry run disabled
- Existing users: Dry run mode is NOT enabled automatically
- To enable: Admin → Scheduler → Check "Global Dry Run Mode" → Save
- Or manually add
"dry_run_mode": truetoconfig/global_settings.json
- New users: Dry run enabled by default, deletions require approval
- All pending deletions data stored in
data/pending_deletions.json - Rejection cache stored in
data/deletion_rejections.json
- Added comprehensive "Pending Deletions" section to built-in documentation
- Updated FAQ with 5 new entries about the approval system
- Added troubleshooting guides for common pending deletion scenarios
- Updated installation guides to mention dry run default behavior Version 2.7.9 - Season Pack Preference
- Season Pack Preference: Rules using "Get X seasons" now automatically prefer season packs over individual episodes when searching
- Sonarr searches for season packs first, falls back to individual episodes if no pack available
- Applies to both watched episodes (webhooks) and newly added series (Jellyseerr)
- Episode-based rules continue to work exactly as before
- Fixed documentation: Tautulli webhook URL is
/webhook(not/tautulli-webhook)
- When
get_type: 'seasons', uses Sonarr'sSeasonSearchcommand instead ofEpisodeSearch - Backward compatible - all existing rules continue to work unchanged
v2.7.8 Cosmetic fixes v2.7.7 Removed disk stats because its in ADMIN Cleaner interface with 3 cards 🎬 Last Requested - Displays most recent series request from Jellyseerr/Overseerr with poster 🔍 Last Searched - Shows last episode search triggered by Episeerr with series poster 📺 Last Watched - Displays most recently watched episode with poster and user info
v2.7.6 is a pure performance/bug fix release: 🎯 One Issue Fixed:
Stopped backing up config files on every read (was happening 100+ times/minute) Now only backs up when actually saving changes
📉 Impact:
Cleaner logs Less disk I/O Same backup protection
This is a "quality of life" release - no new features, just makes the existing system run cleaner! 🚀 Cards will show "No recent activity" until first events occur - this is normal!
Version 2.7.5 - Activity Dashboard Cards 🎨 New Features Visual Activity Cards
Replaced static statistics cards with dynamic visual activity cards showing recent user activity Four cards on dashboard:
💾 Disk Usage - Shows current storage usage with link to Sonarr system status 🎬 Last Requested - Displays most recent series request from Jellyseerr/Overseerr with poster 🔍 Last Searched - Shows last episode search triggered by Episeerr with series poster 📺 Last Watched - Displays most recently watched episode with poster and user info
Interactive Cards
All cards are clickable and link to their respective services:
Disk Usage → Sonarr System Status Last Requested → Jellyseerr/Overseerr Last Searched → Sonarr Activity Queue Last Watched → Jellyfin/Tautulli/Plex
Hover effects provide visual feedback Cards auto-refresh every 60 seconds
Activity Tracking System
New activity storage module (activity_storage.py) logs:
Watch events (series, season, episode, user, timestamp) Search events (series, season, episode, timestamp) Request events (title, TMDB ID, timestamp)
Activity data stored in /data/activity/:
watched.json - Last 10 watch events searches.json - Last 10 search events last_request.json - Most recent request
Persistent across restarts - activity history preserved
🔧 Technical Improvements Poster Display
Cards display series posters fetched from:
Sonarr media cover API (watched/searched) TMDB API (requested)
Automatic fallback to placeholder for missing posters Optimized poster resolution (w200) for fast loading
Backend Enhancements
Added get_episode_details_by_id() function to fetch episode metadata Request webhook now fetches TMDB poster path at request time Activity logging integrated into existing webhook workflows Watch events logged when episodes are marked as watched Search events logged when Episeerr triggers Sonarr searches
Time Display
Human-readable timestamps: "5 minutes ago", "2 hours ago", "3 days ago" Real-time updates as cards refresh
🐛 Bug Fixes
Fixed search event logging crash due to missing function Fixed poster URL construction for TMDB requests Improved error handling for missing activity data Added graceful fallbacks when services are unconfigured
📝 Configuration
No new environment variables required Uses existing service URLs (SONARR, JELLYSEERR, JELLYFIN, etc.) Activity tracking works automatically with existing webhooks
💾 Data Storage
Activity data stored in persistent /data volume Automatic directory creation on first use No database required - simple JSON file storage Configurable retention (default: last 10 events for watches/searches)
🎯 User Experience
At-a-glance visibility of recent activity Quick access to services via clickable cards Visual context with series posters No configuration needed - works out of the box
🔄 Backwards Compatibility
Fully compatible with existing Episeerr installations Old stat cards replaced seamlessly No breaking changes to existing functionality Works with all supported media servers (Jellyfin, Plex, Tautulli)
📊 Performance
Lightweight JSON storage Minimal API calls (only when events occur) Efficient poster caching via browser Auto-cleanup of old events (keeps last 10)
Migration Notes
Activity tracking begins immediately after update Previous activity (before update) will not be shown Cards will show "No recent activity" until first events occur No action required from users
Known Limitations
Activity history limited to last 10 events per type Poster quality optimized for dashboard display (not full resolution) Request poster requires TMDB API key (already required for Episeerr)
[2.7.4] - 2026-01-06
- Automatic backup system for configuration files - creates
config.json.bakandglobal_settings.json.bakon every load - Quick Links dropdown in navbar for quick access to Sonarr, Plex, and Jellyfin (moved from sidebar)
- Moved Quick Links from sidebar card to navbar dropdown to save vertical space on rules index page
- Quick Links now populate from environment variables (SONARR_URL, PLEX_URL, JELLYFIN_URL)
[2.7.3] - 2026-01-05
fixed duplicate discord notifications
[2.7.2] - 2026-01-04
Added 3 types of progress tracking using jellyfin, see documentation
updated documentation
[2.7.1] - 2026-01-03 Added
Discord webhook notifications for episode search status
"Search Pending" notifications when episodes are requested
Auto-delete notifications when Sonarr successfully grabs episodes
"Selection Pending" notifications for episeerr_select tagged shows
Notification storage system for tracking pending Discord messages
Sonarr "Grab" webhook support for notification cleanup
Changed
Sonarr webhook handler now processes both SeriesAdd and Grab events
Streamlined notification approach - only shows failed/pending searches
Fixed
Jellyfin webhook crash: stop_jellyfin_polling() function signature mismatch
Function now accepts optional episode_info parameter
Fixes "takes 1 positional argument but 2 were given" error
Resolves automation breaking for Jellyfin users on PlaybackStop events
[2.7.0] - 2026-01-02 Added
Comprehensive documentation page accessible from UI
CHANGELOG.md for version tracking
Automated CHANGELOG updates in release script
Navigation links to docs in navbar and admin panel
Changed
Cleaned up redundant help text from create/edit rule pages
Removed large "How It Works" section from admin panel
Streamlined UI with contextual help links to full docs
Fixed
HTML layout issues in create_rule template
Added
Per-season grace period tracking for multi-viewer households
Grace period scope setting (per-series vs per-season) in rule editor
Web-based log viewer with filtering, search, and download capabilities
Auto-submit dropdowns in log viewer (instant filtering)
Log rotation optimized for mobile viewing (2-5 MB files)
"Clear Old Logs" feature to remove rotated logs older than 7 days
Changed
Log rotation limits increased for better history retention
app.log: 1MB → 2MB
cleanup.log: 5MB → 2MB
episeerr.log: 10MB → 5MB
"View Cleanup Logs" button now opens advanced log viewer
Migration system auto-adds grace_scope='series' to existing rules
Fixed
Jellyseerr request files now properly deleted when no episeerr tags are used
Per-season activity tracking correctly updates season-specific timestamps
Grace period cleanup functions support both per-series and per-season modes
[2.6.5] Added
Sonarr webhook bug fix for Jellyseerr integration
Improved Jellyseerr request file cleanup
Better handling of series without episeerr tags
Fixed
Jellyseerr cleanup moved to top of webhook processing
Request files no longer orphaned when tags aren't used
episeerr_default tag processing more reliable
- Initial stable release
- Episode selection system with multi-season support
- Viewing-based automation for episode management
- Time-based cleanup with dual timer system (grace watched/unwatched, dormant)
- Rule-based automation for different show types
- Webhook integration for Tautulli, Jellyfin, and Sonarr
- Tag-based workflow with Jellyseerr/Overseerr integration
- Scheduler admin panel for monitoring and control
- Global storage gate for cleanup threshold management
- Dry run mode for testing cleanup rules
- Multi-architecture Docker support (amd64, arm64, arm/v7)
-
Three Independent Solutions:
- Manual episode selection across multiple seasons
- Viewing-based automation with webhook processing
- Time-based cleanup with configurable grace periods
-
Rule System:
- Get X episodes/seasons automatically
- Keep Y episodes/seasons after watching
- Grace periods for watched/unwatched content
- Dormant timer for abandoned shows
-
Integration:
- Sonarr tag-based workflows (episeerr_default, episeerr_select)
- Jellyseerr/Overseerr request handling
- Tautulli/Jellyfin webhook support
- TMDB API for series metadata
- Stable releases:
X.Y.Z(e.g., 2.6.5) - Beta releases:
X.Y.Z-beta.Norbeta-X.Y.Z(e.g., 2.6.6-beta.1) - Release candidates:
X.Y.Z-rc.N(e.g., 2.6.6-rc.1)
- Added - New features
- Changed - Changes to existing functionality
- Deprecated - Soon-to-be removed features
- Removed - Removed features
- Fixed - Bug fixes
- Security - Vulnerability fixes