An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          

# Jellyfin Helper

![Jellyfin Helper Logo](media/logo.png)

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.

[![GitHub Release](https://img.shields.io/github/v/release/JellyPlugins/jellyfin-helper?style=flat-square)](https://github.com/JellyPlugins/jellyfin-helper/releases)
[![Tests](https://img.shields.io/badge/tests-2318%20passed-brightgreen?style=flat-square)](Jellyfin.Plugin.JellyfinHelper.Tests/)
[![.NET](https://img.shields.io/badge/.NET-9.0-512BD4?style=flat-square&logo=dotnet)](https://dotnet.microsoft.com/)
[![Jellyfin](https://img.shields.io/badge/Jellyfin-10.11.10+-00A4DC?style=flat-square&logo=jellyfin&logoColor=white)](https://jellyfin.org/)
[![License](https://img.shields.io/github/license/JellyPlugins/jellyfin-helper?style=flat-square)](LICENSE)
[![Languages](https://img.shields.io/badge/i18n-8%20languages-blue?style=flat-square)](Jellyfin.Plugin.JellyfinHelper/i18n/)
[![Live Demo](https://img.shields.io/badge/demo-live%20preview-ff69b4?style=flat-square)](https://jellyplugins.github.io/jellyfin-helper/)

[![Ko-Fi](https://ko-fi.com/img/githubbutton_sm.svg)](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 |