This jellyfin plugin automatically adds language tags to the media.
C#
98
114 commits
updated Mar 31, 2026
LanguageTags helps handling multi-language content in a multi-lingual household, allowing administrators to deliver a per-user experience depending on the user spoken language(s).
Another use case is to be able to retrieve a list of content that contains audio or subtitles in a specific language on the fly, essencialy enhancing the Jellyfin library's filter abilities.
Currently, these are features that Jellyfin is not natively supporting and that are, otherwise, very difficult (or not at all possible) to achieve without this plugin.
The LanguageTags plugin adds tags to the items contained in your Jellyfin personal collection based on the language of the audio and subtitle tracks. This plugin will never modify the tags present in your actual media files, it will only create new tags which will be applied to the relevant "item" present in the Jellyfin's internal database. It uses Jellyfin’s MediaStreams API to read stream metadata directly (no FFmpeg), delivering a fast and reliable scan.
Please note that LanguageTags will only work well if your media files are tagged correctly, so make sure that you use appropriate software to revise and flag the language of the audio and subtitle tracks contained in your videos. Also, internal and external subtitles are only supported if using "srt" and "ass" formats.
Tagging & Display
Operations
Performance & Architecture
Restrict content via user Parental Controls using the "Allow items with tags" rule in combination with LanguageTags:
language_German
subtitle_language_German
This shows only items that contain German audio tracks or German subtitles.
**TIP: if you want to easily find the language tags on the top of the alphabetical tag list, use a different prefix:
These are the possible Parental Control settings you could use for an English-only user:
Add this repository in Jellyfin: Plugins -> Catalog -> Add Repository:
https://raw.githubusercontent.com/TheXaman/jellyfin-plugin-languageTags/main/manifest.json
dotnet publish --configuration Release
Tagging non-media items (actors, directors, studios but, also, photo, photo-albums, album artists, music albums, etc.) is necessary in some cases.
If you want to use the Jellyfin "Allow" Parental Control rule, then you need to make sure that everything is properly tagged, otherwise Jellyfin will obscure several items.
EXAMPLE:
Say that you want a French user to be able to explore only the part of the catalgue that contains French audio or subtitles, then you'll be tampted to use only the following "Allow" rules:
#Audio_French
#Sub_French
But, by doing this, the French user will not be able to see the People's pages (director, actors, other cast members, etc.). Even more so, if your catalogue contains music, books or photos, these will be obscured, too. For this reason, LanguageTags implemented something called "non-media items" which, essentially, bulk tags with the tag "item" (which can be modified) everything that you decide to tag in the settings page. When running the daily shceduled task, LanguageTags will take care of all the newly created non-media items, too. So it is a set-and-forget feature that you'll only need to setup once.
Here's an example of how you could setup LanguageTags, so that the French user can now see all the non-media items, while still filtering non-French content:
Then in the Parental Control Allow rules, make sure to add the following:
#Audio_French
#Sub_French
#item
Note on external subtitles: Language detection for external subtitles relies on filename language identifiers. If your files use long names instead of short ISO codes (e.g., video.english.srt instead of video.eng.srt), detection may fail. Rename files per Jellyfin specs:
C#
74.3%
HTML
25.7%
This jellyfin plugin automatically adds language tags to the media.
C#
98
114 commits
updated Mar 31, 2026
LanguageTags helps handling multi-language content in a multi-lingual household, allowing administrators to deliver a per-user experience depending on the user spoken language(s).
Another use case is to be able to retrieve a list of content that contains audio or subtitles in a specific language on the fly, essencialy enhancing the Jellyfin library's filter abilities.
Currently, these are features that Jellyfin is not natively supporting and that are, otherwise, very difficult (or not at all possible) to achieve without this plugin.
The LanguageTags plugin adds tags to the items contained in your Jellyfin personal collection based on the language of the audio and subtitle tracks. This plugin will never modify the tags present in your actual media files, it will only create new tags which will be applied to the relevant "item" present in the Jellyfin's internal database. It uses Jellyfin’s MediaStreams API to read stream metadata directly (no FFmpeg), delivering a fast and reliable scan.
Please note that LanguageTags will only work well if your media files are tagged correctly, so make sure that you use appropriate software to revise and flag the language of the audio and subtitle tracks contained in your videos. Also, internal and external subtitles are only supported if using "srt" and "ass" formats.
Tagging & Display
Operations
Performance & Architecture
Restrict content via user Parental Controls using the "Allow items with tags" rule in combination with LanguageTags:
language_German
subtitle_language_German
This shows only items that contain German audio tracks or German subtitles.
**TIP: if you want to easily find the language tags on the top of the alphabetical tag list, use a different prefix:
These are the possible Parental Control settings you could use for an English-only user:
Add this repository in Jellyfin: Plugins -> Catalog -> Add Repository:
https://raw.githubusercontent.com/TheXaman/jellyfin-plugin-languageTags/main/manifest.json
dotnet publish --configuration Release
Tagging non-media items (actors, directors, studios but, also, photo, photo-albums, album artists, music albums, etc.) is necessary in some cases.
If you want to use the Jellyfin "Allow" Parental Control rule, then you need to make sure that everything is properly tagged, otherwise Jellyfin will obscure several items.
EXAMPLE:
Say that you want a French user to be able to explore only the part of the catalgue that contains French audio or subtitles, then you'll be tampted to use only the following "Allow" rules:
#Audio_French
#Sub_French
But, by doing this, the French user will not be able to see the People's pages (director, actors, other cast members, etc.). Even more so, if your catalogue contains music, books or photos, these will be obscured, too. For this reason, LanguageTags implemented something called "non-media items" which, essentially, bulk tags with the tag "item" (which can be modified) everything that you decide to tag in the settings page. When running the daily shceduled task, LanguageTags will take care of all the newly created non-media items, too. So it is a set-and-forget feature that you'll only need to setup once.
Here's an example of how you could setup LanguageTags, so that the French user can now see all the non-media items, while still filtering non-French content:
Then in the Parental Control Allow rules, make sure to add the following:
#Audio_French
#Sub_French
#item
Note on external subtitles: Language detection for external subtitles relies on filename language identifiers. If your files use long names instead of short ISO codes (e.g., video.english.srt instead of video.eng.srt), detection may fail. Rename files per Jellyfin specs:
C#
74.3%
HTML
25.7%