Skip to content

Releases: Procuria/arr-tracker-source-tagger

v0.6.1

Choose a tag to compare

@Procuria Procuria released this 11 Jan 23:11

📝 release-notes.md — v0.6.1

v0.6.1 – State-first CQP verification & API call reduction

Improved

  • State-first Quality Profile enforcement

    • Upload-aware CQP handling now prefers local state over immediate Arr API calls.
    • Already tracked items are assumed to be correct unless a periodic verification is due.
  • Periodic drift detection

    • Sonarr/Radarr are queried only after a configurable interval to detect
      manual changes or automation drift.
    • Ensures correctness without constant polling.
  • Automatic state backfill

    • Items that were already tagged as uploading before this change will
      automatically receive the required CQP state fields on the next run.

New configuration

UPLOADING_CQP_VERIFY_INTERVAL_MINUTES=60

Controls how often an Arr item is re-verified while uploading.
Defaults to 60 minutes.

Why

This release significantly reduces unnecessary Arr API traffic while keeping
the system robust against profile drift caused by manual edits or other tools.

Less noise. Fewer calls. Same guarantees.

v0.6

Choose a tag to compare

@Procuria Procuria released this 11 Jan 20:53

v0.6 – Uploading-aware Quality Profile Enforcement

Added

  • Uploading tag ↔ Quality Profile enforcement

    • When the uploading tag is applied, the service now enforces a configurable
      Custom Quality Profile (CQP), e.g. No Upgrades, on the affected Sonarr/Radarr item.
    • The previously active quality profile is stored in uploading_state.json and
      automatically restored once the uploading tag is removed.
  • Drift correction while uploading

    • If an item is already tagged as uploading but its quality profile was changed
      manually or by another tool, the service re-applies the configured CQP to ensure
      upgrades remain blocked.
  • State-aware and safe by design

    • All profile switches are tracked per torrent hash.
    • dry_run=true remains fully side‑effect free (no tags, no profile changes, no state writes).

Configuration

New environment variables:

  • UPLOADING_CQP_NAME (default: No Upgrades)
  • UPLOADING_CQP_ENFORCE (default: true)
  • UPLOADING_CQP_RESTORE (default: true)

If the configured CQP cannot be found in an Arr instance, profile switching is
disabled for that Arr while tagging continues to function.

Why

This release prevents accidental upgrades, re-downloads, or replacements of media
that is actively being uploaded to trackers, while cleanly restoring the original
setup once the upload is finished.


Quietly practical. Nothing magical — just fewer surprises.

v0.5

Choose a tag to compare

@Procuria Procuria released this 09 Jan 11:57

Release v0.5 — Regression & Stability Fixes

This release focuses entirely on stability, regression fixes, and hardening of existing features introduced in earlier versions.

No new functionality is introduced in v0.5.


🛠 Fixed: ArrClient method regressions

Several runtime errors were caused by methods not being bound correctly to ArrClient due to earlier refactors and indentation changes.

The following methods are now guaranteed to exist at runtime via explicit monkeypatching:

  • apply_source_tag()
  • fetch_history()

This prevents runtime failures such as:

  • AttributeError: 'ArrClient' object has no attribute 'apply_source_tag'
  • AttributeError: 'ArrClient' object has no attribute 'fetch_history'

🔁 Backfill reliability improvements

  • /backfill/history is now robust against missing ArrClient methods
  • History backfill no longer aborts due to internal method resolution issues
  • Webhook-based tagging (/tag) and history backfill now share a consistent, hardened ArrClient surface

🧠 Design note

These fixes intentionally favor runtime safety over structural refactors to avoid further regressions.
Monkeypatching is used deliberately to ensure backward compatibility and predictable behavior across deployments.

A future release may clean up duplicated or mis-indented legacy methods, but v0.5 prioritizes correctness and stability.


🏷 Version

  • Tag: v0.5
  • Scope: Regression fixes only

v0.4

Choose a tag to compare

@Procuria Procuria released this 07 Jan 23:11

Release v0.4 — Stateful Upload-aware Tagging

This release introduces stateful upload-aware tagging, significantly reducing API load and enabling safe automation around active uploads.


