Skip to main content

CLI reference

upbrr [options] <input path>...
upbrr serve [options]
upbrr api-token <list|revoke> [options]
upbrr auth <password|browse-roots> [options]

On Windows, examples use upbrr.exe. Put options before input paths.

Use executable help as the exact reference for your installed version:

.\upbrr.exe --help
.\upbrr.exe serve --help
.\upbrr.exe api-token list --help
.\upbrr.exe auth password --help

Common operations​

Prepare one release:

.\upbrr.exe "D:\releases\Example.Release.2026.1080p-GRP"

Prepare without tracker submission or client injection:

.\upbrr.exe --debug --no-seed "D:\releases\Example.Release.2026.1080p-GRP"

Run duplicate and site checks without uploading:

.\upbrr.exe --site-check --trackers BLU,OE "D:\releases\Example.Release.2026.1080p-GRP"

Process at most five entries from a queue folder:

.\upbrr.exe --queue "D:\upload-queue" --limit-queue 5

Multi-disc folders​

Pass the collection parent, not each disc separately:

.\upbrr.exe "D:\releases\Example BDMV Collection"

For BDMV, interactive preparation groups playlist choices by disc and requires at least one selection from every disc. --unattended stops if no complete stored or configured selection can be resolved; --unattended_confirm can show the required prompt.

--manual_frames 240,480 requests both frames from every prepared disc. The selected parent remains one collection-root torrent containing all disc folders.

Interaction and safety​

The CLI shares one active-input slot with every process using its database. Queue entries run serially. If another session owns the input, the command returns a busy error; unattended mode never prompts or takes over a live input. After its terminal result, the CLI closes its owned input. Cancellation uses bounded cleanup; a reported cleanup failure requires recovery before further work.

After an interrupted legacy workflow, check the tracker or torrent client before answering the recovery confirmation. Confirm that the operation did not complete only when you have verified its outcome. Interactive mode and --unattended_confirm can ask this question; --unattended exits without prompting or starting a new submission. Recovery does not submit anything by itself.

Trackers with a confirmed upload of the same verified submitted content are excluded before duplicate checks. If every selected tracker is already uploaded, the command succeeds without another approval prompt or submission. See the upload workflow.

OptionBehavior
--debugRuns end-to-end preparation and payload preview without tracker submission. Client injection remains enabled unless --no-seed is set.
--log-level debugChanges application logging verbosity for this run. It does not enable debug/non-submitting behavior.
--console-log-level infoChanges terminal log verbosity for this run without changing file or retained application logs.
--unattendedNever prompts. Unsafe global ambiguity returns an error; tracker-specific manual prerequisites can block only that tracker.
--unattended_confirmUses unattended defaults but permits required confirmation or manual-input prompts.
--no-seedDisables torrent-client injection.
Destructive maintenance

--cleanup deletes all stored release content from the active database. --delete-tmp deletes stored database content for each supplied input before processing it. Back up state and verify the active config/database before using either option.

Config and application​

OptionAliasesPurpose
--config <path>-configUse a config file path.
--export-config <path>-export-configExport SQLite config to YAML and exit.
--export-config-plaintext-export-config-plaintextInclude plaintext secrets; requires --export-config.
--import-config <path>-import-configImport .py, .yaml, .yml, or .json config and exit.
--create-auth-create-authCreate web-auth.json beside the active database and exit.
--version-versionPrint version and exit.
--cleanup-cleanupDelete all stored release content and exit.

Execution​

OptionAliasesPurpose
--queue <path>-queueProcess an entire folder queue.
--limit-queue <count>-limit-queue, -lqLimit queued items processed.
--site-check-site-check, -scSearch/check sites without uploading.
--site-upload <tracker>-site-upload, -suProcess one tracker upload flow.
--debug-debugEnable non-submitting debug mode.
--log-level <level>-log-levelSet application logging to error, warn, info, debug, or trace for this run.
--console-log-level <level>-cllSet console logging to the same levels without changing application logs.
--upload-only-upload-onlyUpload using prepared metadata cache only.
--delete-tmp-delete-tmp, -dtmpDelete stored content for each input before processing.
--unattended-unattended, -uaRun without prompts.
--unattended_confirm-unattended_confirm, -uacRun unattended defaults with prompts allowed.

Tracker selection and IDs​

