mqtt: host: 10.40.0.2 port: 1883 username: null password: null client_id: yt-controller keepalive_seconds: 30 reconnect_min_seconds: 1 reconnect_max_seconds: 30 command_queue_size: 512 # QoS 1 is accepted only after the broker PUBACKs within this bound. publish_ack_timeout_seconds: 2 # Audio Router self-echo correlation stays claimable for this long after # a Controller-originated mode-set publish is PUBACK'd, so a subscription # echo that is delivered after the PUBACK is still recognized as ours # instead of being mistaken for operator intent. router_echo_grace_seconds: 2 topics: player_command: youtube/player/cmd player_status: youtube/player/status player_state: youtube/player/state player_telemetry: youtube/player/telemetry controller_command: youtube/controller/cmd ingest_progress: youtube/ingest/progress playback_base: youtube/media/playback router_mode_set: audio/player/mode/set router_mode_state: audio/player/mode/state # Optional additive result/warning topic. Set null to disable it. # Existing consumers never depend on this topic. controller_result: youtube/controller/v2/events storage: media_base: /mnt/Media/YTPlayer data_base: /controller-data database_name: controller.sqlite3 legacy_yaml_name: playlists.yaml slot_count: 10 retention_seconds: 172800 expiry_interval_seconds: 60 # Marks uncertain playback for operator review; it never removes protection. uncertain_review_after_seconds: 900 downloads: yt_dlp_binary: yt-dlp cookie_path: /run/secrets/yt-dlp-cookies.txt cookie_required: false max_workers: 2 process_timeout_seconds: 7200 max_height: 1080 # Utility exports live below media_base and never participate in slots. export_directory: exports export_max_height: 1080 # Dedicated capacity prevents utility exports from starving Player work. export_max_workers: 1 # Bounds queued + running utility work; Player slots retain their own bound. max_queued_exports: 20 router: required_mode: video confirmation_timeout_seconds: 3 # attempt: request video and wait for the finite confirmation timeout # continue: request video but do not wait when no state has been observed # reject: reject playback until a Router state has been observed when_state_unknown: attempt continue_on_confirmation_failure: true fallback_restore_mode: null homeassistant: enabled: true discovery_prefix: homeassistant web: host: 0.0.0.0 port: 7531