https://github.com/jellyplugins/jellyfin-helper
๐ค Jellyfin plugin with ML-powered per-user recommendations, watch activity insights, automated media cleanup (trickplay, subtitles, symlinks, .strm), Overseerr/Jellyseerr request management, codec/health statistics, growth trends, trash bin, backup/restore & multi-instance Radarr/Sonarr. 8-tab dashboard, 7 languages.
https://github.com/jellyplugins/jellyfin-helper
arr-stack backup cleanup dashboard dotnet health-check i18n jellyfin jellyfin-plugin machinelearning media-server radarr recommendation seerr sonarr statistics strm subtitles symlink trickplay
Last synced: 19 days ago
JSON representation
๐ค Jellyfin plugin with ML-powered per-user recommendations, watch activity insights, automated media cleanup (trickplay, subtitles, symlinks, .strm), Overseerr/Jellyseerr request management, codec/health statistics, growth trends, trash bin, backup/restore & multi-instance Radarr/Sonarr. 8-tab dashboard, 7 languages.
- Host: GitHub
- URL: https://github.com/jellyplugins/jellyfin-helper
- Owner: JellyPlugins
- License: gpl-3.0
- Created: 2026-04-08T20:13:47.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-26T12:14:34.000Z (27 days ago)
- Last Synced: 2026-05-26T12:31:23.906Z (27 days ago)
- Topics: arr-stack, backup, cleanup, dashboard, dotnet, health-check, i18n, jellyfin, jellyfin-plugin, machinelearning, media-server, radarr, recommendation, seerr, sonarr, statistics, strm, subtitles, symlink, trickplay
- Language: C#
- Homepage: https://jellyplugins.github.io/jellyfin-helper/
- Size: 14.2 MB
- Stars: 19
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Jellyfin Helper

