Config options - HyperNylium/mdnx-auto-dl GitHub Wiki

Notes for config.json usage

All items in the Config column would go in the app section. For example, if i wanted to modify CR_USERNAME, i would put it here:

{
    "app": {
        "CR_USERNAME": ""
    }
}

The only exception here is monitor-series-id. That is in the global scope of the JSON file, not in a property like app or mdnx.

If you wanted to modify q: 0 and dubLang: ["jpn", "eng", "zho"] in cli-defaults.yml for multi-downloader-nx, you just need to modify the mdnx key like this.
Any setting from multi-downloader-nx's documentation is valid as long as the option has a cli-default Entry that isn't NaN:

{
    "mdnx": {
        "q": 0,
        "dubLang": ["jpn", "eng", "zho"]
    }
}

Standered JSON formatting still applies. Separate list items with a , (comma), integers are going to be stand-alone numbers, not in "" (quotes). Anything you put in quotes is a string object.

Config options for config.json

Config Default value Explanation
monitor-series-id [] List of Crunchyroll series IDs to watch for new episodes.
TEMP_DIR /app/appdata/temp Temporary staging directory. Raw downloads are written here before moving into your library.
BIN_DIR /app/appdata/bin Path containing bundled binaries (e.g. multi-download-nx, Bento4-SDK) inside the container.
LOG_FILE /app/appdata/logs/app.log Absolute path of the application log file in the container.
DATA_DIR /data Root of your anime library on the host. Finished files are organized here according to FOLDER_STRUCTURE.
CR_USERNAME "" Crunchyroll username for authentication.
CR_PASSWORD "" Crunchyroll password for authentication.
BACKUP_DUBS ["zho"] List of backup dubs to download if the primary dubs are not available.
FOLDER_STRUCTURE ${seriesTitle}/S${season}/${seriesTitle} - S${seasonPadded}E${episodePadded} Template for how seasons and episodes are laid out under DATA_DIR.
DOWNLOAD_SPECIAL_EPISODES false If true, download special episodes (e.g. S00EXX, movies); if false, ignore them.
SPECIAL_EPISODES_FOLDER_NAME Special Folder name (inside each series) that stores special episodes.
CHECK_MISSING_DUB_SUB true When true, detect and report episodes missing dub or subtitle tracks.
CHECK_MISSING_DUB_SUB_TIMEOUT 300 Seconds to wait before timing out when checking for missing dubs/subs on a file.
CHECK_FOR_UPDATES_INTERVAL 3600 Seconds to wait between complete library scans for new episodes or missing tracks.
BETWEEN_EPISODE_DL_WAIT_INTERVAL 30 Delay in seconds after each episode download to reduce API rate‑limiting.
CR_FORCE_REAUTH false When true, always perform a fresh Crunchyroll login and overwrite cr_token.yml, then reset to false.
CR_SKIP_API_TEST false When true, skip the startup self‑test that probes the Crunchyroll API.
NOTIFICATION_PREFERENCE none Set what service you want to use to receive notifications. Options: none, smtp,ntfy.
LOG_LEVEL info Set the logging level. Options: debug, info, warning, error, critical.
REMOVE_ALL_ACTIVE_STREAMS false When true, remove all active streams before starting a new download. Sets --tsd to true in mdnx

Options for FOLDER_STRUCTURE

Variable Example value Explanation
${seriesTitle} Kaiju No. 8 Sanitised series title (filesystem-unsafe characters replaced).
${season} 1 Season number, no leading zeros.
${seasonPadded} 01 Season number padded to two digits.
${episode} 1 Episode number, no leading zeros.
${episodePadded} 01 Episode number padded to two digits.
${episodeName} The Man Who Became a Kaiju Sanitised episode title.

Example of FOLDER_STRUCTURE with the above variables:

${seriesTitle}/S${season}/${seriesTitle} - S${seasonPadded}E${episodePadded}

This would result in the following folder structure:

Kaiju No. 8/S1/Kaiju No. 8 - S01E01

Options for NOTIFICATION_PREFERENCE

Option Explanation
none No notifications will be sent.
smtp Send notifications via SMTP email. Requires additional configuration in config.json.
ntfy Send notifications via ntfy.sh. Requires additional configuration in config.json and app/appdata/config/ntfy.sh

For smtp, add the following key-value pairs to config.json right under the NOTIFICATION_PREFERENCE key:

"NOTIFICATION_PREFERENCE": "smtp",
"SMTP_FROM": "who we sending as?",
"SMTP_TO": "who we sending to?",
"SMTP_HOST": "smtp.gmail.com, or whatever your email provider is",
"SMTP_USERNAME": "your username. For gmail, this is your email address",
"SMTP_PASSWORD": "your password. For gmail, this is your app password",
"SMTP_PORT": 587,
"SMTP_STARTTLS": true

For ntfy, add the following key-value pairs to config.json right under the NOTIFICATION_PREFERENCE key:

"NOTIFICATION_PREFERENCE": "ntfy",
"NTFY_SCRIPT_PATH": "/app/appdata/config/ntfy.sh"

Make sure to set NTFY_URL in app/appdata/config/ntfy.sh to the URL of your ntfy server.
To modify things like tags and such, you can modify the ntfy.sh script.

Environment variables

These are the environment variables that you can set in the docker-compose.yaml file under the environment section.

Variable Default value Explanation
UID 1000 User ID that mdnx-auto-dl will run as.
GID 1000 Group ID that mdnx-auto-dl will run as.
TZ America/New_York Timezone for the container. Set to your local timezone from the "TZ identifier" column here.
CONFIG_FILE /app/appdata/config/config.json config.json file location in the container.
QUEUE_FILE /app/appdata/config/queue.json queue.json file location in the container.
BENTO4_URL https://raw.githubusercontent.com/HyperNylium/mdnx-auto-dl/refs/heads/master/app/appdata/bin/Bento4-SDK.zip URL for downloading Bento4-SDK.zip if both the file itself and extracted folder doesn't exist.
MDNX_URL https://raw.githubusercontent.com/HyperNylium/mdnx-auto-dl/refs/heads/master/app/appdata/bin/mdnx.zip URL for downloading mdnx.zip if both the file itself and extracted folder doesn't exist.