- C# 73.6%
- HTML 21.5%
- Shell 4.9%
|
Some checks failed
Build / build (push) Has been cancelled
Wide release responding to a batch of live feedback: - Twitch live playback fixed by dropping the streamlink dependency on the user side — yt-dlp resolves twitch.tv/<user> directly into an HLS playlist URL and the proxy redirects to it. - YouTube card release dates: added '--extractor-args youtubetab:approximate_date' so flat-playlist entries carry an upload_date (parsed from YouTube's relative '2 days ago' strings). Flat-playlist stays fast (no per-video fetch) but the cards now display a year. - Disk-cached video lists with stale-while-revalidate so opening a sub is instant after a Jellyfin restart. Cache file lives at <plugin data>/blkbox-streams/cache/videos-<subId>.json. A stale hit returns immediately and kicks a background re-fetch. - New IScheduledTask 'BlkBox Proxy — refresh subscriptions' runs every 10 minutes, warming the cache and refreshing Twitch live status for IncludeLive subscriptions even when no one is browsing. - Source-aware add UI: when YouTube or Twitch is selected, Live/VODs checkboxes are hidden — only one mode makes sense per source. The checkboxes only show for 'Other (yt-dlp)'. Defaults: Twitch → live only; YouTube → VODs only. - Search rows render cleaner: avatar + display name only (no more long platform URLs cluttering the list). Add just works. - Server-side download: POST /Plugins/Grayjay/Save?token=<base64> runs yt-dlp with --merge-output-format mp4 into the configured DownloadPath. Plugin config page got a 'Downloads folder' field and a 'Save a video' form that takes any yt-dlp-supported URL. - Client-side download: SupportsContentDownloading=true on the channel features so Jellyfin's web UI exposes a download action on each channel item. The proxy honors ?download=1 to set Content-Disposition: attachment. Required cache key change brings DataVersion to 5 indirectly via the 1.0.0.9 bump; no version bump needed here because subscription content will be re-fetched naturally by the new RefreshTask. |
||
|---|---|---|
| .github/workflows | ||
| plugins/grayjay | ||
| releases/grayjay | ||
| scripts | ||
| .gitignore | ||
| manifest.json | ||
| README.md | ||
blkbox.stream-plugins
A Jellyfin plugin repository hosting custom plugins for streaming content from external platforms. Add this repository to your Jellyfin server and install plugins directly from the dashboard.
Repository URL
Add this URL under Dashboard → Plugins → Repositories → +:
https://git.blkbox.work/leanderkretschmer/blkbox.stream-plugins/raw/branch/main/manifest.json
Once added, the plugins below show up under Dashboard → Plugins → Catalog.
Plugins
| Plugin | Description | Target Jellyfin |
|---|---|---|
| BlkBox Streams | Browse YouTube, Twitch, Rumble, Odysee, PeerTube and any of ~1800 yt-dlp sites as Jellyfin libraries. Live streams via streamlink. | 10.10+ |
Repository layout
.
├── manifest.json # Read by Jellyfin
├── plugins/
│ └── <slug>/
│ ├── src/ # .NET 8 plugin source
│ ├── build.yaml # Plugin metadata
│ └── README.md
├── releases/
│ └── <slug>/<version>/
│ ├── <slug>-<version>.zip # The artifact Jellyfin downloads
│ └── meta.json # Per-version manifest stub
├── scripts/
│ ├── build-release.sh # Build + zip + checksum + regenerate manifest
│ └── build-manifest.sh # Regenerate manifest.json only
└── .github/workflows/ # CI build
Adding a new plugin to this repository
- Drop a Jellyfin plugin project under
plugins/<slug>/src/. - Add a
plugins/<slug>/build.yamlwith at minimum:name: My Plugin guid: <new-guid> version: 1.0.0.0 targetAbi: 10.10.0.0 category: Channel owner: leanderkretschmer overview: "Short one-liner" description: >- Longer description here. - Run
scripts/build-release.sh <slug>. - Commit the new files under
plugins/,releases/<slug>/, and the updatedmanifest.json. Push.
Releasing a new version of an existing plugin
- Bump
version:inplugins/<slug>/build.yaml(andAssemblyVersion/FileVersionin the csproj if you care about both matching). scripts/build-release.sh <slug>.- Commit and push.
Jellyfin will see the new version on its next manifest poll and offer the update under Dashboard → Plugins.
Manual rebuild
If you only edited the manifest (renamed a plugin, fixed a description, etc.) and don't need to rebuild any binary:
scripts/build-manifest.sh
Requirements (for builds)
- .NET 8 SDK
zip,jq,md5sum(standard on most Linux distros)
Local testing without pushing
You can serve the repo directory over HTTP for local testing:
python3 -m http.server -d . 8080
# Then in Jellyfin: add http://<host>:8080/manifest.json as a repository
Jellyfin will fetch the manifest, download zips via the URLs inside it (those URLs point at git.blkbox.work, so this mode only works once the repo is pushed unless you also rewrite the manifest URLs to point at your local server).