OptionAliasesPurpose
--trackers <list>-trackers, -tkUse comma-separated trackers.
--trackers-remove <list>-trackers-remove, -rtkRemove comma-separated trackers.
--ptp <id-or-url>-ptpSupply a PTP torrent ID or URL.
--blu <id-or-url>-bluSupply a BLU torrent ID or URL.
--aither <id-or-url>-aitherSupply an Aither torrent ID or URL.
--lst <id-or-url>-lstSupply an LST torrent ID or URL.
--oe <id-or-url>-oeSupply an OE torrent ID or URL.
--hdb <id-or-url>-hdbSupply an HDB torrent ID or URL.
--btn <id-or-url>-btnSupply a BTN torrent ID or URL.
--bhd <id-or-url>-bhdSupply a BHD torrent ID or URL.
--ulcx <id-or-url>-ulcxSupply a ULCX torrent ID or URL.

Release overrides​

Explicit corrections take precedence over saved history and provider metadata. Omitting a correction flag preserves the saved value. Resetting a field removes its manual value and restores automatic detection. A boolean value such as --commentary=false is an explicit correction, not a reset.

Review Input without advancing the workflow​

.\upbrr.exe --input-only --skip_auto_torrent --trackers BLU,PTP "E:\Media\Example.Release.2026.1080p-GRP.mkv"

This loads release facts and evaluates selected tracker input requirements. It stops before tracker assessment, duplicate searches, screenshots, descriptions, torrent preparation, or uploads. Metadata provider requests and media inspection can still run. --skip_auto_torrent also disables torrent-client discovery.

Exit code 0 means Input is ready. Exit code 2 means required input prevents the requested readiness. Strict --unattended never prompts.

Correct descriptive fields and languages​

OptionPurpose
--title <text>Override the resolved title.
--alternate-title <text>Override the alternate title.
--original-title <text>Override the original title.
--genres "Drama, Comedy"Supply one or more genres.
--audio-languages "English, Spanish"Replace the release-level audio language list.
--subtitle-languages "French"Replace the regular subtitle language list.
--hardcoded-subs / -hcExplicitly enable hardcoded subtitles; --hardcoded-subs=false disables them.
--hardcoded-subtitle-languages "English"Supply a separate hardcoded-subtitle language list.
--track-languages "<track-id>=English, Spanish"Correct one previously inspected track. Repeat for distinct track IDs.
--source-lookup "<tracker-url>"Look up source metadata using a tracker URL.
--reset-input <field>Remove one saved correction. Repeat for distinct fields.
--confirm-input <field>Confirm one stale content correction against the current required action.
--tracker-input "PTP:no_english_subtitles=yes"Answer a tracker Input field; no and auto are also supported.

Language entries accept one or more comma-separated values. Blank segments are ignored, duplicate languages are removed, and multiword names remain intact. Use --audio-languages= for an explicit empty list. Original production language remains separate from track languages.

Run --input-only first to obtain track IDs. Track corrections require the retained scan manifest and one source. If the source, playlist, or track order changes, inspect the source again and select a current track. Release-level lists do not assign languages to individual streams.

Reset examples:

.\upbrr.exe --input-only --reset-input metadata.audio_languages --reset-input release_name.tag "E:\Media\Example.Release.2026.1080p-GRP.mkv"
.\upbrr.exe --input-only --reset-input metadata.hardcoded_subs "E:\Media\Example.Release.2026.1080p-GRP.mkv"

Apply fact corrections before tracker answers in separate commands. Combining them is rejected. Changes to source identity can require confirmation of saved content fields. Track corrections always require current scan evidence.

Generated descriptions include manually supplied audio, subtitle, and hardcoded language lines. User-supplied descriptions pass through each tracker's normal formatting. Selected screenshots still appear in the tracker's usual location, including separate screenshot fields where applicable.

Saved corrections use a newer database format. Older binaries do not support writing this correction state.

Naming fields​

OptionAliasesPurpose
--category <value>-category, -cOverride category.
--type <value>-type, -tOverride release type.
--source <value>-sourceOverride source.
--resolution <value>-resolution, -resOverride resolution.
--tag <value>-tag, -gOverride group tag.
--service <value>-service, -servOverride streaming service.
--distributor <value>-distributor, -distOverride distributor.
--original-language <value>-original-language, -olOverride original language.
--edition <value>-edition, -repackOverride edition text.
--season <value>-seasonOverride one season token, such as 5 or S05.
--episode <value>-episodeOverride one episode token, such as 5 or E05.
--episode-title <value>-episode-title, -manual-episode-title, -metOverride episode title.
--manual-year <year>-manual-year, -yearOverride release year; 0 explicitly clears it.
--daily <YYYY-MM-DD>-dailySet daily episode air date.
--region <value>-region, -regOverride disc region.
--no-season-no-seasonRemove season and episode from name.
--no-year-no-yearRemove year from name.
--no-aka-no-akaRemove AKA from name.
--no-tag-no-tagRemove group tag from name.
--no-episode-title-no-episode-title, -netRemove episode title from name.
--no-distributor-no-distributor, -ndistRemove distributor.
--no-edition-no-edition, -neRemove edition from name.
--no-dub-no-dubRemove dubbed tag from audio name.
--no-dual-no-dualRemove dual-audio tag from audio name.
--dual-audio-dual-audioAdd dual-audio tag to audio name.

