upbrr

module
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 13, 2026 License: GPL-2.0

README

upbrr

Alpha release: upbrr is early software and the documentation is incomplete. It is intended for users who already understand Upload Assistant workflows, tracker rules, release naming, category/type selection, screenshots, descriptions, torrent clients, and post-upload checking.

Quality check every upload before submitting. Pay close attention to generated names, tracker category, tracker type, edition/source/resolution handling, description output, image links, and torrent-client injection settings. Do not rely on alpha automation as the final authority.

Screenshot 2026-06-12 093436

upbrr is an upload preparation app for private-tracker workflows.

  • pick a release folder or file
  • fetch and adjust metadata
  • review tracker choices and dupe checks
  • generate, select, and upload screenshots
  • build tracker descriptions
  • preview payloads before upload
  • submit to trackers
  • inject or save torrents for your client

The goal is a guided upload workspace, not a replacement for user judgement or tracker rules.

Before You Start

You should already know how your trackers expect uploads to be named and categorized. Before doing real uploads, run test paths, dry runs, or site checks where possible and compare upbrr output with what you would have submitted manually.

Have these ready:

  • tracker API keys, cookies, or credentials required by the trackers you use

  • image host credentials

  • torrent client details or watch-folder paths

  • existing Upload Assistant config.py, if migrating

  • FFmpeg installed on your system for screenshot generation

    • On Windows, FFmpeg must be added to PATH

    • On Linux, install it from your distribution package manager

    • On macOS, install it with Homebrew:

      brew install ffmpeg
      

      The CLI and WebUI server can find ffmpeg when their process environment includes Homebrew's bin directory.

    • Automatic DVD menu screenshots need an FFmpeg build whose dvdvideo demuxer exposes menu, menu_lu, menu_vts, pgc, and pg. A version number alone does not prove this capability. upbrr checks the selected FFmpeg at runtime; see FFmpeg's dvdvideo documentation.

  • A TMDB API key is optional, but required for most trackers in upbrr.

By default, upbrr stores its database at:

%USERPROFILE%\.upbrr\db.sqlite

Otherwise, if the XDG_CONFIG_HOME environment variable is set (normally ~/.config), the path is:

$XDG_CONFIG_HOME/upbrr/db.sqlite

Tracker cookies are stored encrypted in the database. To import legacy .txt or .json cookie files, place them in a cookies folder beside the database:

%USERPROFILE%\.upbrr\cookies

If you use a custom database path, put legacy cookie files in a cookies folder beside that database. upbrr removes successfully migrated files.

Migration From Upload Assistant

upbrr can import a legacy Upload Assistant config.py directly, or convert it to a YAML file first so you can inspect it.

Option 1: Direct Import

Use this when you want the app to convert and save the config straight into the upbrr database:

.\upbrr.exe --import-config "C:\path\to\Upload-Assistant\data\config.py"

The importer accepts:

  • .py legacy Upload Assistant config files
  • .yaml / .yml upbrr config files
  • .json upbrr config files

Read all warnings printed during import. Unknown legacy keys, unsupported tracker fields, or unsupported image-host settings may be skipped or adjusted.

You can also import config files from the WebUI Settings page.

Web UI Browse Access

Config import does not set web browse roots. Browse access is stored separately in web-auth.json, beside the upbrr database, because it controls which host folders the browser-based web UI can read.

On a fresh web UI setup, after creating the admin account, upbrr asks you to choose one or more browse roots such as D:\Media, E:\Downloads, or to explicitly allow unrestricted host browsing. The web UI cannot browse release folders or import menu images until this is set.

If you import an existing Upload Assistant config, the imported tracker, client, and app settings do not change browse access. If web-auth.json already exists, its current browse roots or unrestricted-browse setting stay in effect. If no web-auth.json exists yet, you will still be asked to set browse access the first time you set up the web UI.

Option 2: Convert To YAML First

Use the included converter when you want a human-readable file to review before importing:

py .\scripts\convert_ua_config.py "C:\path\to\Upload-Assistant\data\config.py" -o ".\config.converted.yaml"

