Spaces:
Running
on
Zero
Running
on
Zero
import os | |
import json | |
from pathlib import Path | |
# Define config directory in Google Drive | |
CONFIG_DIR = "/home/user/app/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", | |
"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) | |
# Merge with default config to ensure all keys exist | |
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"]), # Save category | |
"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 | |