✨ New Feature: Stateful Upload-aware Backfill

A new endpoint /backfill/uploading keeps Sonarr and Radarr in sync with torrents that are actively being uploaded.

Key characteristics

  • Tags content with uploading while torrents exist in a configured qBittorrent category
  • Automatically removes the tag once the torrent disappears
  • Uses a dedicated state file to avoid re-processing already known torrents
  • Dry-run mode is strictly side-effect free
  • Designed to integrate with Maintainerr and similar cleanup tools

🧠 Design details

  • State is stored separately from source-tagging state
  • Only new torrents trigger Arr /parse calls
  • Sonarr tagging is restricted to full season packs
  • Movies are matched against Radarr, series against Sonarr first
  • Optional unmatched-cache avoids repeated parsing of unsupported releases

⚙️ New configuration options

UPLOADING_TAG=uploading
UPLOAD_QBIT_CATEGORY=tracker_own_uploads
UPLOADING_STATE_FILE=./data/uploading_state.json
UPLOADING_SYNC_REMOVE_TAG=true
UPLOADING_UNMATCHED_TTL_HOURS=24

🏷 Version

  • Tag: v0.4

v0.3

Choose a tag to compare

@Procuria Procuria released this 06 Jan 20:19

Release v0.3 — Upload-awareness & History-driven Backfill

This release extends arr-tracker-source-tagger beyond event-based tagging and adds two major capabilities:
history-based backfilling and upload-aware protection tagging.

The focus of this version is library safety, traceability, and post-hoc correctness.


✨ New Features

History-based backfill (/backfill/history)

It is now possible to retroactively tag existing Sonarr and Radarr libraries.

  • Uses Arr History instead of relying on active torrents
  • Joins grabbed → *Imported* events via downloadId
  • Extracts indexer information from history (primary signal)
  • Optional fallback to qBittorrent trackers if history is incomplete
  • Sonarr tagging is applied per series (latest successful import only) to reduce noise
  • Fully idempotent and dry-run capable

Configurable via request payload:

  • dry_run
  • limit
  • only_missing
  • reapply
  • page_size

Upload-aware tagging (/backfill/uploading)

A new endpoint to protect content that is actively being uploaded to trackers.

  • Reads torrents from a configurable qBittorrent category (default: tracker_own_uploads)
  • Supports dedicated upload qBittorrent instances or fallback to the primary one
  • Matches torrent names against Sonarr/Radarr using Arr’s native /parse endpoint
  • Applies a dedicated tag (default: uploading)
  • Sonarr tagging is restricted to full season packs only
  • Designed to integrate cleanly with Maintainerr rules

This prevents accidental cleanup of content that is still in active upload/seed workflows.


🛠 Improvements & Fixes

  • Sonarr season pack detection fixed
    • Now relies on parsedEpisodeInfo.fullSeason and releaseType=seasonPack
    • Compatible with Sonarr versions that populate top-level episodes even for season packs
  • qBittorrent tracker lookup during backfill is now non-fatal
    • Missing torrents (HTTP 404) are handled gracefully
  • qBittorrent fallback during history backfill is fully bomb-proof
    • Network errors or missing torrents no longer abort the run
  • Improved logging around decision paths (indexer vs tracker vs fallback)

⚙️ Configuration Additions

New environment variables introduced in this release:

# History backfill
HISTORY_FALLBACK_QBIT=true

# Upload protection
UPLOADING_TAG=uploading
UPLOAD_QBIT_CATEGORY=tracker_own_uploads

# Optional dedicated upload qBittorrent instance
QBIT_UPLOAD_URL=
QBIT_UPLOAD_USERNAME=
QBIT_UPLOAD_PASSWORD=
QBIT_UPLOAD_VERIFY_TLS=true

All new features are optional and backward-compatible.

🧠 Design Notes

No Arr state is mutated unless explicitly requested (dry_run=false)

Existing source tags (pt-*, public) are never modified by upload tagging

The tool remains stateless and automation-friendly

Designed to work equally well with single- or multi-qBittorrent setups

🏷 Version

Tag: v0.3

Compatibility: Sonarr v3 / Radarr v3+, qBittorrent v4+