Then inspect config.converted.yaml, fix any values that need manual attention, and import it:

.\upbrr.exe --import-config ".\config.converted.yaml"

The converter maps known Upload Assistant defaults, tracker settings, and torrent-client settings onto the current upbrr config shape. Legacy-only settings that do not exist in upbrr are not carried over. Treat the converted file as a starting point, not proof that your setup is complete.

Migrating Cookies

If your old Upload Assistant setup has tracker cookies under data\cookies, copy those files to upbrr's cookie folder:

%USERPROFILE%\.upbrr\cookies

Restart upbrr after copying cookies, then verify tracker login/session status before uploading.

Running upbrr

Web UI:

.\upbrr.exe serve

Web UI behind a reverse proxy:

The standard and simplest reverse-proxy setup is to give upbrr its own subdomain, such as https://upbrr.example.com. In that setup the browser still sees upbrr at the web root (/), so upbrr does not need any special base path setting:

.\upbrr.exe serve

Example nginx subdomain proxy:

server {
  server_name upbrr.example.com;

  location / {
    proxy_pass http://localhost:7480/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering off;
  }
}

A path-prefix proxy is different. Use this only when upbrr must live under an existing domain path, such as https://example.com/upbrr. In that setup the browser requests /upbrr/..., so upbrr must be told its external base URL:

.\upbrr.exe serve --base-url https://reverseproxyaddr.com/upbrr/

To save that setting to web-config.json, add --persist-web-config:

.\upbrr.exe serve --base-url https://example.com/upbrr/ --persist-web-config

For Docker or unattended deployments, use env vars instead of overriding the container command:

environment:
  - UPBRR_WEB_BASE_URL=/upbrr/
  - UPBRR_HEALTHCHECK_URL=http://127.0.0.1:7480/upbrr/api/auth/status

Serve settings precedence is CLI flags, then UPBRR_WEB_* env vars, then web-config.json, then defaults. Supported env vars are UPBRR_WEB_BASE_URL, UPBRR_WEB_HOST, UPBRR_WEB_PORT, UPBRR_WEB_OPEN_BROWSER, and UPBRR_WEB_TRUSTED_PROXIES.

Example nginx path-prefix proxy:

server {
  server_name example.com;

  location = /upbrr {
    return 301 /upbrr/;
  }

  location /upbrr/ {
    proxy_pass http://localhost:7480/upbrr/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering off;
  }
}

Keep the /upbrr/ path on both sides of proxy_pass unless you intentionally configure every HTML, API, SSE, cookie, and asset path rewrite yourself. The supported mode is path-retained proxying: browsers request /upbrr/... and the proxy forwards /upbrr/... to upbrr. If the page loads but assets, login, or live progress updates fail, check that requests are going to /upbrr/api/... and /upbrr/assets/..., not root /api/... or /assets/....

If your proxy terminates HTTPS and forwards plain HTTP to upbrr, configure trusted_proxies in web-config.json so upbrr can trust X-Forwarded-Proto when deciding whether to set secure cookies.

CLI upload preparation:

.\upbrr.exe "D:\releases\Some.Release.2026.1080p.BluRay"

Useful CLI checks:

.\upbrr.exe --site-check --trackers BLU,OE "D:\releases\Some.Release"
.\upbrr.exe --debug --trackers PTP,HDB "D:\releases\Example.Release.2026"
.\upbrr.exe --queue "D:\upload-queue" --limit-queue 5

CLI --debug runs the end-to-end workflow without tracker submission and prints the tracker payload preview. It still attempts client injection by default; add --no-seed (-ns) to skip injection. --log-level debug changes log verbosity only and does not select debug/dry-run behavior. See upbrr.exe --help.

Automatic DVD Menu Screenshots

Automatic DVD menu capture is opt-in. It accepts an extracted DVD directory containing VIDEO_TS, or the VIDEO_TS directory itself. ISO images, optical drives, and Blu-ray menus are not automatic-capture inputs in this version.

CLI example:

