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 <noreply@anthropic.com>
This commit is contained in:
tommy
2026-07-03 01:01:53 -05:00
parent 72d540fb85
commit 40da21016b
2 changed files with 182 additions and 3 deletions
+7 -3
View File
@@ -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).
+175
View File
@@ -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