{"id":48986316,"url":"https://github.com/firestaerter3/JellySTRMprobe","last_synced_at":"2026-05-04T16:01:04.379Z","repository":{"id":337507817,"uuid":"1153960739","full_name":"firestaerter3/JellySTRMprobe","owner":"firestaerter3","description":"Jellyfin plugin that probes STRM files to extract media information (codec, resolution, duration, audio). Jellyfin skips STRM files during library scans — this plugin fills that gap.","archived":false,"fork":false,"pushed_at":"2026-03-07T19:39:40.000Z","size":44,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-03-08T01:09:07.005Z","etag":null,"topics":["ffprobe","jellyfin","jellyfin-plugin","media-info","strm"],"latest_commit_sha":null,"homepage":"https://firestaerter3.github.io/jellyfin-plugin-repo/manifest.json","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/firestaerter3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-02-09T21:35:19.000Z","updated_at":"2026-03-07T19:39:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/firestaerter3/JellySTRMprobe","commit_stats":null,"previous_names":["firestaerter3/jellystrmprobe"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/firestaerter3/JellySTRMprobe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firestaerter3%2FJellySTRMprobe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firestaerter3%2FJellySTRMprobe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firestaerter3%2FJellySTRMprobe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firestaerter3%2FJellySTRMprobe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/firestaerter3","download_url":"https://codeload.github.com/firestaerter3/JellySTRMprobe/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firestaerter3%2FJellySTRMprobe/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32614385,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"ssl_error","status_checked_at":"2026-05-04T10:08:02.005Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["ffprobe","jellyfin","jellyfin-plugin","media-info","strm"],"created_at":"2026-04-18T13:00:27.678Z","updated_at":"2026-05-04T16:01:04.374Z","avatar_url":"https://github.com/firestaerter3.png","language":"C#","funding_links":[],"categories":["🧩 Plugins"],"sub_categories":["📚 Library Management"],"readme":"# JellySTRMprobe\n\nA Jellyfin plugin that extracts media information from STRM files by probing remote streams.\n\n## The Problem\n\nJellyfin treats STRM files as \"shortcuts\" and **never probes them during library scans**. This means movies and episodes sourced from STRM files show up with no duration, codec, resolution, or audio information — even after a full library scan. Media info is only populated on first playback.\n\n**Without this plugin:**\n\n- No duration, codec, resolution, or audio info in the UI\n- Movies may be marked as \"played\" after a few seconds (no duration known)\n- Filter/search by resolution or codec doesn't work\n- The version picker can't distinguish between quality variants\n\n## How It Works\n\nThe plugin calls Jellyfin's internal `RefreshSingleItem()` with `EnableRemoteContentProbe = true` — the same flag Jellyfin sets during playback. This triggers ffprobe against the STRM target URL without requiring the user to play every item first.\n\n## Features\n\n### Scheduled Task\nA scheduled task (Dashboard \u003e Scheduled Tasks \u003e **Probe STRM Media Info**) that:\n- Finds all STRM items with no media stream data\n- Probes them in parallel with configurable concurrency\n- Runs daily at 4:00 AM by default (customizable)\n- Reports progress and is cancellable from the Dashboard\n\n### Catch-Up Mode\nAutomatically probes new STRM items as they're added during library scans:\n- Subscribes to Jellyfin's `ItemAdded` event\n- Debounces for 30 seconds to batch process items\n- Enabled by default (can be disabled in settings)\n\n### Configuration\nAll settings are accessible from Dashboard \u003e Plugins \u003e JellySTRMprobe:\n\n| Setting | Default | Range | Description |\n|---------|---------|-------|-------------|\n| Catch-Up Mode | Enabled | On/Off | Auto-probe new STRM items when added |\n| Parallelism | 5 | 1–20 | Concurrent probe operations |\n| Timeout | 60s | 10–300s | Per-item probe timeout |\n| Cooldown | 200ms | 0–5000ms | Delay between probes (prevents upstream overload) |\n| Libraries | All | Multi-select | Which libraries to probe |\n\n## Installation\n\n### From Plugin Repository (Recommended)\n\n1. In Jellyfin, go to **Dashboard \u003e Plugins \u003e Repositories**\n2. Add repository URL:\n   ```\n   https://firestaerter3.github.io/jellyfin-plugin-repo/manifest.json\n   ```\n3. Go to **Catalog**, find **JellySTRMprobe**, and install\n4. Restart Jellyfin\n\n### Manual Installation\n\n1. Download the latest release from [Releases](https://github.com/firestaerter3/JellySTRMprobe/releases)\n2. Extract `JellySTRMprobe.dll` to your Jellyfin plugins directory:\n   ```\n   \u003cjellyfin-data\u003e/plugins/JellySTRMprobe/JellySTRMprobe.dll\n   ```\n3. Restart Jellyfin\n\n## Requirements\n\n- Jellyfin **10.11.0** or later\n- .NET 9.0\n\n## Building from Source\n\n```bash\ndotnet build -c Release\ndotnet test -c Release\ndotnet publish JellySTRMprobe -c Release -o ./publish\n```\n\n## Prior Art\n\n| Project | Platform | Notes |\n|---------|----------|-------|\n| [StrmAssistant](https://github.com/sjtuross/StrmAssistant) | Emby | Emby-only, incompatible with Jellyfin |\n| [JellyfinStrmExtract](https://github.com/gauthier-th/JellyfinStrmExtract) | Jellyfin | Sequential processing, targets Jellyfin 10.9.x |\n\n## License\n\nLicensed under the GPL-3.0 License. See [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirestaerter3%2FJellySTRMprobe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffirestaerter3%2FJellySTRMprobe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirestaerter3%2FJellySTRMprobe/lists"}