.\upbrr.exe --get-dvd-menus "D:\releases\Example.Release.2026.DVD-GRP"

In the WebUI, fetch DVD metadata, then open Disc Menus and start automatic capture. Manual Disc Menu image import remains available for DVD, BDMV, and HDDVD sources. screenshot_handling.max_menu_items controls the maximum stored automatic menu images; the default is 6 and the supported range is 1 to 32.

The FFmpeg capability check must find the dvdvideo demuxer and all required menu-coordinate options. If it does not, capture stops with an explicit capability error instead of sampling menu VOB files. Application Details shows the embedded Go DVD engine version, FFmpeg version, and menu-capability status without exposing local executable paths.

upbrr does not include CSS decryption or bundle libdvdcss. Encrypted/protected, unreadable, region-restricted, or corrupt inputs may fail. Use only media you are legally permitted to process; extract/decrypt it outside upbrr where allowed.

Run with Docker Compose

A ready-to-use example lives in example-docker-compose.yml. The image serves the web UI on all interfaces by default and stores its config and database in the /config volume. Copy the example to docker-compose.yml (or point -f at it) and start it:

cp example-docker-compose.yml docker-compose.yml
docker compose up -d

Then open http://<host>:7480 to complete the first-run setup.

Notes:

  • The container runs as uid:gid 1000:1000. The bind-mounted ./config and /data directories must be owned by that uid — create and chown them before the first start (mkdir -p /path/to/config && sudo chown -R 1000:1000 /path/to/config, same for your data dir), or set user: in the compose file to a uid that already owns them. Docker auto-creates a missing bind-mount dir as root, which the non-root app can't write, so pre-create it. The /data mount (and any hardlink/reflink staging target) needs the same. (On Docker Desktop for macOS/Windows this is handled automatically.)
  • First-run setup is reachable by anyone who can reach port 7480. Complete it promptly, and don't expose the port to untrusted networks (scope it to 127.0.0.1:7480:7480 or use a reverse proxy) until you have.

Typical Upload Flow

  1. Open upbrr.
  2. Go to Settings and confirm required API keys, trackers, image hosts, torrent clients, screenshots, and post-upload options.
  3. Select a release path.
  4. Fetch metadata.
  5. Review title, year, IDs, category, type, source, resolution, edition, season/episode, and generated release name.
  6. Run dupe checks and read tracker-specific warnings.
  7. Generate or import screenshots, then verify the selected images and image-host output.
  8. Build descriptions and inspect rendered tracker descriptions.
  9. Run a dry run or payload preview where available.
  10. Upload only after every tracker tab looks correct.

Required Manual Checks

Before submitting, verify:

  • release name matches tracker rules
  • category and type are correct for each tracker
  • movie vs TV handling is correct
  • disc, remux, encode, WEB, HDTV, pack, season, and episode handling is correct
  • source, resolution, edition, service, tag, and group are correct
  • screenshots are valid, ordered, and hosted on allowed hosts
  • description BBCode renders correctly
  • torrent file contents and piece settings are expected
  • torrent client category, tags, save path, and injection target are correct
  • dupe results and rule warnings have been read

Alpha builds can have rough edges. When in doubt, stop before upload and check manually.

License

GPL-2.0-or-later. See LICENSE.

Directories

