Jellyfin plugin — language flags under every card
Audio + subtitle flag emoji rendered directly on library posters.
[ poster ]
Title (2024)
🎧 🇵🇱 🇬🇧
💬 🇵🇱 🇬🇧 🇩🇪
- Open Jellyfin Dashboard → Plugins → Repositories → Add.
- Repository URL:
Give it any name (e.g.
https://raw.githubusercontent.com/foxtrotdev/jellyfin-plugin-audio-flags/main/manifest.jsonfoxtrotdev). - Go to Catalog, find Audio Flags, click Install.
- Restart Jellyfin.
- Hard-refresh the web client (
Ctrl/Cmd + Shift + R) — the plugin injects a<script>intoweb/index.html, so the browser cache needs to clear.
- Download the latest
.zipfrom the Releases page. - Extract it into Jellyfin's plugin folder under a subdirectory named
AudioFlags. - Restart Jellyfin.
- Hard-refresh the web client.
| OS | Path |
|---|---|
| Linux (deb/rpm) | /var/lib/jellyfin/plugins/AudioFlags/ |
| Linux (Docker) | /config/plugins/AudioFlags/ (inside the container) |
| macOS | ~/.local/share/jellyfin/plugins/AudioFlags/ or the app data dir |
| Windows | %ProgramData%\Jellyfin\Server\plugins\AudioFlags\ |
- Server-side plugin written for .NET 8, targeting Jellyfin's plugin API.
- On startup the plugin injects a
<script>tag intoweb/index.htmlpointing at/AudioFlags/ClientScript. - The client script scans the DOM for
.card[data-id]/.listItem[data-id]elements and batches IDs (40 per request) against/Users/{uid}/Items?Ids=...&Fields=MediaStreams,MediaSources. - Each track's language code (ISO 639-1 / 639-2) is mapped to a country (ISO 3166-1 alpha-2) and rendered as a regional-indicator flag emoji.
- Flags are inserted as a single row directly under the card's title.
Open Dashboard → Plugins → Audio Flags. Four toggles:
- Show audio flags (🎧) — render the audio-language row.
- Show subtitle flags (💬) — render the subtitle/CC-language row.
- English uses GB flag — when on, English tracks show 🇬🇧; when off, 🇺🇸.
- Debug logging — verbose logging in the browser console (helpful when filing issues).
Requirements: .NET 8 SDK.
cd Jellyfin.Plugin.AudioFlags
dotnet publish -c Release -o ./outCopy out/Jellyfin.Plugin.AudioFlags.dll into your Jellyfin plugins folder (see table above), then restart Jellyfin.
- Jellyfin: 10.10 and 10.11.
- Web client: works against both the Vue and React-based web clients.
- Browser cache: after a Jellyfin server upgrade,
index.htmlis replaced and the plugin re-injects on next start — clients still need a hard refresh to pick up the new script tag.
- No flags appear. Enable Debug logging in the config page, open the browser DevTools console, and check for
401/403responses or JS errors. The script must be reachable at/AudioFlags/ClientScript. - Flags disappeared after a Jellyfin upgrade. The upgrade replaced
web/index.html. Restart the plugin (or the server) — it will re-inject the<script>tag on next startup. Then hard-refresh the browser. - Wrong English flag (US vs UK). Toggle the English uses GB flag option in the plugin config.
- Tracks tagged
und/mul/zxxrender as a neutral 🏳 — they have no defined language.
Bug reports, fixes, and language-mapping improvements are welcome. See CONTRIBUTING.md.
Apache License 2.0 © 2026 foxtrotdev. See NOTICE.


