| import os |
| import json |
| from pathlib import Path |
|
|
| |
| CONFIG_DIR = "/content/drive/MyDrive/SESA-Config" |
| CONFIG_FILE = os.path.join(CONFIG_DIR, "config.json") |
|
|
| def load_config(): |
| """Load configuration from config.json.""" |
| default_config = { |
| "favorites": [], |
| "settings": { |
| "chunk_size": 352800, |
| "overlap": 2, |
| "export_format": "wav FLOAT", |
| "optimize_mode": "channels_last", |
| "enable_amp": True, |
| "enable_tf32": True, |
| "enable_cudnn_benchmark": True, |
| "auto_use_tta": False, |
| "use_tta": False, |
| "use_demud_phaseremix_inst": False, |
| "auto_extract_instrumental": False, |
| "extract_instrumental": False, |
| "use_apollo": False, |
| "auto_use_apollo": False, |
| "auto_apollo_chunk_size": 19, |
| "auto_apollo_overlap": 2, |
| "auto_apollo_method": "normal_method", |
| "auto_apollo_normal_model": "Apollo Universal Model", |
| "auto_apollo_midside_model": "Apollo Universal Model", |
| "apollo_chunk_size": 19, |
| "apollo_overlap": 2, |
| "apollo_method": "normal_method", |
| "apollo_normal_model": "Apollo Universal Model", |
| "apollo_midside_model": "Apollo Universal Model", |
| "use_matchering": False, |
| "auto_use_matchering": False, |
| "matchering_passes": 1, |
| "auto_matchering_passes": 1, |
| "model_category": "Vocal Models", |
| "selected_model": None, |
| "auto_category": "Vocal Models", |
| "selected_models": [], |
| "auto_ensemble_type": "avg_wave", |
| "manual_ensemble_type": "avg_wave", |
| "auto_category_dropdown": "Vocal Models", |
| "manual_weights": "" |
| }, |
| "presets": {} |
| } |
|
|
| os.makedirs(CONFIG_DIR, exist_ok=True) |
| if not os.path.exists(CONFIG_FILE): |
| with open(CONFIG_FILE, "w", encoding="utf-8") as f: |
| json.dump(default_config, f, indent=2) |
| return default_config |
|
|
| try: |
| with open(CONFIG_FILE, "r", encoding="utf-8") as f: |
| config = json.load(f) |
| |
| for key, value in default_config.items(): |
| if key not in config: |
| config[key] = value |
| elif isinstance(value, dict): |
| for subkey, subvalue in value.items(): |
| if subkey not in config[key]: |
| config[key][subkey] = subvalue |
| return config |
| except json.JSONDecodeError: |
| print("Warning: config.json is corrupted. Creating a new one.") |
| with open(CONFIG_FILE, "w", encoding="utf-8") as f: |
| json.dump(default_config, f, indent=2) |
| return default_config |
|
|
| def save_config(favorites, settings, presets): |
| """Save configuration to config.json.""" |
| config = { |
| "favorites": favorites, |
| "settings": settings, |
| "presets": presets |
| } |
| os.makedirs(CONFIG_DIR, exist_ok=True) |
| with open(CONFIG_FILE, "w", encoding="utf-8") as f: |
| json.dump(config, f, indent=2) |
|
|
| def update_favorites(favorites, model, add=True): |
| """Update favorites list.""" |
| cleaned_model = model |
| new_favorites = favorites.copy() |
| if add and cleaned_model not in new_favorites: |
| new_favorites.append(cleaned_model) |
| elif not add and cleaned_model in new_favorites: |
| new_favorites.remove(cleaned_model) |
| return new_favorites |
|
|
| def save_preset(presets, preset_name, models, ensemble_method, **kwargs): |
| """Save a preset.""" |
| new_presets = presets.copy() |
| cleaned_models = [clean_model(model) for model in models] |
| new_presets[preset_name] = { |
| "models": cleaned_models, |
| "ensemble_method": ensemble_method, |
| "chunk_size": kwargs.get("chunk_size", load_config()["settings"]["chunk_size"]), |
| "overlap": kwargs.get("overlap", load_config()["settings"]["overlap"]), |
| "auto_use_tta": kwargs.get("auto_use_tta", load_config()["settings"]["auto_use_tta"]), |
| "auto_extract_instrumental": kwargs.get("auto_extract_instrumental", load_config()["settings"]["auto_extract_instrumental"]), |
| "use_apollo": kwargs.get("use_apollo", load_config()["settings"]["use_apollo"]), |
| "auto_apollo_chunk_size": kwargs.get("auto_apollo_chunk_size", load_config()["settings"]["auto_apollo_chunk_size"]), |
| "auto_category_dropdown": kwargs.get("auto_category_dropdown", load_config()["settings"]["auto_category_dropdown"]), |
| "auto_apollo_overlap": kwargs.get("auto_apollo_overlap", load_config()["settings"]["auto_apollo_overlap"]), |
| "auto_apollo_method": kwargs.get("auto_apollo_method", load_config()["settings"]["auto_apollo_method"]), |
| "auto_apollo_normal_model": kwargs.get("auto_apollo_normal_model", load_config()["settings"]["auto_apollo_normal_model"]), |
| "auto_apollo_midside_model": kwargs.get("auto_apollo_midside_model", load_config()["settings"]["auto_apollo_midside_model"]), |
| "auto_use_matchering": kwargs.get("use_matchering", load_config()["settings"]["use_matchering"]), |
| "auto_matchering_passes": kwargs.get("matchering_passes", load_config()["settings"]["matchering_passes"]), |
| "auto_category": kwargs.get("auto_category", load_config()["settings"]["auto_category"]) |
| } |
| return new_presets |
|
|
| def delete_preset(presets, preset_name): |
| """Delete a preset.""" |
| new_presets = presets.copy() |
| if preset_name in new_presets: |
| del new_presets[preset_name] |
| return new_presets |
|
|
| def clean_model(model): |
| """Remove ⭐ from model name if present.""" |
| return model.replace(" ⭐", "") if isinstance(model, str) else model |
|
|