Taggarr

Taggarr

Docker app from grtgbln's Repository

Overview

Dub analysis and tagging for media files.

[!TIP]

  • Don't feel like watching subs?

  • You have no idea which of your content is dubbed?

  • Or not sure if Sonarr got the right dub?

Don't worry, I got you covered.

So finally.. you'll be able to filter by dubbed shows.

image

Started this project for the exact same questions. I felt other people could make use of it as well and here we are.

Taggarr is a tool for scanning and tagging your media content whether if your media is dubbed in your language you desire or not. If Taggarr finds another language other than Original Language and your Target Languages, it will mark it as "wrong-dub" using Sonarr and Kodi standard tagging system.

This way, you can filter your shows based on if they're dubbed or not, using tags within your Sonarr (for managing) or any media player that supports tagging (for watching). Taggarr will also save all the information in a JSON file and will tell you which show, season, episode and language is the wrong-dub.

IMPORTANT + QUICK START

[!IMPORTANT]

  1. Sonarr
    Make sure you have METADATA turned on with KODI/Emby Standard and all checkboxes are turned on.
  2. Docker
    Pull the Docker image from docker.io/basshous3/taggarr:latest
  3. Configs
    Make sure to use /tv as path to your CONTAINER (not host). Check out example of yaml configs below.
  4. Media players
    After tags are applied they should work in the media players, if not, scan TV's library metadata using Replace all metadata method (leave Replace Images unchecked).

HOW IT WORKS

[!NOTE]

  • NO TAG The show is only in its original language.
  • DUB The show contains ALL of your target languages.
  • SEMI-DUB The show missing at least one of your target languages or some episodes are missing the dub.
  • WRONG-DUB The show is missing your target languages and contains another language (excluding original language).
  • ADD_TAG_TO_GENRE The tag list in the media players can be massive. This function will add the tag Dub in the genre section only for DUB shows. From version 0.4.19.



GitHub last commit Latest tag Docker pulls Discord



Upcoming Updates
Support for all languages Support for Radarr Filter scanning by genre
Support for multiple volumes UI Tag in genre

Found this project helpful? Hit the star ⭐️ at the top right corner.


Do you appreciate the time and effort it took to make this?

You can support me with a cup of coffee, every little helps.

Buy Me A Coffee



INFO

[!NOTE] Features:

  • Taggarr will save the information of your media in a JSON file located at the root folder of your TV media.
  • Taggarr uses a lightweight scanning method, it reads the name of audio tracks. It DOES NOT scan the audio of your content.
  • Once your library was scanned and indexed in the JSON file, it will only scan for new or modified folders.
  • QUICK_MODE (Bool) Checks only first video of every season.
  • TARGET_LANGUAGES (Str) Seperated via comma, you can add multiple languages as your target.
  • TARGET_GENRE (Str) Filter scan by genre. ie. Anime.
  • TAG_DUB (Str) Optional custom tag.
  • TAG_SEMI (Str) Optional custom tag.
  • TAG_WRONG_DUB (Str) Optional custom tag.
  • RUN_INTERVAL_SECONDS (Int) Custom time interval. Default is every 2 hours.
  • DRY_RUN (Bool) Not sure? Try it first, without writing any tags, JSON file will still be saved.
  • WRITE_MODE (Int) Something not working or changed your mind? Don't worry I got you covered.
  • WRITE_MODE=0 Works like usual.
  • WRITE_MODE=1 Rewrites everything, all tags and JSON file.
  • WRITE_MODE=2 Removes everything, all tags and JSON file.
  • START_RUNNING (Bool) Start the container without initiating scan for CLI usage.
  • ADD_TAG_TO_GENRE (Bool) Adds the tag Dub in the genre section only for DUB shows.

DISCLAIMER

[!WARNING]

  • Currently supporting only Sonarr. Support for Radarr will come in the upcoming updates as well.
  • This project is still in very early stages and can have bugs. Currently only tested on Linux.
  • Coding is only a hobby of mine and I am still learning, use this program at your own discretion.
  • Make sure to read the documentation properly.

CONFIGURATION EXAMPLE


name: Taggarr
services:
  taggarr:
      image: docker.io/basshous3/taggarr:latest
      container_name: taggarr
      environment:
        - SONARR_API_KEY=your_api_key #REQUIRED
        - SONARR_URL=http://sonarr:8989 #REQUIRED
        - RUN_INTERVAL_SECONDS=7200 #OPTIONAL - default is 2 hours.
        - START_RUNNING=true #OPTIONAL        
        - QUICK_MODE=false #OPTIONAL 
        - DRY_RUN=false #OPTIONAL 
        - WRITE_MODE=0 #OPTIONAL - 0=NONE, 1=REWRITE, 2=REMOVE
        - TAG_DUB=dub #OPTIONAL
        - TAG_SEMI=semi-dub #OPTIONAL
        - TAG_WRONG_DUB=wrong-dub #OPTIONAL
        - LOG_LEVEL=INFO #OPTIONAL - DEBUG/INFO/WARNING/ERROR
        - TARGET_GENRE=Anime #OPTIONAL - default is all genres
        - TARGET_LANGUAGES=english, french # Supports multiple languages, comma-separated en, fr, de, etc. are also acceptable entries
        - ADD_TAG_TO_GENRE=true #OPTIONAL
      volumes:
        - /path/to/your/TV:/tv # Make sure to point your media path host to "/tv" container path
        - /var/log/taggarr:/logs # OPTIONAL - recommended path for logs
      restart: unless-stopped
      logging:
        driver: json-file
        options:
          max-size: "10m"
          max-file: "3"
  
