From 40da21016b8cfdab7a9e8a5c517afae312f0270c Mon Sep 17 00:00:00 2001 From: tommy Date: Fri, 3 Jul 2026 01:01:53 -0500 Subject: [PATCH] 4K Step 2: Recyclarr config + systemd-timer sync (radarr-4k/sonarr-4k) Remux+WEB 2160p (radarr-4k) + WEB-2160p (sonarr-4k) profiles applied and assigned to the Overseerr 4K servers. DTS family explicitly pinned score 0 (Sonos-Arc), Dolby/Atmos at guide default. recyclarr:8, sync via systemd timer (daily, docker-run oneshot). Idempotent (changed=0); keys via ansible-vault, .env not committed. Co-Authored-By: Claude Opus 4.8 --- arrs-4k/README.md | 10 +- arrs-4k/deploy-recyclarr-4k.yml | 175 ++++++++++++++++++++++++++++++++ 2 files changed, 182 insertions(+), 3 deletions(-) create mode 100644 arrs-4k/deploy-recyclarr-4k.yml diff --git a/arrs-4k/README.md b/arrs-4k/README.md index 53c413d..9b68b9d 100644 --- a/arrs-4k/README.md +++ b/arrs-4k/README.md @@ -25,6 +25,10 @@ idempotent, changed=0). - **Tdarr**: does NOT watch movies-4k/tv-4k (its libraries are the specific 1080p /media/movies, /media/tv) — quality-first keeps the grabbed file. -## Deferred (Step 2 — gated) -Recyclarr 4K config + quality profiles (custom formats, remux tiers). NOT deployed yet. -The Overseerr 4K servers currently point at the default `Ultra-HD` profile as a placeholder. +## Step 2 — Recyclarr 4K (DONE) +`deploy-recyclarr-4k.yml` (recyclarr image :8, config uses !env_var, .env from ansible-vault). +Sync runs via **systemd timer** `recyclarr-4k-sync.timer` (daily 04:00, docker-run oneshot — NOT +container cron). Profiles applied: radarr-4k = **Remux + WEB 2160p** (fd161a61), sonarr-4k = +**WEB-2160p** (d1498e7d), assigned to the Overseerr 4K servers (replaced Ultra-HD placeholder). +**DTS family explicitly pinned score 0** (Sonos-Arc down-weight; re-forced every sync so it can't +revert to guide 2500/4500) — Dolby/TrueHD/Atmos left at guide default (positive). diff --git a/arrs-4k/deploy-recyclarr-4k.yml b/arrs-4k/deploy-recyclarr-4k.yml new file mode 100644 index 0000000..44046b2 --- /dev/null +++ b/arrs-4k/deploy-recyclarr-4k.yml @@ -0,0 +1,175 @@ +--- +- name: Deploy Recyclarr 4K (config + systemd-timer sync) on media-server + hosts: media-server + become: true + vars: + app_dir: /home/tommy/recyclarr-4k + + handlers: + - name: reload systemd + ansible.builtin.systemd_service: + daemon_reload: true + + tasks: + - name: Create recyclarr-4k config dir + ansible.builtin.file: + path: "{{ app_dir }}/config" + state: directory + owner: tommy + group: tommy + mode: "0755" + + - name: Write recyclarr.yml (no secrets; URLs/keys via !env_var) + ansible.builtin.copy: + dest: "{{ app_dir }}/config/recyclarr.yml" + owner: tommy + group: tommy + mode: "0644" + content: | + # yaml-language-server: $schema=https://schemas.recyclarr.dev/v8/config-schema.json + # 4K quality-first: radarr-4k (Remux+WEB 2160p) + sonarr-4k (WEB-2160p) + # TRaSH guide profiles + recommended naming + DTS neutral (Sonos Arc down-weight). + + radarr: + radarr-4k: + base_url: !env_var RADARR_4K_URL + api_key: !env_var RADARR_4K_APIKEY + + quality_definition: + type: movie + + quality_profiles: + - trash_id: fd161a61e3ab826d3a22d53f935696dd # Remux + WEB 2160p + reset_unmatched_scores: + enabled: true + + custom_format_groups: + add: + - trash_id: ff204bbcecdd487d1cefcefdbf0c278d # [Optional] Golden Rule UHD + select: + - 839bea857ed2c0a8e084f3cbdbd65ecb # x265 (no HDR/DV) + - trash_id: a3ac6af01d78e4f21fcb75f601ac96df # [Unwanted] Unwanted Formats + select: + - b8cd450cbfa689c0259a01d9e29ba3d6 # 3D + - cae4ca30163749b891686f95532519bd # AV1 + - b6832f586342ef70d9c128d40c07b872 # Bad Dual Groups + - cc444569854e9de0b084ab2b8b1532b2 # Black and White Editions + - ed38b889b31be83fda192888e2286d83 # BR-DISK + - 0a3f082873eb454bde444150b70253cc # Extras + - e6886871085226c3da1830830146846c # Generated Dynamic HDR + - 90a6f9a284dff5103f6346090e6280c8 # LQ + - e204b80c87be9497a8a6eaff48f72905 # LQ (Release Title) + - 712d74cd88bceb883ee32f773656b1f5 # Sing-Along Versions + - bfd8eb01832d646a0a89c4deb46f8564 # Upscaled + + media_naming: + folder: default + movie: + rename: true + standard: standard + + # DTS down-weight (Sonos Arc): neutral score 0 (NOT negative). + # Dolby/TrueHD/Atmos left at guide default (unset here). + custom_formats: + - trash_ids: + - dcf3ec6938fa32445f590a4da84256cd # DTS-HD MA + - 2f22d89048b01681dde8afe203bf2e95 # DTS:X + - 8e109e50e0a0b83a5098b056e13bf6db # DTS-HD HRA + - 1c1a4c5e823891c75bc50380a6866f73 # DTS (core) + - f9f847ac70a0af62ea4a08280b859636 # DTS-ES + assign_scores_to: + - name: Remux + WEB 2160p + score: 0 + + sonarr: + sonarr-4k: + base_url: !env_var SONARR_4K_URL + api_key: !env_var SONARR_4K_APIKEY + + quality_definition: + type: series + + quality_profiles: + - trash_id: d1498e7d189fbe6c7110ceaabb7473e6 # WEB-2160p + reset_unmatched_scores: + enabled: true + + custom_format_groups: + add: + - trash_id: e3f37512790f00d0e89e54fe5e790d1c # [Optional] Golden Rule UHD + select: + - 9b64dff695c2115facf1b6ea59c9bd07 # x265 (no HDR/DV) + - trash_id: 85fae4a2294965b75710ef2989c850eb # [Streaming Services] HD/UHD boost + - trash_id: 59c3af66780d08332fdc64e68297098f # [Unwanted] Unwanted Formats + select: + - 15a05bc7c1a36e2b57fd628f8977e2fc # AV1 + - 32b367365729d530ca1c124a0b180c64 # Bad Dual Groups + - 85c61753df5da1fb2aab6f2a47426b09 # BR-DISK + - 6f808933a71bd9666531610cb8c059cc # BR-DISK (BTN) + - fbcb31d8dabd2a319072b84fc0b7249c # Extras + - 9c11cd3f07101cdba90a2d81cf0e56b4 # LQ + - e2315f990da2e2cbfc9fa5b7a6fcfe48 # LQ (Release Title) + - 23297a736ca77c0fc8e70f8edd7ee56c # Upscaled + + media_naming: + series: default + season: default + episodes: + rename: true + standard: default + daily: default + anime: default + + - name: Write .env (4K instance URLs + keys from ansible-vault) + ansible.builtin.copy: + dest: "{{ app_dir }}/.env" + owner: tommy + group: tommy + mode: "0600" + content: | + RADARR_4K_URL=http://192.168.99.183:7879 + RADARR_4K_APIKEY={{ vault_radarr4k_apikey }} + SONARR_4K_URL=http://192.168.99.183:8990 + SONARR_4K_APIKEY={{ vault_sonarr4k_apikey }} + no_log: true + + - name: Install recyclarr-4k sync service (docker-run oneshot, NOT container cron) + ansible.builtin.copy: + dest: /etc/systemd/system/recyclarr-4k-sync.service + owner: root + group: root + mode: "0644" + content: | + [Unit] + Description=Recyclarr 4K sync (radarr-4k + sonarr-4k) + After=docker.service + Requires=docker.service + + [Service] + Type=oneshot + ExecStart=/usr/bin/docker run --rm --env-file {{ app_dir }}/.env -v {{ app_dir }}/config:/config ghcr.io/recyclarr/recyclarr:8 sync + notify: reload systemd + + - name: Install recyclarr-4k sync timer (daily, VPN-monitor pattern) + ansible.builtin.copy: + dest: /etc/systemd/system/recyclarr-4k-sync.timer + owner: root + group: root + mode: "0644" + content: | + [Unit] + Description=Daily Recyclarr 4K sync + + [Timer] + OnCalendar=*-*-* 04:00:00 + Persistent=true + + [Install] + WantedBy=timers.target + notify: reload systemd + + - name: Enable recyclarr-4k timer + ansible.builtin.systemd_service: + name: recyclarr-4k-sync.timer + enabled: true + state: started