Metadata IDs​

OptionAliasesPurpose
--tmdb <id>-tmdbOverride TMDB ID.
--imdb <id>-imdbOverride IMDb ID.
--mal <id>-malOverride MAL ID.
--tvdb <id>-tvdbOverride TVDB ID.
--tvmaze <id>-tvmazeOverride TVmaze ID.

Clear a metadata provider​

Pass an empty value or 0 to stop using a provider for this release. This works with --tmdb, --imdb, --tvdb, --tvmaze, and --mal.

For example, clear TMDB and use a known IMDb ID:

.\upbrr.exe --tmdb= --imdb tt1234567 "E:\Media\Example.Release.2026.1080p-GRP.mkv"

Use the equals sign in --tmdb= to pass an empty value reliably in PowerShell. --tmdb=0 has the same effect. You can clear several providers in one command.

Clearing removes that provider's ID and metadata from the prepared release. It also prevents automatic rediscovery through title searches, tracker data, or other providers. Other providers can still supply metadata.

The clear is saved for that source path. Omitting the flag on a later run preserves the clear. Supply a positive ID to use that provider again, such as --tmdb 123456. Provider settings for other releases stay unchanged.

Trackers that require the cleared provider can remain blocked. Continue with trackers whose metadata requirements are satisfied, or supply a correct ID before retrying. See metadata troubleshooting.

Tracker overrides​

OptionAliasesPurpose
--skip-dupe-check-skip-dupe-check, -sdcSkip duplicate checking.
--skip-dupe-asking-skip-dupe-asking, -sdaSkip duplicate asking.
--double-dupe-check-double-dupe-check, -ddcRun a double duplicate check.
--foreign-foreignMark a TIK release as foreign.
--opera-operaMark a TIK release as opera or musical.
--asian-asianMark a TIK release as Asian.
--disctype <value>-disctypeOverride TIK disc type.
--commentary-commentary, -mcMark release as containing commentary.
--personalrelease-personalrelease, -prExplicitly set personal-release handling.
--stream-stream, -stMark release as stream optimized.
--webdv-webdvMark release as WEB-DV.
--not-anime-not-animeForce release to be treated as not anime.
--anon-anon, -aUpload anonymously.
--draft-draft, -drSend to drafts where supported.
--modq-modq, -mqOpt into mod queue where supported.
--channel <value>-channel, -chOverride SPD channel.

--personalrelease=true and --personalrelease=false are both explicit choices and override tracker group defaults. Omit the option to leave Personal Release on Auto, where each tracker's configured personal-release groups can supply the default.

Screenshots, images, and descriptions​

Without --screens, the CLI uses screenshot_handling.screens when selected trackers require screenshots. Tracker-specific image counts and limits still apply. An override below a tracker's screenshot requirements can block that upload.

OptionAliasesPurpose
--screens <count>-screens, -sOverride the configured screenshot count.
--manual_frames <list>-manual_frames, -mfUse comma-separated frame numbers.
--comparison <paths>-comparison, -compsSet one comparison folder or comma-separated folders.
--comparison_index <index>-comparison_index, -comps_indexSelect the primary comparison index.
--menu-images <path>-menu-imagesImport manually captured disc-menu screenshots.
--get-dvd-menus-get-dvd-menusCapture distinct menus from extracted DVD VIDEO_TS.
--imghost <name>-imghost, -ihOverride image host.
--skip-imagehost-upload-skip-imagehost-upload, -siuSkip automatic image-host uploads.
--descfile <path>-descfile, -dfUse a custom description file.
--desclink <url>-desclink, -pbUse a custom description link.

Audio analysis​

Use --audio-analysis to analyze prepared audio tracks during the upload workflow, or --audio-analysis-only to analyze one file without configuration or upload.

