From f377bbfb74787b6eb3d7b2ecd9c33c26378b6d07 Mon Sep 17 00:00:00 2001 From: kenzuyaa Date: Tue, 26 Aug 2025 17:59:21 +0700 Subject: [PATCH] chore(config): add comprehensive unshackle.yaml configuration file - Define tagging options for filenames including group and metadata tags - Configure terminal background color and file naming conventions - Set caching parameters for title metadata with expiration controls - Add muxing and default directories settings - Provide flexible credentials management with profile and default support - Configure CDM devices and remote CDMs for Widevine and PlayReady - Define local and HTTP key vaults with options to disable pushing keys - Set downloader preferences and specific settings for aria2c, n_m3u8dl_re, and curl_impersonate - Introduce default parameters for download commands and subtitle conversion methods - Add service-specific API keys, profiles, and device configurations - Include proxy provider credentials for external VPN services --- unshackle/unshackle.yaml | 249 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100644 unshackle/unshackle.yaml diff --git a/unshackle/unshackle.yaml b/unshackle/unshackle.yaml new file mode 100644 index 0000000..a4c0e6d --- /dev/null +++ b/unshackle/unshackle.yaml @@ -0,0 +1,249 @@ +# Group or Username to postfix to the end of all download filenames following a dash +tag: Kenzuya + +# Enable/disable tagging with group name (default: true) +tag_group_name: true + +# Enable/disable tagging with IMDB/TMDB/TVDB details (default: true) +tag_imdb_tmdb: true + +# Set terminal background color (custom option not in CONFIG.md) +set_terminal_bg: false + +# Set file naming convention +# true for style - Prime.Suspect.S07E01.The.Final.Act.Part.One.1080p.ITV.WEB-DL.AAC2.0.H.264 +# false for style - Prime Suspect S07E01 The Final Act - Part One +scene_naming: true + +# Whether to include the year in series names for episodes and folders (default: true) +# true for style - Show Name (2023) S01E01 Episode Name +# false for style - Show Name S01E01 Episode Name +series_year: true + +# Check for updates from GitHub repository on startup (default: true) +update_checks: true + +# How often to check for updates, in hours (default: 24) +update_check_interval: 24 + +# Title caching configuration +# Cache title metadata to reduce redundant API calls +title_cache_enabled: true # Enable/disable title caching globally (default: true) +title_cache_time: 1800 # Cache duration in seconds (default: 1800 = 30 minutes) +title_cache_max_retention: 86400 # Maximum cache retention for fallback when API fails (default: 86400 = 24 hours) + +# Muxing configuration +muxing: + set_title: true + +# Login credentials for each Service +credentials: + # Direct credentials (no profile support) + EXAMPLE: email@example.com:password + + # Per-profile credentials with default fallback + SERVICE_NAME: + default: default@email.com:password # Used when no -p/--profile is specified + profile1: user1@email.com:password1 + profile2: user2@email.com:password2 + + # Per-profile credentials without default (requires -p/--profile) + SERVICE_NAME2: + john: john@example.com:johnspassword + jane: jane@example.com:janespassword + + # You can also use list format for passwords with special characters + SERVICE_NAME3: + default: ["user@email.com", ":PasswordWith:Colons"] + +# Override default directories used across unshackle +directories: + cache: Cache + # cookies: Cookies + dcsl: DCSL # Device Certificate Status List + downloads: Downloads + logs: Logs + temp: Temp + wvds: WVDs + prds: PRDs + # Additional directories that can be configured: + # commands: Commands + # services: + # - /path/to/services + # - /other/path/to/services + # vaults: Vaults + # fonts: Fonts + +# Pre-define which Widevine or PlayReady device to use for each Service +cdm: + # Global default CDM device (fallback for all services/profiles) + default: chromecdm + + # Direct service-specific CDM + DIFFERENT_EXAMPLE: PRD_1 + + # Per-profile CDM configuration + EXAMPLE: + john_sd: chromecdm_903_l3 # Profile 'john_sd' uses Chrome CDM L3 + jane_uhd: nexus_5_l1 # Profile 'jane_uhd' uses Nexus 5 L1 + default: generic_android_l3 # Default CDM for this service + +# Use pywidevine Serve-compliant Remote CDMs +remote_cdm: + - name: "chromecdm" + device_name: widevine + device_type: CHROME + system_id: 36586 + security_level: 3 + type: "decrypt_labs" + host: https://keyxtractor.decryptlabs.com + secret: 7547150416_41da0a32d6237d83_KeyXtractor_api_ext + - name: "chrome-2" + device_name: chrome + device_type: CHROME + system_id: 26830 + security_level: 3 + host: https://domain-2.com/api + secret: secret_key + +# Key Vaults store your obtained Content Encryption Keys (CEKs) +# Use 'no_push: true' to prevent a vault from receiving pushed keys +# while still allowing it to provide keys when requested +key_vaults: + - type: SQLite + name: Local + path: key_store.db + - type: HTTP + name: "DRMLab Vault" + host: "https://api.drmlab.io/vault/" + username: "unshackle" + password: "gEX75q7I5YVkvgF5SUkcNd41IbGrDtTT" + api_mode: "json" + # Additional vault types: + # - type: API + # name: "Remote Vault" + # uri: "https://key-vault.example.com" + # token: "secret_token" + # no_push: true # This vault will only provide keys, not receive them + # - type: MySQL + # name: "MySQL Vault" + # host: "127.0.0.1" + # port: 3306 + # database: vault + # username: user + # password: pass + # no_push: false # Default behavior - vault both provides and receives keys + +# Choose what software to use to download data +downloader: aria2c +# Options: requests | aria2c | curl_impersonate | n_m3u8dl_re +# Can also be a mapping: +# downloader: +# NF: requests +# AMZN: n_m3u8dl_re +# DSNP: n_m3u8dl_re +# default: requests + +# aria2c downloader configuration +aria2c: + max_concurrent_downloads: 4 + max_connection_per_server: 3 + split: 5 + file_allocation: falloc # none | prealloc | falloc | trunc + +# N_m3u8DL-RE downloader configuration +n_m3u8dl_re: + thread_count: 16 + ad_keyword: "advertisement" + use_proxy: true + +# curl_impersonate downloader configuration +curl_impersonate: + browser: chrome120 + +# Pre-define default options and switches of the dl command +dl: + sub_format: srt + downloads: 4 + workers: 16 + lang: + - orig + - id + EXAMPLE: + bitrate: CBR + +# Chapter Name to use when exporting a Chapter without a Name +chapter_fallback_name: "Chapter {j:02}" + +# Case-Insensitive dictionary of headers for all Services +headers: + Accept-Language: "en-US,en;q=0.8" + User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" + +# Override default filenames used across unshackle +filenames: + log: "unshackle_{name}_{time}.log" + config: "config.yaml" + root_config: "unshackle.yaml" + chapters: "Chapters_{title}_{random}.txt" + subtitle: "Subtitle_{id}_{language}.srt" + +# API key for The Movie Database (TMDB) +tmdb_api_key: "8f5c14ef648a0abdd262cf809e11fcd4" + +# conversion_method: +# - auto (default): Smart routing - subby for WebVTT/SAMI, standard for others +# - subby: Always use subby with advanced processing +# - pycaption: Use only pycaption library (no SubtitleEdit, no subby) +# - subtitleedit: Prefer SubtitleEdit when available, fall back to pycaption +subtitle: + conversion_method: auto + sdh_method: auto + +# Configuration for pywidevine's serve functionality +serve: + users: + secret_key_for_user: + devices: + - generic_nexus_4464_l3 + username: user + # devices: + # - '/path/to/device.wvd' + +# Configuration data for each Service +services: + # Service-specific configuration goes here + # Profile-specific configurations can be nested under service names + + # Example: with profile-specific device configs + EXAMPLE: + # Global service config + api_key: "service_api_key" + + # Profile-specific device configurations + profiles: + john_sd: + device: + app_name: "AIV" + device_model: "SHIELD Android TV" + jane_uhd: + device: + app_name: "AIV" + device_model: "Fire TV Stick 4K" + + # Example: Service with different regions per profile + SERVICE_NAME: + profiles: + us_account: + region: "US" + api_endpoint: "https://api.us.service.com" + uk_account: + region: "GB" + api_endpoint: "https://api.uk.service.com" + +# External proxy provider services +proxy_providers: + + surfsharkvpn: + username: wqKD6vru8vXxUtkXJbvx4HAL # Service credentials from https://my.surfshark.com/vpn/manual-setup/main/openvpn + password: zyFnwsYFMNxqbzpf3asu36m6 # Service credentials (not your login password) \ No newline at end of file