May 30May 30 Author 10 hours ago, Jorgen said:TV directory processing finished, just sharing stats in case anyone is interested:Found 2015 mkv files to processProcessed: 930, no change needed: 1085, skipped (already done): 0, failed: 0.Space saved this session: 43.92 GB (930 file(s) remuxed).Total elapsed time 16 hoursYou will really start seeing savings if you have remuxed 2160p movies, I saved around 2TB just on my movie collection alone. Let me know if you do run it against your movie collection. Also how have you found the native language detection since the additional parse functionality, better?
May 30May 30 On 5/26/2026 at 11:30 AM, binhex said:Tis done guys, of note this does slow down the scan somewhat as we need to call imdb to get the native language for each movie, so scan times will probably double, to give you some ref we are talking maybe 1 hour 30 mins for around 4000 movies when the new option is enabled (disabled by default) - once done though that's it its cached and all subsequent movies added will just be a lookup for those.So to use this pull down the latest image:Edit your container and add variable named TRIMARR_KEEP_NATIVE_AUDIO and set the value to yes apply and wait (check progress in log at /config/trimarr/logs/trimarr.log)if you want to see whether its worked then open the sqlite database and check for language against each movie.EDIT - forgot to mention there is an optional variable you can also add called TRIMARR_TMDB_API_KEY set the value to your tmdb api key to get you higher chances of identifying the language for each movie, imdb used as primary, tmdb used secondary as fallback.Damn, that was quick thank you do much! I will fire it up right now, appreciate your efforts.
May 30May 30 13 hours ago, binhex said:You will really start seeing savings if you have remuxed 2160p movies, I saved around 2TB just on my movie collection alone. Let me know if you do run it against your movie collection. Also how have you found the native language detection since the additional parse functionality, better?I have it doing a dry run on my movies folder right now. I have about 200TB of movies so it will be interesting to see what I save. The keep native audio also seems to be working great on the movies, thanks again. Are there any plans to have it work with tv shows too? I tested it and it removes non-English native audio from series like All of Us Are Dead and Berserk.
May 31May 31 2 hours ago, bkelly84 said:Are there any plans to have it work with tv shows too? I tested it and it removes non-English native audio from series like All of Us Are Dead and Berserk.This might be the same issues I raised in GitHub yesterday for TV shows:https://github.com/binhex/trimarr/issues/59https://github.com/binhex/trimarr/issues/58 Edited May 31May 31 by Jorgen Spelling
June 1Jun 1 Author On 5/31/2026 at 2:45 AM, Jorgen said:This might be the same issues I raised in GitHub yesterday for TV shows:https://github.com/binhex/trimarr/issues/59https://github.com/binhex/trimarr/issues/58Both resolved, please pull down latest (v1.2.7) to pick up the changes.Please note you will need to manually add the following new variables (env vars) if you want to use the new features, see Q8 for how to do this: https://github.com/binhex/documentation/blob/master/docker/faq/unraid.mddescription: if set to 'yes' then undefined audio is not removedkey: TRIMARR_KEEP_UNDEFINED_AUDIOvalue: yes or no (default)description: if defined then tvdb will be used to identify native language - used in oconjunction with TRIMARR_KEEP_NATIVE_AUDIOkey: TRIMARR_TVDB_API_KEYvalue: <your tvdb api key>
June 4Jun 4 On 5/30/2026 at 7:49 PM, binhex said:You will really start seeing savings if you have remuxed 2160p movies, I saved around 2TB just on my movie collection alone. Let me know if you do run it against your movie collection. Also how have you found the native language detection since the additional parse functionality, better?Thanks for all your work on this, it is very much appreciated! The native language detection works great now, for both movies and tv shows. I finally managed to run it across my full library, and I guess my (mostly older, 720 or 1080) files were pretty lean already because I ended up with this:Done — processed: 225, no change needed: 4, skipped (already done): 2690, failed: 1.Space saved this session: 54.25 GB (225 file(s) remuxed).Space saved (all sessions): 97.29 GB.But it's not all about size savings for me. Getting rid of embedded subtitles for languages I'll never use will make it a much better experience in the media players when choosing subtitles. Also got rid of a few dubbed default languages which also helps improve the playback experience.
June 4Jun 4 5 hours ago, Jorgen said:But it's not all about size savings for me. Getting rid of embedded subtitles for languages I'll never use will make it a much better experience in the media players when choosing subtitles.Same here. The space saving is a nice bonus, but not having to scroll a list of 50 subtitles in Plex when I need to keep the volume down while my son's sleeping is a huge QoL improvement for me.
June 4Jun 4 On 6/1/2026 at 4:52 AM, binhex said:Both resolved, please pull down latest (v1.2.7) to pick up the changes.Please note you will need to manually add the following new variables (env vars) if you want to use the new features, see Q8 for how to do this: https://github.com/binhex/documentation/blob/master/docker/faq/unraid.mddescription: if set to 'yes' then undefined audio is not removedkey: TRIMARR_KEEP_UNDEFINED_AUDIOvalue: yes or no (default)description: if defined then tvdb will be used to identify native language - used in oconjunction with TRIMARR_KEEP_NATIVE_AUDIOkey: TRIMARR_TVDB_API_KEYvalue: <your tvdb api key>You're the man, thank you so much! I will update when I get home and give it a whirl.On 6/1/2026 at 4:52 AM, binhex said:Both resolved, please pull down latest (v1.2.7) to pick up the changes.Please note you will need to manually add the following new variables (env vars) if you want to use the new features, see Q8 for how to do this: https://github.com/binhex/documentation/blob/master/docker/faq/unraid.mddescription: if set to 'yes' then undefined audio is not removedkey: TRIMARR_KEEP_UNDEFINED_AUDIOvalue: yes or no (default)description: if defined then tvdb will be used to identify native language - used in oconjunction with TRIMARR_KEEP_NATIVE_AUDIOkey: TRIMARR_TVDB_API_KEYvalue: <your tvdb api key>You're the best, thank you so much I will update when I get home and give it a whirl.
June 10Jun 10 I need help with adding multiple directories. I see these two settings in the container that I have:Path: /media: <- set to /mnt/user/Movies/Variable: TRIMARR_MEDIA_PATH: <- set to /mediaHow do I also add /mnt/user/TV/ to scan? The instructions for adding multiple directories via a | separator are associated with the variable, rather than the path settings. I feel dumb about this because I'm guessing it's pretty straightforward.
June 10Jun 10 Author 9 minutes ago, mudsloth said:I need help with adding multiple directories. I see these two settings in the container that I have:Path: /media: <- set to /mnt/user/Movies/Variable: TRIMARR_MEDIA_PATH: <- set to /mediaHow do I also add /mnt/user/TV/ to scan? The instructions for adding multiple directories via a | separator are associated with the variable, rather than the path settings. I feel dumb about this because I'm guessing it's pretty straightforward.set Path: /media to /mnt/userset Variable: TRIMARR_MEDIA_PATH: to /media/TV|/media/Moviesalternative if you dont want to expose /mnt/user is to create another new path:/tv to /mnt/user/TV and then set variable TRIMARR_MEDIA_PATH to /media|/tv
August 14Aug 14 I really like the idea of this arr as I'm otherwise having to manually trim with mkvtoolnix. So I thought I'd test it out before unleashing it on my actual library. However, thus far I do not see it actually doing anything.I copied a file that has only French audio to a test folder, pointed Trimarr at it with instructions to only keep "eng" audio, set the schedule, enabled the run on start option, disabled the dry run option (as otherwise this arr will never do anything as far as I interpret that option), waited a few minutes and.....nothing. No changes were made to the file.As I understand it, Trimarr should have deleted the French audio track from my file, resulting in no audio at all. But this did not happen. Why?Or does Trimarr have internal logic to skip a file even if it has the incorrect audio if it is the only audio stream embedded in the file? Edited August 14Aug 14 by DCCXVIII
August 14Aug 14 Author 32 minutes ago, DCCXVIII said:As I understand it, Trimarr should have deleted the French audio track from my file, resulting in no audio at all. But this did not happen. Why?because trimarr is clever :-), it knows not to leave a video file with no audio, it will only remove non matching audio if the preferred audio exists, nobody wants a video file with no audio, right?.The flow diagram explains it quite nicely:- https://github.com/binhex/trimarr#audio-tracksThis is the section that prevents the deletion of all audio:
September 2Sep 2 Hi, not sure what I'm doing wrong. But Trimarr keeps saying my media folder doesn't exist even though it does:2026-09-02 22:38:12 | INFO | mkvmerge not found at '/home/nobody/.local/share/trimarr/bin/mkvmerge', downloading latest binary...2026-09-02 22:38:13 | SUCCESS | mkvmerge installed at: /home/nobody/.local/share/trimarr/bin/mkvmerge2026-09-02 22:38:13 | INFO | Scheduler started. First run at 2026-09-03 12:00:00 (in 13h 21m 46s).2026-09-02 22:41:41 | INFO | mkvmerge not found at '/home/nobody/.local/share/trimarr/bin/mkvmerge', downloading latest binary...2026-09-02 22:41:42 | SUCCESS | mkvmerge installed at: /home/nobody/.local/share/trimarr/bin/mkvmerge2026-09-02 22:41:42 | INFO | Scheduler started. First run at 2026-09-03 12:00:00 (in 13h 18m 17s).2026-09-02 22:46:42 | INFO | mkvmerge not found at '/home/nobody/.local/share/trimarr/bin/mkvmerge', downloading latest binary...2026-09-02 22:46:44 | SUCCESS | mkvmerge installed at: /home/nobody/.local/share/trimarr/bin/mkvmerge2026-09-02 22:46:44 | ERROR | Media path '/mnt/user/Media/Movies' does not exist.2026-09-02 22:46:44 | INFO | Next run at 2026-09-03 12:00:00 (in 13h 13m 15s).There is indeed a folder on /mnt/user/Media/Movies. But for whatever reason, Trimarr can't see it. Permissions issue?Also why does the container ask for a path to the media files when there already is a field for it elsewhere (Variable: TRIMARR_MEDIA_PATH)? I assume these should be identical? Shouldn't they both be pointing to the same location? I'm confused.2026-09-02 23:01:33.150992 [info] Host is running unRAID2026-09-02 23:01:33.163095 [info] System information: Linux 3377f7abe4fc 6.18.38-Unraid #1 SMP PREEMPT_DYNAMIC Mon Jul 6 15:22:03 PDT 2026 x86_64 GNU/Linux2026-09-02 23:01:33.175464 [info] Image architecture: 'amd64'2026-09-02 23:01:33.186910 [info] Application name: 'trimarr'2026-09-02 23:01:33.198662 [info] Base image release tag: '2026062801'2026-09-02 23:01:33.210267 [info] Application image release tag: 'v1.2.13-02'2026-09-02 23:01:33.223511 [info] PUID defined as '99'2026-09-02 23:01:33.236042 [info] Executing usermod for PUID '99'...2026-09-02 23:01:33.269403 [info] usermod completed successfully2026-09-02 23:01:33.282679 [info] PGID defined as '100'2026-09-02 23:01:33.295420 [info] Executing groupmod for PGID '100'...2026-09-02 23:01:33.333439 [info] groupmod completed successfully2026-09-02 23:01:33.344933 [info] UMASK defined as '0007'2026-09-02 23:01:33.358584 [info] Permissions file '/config/perms.txt' exists, skipping setting ownership and permissions on '/config' and '/data'2026-09-02 23:01:33.377479 [info] Deleting files in /tmp (non recursive)...2026-09-02 23:01:33.393819 [info] TRIMARR_LANGUAGE defined as 'eng,jpn,fre,fra'2026-09-02 23:01:33.407661 [info] TRIMARR_MEDIA_PATH defined as '/mnt/user/Media/Movies/'2026-09-02 23:01:33.421318 [info] TRIMARR_SCHEDULE defined as '0 12 * * *'2026-09-02 23:01:33.434997 [info] TRIMARR_LOG_LEVEL defined as 'INFO'2026-09-02 23:01:33.448549 [info] TRIMARR_DATABASE_PATH defined as '/config/trimarr/db/trimarr.db'2026-09-02 23:01:33.461906 [info] TRIMARR_LOG_PATH defined as '/config/trimarr/logs/trimarr.log'2026-09-02 23:01:33.475014 [info] TRIMARR_MKVMERGE_PATH not defined (via -e TRIMARR_MKVMERGE_PATH), defaulting to ''2026-09-02 23:01:33.488155 [info] TRIMARR_PRE_PROCESS not defined (via -e TRIMARR_PRE_PROCESS), defaulting to ''2026-09-02 23:01:33.501261 [info] TRIMARR_POST_PROCESS not defined (via -e TRIMARR_POST_PROCESS), defaulting to ''2026-09-02 23:01:33.514406 [info] TRIMARR_COMMAND_TIMEOUT_MINS defined as '5'2026-09-02 23:01:33.528189 [info] TRIMARR_EDIT_METADATA_TITLE defined as 'no'2026-09-02 23:01:33.542073 [info] TRIMARR_DELETE_METADATA_TITLE defined as 'no'2026-09-02 23:01:33.555397 [info] TRIMARR_KEEP_SUBTITLES defined as 'no'2026-09-02 23:01:33.569048 [info] TRIMARR_KEEP_AUDIO defined as 'no'2026-09-02 23:01:33.582534 [info] TRIMARR_KEEP_NATIVE_AUDIO defined as 'yes'2026-09-02 23:01:33.596158 [info] TRIMARR_NO_BACKUP defined as 'no'2026-09-02 23:01:33.609858 [info] TRIMARR_DRY_RUN defined as 'no'2026-09-02 23:01:33.623372 [info] TRIMARR_NO_UPDATE_CHECK defined as 'no'2026-09-02 23:01:33.636739 [info] TRIMARR_TMDB_API_KEY not defined (via -e TRIMARR_TMDB_API_KEY), defaulting to ''2026-09-02 23:01:33.650294 [info] TRIMARR_TVDB_API_KEY not defined (via -e TRIMARR_TVDB_API_KEY), defaulting to ''2026-09-02 23:01:33.663606 [info] TRIMARR_STRIP_LOWER_CHANNELS defined as 'no'2026-09-02 23:01:33.676888 [info] TRIMARR_KEEP_UNDEFINED_AUDIO defined as 'yes'2026-09-02 23:01:33.690413 [info] TRIMARR_STRIP_COMMENTARY defined as 'no'2026-09-02 23:01:33.703576 [info] TRIMARR_STRIP_SUBTITLE_REGEX not defined (via -e TRIMARR_STRIP_SUBTITLE_REGEX), defaulting to ''2026-09-02 23:01:33.717115 [info] TRIMARR_SKIP_SIZE_CHECK defined as 'no'2026-09-02 23:01:33.730399 [info] TRIMARR_RUN_ON_START defined as 'yes'2026-09-02 23:01:33.743559 [info] ENABLE_STARTUP_SCRIPTS defined as 'no'2026-09-02 23:01:33.763686 [info] Starting Supervisor...2026-09-02 23:01:33,835 INFO Included extra file "/etc/supervisor/conf.d/trimarr.conf" during parsing2026-09-02 23:01:33,836 INFO Set uid to user 0 succeeded2026-09-02 23:01:33,837 INFO RPC interface 'supervisor' initialized2026-09-02 23:01:33,838 INFO supervisord started with pid 72026-09-02 23:01:34,840 INFO spawned: 'start-script' with pid 2092026-09-02 23:01:34,840 INFO reaped unknown pid 8 (exit status 0)2026-09-02 23:01:34,844 DEBG 'start-script' stdout output:[INFO] No virtualenv found, creating via uv...2026-09-02 23:01:34,845 INFO success: start-script entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)2026-09-02 23:01:36,838 DEBG 'start-script' stderr output:Resolved 57 packages in 1.87s2026-09-02 23:01:36,840 DEBG 'start-script' stderr output:warning: trans==2.1.0 uses a legacy source distribution format ('.tar.bz2') that is not compliant with PEP 625. A future version of uv will reject this source distribution. Consider upgrading to a newer version of trans2026-09-02 23:01:36,840 DEBG 'start-script' stderr output: Building trans==2.1.02026-09-02 23:01:36,841 DEBG 'start-script' stderr output: Building trimarr @ file:///opt/trimarr2026-09-02 23:01:36,907 DEBG 'start-script' stderr output:Downloading pycountry (7.7MiB)Downloading botocore (14.4MiB)2026-09-02 23:01:36,908 DEBG 'start-script' stderr output:Downloading boto (1.3MiB)2026-09-02 23:01:36,956 DEBG 'start-script' stderr output: Built trans==2.1.02026-09-02 23:01:37,019 DEBG 'start-script' stderr output: Downloaded boto2026-09-02 23:01:37,217 DEBG 'start-script' stderr output: Downloaded pycountry2026-09-02 23:01:37,324 DEBG 'start-script' stderr output: Built trimarr @ file:///opt/trimarr2026-09-02 23:01:37,343 DEBG 'start-script' stderr output: Downloaded botocore2026-09-02 23:01:37,344 DEBG 'start-script' stderr output:Prepared 22 packages in 503ms2026-09-02 23:01:37,529 DEBG 'start-script' stderr output:Installed 22 packages in 184ms2026-09-02 23:01:37,529 DEBG 'start-script' stderr output: + attrs==26.1.0 + boto==2.49.0 + botocore==1.43.14 + certifi==2026.5.20 + charset-normalizer==3.4.7 + click==8.4.0 + croniter==6.2.2 + diskcache==5.6.3 + idna==3.15 + imdbpie==5.7.0 + jmespath==1.1.0 + loguru==0.7.3 + packaging==26.2 + pycountry==26.2.16 + python-dateutil==2.9.0.post0 + requests==2.34.2 + setuptools==82.0.1 + six==1.17.0 + trans==2.1.0 + trimarr==1.2.13 (from file:///opt/trimarr) + urllib3==2.7.0 + wheel==0.47.0 Edited September 2Sep 2 by DCCXVIII
September 2Sep 2 Author 38 minutes ago, DCCXVIII said:There is indeed a folder on /mnt/user/Media/Movies. But for whatever reason, Trimarr can't see it. Permissions issue?So this is probably the classic misunderstanding about how bind mounts work in a container, so inside of the container the application (in this case trimarr) will see the container path NOT the host path, so to give you an example this is how i have trimarr set for myself:so what this means is all shares under /mnt/user/ from the host unraid system will be visible under the path /media/ inside the container, so for instance assuming i have a Movies share that would be seen inside the container (by trimarr) as /media/Movies NOT as /mnt/user/Movies as that is a host path not a container path, if you like to think of it as the path is translated from one path (host side) to another (container side), do you see the difference?.So once you have the /media 'bind mount' (technical name for it) created you then reference the internal container path for trimarr to use, like so:So this now tells trimarr to process media in /media/Movies and /media/TV, which on the host side translate to the path /mnt/user/Movies and /mnt/user/TV respectively, do you follow?.If oyu ar estill stuck then screenshot the same fields and post them here.
September 2Sep 2 2 hours ago, binhex said:So this is probably the classic misunderstanding about how bind mounts work in a container, so inside of the container the application (in this case trimarr) will see the container path NOT the host path, so to give you an example this is how i have trimarr set for myself:so what this means is all shares under /mnt/user/ from the host unraid system will be visible under the path /media/ inside the container, so for instance assuming i have a Movies share that would be seen inside the container (by trimarr) as /media/Movies NOT as /mnt/user/Movies as that is a host path not a container path, if you like to think of it as the path is translated from one path (host side) to another (container side), do you see the difference?.So once you have the /media 'bind mount' (technical name for it) created you then reference the internal container path for trimarr to use, like so:So this now tells trimarr to process media in /media/Movies and /media/TV, which on the host side translate to the path /mnt/user/Movies and /mnt/user/TV respectively, do you follow?.If oyu ar estill stuck then screenshot the same fields and post them here.ohhh. I think I understand what you are saying. What threw me off was the fact that every other container I've spun up has already come with its own premade internal appdata folders for the users bind mounts (sonarr, radarr etc). So all I had to do was setup the host path that the containers internal path would translate to. This is the first time I've come across an image that I need to setup the internal container path manually first. So does this mean I need to manually create the Trimarr's internal folder that will bind/translate to the external host path?Thanks for the help! Edited September 2Sep 2 by DCCXVIII
September 2Sep 2 Author 6 minutes ago, DCCXVIII said:So does this mean I need to manually create the Trimarr's internal folder that will bind/translate to the external host path?nope, that is automatically done for you.
September 2Sep 2 Author 7 minutes ago, DCCXVIII said:This is the first time I've come across an image that I need to setup the internal container path manually first.Well you dont need to create the bind mount for /media, that exists in the template, you set the host path as you would for another other contianer, the difference here is that because trimarr is CLI only there is no Web UI to control what the library path is, so you have to configure it via an env var, and this requires you to put the container path in, not the host path, as the cli tool only knows aobut container paths, make sense?.
September 3Sep 3 21 hours ago, binhex said:Well you dont need to create the bind mount for /media, that exists in the template, you set the host path as you would for another other contianer, the difference here is that because trimarr is CLI only there is no Web UI to control what the library path is, so you have to configure it via an env var, and this requires you to put the container path in, not the host path, as the cli tool only knows aobut container paths, make sense?.Ah I see. I think I get it now. I had to configure the "Path: /media" field to "/mnt/user/" like you did, and then replace "/mnt/user/" in the "TRIMARR_MEDIA_PATH" field with the containers "media" folder. In that way, it translated to the container seeing the "Movies" folder as "/media/Media/Movies" at container level. But at host level it translates to "/mnt/user//Media/Movies".So now it works! Thanks so much!
September 3Sep 3 Author 13 minutes ago, DCCXVIII said:Ah I see. I think I get it now. I had to configure the "Path: /media" field to "/mnt/user/" like you did, and then replace "/mnt/user/" in the "TRIMARR_MEDIA_PATH" field with the containers "media" folder. In that way, it translated to the container seeing the "Movies" folder as "/media/Media/Movies" at container level. But at host level it translates to "/mnt/user//Media/Movies".So now it works! Thanks so much!You got it!, don't feel bad this is a VERY common trip up when dealing with Docker, most people go through this but once you get it then it's simple enough, and of course this knowledge can be applied to all docker contianers, there is nothing overly special about this one, other than its super cool of course ;-)
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.