binhex-trimarr

binhex-trimarr

Docker app from Binhex's Repository

Overview

Removes (trims) unwanted audio and subtitles from matroska container format video files using mkvmerge. Features recursive scanning, smart skip via SQLite tracking, commentary track safety, multi-language support, auto-managed mkvmerge binary, and space savings reporting. Supports one-shot or cron-scheduled operation.

Requirements

Media directory
You must map at least one media directory (/media or custom path) containing your .mkv files.

Language configuration
The TRIMARR_LANGUAGE variable must be set to one or more ISO 639-2 language codes (comma-separated), e.g. 'eng' for English only or 'eng,fre' for English and French.

First run
On first run, trimarr downloads the mkvmerge binary automatically. Subsequent runs check for updates unless TRIMARR_NO_UPDATE_CHECK is set to 'yes'.

Schedule (optional)
Set TRIMARR_SCHEDULE to a cron expression to run repeatedly (e.g. '0 2 * * *' for daily at 2am). Omit for one-shot mode (container exits after processing).

Runtime arguments

Network
bridge
Shell
bash
Privileged
false
Extra Params
--restart=unless-stopped

Template configuration

Path: /configPathrw

Container path for configuration files, database (trimarr.db), and logs.

Target
/config
Default
/mnt/user/appdata/trimarr
Path: /mediaPathrw

Container path to your media files (e.g. movies, tv). Matches the default TRIMARR_MEDIA_PATH.

Target
/media
Default
/mnt/user
Variable: TRIMARR_LANGUAGEVariable

(Required) ISO 639-2 language code(s) for tracks to keep. Comma-separate multiple codes, e.g. 'eng' or 'eng,fre'. See https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes

Target
TRIMARR_LANGUAGE
Variable: TRIMARR_MEDIA_PATHVariable

Directories containing media files to process. Use pipe (|) as separator for multiple paths, e.g. /media/Movies|/media/TV

Target
TRIMARR_MEDIA_PATH
Default
/media
Variable: TRIMARR_SCHEDULEVariable

Cron schedule for repeated runs, e.g. '0 2 * * *' (daily at 2am), '@daily', '*/30 * * * *'. Omit for one-shot mode (container exits after processing).

Target
TRIMARR_SCHEDULE
Variable: TRIMARR_EDIT_METADATA_TITLEVariable

If set to 'yes', each file's title metadata is updated to match its filename.

Target
TRIMARR_EDIT_METADATA_TITLE
Default
no|yes
Variable: TRIMARR_DELETE_METADATA_TITLEVariable

If set to 'yes', title metadata is deleted from files. Mutually exclusive with TRIMARR_EDIT_METADATA_TITLE.

Target
TRIMARR_DELETE_METADATA_TITLE
Default
no|yes
Variable: TRIMARR_KEEP_SUBTITLESVariable

If set to 'yes', all subtitle tracks are kept regardless of language.

Target
TRIMARR_KEEP_SUBTITLES
Default
no|yes
Variable: TRIMARR_KEEP_AUDIOVariable

If set to 'yes', all audio tracks are kept regardless of language.

Target
TRIMARR_KEEP_AUDIO
Default
no|yes
Variable: TRIMARR_KEEP_NATIVE_AUDIOVariable

If set to 'yes', audio tracks matching the film's original language (detected via IMDb/TMDb) are kept even if they don't match TRIMARR_LANGUAGE. Useful for dubbed films.

Target
TRIMARR_KEEP_NATIVE_AUDIO
Default
no|yes
Variable: TRIMARR_NO_BACKUPVariable

If set to 'yes', original files are deleted instead of renamed to .bak after successful processing.

Target
TRIMARR_NO_BACKUP
Default
no|yes
Variable: TRIMARR_DRY_RUNVariable

If set to 'yes', performs a dry run without modifying any files. Defaults to 'yes' for safety — set to 'no' to allow actual processing.

Target
TRIMARR_DRY_RUN
Default
yes|no
Variable: TRIMARR_STRIP_LOWER_CHANNELSVariable

If set to 'yes', audio tracks with channel count below the maximum surviving track are removed (e.g. drops 2ch if 8ch exists).

Target
TRIMARR_STRIP_LOWER_CHANNELS
Default
no|yes
Variable: TRIMARR_STRIP_COMMENTARYVariable

If set to 'yes', audio and subtitle tracks whose name contains 'commentary' (case-insensitive) are removed.

Target
TRIMARR_STRIP_COMMENTARY
Default
no|yes
Variable: TRIMARR_STRIP_SUBTITLE_REGEXVariable

Python regex pattern. Any subtitle track whose name matches is removed after language filtering, regardless of language. Uses Python re syntax. Example: '(?i)songs.*signs'

Target
TRIMARR_STRIP_SUBTITLE_REGEX
Variable: TRIMARR_RUN_ON_STARTVariable