A [Jellyfin](https://jellyfin.org/) plugin that provides automated cleanup tasks, media library statistics, ML-powered smart recommendations, user activity insights, health checks, and Arr stack integration - all from a single, multi-tab dashboard.
[](https://github.com/JellyPlugins/jellyfin-helper/releases)
[](Jellyfin.Plugin.JellyfinHelper.Tests/)
[](https://dotnet.microsoft.com/)
[](https://jellyfin.org/)
[](LICENSE)
[](Jellyfin.Plugin.JellyfinHelper/i18n/)
[](https://jellyplugins.github.io/jellyfin-helper/)
[](https://ko-fi.com/jellyfinhelper)
## Live Demo
**[Try the interactive demo โ](https://jellyplugins.github.io/jellyfin-helper/)**
Explore the full 8-tab dashboard with realistic sample data - no Jellyfin server required.
---
## Features
| Feature | Description |
|----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **8-Tab Dashboard** | Overview, Codecs, Health, Trends, Discover, Settings, Arr, Logs - all accessible directly from the Jellyfin sidebar as a single plugin page |
| **Trickplay Cleaner** | Automatically finds and removes orphaned `.trickplay` folders whose corresponding media file no longer exists. Frees disk space from stale image extraction data |
| **Empty Folder Cleaner** | Deletes now-empty media folders that no longer contain video files (e.g. after manual cleanup). Skips known placeholder folders (Radarr/Sonarr), metadata-only folders, and music libraries |
| **Subtitle Cleaner** | Detects and removes orphaned `.srt`/`.ass`/`.vtt` subtitle files that no longer have a matching video. Uses ISO 639 language-code detection to avoid false positives |
| **Link Repair** | Scans for broken `.strm` files and broken symlinks, then automatically repairs them by locating the renamed or moved target media file in the parent directory of the original target |
| **Seerr Cleanup** | Connects to your Overseerr/Jellyseerr/Seerr instance and removes media requests whose underlying files are no longer available. Keeps your request list clean and in sync with actual media |
| **Seerr Discovery** | Personalized external content discovery via your Seerr instance. Scores TMDb candidates per user using the ensemble ML strategy, suggests not-yet-in-library media with one-click request submission, parental rating enforcement, and automatic exclusion of items already in Radarr/Sonarr. It can optionally be displayed on the Jellyfin home screen as a Custom Tab when used with the [Custom Tab](https://github.com/JellyPlugins/jellyfin-plugin-custom-tabs) and [File Transformation](https://github.com/JellyPlugins/jellyfin-plugin-file-transformation) plugins |
| **Statistics & Trends** | Per-library disk usage, video codec, audio codec, resolution, dynamic range, and container format analysis - extracted from Jellyfin MediaStream metadata. |
| **Growth Timeline** | Cumulative media growth visualization with daily/weekly/monthly/quarterly/yearly bucketing. Hover any point to see the exact file count and size delta since that date |
| **Library Insights** | Top-10 largest media directories and recently added/changed items (last 30 days) per library, with per-library size breakdown. Displayed in the Trends tab with 15-min in-memory cache |
| **Health Checks** | Detects videos without subtitles (including embedded streams), missing artwork, missing NFO files, and orphaned metadata directories |
| **Arr Integration** | Compare your Jellyfin library with up to 3 Radarr + 3 Sonarr instances to find items only in Arr, only in Jellyfin, or in both |
| **Backup & Restore** | Export/import the full plugin state (configuration, growth timeline, baseline data, Arr instances) as a validated JSON file with XSS/injection protection |
| **Log Viewer** | Plugin-specific logs with level/source filtering, auto-refresh (10s), and download as `.log` file. Isolated from Jellyfin's main log to reduce noise |
| **Trash / Recycle Bin** | Cleanup tasks move files to a timestamped trash folder instead of permanently deleting them. Configurable retention period auto-purges expired items |
| **8 Languages** | Full UI translations: English, German, French, Spanish, Portuguese, Chinese, Turkish, Swedish |
| **Smart Recommendations** | ML-powered per-user recommendations using ensemble scoring (heuristic + learned + neural MLP blend). Analyses watch history to build genre, actor, director and studio affinity profiles, then scores unwatched candidates using 31 features - children with restricted profiles only see age-appropriate recommendations. Incremental training runs only when TaskMode=Activate, with ranking-based evaluation and pre-computed collaborative filtering pipeline - pure C# implementation with zero external ML dependencies |
| **User Activity** | Per-item and per-user watch activity tracking with play count, completion percentage, favorites detection, and genre distribution - displayed in the new Discover tab |
| **Security** | 5-min statistics cache, 30s rate limiting, path traversal protection, XSS escaping, backup payload validation with size limits and injection detection, parental rating enforcement in recommendations |
| **Unsaved Settings Alert** | Warns before navigating away when the settings form has unsaved changes (dirty-tracking via snapshot comparison), with Discard / Save & Continue / Cancel options |
All tasks default to **Dry Run** mode - nothing is deleted until you explicitly activate them.
**Compatibility:** Jellyfin **10.11.10+** ยท .NET **9.0**
---
## Installation
### From Repository (Recommended)
1. In Jellyfin, go to **Dashboard** โ **Plugins** โ **Repositories**
2. Add this repository URL:
```
https://raw.githubusercontent.com/JellyPlugins/jellyfin-helper/main/manifest.json
```
3. Go to **Catalog** and install **Jellyfin Helper**
4. Restart Jellyfin
### Manual Installation
1. Download the latest release package from [Releases](https://github.com/JellyPlugins/jellyfin-helper/releases)
2. Extract the package and copy all files into your Jellyfin plugin directory (e.g. `/config/plugins/JellyfinHelper/`)
3. Restart Jellyfin
---
## Quick Start
1. Open **Jellyfin Helper** from the sidebar - the last scan loads automatically
2. Go to the **Settings** tab to configure tasks, libraries, trash, and language
3. Review **Dry Run** results in the Jellyfin scheduled tasks log
4. Switch tasks to **Activate** when ready
5. The **Helper Cleanup** scheduled task runs weekly (Sunday 3:00 AM) or trigger it manually
---
## Documentation
| Resource | Description |
|--------------------------------------------------------------|------------------------------------------------------------------------------------|
| [CONTRIBUTING.md](CONTRIBUTING.md) | Architecture, design patterns, build system, API reference, configuration, testing |
| [CHANGELOG.md](CHANGELOG.md) | Detailed version history |
| [Live Demo](https://jellyplugins.github.io/jellyfin-helper/) | Interactive dashboard demo |
---
## Origin
Based on [jellyfin-trickplay-folder-cleaner](https://github.com/Noir1992/jellyfin-trickplay-folder-cleaner) by [@Noir1992](https://github.com/Noir1992), inspired by [this community script](https://github.com/jellyfin/jellyfin/issues/12818#issuecomment-2712783498). This fork evolved into an independent project with significant additions.
## License
GNU General Public License v3.0 - see [LICENSE](LICENSE).
## Acknowledgements
| Who | Contribution |
|----------------------------------------------|-------------------------------------------------------------------------------------------------------|
| [@Noir1992](https://github.com/Noir1992) | Original plugin author |
| [@K-Money](https://github.com/K-Money) | Initial testing |
| [@n00bcodr](https://github.com/n00bcodr) | [Jellyfin-Enhanced](https://github.com/n00bcodr/Jellyfin-Enhanced) โ inspiration for plugin features |