Path Synopsis
cmd
commitmsgcheck command
gofixchanged command
literalpolicy command
logpolicy command
pathpolicy command
upbrr command
workflowcontractgen command
Command workflowcontractgen generates the release-workflow OpenAPI document and its WebUI transport types from pkg/api DTOs plus the public route manifest.
Command workflowcontractgen generates the release-workflow OpenAPI document and its WebUI transport types from pkg/api DTOs plus the public route manifest.
internal
apitoken
Package apitoken owns persistent bearer-token generation, validation, and authentication.
Package apitoken owns persistent bearer-token generation, validation, and authentication.
architecturepolicy
Package architecturepolicy enforces lasting ownership boundaries for the canonical runtime and prepared-release architecture.
Package architecturepolicy enforces lasting ownership boundaries for the canonical runtime and prepared-release architecture.
authmaterial/authfixture
Package authfixture writes web-auth material for tests that exercise encrypted persistence without exercising password hashing.
Package authfixture writes web-auth material for tests that exercise encrypted persistence without exercising password hashing.
bbcode
Package bbcode provides shared BBCode cleanup and normalization primitives.
Package bbcode provides shared BBCode cleanup and normalization primitives.
clientdiscovery
Package clientdiscovery owns normalized, source-scoped torrent-client discovery for canonical preparation.
Package clientdiscovery owns normalized, source-scoped torrent-client discovery for canonical preparation.
config/importer
Package importer dispatches configuration imports to the appropriate parser based on file extension.
Package importer dispatches configuration imports to the appropriate parser based on file extension.
configstore
Package configstore bridges the config package and the sqlite repository so CLI and WebUI share a single implementation of the open-database → migrate → load/save flow that used to be duplicated across cmd/upbrr/main.go and internal/webserver runtime activation.
Package configstore bridges the config package and the sqlite repository so CLI and WebUI share a single implementation of the open-database → migrate → load/save flow that used to be duplicated across cmd/upbrr/main.go and internal/webserver runtime activation.
description/unit3d
Package unit3d builds and cleans descriptions shared by Unit3D trackers.
Package unit3d builds and cleans descriptions shared by Unit3D trackers.
dvdvideo/engine
Package engine coordinates bounded DVD menu inventory, navigation-state discovery, exact FFmpeg background decoding, and Go subpicture composition.
Package engine coordinates bounded DVD menu inventory, navigation-state discovery, exact FFmpeg background decoding, and Go subpicture composition.
dvdvideo/graph
Package graph performs deterministic, bounded DVD menu discovery over cloned pure-Go VM state and reconciles reachable results with the IFO inventory.
Package graph performs deterministic, bounded DVD menu discovery over cloned pure-Go VM state and reconciles reachable results with the IFO inventory.
dvdvideo/ifo
Package ifo parses the bounded DVD-Video menu structures needed for menu inventory and VM traversal.
Package ifo parses the bounded DVD-Video menu structures needed for menu inventory and VM traversal.
dvdvideo/nav
Package nav parses DVD-Video NAV PCI/DSI packets and routes DVD subpicture private-stream payloads.
Package nav parses DVD-Video NAV PCI/DSI packets and routes DVD subpicture private-stream payloads.
dvdvideo/render
Package render probes FFmpeg DVD menu capability and decodes exact-coordinate menu background frames selected by the pure-Go engine.
Package render probes FFmpeg DVD menu capability and decodes exact-coordinate menu background frames selected by the pure-Go engine.
dvdvideo/spu
Package spu reassembles, decodes, and composites DVD subpicture packets.
Package spu reassembles, decodes, and composites DVD subpicture packets.
dvdvideo/vm
Package vm decodes and executes DVD-Video virtual-machine commands.
Package vm decodes and executes DVD-Video virtual-machine commands.
errors
Package errors defines sentinel failure classes shared across internal package boundaries.
Package errors defines sentinel failure classes shared across internal package boundaries.
externalidentity
Package externalidentity resolves one canonical, source-scoped external identity without persisting it.
Package externalidentity resolves one canonical, source-scoped external identity without persisting it.
imagehosting
Package imagehosting selects, uploads, and persists release images.
Package imagehosting selects, uploads, and persists release images.
imagehosting/policy
Package policy describes generic image uploader capabilities.
Package policy describes generic image uploader capabilities.
literalpolicy
Package literalpolicy enforces readable layout for substantial keyed composite literals.
Package literalpolicy enforces readable layout for substantial keyed composite literals.
pathing
Package pathing provides portable host-filesystem path operations.
Package pathing provides portable host-filesystem path operations.
pathing/layout
Package layout defines deterministic application filesystem layouts.
Package layout defines deterministic application filesystem layouts.
pathing/policy
Package policy checks repository source for portable path-handling violations.
Package policy checks repository source for portable path-handling violations.
preparedrelease
Package preparedrelease owns immutable, source-scoped prepared-release generations and their private preparation resources.
Package preparedrelease owns immutable, source-scoped prepared-release generations and their private preparation resources.
preparedrelease/state
Package preparationstate contains mutable evidence while a prepared release is being collected.
Package preparationstate contains mutable evidence while a prepared release is being collected.
providerid
Package providerid formats canonical numeric provider identifiers for external text contracts.
Package providerid formats canonical numeric provider identifiers for external text contracts.
releasepolicy
Package releasepolicy applies release-wide upload eligibility rules.
Package releasepolicy applies release-wide upload eligibility rules.
releaseworkflow
Package releaseworkflow coordinates immutable release workflow stages and keeps repository and private-resource concerns behind one command boundary.
Package releaseworkflow coordinates immutable release workflow stages and keeps repository and private-resource concerns behind one command boundary.
services/db/dbfixture
Package dbfixture provides SQLite fixtures for integration tests outside the db package.
Package dbfixture provides SQLite fixtures for integration tests outside the db package.
services/dvdmenus
Package dvdmenus captures, persists, lists, and deletes managed DVD menu screenshots while preserving manual and normal screenshot categories.
Package dvdmenus captures, persists, lists, and deletes managed DVD menu screenshots while preserving manual and normal screenshot categories.
sourcelayout
Package sourcelayout resolves one requested preparation source into the local resource roots used while collecting release facts.
Package sourcelayout resolves one requested preparation source into the local resource roots used while collecting release facts.
torrent
Package torrent validates reusable torrent metadata or creates private torrent artifacts for prepared source layouts.
Package torrent validates reusable torrent metadata or creates private torrent artifacts for prepared source layouts.
torrent/metainfo
Package metainfo defines application-owned torrent metainfo values.
Package metainfo defines application-owned torrent metainfo values.
torrentclient
Package torrentclient injects uploads into configured torrent clients and searches those clients for already-pathed torrents.
Package torrentclient injects uploads into configured torrent clients and searches those clients for already-pathed torrents.
trackers/auth
Package auth manages tracker login, cookie import, session validation, and encrypted auxiliary auth state for tracker implementations.
Package auth manages tracker login, cookie import, session validation, and encrypted auxiliary auth state for tracker implementations.
trackers/auth/contract
Package contract provides dependency-safe tracker auth capability and requirements constructors.
Package contract provides dependency-safe tracker auth capability and requirements constructors.
trackers/auth/totp
Package totp generates tracker-compatible one-time codes from OTP URIs.
Package totp generates tracker-compatible one-time codes from OTP URIs.
trackers/data
Package data coordinates metadata lookups owned by tracker implementations.
Package data coordinates metadata lookups owned by tracker implementations.
trackers/dupe
Package dupe coordinates tracker-owned duplicate searches and shared matching.
Package dupe coordinates tracker-owned duplicate searches and shared matching.
trackers/impl/standalone
Package standalone owns shared lifecycle and definition behavior for tracker implementations that do not belong to a protocol family.
Package standalone owns shared lifecycle and definition behavior for tracker implementations that do not belong to a protocol family.
trackers/impl/standalone/czt
Package czt implements uploads to CZTeam (CZT) via its dedicated JSON endpoint takeupload_api.php.
Package czt implements uploads to CZTeam (CZT) via its dedicated JSON endpoint takeupload_api.php.
trackers/impl/standalone/internal/jsondupe
Package jsondupe executes the authenticated JSON-list search protocol shared by standalone trackers while leaving query and result identity tracker-local.
Package jsondupe executes the authenticated JSON-list search protocol shared by standalone trackers while leaving query and result identity tracker-local.
trackers/impl/unit3d
Package unit3d provides Unit3D API-based tracker upload implementations.
Package unit3d provides Unit3D API-based tracker upload implementations.
uploadinput
Package uploadinput resolves transport-local composite upload inputs.
Package uploadinput resolves transport-local composite upload inputs.
pkg
api

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL