dorkhub

JellyFlare

Put announcements where your users will actually see them; a customisable banner at the top of Jellyfin, with rotating…

MorganKryze
HTML58GPL-3.0updated 1 week ago
git clone https://github.com/MorganKryze/JellyFlare.gitMorganKryze/JellyFlare

JellyFlare - A Jellyfin Plugin

Jellyfin Client Issues Version Last Commit License

Banner

Put announcements where your users will actually see them: a customisable banner at the top of Jellyfin, with rotating messages, scheduling, and link support.

Features

Demo

  • 🔄 Rotating messages with configurable display and pause durations
  • 🎨 Per-message background and text colour with a named preset palette
  • 📅 Flexible per-message scheduling: always, fixed date range, annual (e.g. Christmas), monthly (nth weekday, e.g. last Friday), weekly, or daily time window
  • 📌 Permanent banner library: save multiple entries and pick the active one; supersedes all rotation messages when enabled
  • 🎛️ Configurable dismiss controls: show/hide × and "hide all" buttons, with custom sizes and label
  • 🔗 Optional click-through URL per message; clicking the banner opens a link in a new tab
  • 🙈 Option to hide the banner while browsing the admin dashboard
  • 🔁 Cross-tab dismiss sync: dismissing a message in one tab instantly hides it in all other open tabs
  • 🛠️ Maintenance mode (new): instantly block non-admin users at the API level with a full-screen overlay; overlay also appears on the login page so kicked-out users see an explanation; optional link to an external status page; schedule activation, deactivation, and server restarts automatically

Prerequisites

Install these before adding JellyFlare.

  1. Jellyfin 10.11.10+ or 12.0 (jellyfin.org). Earlier versions are not supported.

  2. JavaScript Injector (by n00bcodr) — always required; it delivers the banner script to the browser. Add this repository in Dashboard → Plugins → Repositories, then install it from the Catalog:

    https://raw.githubusercontent.com/n00bcodr/jellyfin-plugins/main/10.11/manifest.json
    
  3. File Transformation (by IAmParadox27) — only on Jellyfin 10.11. On 10.11, JS Injector uses File Transformation to inject the script. Add this repository in Dashboard → Plugins → Repositories, then install it from the Catalog:

    https://www.iamparadox.dev/jellyfin/plugins/manifest.json
    

    On Jellyfin 12.0, do not install File Transformation. JS Injector injects the banner on its own there, and the current File Transformation build is not 12.0-compatible: while it is installed, it stops the banner from injecting. If you upgraded from 10.11, remove it.

Note: use the 10.11 manifest URLs above (JS Injector 3.4.0 from that manifest works on both Jellyfin 10.11 and 12.0). The old 10.10 builds silently fail.

Installation

Via plugin repository (recommended)

  1. Go to Dashboard → Plugins → Repositories and add:

    https://raw.githubusercontent.com/MorganKryze/jellyflare/main/manifest.json
    
  2. Go to Catalog, find JellyFlare, and install it.

  3. Restart Jellyfin, then open Dashboard → Plugins → JellyFlare.

Manual

  1. Download the ZIP from the latest release.
  2. Create <data-dir>/plugins/JellyFlare/ and unzip the archive into it.
  3. Restart Jellyfin, then open Dashboard → Plugins → JellyFlare.

Why JellyFlare?

You can already inject arbitrary CSS or JS into Jellyfin using JS Injector alone. So why add another plugin?

Because maintaining a hand-written script gets old fast. JellyFlare gives you:

  • A proper admin UI: add, edit, and reorder messages from the dashboard; no file editing, no restarts.
  • Scheduling: show a message only during a fixed date range, every Christmas, specific weekdays, or a daily time window; the script handles it automatically.
  • A permanent-banner library: save multiple pinned entries and switch the active one in one click.
  • Persistence: configuration is stored by Jellyfin and survives upgrades; nothing lives in a file you have to back up manually.

