{"id":48618813,"url":"https://github.com/jellyplugins/jellyfin-helper","last_synced_at":"2026-06-04T01:00:45.501Z","repository":{"id":350096314,"uuid":"1205279424","full_name":"JellyPlugins/jellyfin-helper","owner":"JellyPlugins","description":"🤖 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 \u0026 multi-instance Radarr/Sonarr. 8-tab dashboard, 7 languages.","archived":false,"fork":false,"pushed_at":"2026-05-26T12:14:34.000Z","size":14915,"stargazers_count":19,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T12:31:23.906Z","etag":null,"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"],"latest_commit_sha":null,"homepage":"https://jellyplugins.github.io/jellyfin-helper/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JellyPlugins.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-08T20:13:47.000Z","updated_at":"2026-05-25T21:52:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/JellyPlugins/jellyfin-helper","commit_stats":null,"previous_names":["jellyplugins/jellyfin-cleaner","jellyplugins/jellyfin-helper"],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/JellyPlugins/jellyfin-helper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JellyPlugins%2Fjellyfin-helper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JellyPlugins%2Fjellyfin-helper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JellyPlugins%2Fjellyfin-helper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JellyPlugins%2Fjellyfin-helper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JellyPlugins","download_url":"https://codeload.github.com/JellyPlugins/jellyfin-helper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JellyPlugins%2Fjellyfin-helper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33886153,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arr-stack","backup","cleanup","dashboard","dotnet","health-check","i18n","jellyfin","jellyfin-plugin","machinelearning","media-server","radarr","recommendation","seerr","sonarr","statistics","strm","subtitles","symlink","trickplay"],"created_at":"2026-04-09T03:00:35.150Z","updated_at":"2026-06-04T01:00:45.495Z","avatar_url":"https://github.com/JellyPlugins.png","language":"C#","funding_links":["https://ko-fi.com/jellyfinhelper"],"categories":[],"sub_categories":[],"readme":"# Jellyfin Helper\n\n![Jellyfin Helper Logo](media/logo.png)\n\nA [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.\n\n[![GitHub Release](https://img.shields.io/github/v/release/JellyPlugins/jellyfin-helper?style=flat-square)](https://github.com/JellyPlugins/jellyfin-helper/releases)\n[![Tests](https://img.shields.io/badge/tests-2318%20passed-brightgreen?style=flat-square)](Jellyfin.Plugin.JellyfinHelper.Tests/)\n[![.NET](https://img.shields.io/badge/.NET-9.0-512BD4?style=flat-square\u0026logo=dotnet)](https://dotnet.microsoft.com/)\n[![Jellyfin](https://img.shields.io/badge/Jellyfin-10.11.10+-00A4DC?style=flat-square\u0026logo=jellyfin\u0026logoColor=white)](https://jellyfin.org/)\n[![License](https://img.shields.io/github/license/JellyPlugins/jellyfin-helper?style=flat-square)](LICENSE)\n[![Languages](https://img.shields.io/badge/i18n-8%20languages-blue?style=flat-square)](Jellyfin.Plugin.JellyfinHelper/i18n/)\n[![Live Demo](https://img.shields.io/badge/demo-live%20preview-ff69b4?style=flat-square)](https://jellyplugins.github.io/jellyfin-helper/)\n\n[![Ko-Fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/jellyfinhelper)\n\n## Live Demo\n\n**[Try the interactive demo →](https://jellyplugins.github.io/jellyfin-helper/)**\n\nExplore the full 8-tab dashboard with realistic sample data - no Jellyfin server required.\n\n---\n\n## Features\n\n| Feature                    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |\n|----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| **8-Tab Dashboard**        | Overview, Codecs, Health, Trends, Discover, Settings, Arr, Logs - all accessible directly from the Jellyfin sidebar as a single plugin page                                                                                                                                                                                                                                                                                                                                                                                                                                  |\n| **Trickplay Cleaner**      | Automatically finds and removes orphaned `.trickplay` folders whose corresponding media file no longer exists. Frees disk space from stale image extraction data                                                                                                                                                                                                                                                                                                                                                                                                             |\n| **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                                                                                                                                                                                                                                                                                                                                                                                  |\n| **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                                                                                                                                                                                                                                                                                                                                                                                                         |\n| **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                                                                                                                                                                                                                                                                                                                                                                                        |\n| **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                                                                                                                                                                                                                                                                                                                                                                                  |\n| **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 |\n| **Statistics \u0026 Trends**    | Per-library disk usage, video codec, audio codec, resolution, dynamic range, and container format analysis - extracted from Jellyfin MediaStream metadata.                                                                                                                                                                                                                                                                                                                                                                                                                   |\n| **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                                                                                                                                                                                                                                                                                                                                                                                                       |\n| **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                                                                                                                                                                                                                                                                                                                                                                                       |\n| **Health Checks**          | Detects videos without subtitles (including embedded streams), missing artwork, missing NFO files, and orphaned metadata directories                                                                                                                                                                                                                                                                                                                                                                                                                                         |\n| **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                                                                                                                                                                                                                                                                                                                                                                                                                                               |\n| **Backup \u0026 Restore**       | Export/import the full plugin state (configuration, growth timeline, baseline data, Arr instances) as a validated JSON file with XSS/injection protection                                                                                                                                                                                                                                                                                                                                                                                                                    |\n| **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                                                                                                                                                                                                                                                                                                                                                                                                                         |\n| **Trash / Recycle Bin**    | Cleanup tasks move files to a timestamped trash folder instead of permanently deleting them. Configurable retention period auto-purges expired items                                                                                                                                                                                                                                                                                                                                                                                                                         |\n| **8 Languages**            | Full UI translations: English, German, French, Spanish, Portuguese, Chinese, Turkish, Swedish                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |\n| **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                                                |\n| **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                                                                                                                                                                                                                                                                                                                                                                                                        |\n| **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                                                                                                                                                                                                                                                                                                                                                                       |\n| **Unsaved Settings Alert** | Warns before navigating away when the settings form has unsaved changes (dirty-tracking via snapshot comparison), with Discard / Save \u0026 Continue / Cancel options                                                                                                                                                                                                                                                                                                                                                                                                            |\n\nAll tasks default to **Dry Run** mode - nothing is deleted until you explicitly activate them.\n\n**Compatibility:** Jellyfin **10.11.10+** · .NET **9.0**\n\n---\n\n## Installation\n\n### From Repository (Recommended)\n\n1. In Jellyfin, go to **Dashboard** → **Plugins** → **Repositories**\n2. Add this repository URL:\n   ```\n   https://raw.githubusercontent.com/JellyPlugins/jellyfin-helper/main/manifest.json\n   ```\n3. Go to **Catalog** and install **Jellyfin Helper**\n4. Restart Jellyfin\n\n### Manual Installation\n\n1. Download the latest release package from [Releases](https://github.com/JellyPlugins/jellyfin-helper/releases)\n2. Extract the package and copy all files into your Jellyfin plugin directory (e.g. `/config/plugins/JellyfinHelper/`)\n3. Restart Jellyfin\n\n---\n\n## Quick Start\n\n1. Open **Jellyfin Helper** from the sidebar - the last scan loads automatically\n2. Go to the **Settings** tab to configure tasks, libraries, trash, and language\n3. Review **Dry Run** results in the Jellyfin scheduled tasks log\n4. Switch tasks to **Activate** when ready\n5. The **Helper Cleanup** scheduled task runs weekly (Sunday 3:00 AM) or trigger it manually\n\n---\n\n## Documentation\n\n| Resource                                                     | Description                                                                        |\n|--------------------------------------------------------------|------------------------------------------------------------------------------------|\n| [CONTRIBUTING.md](CONTRIBUTING.md)                           | Architecture, design patterns, build system, API reference, configuration, testing |\n| [CHANGELOG.md](CHANGELOG.md)                                 | Detailed version history                                                           |\n| [Live Demo](https://jellyplugins.github.io/jellyfin-helper/) | Interactive dashboard demo                                                         |\n\n---\n\n## Origin\n\nBased 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.\n\n## License\n\nGNU General Public License v3.0 - see [LICENSE](LICENSE).\n\n## Acknowledgements\n\n| Who                                          | Contribution                                                                                          |\n|----------------------------------------------|-------------------------------------------------------------------------------------------------------|\n| [@Noir1992](https://github.com/Noir1992)     | Original plugin author                                                                                |\n| [@K-Money](https://github.com/K-Money)       | Initial testing                                                                                       |\n| [@n00bcodr](https://github.com/n00bcodr)     | [Jellyfin-Enhanced](https://github.com/n00bcodr/Jellyfin-Enhanced) – inspiration for plugin features  |","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjellyplugins%2Fjellyfin-helper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjellyplugins%2Fjellyfin-helper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjellyplugins%2Fjellyfin-helper/lists"}