#!/usr/bin/env python3 """ Resolution Update Utility for Karaoke Playlist Downloader Easily update the preferred video resolution in the configuration. """ import json import argparse from pathlib import Path def update_resolution(resolution): """Update the resolution in config.json file.""" config_file = Path("config.json") # Load existing config or create default if config_file.exists(): try: with open(config_file, 'r', encoding='utf-8') as f: config = json.load(f) except json.JSONDecodeError: print("❌ Error: Invalid config.json file") return False else: print("📝 Creating new config.json file...") config = { "download_settings": { "format": "best[height<=720][ext=mp4]/best[height<=720]/best[ext=mp4]/best", "preferred_resolution": "720p", "audio_format": "mp3", "audio_quality": "0", "subtitle_language": "en", "subtitle_format": "srt", "write_metadata": True, "write_thumbnail": True, "write_description": True, "write_annotations": True, "write_comments": True, "write_subtitles": True, "embed_metadata": True, "add_metadata": True, "continue_downloads": True, "no_overwrites": True, "ignore_errors": True, "no_warnings": False }, "folder_structure": { "downloads_dir": "downloads", "logs_dir": "logs", "tracking_file": "karaoke_tracking.json" }, "logging": { "level": "INFO", "format": "%(asctime)s - %(levelname)s - %(message)s", "include_console": True, "include_file": True }, "yt_dlp_path": "downloader/yt-dlp.exe" } # Resolution mapping resolution_map = { '480p': '480', '720p': '720', '1080p': '1080', '1440p': '1440', '2160p': '2160' } if resolution not in resolution_map: print(f"❌ Error: Invalid resolution '{resolution}'") print(f"Valid options: {', '.join(resolution_map.keys())}") return False height = resolution_map[resolution] old_resolution = config["download_settings"].get("preferred_resolution", "720p") # Update the format string config["download_settings"]["format"] = f"best[height<={height}][ext=mp4]/best[height<={height}]/best[ext=mp4]/best" config["download_settings"]["preferred_resolution"] = resolution # Save the updated config try: with open(config_file, 'w', encoding='utf-8') as f: json.dump(config, f, indent=2, ensure_ascii=False) print(f"✅ Successfully updated resolution from {old_resolution} to {resolution}") print(f"📝 Format string: {config['download_settings']['format']}") return True except Exception as e: print(f"❌ Error saving config: {e}") return False def show_current_resolution(): """Show the current resolution setting.""" config_file = Path("config.json") if not config_file.exists(): print("📝 No config.json file found. Using default 720p resolution.") return try: with open(config_file, 'r', encoding='utf-8') as f: config = json.load(f) current_resolution = config["download_settings"].get("preferred_resolution", "720p") current_format = config["download_settings"].get("format", "best[height<=720][ext=mp4]/best[height<=720]/best[ext=mp4]/best") print(f"🎬 Current resolution: {current_resolution}") print(f"📝 Format string: {current_format}") except json.JSONDecodeError: print("❌ Error: Invalid config.json file") except Exception as e: print(f"❌ Error reading config: {e}") def main(): parser = argparse.ArgumentParser( description="Update video resolution for Karaoke Playlist Downloader", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" Examples: python update_resolution.py --show python update_resolution.py --resolution 1080p python update_resolution.py --resolution 720p """ ) parser.add_argument( '--resolution', '-r', choices=['480p', '720p', '1080p', '1440p', '2160p'], help='Set the preferred video resolution' ) parser.add_argument( '--show', '-s', action='store_true', help='Show current resolution setting' ) args = parser.parse_args() if args.show: show_current_resolution() elif args.resolution: update_resolution(args.resolution) else: parser.print_help() if __name__ == "__main__": main()