If set to 'yes', fires one run immediately on startup before the first scheduled cron fire. Requires TRIMARR_SCHEDULE to be set.

Target
TRIMARR_RUN_ON_START
Default
no|yes
Variable: TRIMARR_TMDB_API_KEYVariable

Optional TMDb API key. Used as a fallback when IMDb identification fails. Get a free key at https://www.themoviedb.org/settings/api

Target
TRIMARR_TMDB_API_KEY
Variable: TRIMARR_TVDB_API_KEYVariable

Optional TVDB API key. Used as a fallback when IMDb and TMDb identification fails. Useful for TV shows whose NFO files contain only a TVDB ID. Get a free key at https://thetvdb.com/api

Target
TRIMARR_TVDB_API_KEY
Variable: TRIMARR_KEEP_UNDEFINED_AUDIOVariable

If set to 'yes', audio tracks with an undefined language code ('und') are kept rather than dropped by the language filter. Useful when source files have missing or incorrect language tags.

Target
TRIMARR_KEEP_UNDEFINED_AUDIO
Default
no|yes
Variable: TRIMARR_LOG_LEVELVariable

Logging level. Dropdown shows valid choices; INFO is default.

Target
TRIMARR_LOG_LEVEL
Default
INFO|DEBUG|SUCCESS|WARNING|ERROR
Variable: TRIMARR_DATABASE_PATHVariable

Path to SQLite database for tracking processed files.

Target
TRIMARR_DATABASE_PATH
Default
/config/trimarr/db/trimarr.db
Variable: TRIMARR_LOG_PATHVariable

Path to log file for tracking application events.

Target
TRIMARR_LOG_PATH
Default
/config/trimarr/logs/trimarr.log
Variable: TRIMARR_MKVMERGE_PATHVariable

Path to mkvmerge executable. When omitted, trimarr manages its own binary (auto-downloaded and updated).

Target
TRIMARR_MKVMERGE_PATH
Variable: TRIMARR_PRE_PROCESSVariable

Shell command to run before processing a directory. Use {leaf} for basename, {dir} for full path. Example: 'no_ransom.sh --unlock yes {leaf}'

Target
TRIMARR_PRE_PROCESS
Variable: TRIMARR_POST_PROCESSVariable

Shell command to run after processing a directory. Use {leaf} for basename, {dir} for full path. Example: 'no_ransom.sh --unlock no {leaf}'

Target
TRIMARR_POST_PROCESS
Variable: TRIMARR_COMMAND_TIMEOUT_MINSVariable

Timeout in minutes for each pre/post process command. Set to 0 to disable timeout.

Target
TRIMARR_COMMAND_TIMEOUT_MINS
Default
5
Variable: TRIMARR_NO_UPDATE_CHECKVariable

If set to 'yes', skips the automatic check for a newer mkvmerge version.

Target
TRIMARR_NO_UPDATE_CHECK
Default
no|yes
Variable: TRIMARR_SKIP_SIZE_CHECKVariable

If set to 'yes', bypasses the 50% output size guard. Use when legitimate remuxes produce significantly smaller files.

Target
TRIMARR_SKIP_SIZE_CHECK
Default
no|yes
Variable: ENABLE_STARTUP_SCRIPTSVariable

Specify whether to run startup scripts to install and/or configure additional applications.

Target
ENABLE_STARTUP_SCRIPTS
Default
no|yes
Variable: ENABLE_HEALTHCHECKVariable

Enable or disable healthchecks.

Target
ENABLE_HEALTHCHECK
Default
yes|no
Variable: HEALTHCHECK_COMMANDVariable

The command or script to execute, if not specified then the script healthcheck.sh will be used (process, dns and https checking).

Target
HEALTHCHECK_COMMAND
Variable: HEALTHCHECK_ACTIONVariable

The action to execute if the healthcheck command returns a non zero exit code, if not specified the action will be 'exit 1', if you want the container to exit on failure then set the action to 'kill 1'.

Target
HEALTHCHECK_ACTION
Variable: HEALTHCHECK_HOSTNAMEVariable

The hostname used when performing HTTPS and DNS healthchecking.

Target
HEALTHCHECK_HOSTNAME
Default
google.com
Variable: PUIDVariable

User ID for the running container

Target
PUID
Default
99
Variable: PGIDVariable

Group ID for the running container

Target
PGID
Default
100
Variable: UMASKVariable

UMASK for the running container

Target
UMASK
Default
000

Download Statistics

832
Total Downloads

Details

Repository
ghcr.io/binhex/arch-trimarr
Last Updated2026-06-01
First Seen2026-05-21

Run binhex-trimarr on Unraid.

binhex-trimarr is listed in Community Apps for Unraid OS. Explore Unraid to build a flexible home server, NAS, or homelab.