OptionPurpose
--audio-analysisGenerate local images during upload.
--audio-analysis-onlyAnalyze one media file without configuration or upload.
--audio-output <path>Required output directory for --audio-analysis-only.
--audio-tracks <value>Select primary, all, or comma-separated one-based audio ordinals.
--audio-images <value>Generate both, waveform, or spectrogram images. Defaults to both.

Generate waveform and spectrogram images for the prepared primary audio track:

.\upbrr.exe --audio-analysis "D:\releases\Example.Release.2026.1080p-GRP.mkv"

Generate only spectrograms for the first and third audio tracks:

.\upbrr.exe --audio-analysis --audio-tracks 1,3 --audio-images spectrogram "D:\releases\Example.Release.2026.1080p-GRP.mkv"

Analyze only audio and save it outside managed temporary storage:

.\upbrr.exe --audio-analysis-only --audio-output "D:\reports\audio" "D:\releases\Example.Release.2026.1080p-GRP.mkv"

The numeric selectors are audio-only ordinals, not container-wide stream indexes. Repeated ordinals are ignored, and results retain source track order. --audio-tracks and --audio-images require either analysis mode.

During upload, the CLI prints the path of every successfully retained PNG and statistics file. Standalone analysis prints paths to PNGs and statistics files in a new directory under --audio-output. A partial or failed analysis exits nonzero, even when some artifacts succeeded. See Audio analysis for output, retry, and retention behavior.

Client and torrent​

OptionAliasesPurpose
--client <name>-clientOverride torrent client.
--qbit-tag <value>-qbit-tag, -qbtOverride qBittorrent tag.
--qbit-cat <value>-qbit-cat, -qbcOverride qBittorrent category.
--force-recheck-force-recheck, -frcForce recheck of matched qBittorrent torrents before validation.
--no-seed-no-seed, -nsDo not inject into torrent clients.
--skip_auto_torrent-skip_auto_torrent, -satSkip automated torrent-client searching.
--keep-folder-keep-folder, -kfKeep a supplied folder instead of selecting its video file.
--onlyID-onlyIDOnly retrieve tracker metadata IDs.
--infohash <hash>-infohash, -th, -torrenthashOverride the v1 info hash.
--max-piece-size <MiB>-max-piece-size, -mpsSet maximum torrent piece size in MiB.
--nohash-nohash, -nhReuse existing torrents only; do not generate a new torrent.
--rehash-rehash, -rhForce generation of a fresh torrent.

serve​

upbrr serve [options]

--config seeds an empty database. For an existing database, the server uses its stored settings. Use Settings or configuration import to activate later changes.

OptionPurpose
--config <path>Use a config file path.
--addr <host:port>Set the complete listen address.
--host <host>Set the listen host.
--port <port>Set the listen port.
--base-url <url-or-path>Set the external Web UI URL or path prefix.
--persist-listenPersist listen host and port to web-config.json.
--persist-web-configPersist supplied Web UI serve settings.
--dev-no-authDisable Web auth for local development on loopback only.

See Web server and reverse proxy for precedence and proxy examples.

auth​

Password changes and browse-policy changes after initial setup are available only through the local binary. The first authenticated Web UI setup may establish the initial browse policy. Stop upbrr serve before running either command, then restart it when the command completes.

After validation, each command creates a unique web-auth.json.backup-* beside the active auth file and prints its exact path. The path is still printed if a later update step fails. Backups contain sensitive authentication and encryption material; protect them like web-auth.json and remove obsolete copies manually.

Change the Web UI password interactively:

.\upbrr.exe auth password

The command prompts for the current password, the replacement, and confirmation without accepting password flags. Retained browser sessions are revoked immediately after the current password is verified. If a later update step fails, sign in again with the existing password before retrying.

Replace all browse roots by passing each existing directory as a separate argument:

.\upbrr.exe auth browse-roots "D:\Media" "E:\Downloads"

To remove the roots and explicitly allow unrestricted host browsing:

.\upbrr.exe auth browse-roots --allow-unrestricted

Both subcommands accept --config when the active database is selected through a non-default config file. For containers, run the command in the same environment as upbrr and use paths visible inside the container.

api-token​

Create persistent bearer tokens in Settings → API Tokens. The authenticated Web UI displays each plaintext token once so it can be copied directly into a secret manager; CLI output never includes tokens.

List safe token metadata:

.\upbrr.exe api-token list

Revoke by token ID:

.\upbrr.exe api-token revoke tok_example

List and revoke accept --config.

See the API reference before granting workflow:execute.