--- - 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