If a one-liner banner is all you need, a raw JS Injector script is fine. If you want something you can actually manage, JellyFlare is the upgrade.

Configuration

The plugin page has four tabs. See docs/configuration.md for field-level details.

📌 Permanent tab

Pin a banner that overrides all rotation messages, useful for outage notices or time-sensitive announcements. Manage a library of entries and switch the active one without losing the others.

Screenshot

Permanent tab

🔄 Rotation tab

Manage the pool of rotating messages: add, reorder, enable/disable individual entries, and set display timing. Each message has its own colour, optional URL, and schedule.

Screenshot

Rotation tab

⚙️ Settings tab

Control visibility (optionally show on admin pages, off by default), appearance (font size, banner height, alignment, transition speed), timing (display and pause durations), dismiss controls (permanent dismissibility, rotation × and "hide all" buttons, shared button size), the named colour preset palette, and per-user banner muting (let users hide banners from their own Display settings, with a configurable warning).

Screenshot

Settings tab

🛠️ Maintenance tab (new)

Put the server into maintenance mode with one click: all non-admin users are disabled at the API level and see a full-screen overlay (on every page, including the login screen). Set a custom message and an optional link to an external status page. Admins can dismiss the overlay to keep working. Deactivating re-enables only the users who were active before maintenance started. Use the Automation section to schedule a maintenance window (activate and optionally deactivate at a set time) or trigger a server restart automatically.

Screenshot

Maintenance tab

🔕 User override

Each user can mute the rotating and/or permanent banner for their own account from their Jellyfin Display settings, in a JellyFlare announcements section. The choice is stored per account (so it follows them across devices) and never affects maintenance mode. Admins can disable this entirely or reword the warning from the Settings tab.

Screenshot

User override

Project status

JellyFlare has reached a state I consider feature-complete for what I originally set out to build, so I do not plan to drive large new features myself going forward. The plugin is stable, documented, and working well in daily use.

That said, I am still here. Bug reports, feature ideas, and pull requests are always welcome; open an issue and I will read it. Where JellyFlare goes from here will be shaped by the community as much as by me, so if there is something you want to see, please bring it.

Troubleshooting

Banner not showing?

  • Restart Jellyfin after installing each plugin.
  • Verify JavaScript Injector shows as Active (not just installed).
  • On Jellyfin 10.11: verify File Transformation is also Active.
  • On Jellyfin 12.0: make sure File Transformation is not installed. Its current build breaks on 12.0 and, while present, blocks the banner from injecting. Remove it if you upgraded from 10.11 (JS Injector injects the banner without it).
  • Check that you used the 10.11 manifest URLs from Prerequisites. The 10.10 builds silently fail.
  • Open your browser's developer console and look for errors from banner.js; a 404 means JellyFlare's API is unreachable, likely a missing restart.

If the issue persists, open a bug report. The template will ask for the details needed to diagnose it.

Development

See docs/development.md for build instructions, the Docker dev loop, and the release workflow.

Security

To report a vulnerability privately, use Security → Report a vulnerability on the GitHub repository page. See SECURITY.md for the full security policy and a disclosure of all known considerations.

AI Disclosure

Parts of this project were developed and documented with AI assistance. All code and content were reviewed, tested, and validated by me personally.

License

GNU General Public License v3. See LICENSE. Use, modify, and redistribute freely, but any distributed derivative must also be GPL v3 and open source.

more like this

YiMao

YiMao · 云海求片助手 — 双核心 Telegram 影视求片机器人。订阅模式:TMDB 智能搜索一键订阅 / 趣味求片模式:AI 生成五层地狱闯关,通关解锁优先求片。深度集成 MoviePilot + Emby/Jellyfin。…

Go52

findarr

Self-hosted discovery engine for movies and TV that learns your taste and avoids showing already rated content

TypeScript55

search

search projects, people, and tags