JSON FILE WITH TARGET LANGUAGES ENGLISH AND FRENCH

"/tv/Example Show 1": {
    "display_name": "Example Show 1",
      "tag": "semi-dub",
      "last_scan": "2025-06-26T19:22:11.769510Z",
      "original_language": "japanese",
      "seasons": {
        "Season 1": {
          "episodes": 1,
          "original_dub": ["E01"],
          "dub": ["E01:en"],
          "missing_dub": ["E01:fr"],
          "unexpected_languages": [],
          "last_modified": 1749519136.4969385,
          "status": "semi-dub"
        },
        "Season 2": {
          "episodes": 1,
          "original_dub": ["E01"],
          "dub": ["E01:en"],
          "missing_dub": ["E01:fr"],
          "unexpected_languages": [],
          "last_modified": 1749518483.8193643,
          "status": "semi-dub"
        },
        "Season 3": {
          "episodes": 1,
          "original_dub": ["E01"],
          "dub": [],
          "missing_dub": ["E01:en, fr"],
          "unexpected_languages": [],
          "last_modified": 1750725575.362786,
          "status": "original"
        }
      },
      "last_modified": 1749519136.4969385
    },
"/tv/Example Show 2": {
    "display_name": "Example Show 2",
      "tag": "dub-en,fr",
      "last_scan": "2025-06-26T19:23:55.967659Z",
      "original_language": "french",
      "seasons": {
        "Season 1": {
          "episodes": 1,
          "original_dub": ["E01"],
          "dub": ["E01:en, fr"],
          "missing_dub": [],
          "unexpected_languages": [],
          "last_modified": 1749517909.2880175,
          "status": "fully-dub"
        }
      },
      "last_modified": 1749517909.2880175
},
SCREENSHOTS ON HOW TO USE TAG FILTERING

Sonarr



Emby & Jellyfin

Install Taggarr on Unraid in a few clicks.

Find Taggarr in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Taggarr Review the template variables and paths Click Install

Download Statistics

33,120
Total Downloads
3,004
This Month
3,509
Avg / Month

Total Downloads Over Time

Loading chart...

Related apps

Details

Repository
basshous3/taggarr:latest
Last Updated2026-04-28
First Seen2026-02-16

Runtime arguments

Network
bridge
Privileged
false

Template configuration

TV PathPath

Path to your TV media files for analysis (e.g. /mnt/user/tv)

Target
/tv
Sonarr - URLVariable

URL to your Sonarr instance (e.g. http://sonarr:8989)

Target
SONARR_URL
Sonarr - API KeyVariable

API key for your Sonarr instance

Target
SONARR_API_KEY
Dry RunVariable

Enable dry run mode to see what actions would be taken without making any changes.

Target
DRY_RUN
Default
false|true
Tags - DubVariable

Tag to apply for dubs.

Target
TAG_DUB
Default
dub
Value
dub
Tags - Semi-DubVariable

Tag to apply for semi-dubs.

Target
TAG_SEMI
Default
semi-dub
Value
semi-dub
Tags - Wrong DubVariable

Tag to apply for wrong dubs.

Target
TAG_WRONG_DUB
Default
wrong-dub
Value
wrong-dub
Add Tag to GenreVariable

Whether to add the tag to the genre.

Target
ADD_TAG_TO_GENRE
Default
true|false
Target GenreVariable

Genre to target for analysis (e.g. anime, movie, show).

Target
TARGET_GENRE
Target LanguagesVariable

Comma-separated list of target languages (e.g. en, fr, ja).

Target
TARGET_LANGUAGES
Default
en,fr
Value
en,fr
Run IntervalVariable

Interval, in seconds, between runs (default: 7200 seconds = 2 hours)

Target
RUN_INTERVAL_SECONDS
Default
7200
Value
7200
Logs PathPath

Path to store logs

Target
/logs
Default
/mnt/user/appdata/taggarr/logs
Value
/mnt/user/appdata/taggarr/logs
Start RunningVariable

Whether to start running immediately after container starts.

Target
START_RUNNING
Default
true|false
Quick ModeVariable
Target
QUICK_MODE
Default
false|true
Write ModeVariable

Write mode for tags: 0 = None, 1 = Rewrite, 2 = Remove.

Target
WRITE_MODE
Default
0|1|2
Log LevelVariable

Logging level for the application.

Target
LOG_LEVEL
Default
INFO|WARNING|ERROR|DEBUG