ASesYusuf1's picture
SESA: GitHub'dan güncel dosyalar aktarıldı - 2026-03-18 23:04
ddadeb4
import os
import yaml
import json
import re
import shutil
from urllib.parse import quote, urlparse
from pathlib import Path
# Temel dizin ve checkpoint dizini sabit olarak tanımlanıyor
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
CHECKPOINT_DIR = os.path.join(BASE_DIR, 'ckpts')
CUSTOM_MODELS_FILE = os.path.join(BASE_DIR, 'assets', 'custom_models.json')
def fix_huggingface_url(url):
"""Convert Hugging Face blob URLs to raw/resolve URLs.
Hugging Face has two URL formats:
- /blob/ URLs show the web page (HTML) - WRONG for downloading
- /resolve/ URLs provide the raw file content - CORRECT for downloading
This function converts blob URLs to resolve URLs automatically.
Args:
url: The URL to fix
Returns:
The corrected URL (or original if not a HF blob URL)
"""
if not url:
return url
# Check if it's a Hugging Face URL with /blob/
if 'huggingface.co' in url and '/blob/' in url:
fixed_url = url.replace('/blob/', '/resolve/')
return fixed_url
return url
def validate_yaml_content(content, filepath=None):
"""Validate that content is YAML and not HTML.
Args:
content: The file content to validate
filepath: Optional filepath for error messages
Returns:
tuple: (is_valid: bool, error_message: str or None)
"""
# Check if content looks like HTML
html_indicators = [
'<!DOCTYPE',
'<html',
'<head>',
'<body>',
'<script>',
'<link rel=',
'text/html',
]
content_lower = content.lower() if isinstance(content, str) else content.decode('utf-8', errors='ignore').lower()
for indicator in html_indicators:
if indicator.lower() in content_lower:
error_msg = f"""
The downloaded file appears to be an HTML page, not a YAML config file.
{"File: " + filepath if filepath else ""}
This usually happens when using a Hugging Face '/blob/' URL instead of a '/resolve/' URL.
To fix this:
1. Use the raw file URL with '/resolve/' instead of '/blob/'
Example: https://huggingface.co/user/repo/resolve/main/file.yaml
2. Or copy the raw URL from Hugging Face:
- Go to the file on Hugging Face
- Click "Download" or right-click and "Copy link address"
"""
return False, error_msg
return True, None
# Supported model types for auto-detection and manual selection
SUPPORTED_MODEL_TYPES = [
'bs_roformer',
'bs_roformer_custom',
'mel_band_roformer',
'mdx23c',
'bandit_v2',
'scnet',
'htdemucs',
'torchseg'
]
def detect_model_type_from_url(checkpoint_url, config_url=None):
"""Auto-detect model type from URL patterns."""
urls_to_check = [checkpoint_url]
if config_url:
urls_to_check.append(config_url)
combined_text = ' '.join(urls_to_check).lower()
patterns = [
(r'bs[-_]?roformer[-_]?custom|hyperace', 'bs_roformer_custom'),
(r'bs[-_]?roformer|bsroformer', 'bs_roformer'),
(r'mel[-_]?band[-_]?roformer|melbandroformer|mbr', 'mel_band_roformer'),
(r'mdx23c', 'mdx23c'),
(r'bandit[-_]?v?2?', 'bandit_v2'),
(r'scnet', 'scnet'),
(r'htdemucs|demucs', 'htdemucs'),
(r'torchseg', 'torchseg'),
]
for pattern, model_type in patterns:
if re.search(pattern, combined_text):
return model_type
return None
def detect_model_type_from_config(config_url):
"""Try to detect model type by downloading and parsing config YAML."""
try:
import requests
response = requests.get(config_url, timeout=10)
if response.status_code == 200:
config_data = yaml.safe_load(response.text)
if 'model_type' in config_data:
return config_data['model_type']
if 'model' in config_data and 'model_type' in config_data['model']:
return config_data['model']['model_type']
except Exception:
pass
return None
def load_custom_models():
"""Load custom models from JSON file."""
if not os.path.exists(CUSTOM_MODELS_FILE):
return {}
try:
with open(CUSTOM_MODELS_FILE, 'r', encoding='utf-8') as f:
return json.load(f)
except (json.JSONDecodeError, IOError):
return {}
def save_custom_models(models):
"""Save custom models to JSON file."""
os.makedirs(os.path.dirname(CUSTOM_MODELS_FILE), exist_ok=True)
with open(CUSTOM_MODELS_FILE, 'w', encoding='utf-8') as f:
json.dump(models, f, indent=2, ensure_ascii=False)
def add_custom_model(model_name, model_type, checkpoint_url, config_url, custom_model_url=None, auto_detect=True):
"""Add a new custom model."""
if not model_name or not model_name.strip():
return False, "Model name is required"
if not checkpoint_url or not checkpoint_url.strip():
return False, "Checkpoint URL is required"
if not config_url or not config_url.strip():
return False, "Config URL is required"
model_name = model_name.strip()
checkpoint_url = checkpoint_url.strip()
config_url = config_url.strip()
custom_model_url = custom_model_url.strip() if custom_model_url else None
# Auto-fix Hugging Face URLs
checkpoint_url = fix_huggingface_url(checkpoint_url)
config_url = fix_huggingface_url(config_url)
if custom_model_url:
custom_model_url = fix_huggingface_url(custom_model_url)
if auto_detect and (not model_type or model_type == "auto"):
detected_type = detect_model_type_from_url(checkpoint_url, config_url)
if not detected_type:
detected_type = detect_model_type_from_config(config_url)
if detected_type:
model_type = detected_type
else:
return False, "Could not auto-detect model type. Please select manually."
if model_type not in SUPPORTED_MODEL_TYPES:
return False, f"Unsupported model type: {model_type}"
checkpoint_filename = os.path.basename(checkpoint_url.split('?')[0])
config_filename = f"config_{model_name.replace(' ', '_').lower()}.yaml"
models = load_custom_models()
if model_name in models:
return False, f"Model '{model_name}' already exists"
models[model_name] = {
'model_type': model_type,
'checkpoint_url': checkpoint_url,
'config_url': config_url,
'custom_model_url': custom_model_url,
'checkpoint_filename': checkpoint_filename,
'config_filename': config_filename,
'needs_conf_edit': True
}
save_custom_models(models)
return True, f"Model '{model_name}' added successfully"
def delete_custom_model(model_name):
"""Delete a custom model."""
models = load_custom_models()
if model_name not in models:
return False, f"Model '{model_name}' not found"
model_config = models[model_name]
checkpoint_path = os.path.join(CHECKPOINT_DIR, model_config.get('checkpoint_filename', ''))
config_path = os.path.join(CHECKPOINT_DIR, model_config.get('config_filename', ''))
try:
if os.path.exists(checkpoint_path):
os.remove(checkpoint_path)
if os.path.exists(config_path):
os.remove(config_path)
except Exception:
pass
del models[model_name]
save_custom_models(models)
return True, f"Model '{model_name}' deleted successfully"
def get_custom_models_list():
"""Get list of custom model names with their types."""
models = load_custom_models()
return [(name, config.get('model_type', 'unknown')) for name, config in models.items()]
def preprocess_yaml_content(content):
"""Pre-process YAML content to fix common issues before parsing.
Fixes:
- Replaces tabs with spaces
- Attempts to quote unquoted URLs and paths containing colons
"""
# Replace tabs with spaces
if '\t' in content:
content = content.replace('\t', ' ')
# Fix unquoted URLs/paths with colons in values (common issue)
# This regex finds lines like "key: http://..." or "key: C:\path" and quotes the value
lines = content.split('\n')
fixed_lines = []
for line in lines:
# Skip comments and empty lines
stripped = line.strip()
if not stripped or stripped.startswith('#'):
fixed_lines.append(line)
continue
# Check if line has a key-value pattern with potential problematic value
# Match: " key: value_with_colon_or_backslash"
match = re.match(r'^(\s*)([^:#]+?):\s+(.+)$', line)
if match:
indent, key, value = match.groups()
# Check if value contains a colon (like URL) or backslash (like Windows path)
# and is not already quoted
if ((':' in value or '\\' in value) and
not (value.startswith('"') and value.endswith('"')) and
not (value.startswith("'") and value.endswith("'"))):
# Quote the value
escaped_value = value.replace('"', '\\"')
fixed_lines.append(f'{indent}{key}: "{escaped_value}"')
continue
fixed_lines.append(line)
return '\n'.join(fixed_lines)
def get_yaml_error_context(content, line_num, column=None):
"""Get context around a YAML error for better debugging."""
lines = content.split('\n')
if line_num < 1 or line_num > len(lines):
return "Could not extract error context"
context_lines = []
start = max(0, line_num - 3)
end = min(len(lines), line_num + 2)
for i in range(start, end):
line_indicator = ">>> " if i == line_num - 1 else " "
context_lines.append(f"{line_indicator}{i + 1}: {lines[i]}")
# Add column indicator for the error line
if i == line_num - 1 and column:
pointer = " " * (len(str(i + 1)) + 6 + column - 1) + "^"
context_lines.append(pointer)
return '\n'.join(context_lines)
def conf_edit(config_path, chunk_size, overlap, model_name=None):
"""Edits the configuration file overlap and training flags.
The model's native audio.chunk_size from the YAML is preserved unchanged.
Args:
config_path: Path to the config file
chunk_size: Unused – kept for API compatibility (native YAML value is used instead)
overlap: Overlap between chunks
model_name: Optional model name for re-downloading config on error
"""
full_config_path = os.path.join(CHECKPOINT_DIR, os.path.basename(config_path))
if not os.path.exists(full_config_path):
raise FileNotFoundError(f"Configuration file not found: {full_config_path}")
# Create backup before modifying
backup_path = full_config_path + '.backup'
try:
shutil.copy2(full_config_path, backup_path)
except Exception:
pass
try:
# Read and pre-process content
with open(full_config_path, 'r', encoding='utf-8') as f:
original_content = f.read()
# Check if file is HTML (wrong URL was used)
is_valid, html_error = validate_yaml_content(original_content, full_config_path)
if not is_valid:
# Restore backup and raise error
if os.path.exists(backup_path):
shutil.copy2(backup_path, full_config_path)
raise ValueError(html_error)
content = preprocess_yaml_content(original_content)
# Write pre-processed content if changed
if content != original_content:
with open(full_config_path, 'w', encoding='utf-8') as f:
f.write(content)
# Try to parse YAML
try:
with open(full_config_path, 'r', encoding='utf-8') as f:
data = yaml.load(f, Loader=yaml.SafeLoader)
except yaml.YAMLError as e:
# Extract error details
error_msg = str(e)
line_num = None
column = None
if hasattr(e, 'problem_mark') and e.problem_mark:
line_num = e.problem_mark.line + 1
column = e.problem_mark.column + 1
# Get context around error
context = ""
if line_num:
context = get_yaml_error_context(content, line_num, column)
# Provide helpful error message
error_details = f"""
YAML Parsing Error in config file: {full_config_path}
Error: {error_msg}
{"Error Context:" + chr(10) + context if context else ""}
Possible causes:
1. Unquoted string containing a colon (e.g., URLs like https://...)
2. Unquoted Windows path with backslashes (e.g., C:\\path\\to\\file)
3. Malformed YAML structure
4. File corruption from previous processing
Suggested fixes:
1. Delete the config file and let it re-download: {full_config_path}
2. Manually edit the file to quote problematic values
3. Check if the source config URL provides valid YAML
"""
# Restore backup
if os.path.exists(backup_path):
try:
shutil.copy2(backup_path, full_config_path)
except Exception:
pass
raise yaml.YAMLError(error_details) from e
# Validate required sections exist
if not isinstance(data, dict):
raise ValueError(f"Config file does not contain a valid YAML dictionary: {full_config_path}")
# Apply modifications safely
if 'use_amp' not in data:
if 'training' not in data:
data['training'] = {}
data['training']['use_amp'] = True
# Do NOT overwrite audio.chunk_size — keep the model's native value from the YAML.
if 'audio' not in data:
data['audio'] = {}
if 'inference' not in data:
data['inference'] = {}
data['inference']['num_overlap'] = overlap
if data['inference'].get('batch_size', 1) == 1:
data['inference']['batch_size'] = 2
# Write updated config
with open(full_config_path, 'w', encoding='utf-8') as f:
yaml.dump(data, f, default_flow_style=False, sort_keys=False, Dumper=yaml.Dumper)
# Remove backup on success
if os.path.exists(backup_path):
try:
os.remove(backup_path)
except Exception:
pass
except Exception as e:
# Restore backup on any error
if os.path.exists(backup_path):
try:
shutil.copy2(backup_path, full_config_path)
os.remove(backup_path)
except Exception:
pass
raise
def redownload_config(model_name):
"""Re-download a corrupted config file for a custom model.
Args:
model_name: Name of the custom model
Returns:
tuple: (success: bool, message: str)
"""
custom_models = load_custom_models()
if model_name not in custom_models:
return False, f"Model '{model_name}' not found in custom models"
config = custom_models[model_name]
config_url = config.get('config_url')
config_filename = config.get('config_filename')
if not config_url or not config_filename:
return False, f"Config URL or filename not found for model '{model_name}'"
config_path = os.path.join(CHECKPOINT_DIR, config_filename)
# Auto-fix URL before re-downloading
config_url = fix_huggingface_url(config_url)
# Delete existing config
if os.path.exists(config_path):
try:
os.remove(config_path)
except Exception as e:
return False, f"Could not delete config file: {e}"
# Re-download with validation
try:
download_file(config_url, target_filename=config_filename, validate_yaml=True)
return True, f"Config file re-downloaded successfully: {config_filename}"
except Exception as e:
return False, f"Failed to re-download config: {e}"
def download_file(url, path=None, target_filename=None, validate_yaml=True):
"""Downloads a file from a URL with progress reporting.
Args:
url: The URL to download from.
path: The directory to save the file to. Defaults to CHECKPOINT_DIR.
target_filename: Optional custom filename to save as. If None, uses filename from URL.
validate_yaml: If True and file is .yaml/.yml, validate it's not HTML
"""
import requests
# Auto-fix Hugging Face URLs
url = fix_huggingface_url(url)
encoded_url = quote(url, safe=':/')
if path is None:
path = CHECKPOINT_DIR
os.makedirs(path, exist_ok=True)
# Use custom target filename if provided, otherwise extract from URL
filename = target_filename if target_filename else os.path.basename(encoded_url)
file_path = os.path.join(path, filename)
if os.path.exists(file_path):
print(f"File '{filename}' already exists at '{path}'.")
return
try:
response = requests.get(url, stream=True)
if response.status_code == 200:
# Get total file size for progress reporting
total_size = int(response.headers.get('content-length', 0))
# For YAML files, download to memory first and validate
is_yaml_file = filename.lower().endswith(('.yaml', '.yml'))
if is_yaml_file and validate_yaml:
content = response.content
is_valid, error_msg = validate_yaml_content(content, file_path)
if not is_valid:
print(f"ERROR: Downloaded file is not valid YAML!")
print(error_msg)
raise ValueError(f"Downloaded file is HTML, not YAML. URL may be incorrect: {url}")
with open(file_path, 'wb') as f:
f.write(content)
else:
# Download with progress reporting
downloaded_size = 0
last_percent = -1
print(f"[SESA_DOWNLOAD]START:{filename}", flush=True)
with open(file_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
downloaded_size += len(chunk)
# Report download progress
if total_size > 0:
percent = int((downloaded_size / total_size) * 100)
if percent != last_percent:
last_percent = percent
# Format: [SESA_DOWNLOAD]filename:percent
print(f"[SESA_DOWNLOAD]{filename}:{percent}", flush=True)
print(f"[SESA_DOWNLOAD]END:{filename}", flush=True)
else:
print(f"Error downloading '{filename}': Status code {response.status_code}")
except Exception as e:
print(f"Error downloading file '{filename}' from '{url}': {e}")
raise
# Model konfigurasyonlarını kategorize bir sözlükte tut
MODEL_CONFIGS = {
"Vocal Models": {
# === NEW MODELS (en üstte) ===
'bs_roformer_voc_hyperacev2 (by unwa)': {
'model_type': 'bs_roformer_custom',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_hyperacev2_voc.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_voc_hyperacev2.ckpt'),
'download_urls': [
('https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/v2_voc/config.yaml', 'config_hyperacev2_voc.yaml'),
'https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/v2_voc/bs_roformer_voc_hyperacev2.ckpt'
],
'custom_model_url': 'https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/v2_voc/bs_roformer.py',
'needs_conf_edit': True
},
'BS-Roformer-Resurrection (by unwa)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'BS-Roformer-Resurrection-Config.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'BS-Roformer-Resurrection.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/BS-Roformer-Resurrection/resolve/main/BS-Roformer-Resurrection-Config.yaml',
'https://huggingface.co/pcunwa/BS-Roformer-Resurrection/resolve/main/BS-Roformer-Resurrection.ckpt'
],
'needs_conf_edit': True
},
'bs_roformer_revive3e (by unwa)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_revive.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_revive3e.ckpt'),
'download_urls': [
('https://huggingface.co/pcunwa/BS-Roformer-Revive/resolve/main/config.yaml', 'config_revive.yaml'),
'https://huggingface.co/pcunwa/BS-Roformer-Revive/resolve/main/bs_roformer_revive3e.ckpt'
],
'needs_conf_edit': True
},
'bs_roformer_revive2 (by unwa)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_revive.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_revive2.ckpt'),
'download_urls': [
('https://huggingface.co/pcunwa/BS-Roformer-Revive/resolve/main/config.yaml', 'config_revive.yaml'),
'https://huggingface.co/pcunwa/BS-Roformer-Revive/resolve/main/bs_roformer_revive2.ckpt'
],
'needs_conf_edit': True
},
'bs_roformer_revive (by unwa)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_revive.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_revive.ckpt'),
'download_urls': [
('https://huggingface.co/pcunwa/BS-Roformer-Revive/resolve/main/config.yaml', 'config_revive.yaml'),
'https://huggingface.co/pcunwa/BS-Roformer-Revive/resolve/main/bs_roformer_revive.ckpt'
],
'needs_conf_edit': True
},
'karaoke_bs_roformer_anvuew (by anvuew)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'karaoke_bs_roformer_anvuew.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'karaoke_bs_roformer_anvuew.ckpt'),
'download_urls': [
'https://huggingface.co/anvuew/karaoke_bs_roformer/resolve/main/karaoke_bs_roformer_anvuew.yaml',
'https://huggingface.co/anvuew/karaoke_bs_roformer/resolve/main/karaoke_bs_roformer_anvuew.ckpt'
],
'needs_conf_edit': True
},
# === EXISTING MODELS ===
'VOCALS-big_beta6X (by Unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'big_beta6x.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'big_beta6x.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/big_beta6x.yaml',
'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/big_beta6x.ckpt'
],
'needs_conf_edit': False
},
'VOCALS-big_beta6 (by Unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'big_beta6.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'big_beta6.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/big_beta6.yaml',
'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/big_beta6.ckpt'
],
'needs_conf_edit': False
},
'VOCALS-Mel-Roformer FT 3 Preview (by unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_kimmel_unwa_ft.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'kimmel_unwa_ft3_prev.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/config_kimmel_unwa_ft.yaml',
'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/kimmel_unwa_ft3_prev.ckpt'
],
'needs_conf_edit': False
},
'VOCALS-InstVocHQ': {
'model_type': 'mdx23c',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_vocals_mdx23c.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_vocals_mdx23c_sdr_10.17.ckpt'),
'download_urls': [
'https://raw.githubusercontent.com/ZFTurbo/Music-Source-Separation-Training/main/configs/config_vocals_mdx23c.yaml',
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v1.0.0/model_vocals_mdx23c_sdr_10.17.ckpt'
],
'needs_conf_edit': False
},
'VOCALS-MelBand-Roformer (by KimberleyJSN)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_vocals_mel_band_roformer_kj.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'MelBandRoformer.ckpt'),
'download_urls': [
'https://raw.githubusercontent.com/ZFTurbo/Music-Source-Separation-Training/main/configs/KimberleyJensen/config_vocals_mel_band_roformer_kj.yaml',
'https://huggingface.co/KimberleyJSN/melbandroformer/resolve/main/MelBandRoformer.ckpt'
],
'needs_conf_edit': True
},
'VOCALS-BS-Roformer_1297 (by viperx)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'model_bs_roformer_ep_317_sdr_12.9755.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_bs_roformer_ep_317_sdr_12.9755.ckpt'),
'download_urls': [
'https://raw.githubusercontent.com/ZFTurbo/Music-Source-Separation-Training/main/configs/viperx/model_bs_roformer_ep_317_sdr_12.9755.yaml',
'https://github.com/TRvlvr/model_repo/releases/download/all_public_uvr_models/model_bs_roformer_ep_317_sdr_12.9755.ckpt'
],
'needs_conf_edit': True
},
'VOCALS-BS-Roformer_1296 (by viperx)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'model_bs_roformer_ep_368_sdr_12.9628.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_bs_roformer_ep_368_sdr_12.9628.ckpt'),
'download_urls': [
'https://github.com/TRvlvr/model_repo/releases/download/all_public_uvr_models/model_bs_roformer_ep_368_sdr_12.9628.ckpt',
'https://raw.githubusercontent.com/TRvlvr/application_data/main/mdx_model_data/mdx_c_configs/model_bs_roformer_ep_368_sdr_12.9628.yaml'
],
'needs_conf_edit': True
},
'VOCALS-BS-RoformerLargev1 (by unwa)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_bsrofoL.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'BS-Roformer_LargeV1.ckpt'),
'download_urls': [
'https://huggingface.co/jarredou/unwa_bs_roformer/resolve/main/BS-Roformer_LargeV1.ckpt',
'https://huggingface.co/jarredou/unwa_bs_roformer/raw/main/config_bsrofoL.yaml'
],
'needs_conf_edit': True
},
'VOCALS-Mel-Roformer big beta 4 (by unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_big_beta4.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'melband_roformer_big_beta4.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/melband_roformer_big_beta4.ckpt',
'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/raw/main/config_melbandroformer_big_beta4.yaml'
],
'needs_conf_edit': True
},
'VOCALS-Melband-Roformer BigBeta5e (by unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'big_beta5e.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'big_beta5e.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/big_beta5e.ckpt',
'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/big_beta5e.yaml'
],
'needs_conf_edit': True
},
'VOCALS-VitLarge23 (by ZFTurbo)': {
'model_type': 'segm_models',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_vocals_segm_models.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_vocals_segm_models_sdr_9.77.ckpt'),
'download_urls': [
'https://raw.githubusercontent.com/ZFTurbo/Music-Source-Separation-Training/refs/heads/main/configs/config_vocals_segm_models.yaml',
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v1.0.0/model_vocals_segm_models_sdr_9.77.ckpt'
],
'needs_conf_edit': False
},
'VOCALS-MelBand-Roformer Kim FT (by Unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_kimmel_unwa_ft.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'kimmel_unwa_ft.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/kimmel_unwa_ft.ckpt',
'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/config_kimmel_unwa_ft.yaml'
],
'needs_conf_edit': True
},
'VOCALS-MelBand-Roformer (by Becruily)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_instrumental_becruily.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'mel_band_roformer_vocals_becruily.ckpt'),
'download_urls': [
'https://huggingface.co/becruily/mel-band-roformer-vocals/resolve/main/config_vocals_becruily.yaml',
'https://huggingface.co/becruily/mel-band-roformer-vocals/resolve/main/mel_band_roformer_vocals_becruily.ckpt'
],
'needs_conf_edit': True
},
'VOCALS-Male Female-BS-RoFormer Male Female Beta 7_2889 (by aufr33)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_chorus_male_female_bs_roformer.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_male_female_by_aufr33_sdr_7.2889.ckpt'),
'download_urls': [
'https://huggingface.co/RareSirMix/AIModelRehosting/resolve/main/bs_roformer_male_female_by_aufr33_sdr_7.2889.ckpt',
'https://huggingface.co/Sucial/Chorus_Male_Female_BS_Roformer/resolve/main/config_chorus_male_female_bs_roformer.yaml'
],
'needs_conf_edit': True
},
'VOCALS-MelBand-Roformer Kim FT 2 (by Unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_kimmel_unwa_ft.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'kimmel_unwa_ft2.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/config_kimmel_unwa_ft.yaml',
'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/kimmel_unwa_ft2.ckpt'
],
'needs_conf_edit': True
},
'voc_gaboxBSroformer (by Gabox)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gaboxBSroformer.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_gaboxBSR.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/BSRoformerVocTest/resolve/main/voc_gaboxBSroformer.yaml',
'https://huggingface.co/GaboxR67/BSRoformerVocTest/resolve/main/voc_gaboxBSR.ckpt'
],
'needs_conf_edit': True
},
'voc_gaboxMelReformer (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_gabox.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.ckpt'
],
'needs_conf_edit': True
},
'voc_gaboxMelReformerFV1 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_gaboxFv1.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gaboxFv1.ckpt'
],
'needs_conf_edit': True
},
'voc_gaboxMelReformerFV2 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_gaboxFv2.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gaboxFv2.ckpt'
],
'needs_conf_edit': True
},
'VOCALS-MelBand-Roformer Kim FT 2 Blendless (by unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_kimmel_unwa_ft.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'kimmel_unwa_ft2_bleedless.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/config_kimmel_unwa_ft.yaml',
'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/kimmel_unwa_ft2_bleedless.ckpt'
],
'needs_conf_edit': True
},
'Voc_Fv3 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_Fv3.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_Fv3.ckpt'
],
'needs_conf_edit': True
},
'FullnessVocalModel (by Amane)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'FullnessVocalModel.ckpt'),
'download_urls': [
'https://huggingface.co/Aname-Tommy/MelBandRoformers/blob/main/config.yaml',
'https://huggingface.co/Aname-Tommy/MelBandRoformers/blob/main/FullnessVocalModel.ckpt'
],
'needs_conf_edit': True
},
'voc_fv4 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_fv4.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_fv4.ckpt'
],
'needs_conf_edit': True
},
'voc_fv5 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_fv5.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_fv5.ckpt'
],
'needs_conf_edit': True
},
'voc_fv6 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_fv6.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_fv6.ckpt'
],
'needs_conf_edit': True
},
'voc_fv7 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'v7.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_fv7.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/v7.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_fv7.ckpt'
],
'needs_conf_edit': True
},
'vocfv7beta1 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'vocfv7beta1.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/experimental/vocfv7beta1.ckpt'
],
'needs_conf_edit': True
},
'vocfv7beta2 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'vocfv7beta2.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/experimental/vocfv7beta2.ckpt'
],
'needs_conf_edit': True
},
'vocfv7beta3 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'vocfv7beta3.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/experimental/vocfv7beta3.ckpt'
],
'needs_conf_edit': True
},
'MelBandRoformerSYHFTV3Epsilon (by SYH99999)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_vocals_mel_band_roformer_ft.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'MelBandRoformerSYHFTV3Epsilon.ckpt'),
'download_urls': [
'https://huggingface.co/SYH99999/MelBandRoformerSYHFT/resolve/main/config_vocals_mel_band_roformer_ft.yaml',
'https://huggingface.co/SYH99999/MelBandRoformerSYHFTV3Epsilon/resolve/main/MelBandRoformerSYHFTV3Epsilon.ckpt'
],
'needs_conf_edit': True
},
'MelBandRoformerBigSYHFTV1 (by SYH99999)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_big_syhft.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'MelBandRoformerBigSYHFTV1.ckpt'),
'download_urls': [
'https://huggingface.co/SYH99999/MelBandRoformerBigSYHFTV1Fast/resolve/main/config.yaml',
'https://huggingface.co/SYH99999/MelBandRoformerBigSYHFTV1Fast/resolve/main/MelBandRoformerBigSYHFTV1.ckpt'
],
'needs_conf_edit': True
},
'model_chorus_bs_roformer_ep_146 (by Sucial)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_chorus_male_female_bs_roformer.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_chorus_bs_roformer_ep_146_sdr_23.8613.ckpt'),
'download_urls': [
'https://huggingface.co/Sucial/Chorus_Male_Female_BS_Roformer/resolve/main/config_chorus_male_female_bs_roformer.yaml',
'https://huggingface.co/Sucial/Chorus_Male_Female_BS_Roformer/resolve/main/model_chorus_bs_roformer_ep_146_sdr_23.8613.ckpt'
],
'needs_conf_edit': True
},
'model_chorus_bs_roformer_ep_267 (by Sucial)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_chorus_male_female_bs_roformer.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_chorus_bs_roformer_ep_267_sdr_24.1275.ckpt'),
'download_urls': [
'https://huggingface.co/Sucial/Chorus_Male_Female_BS_Roformer/resolve/main/config_chorus_male_female_bs_roformer.yaml',
'https://huggingface.co/Sucial/Chorus_Male_Female_BS_Roformer/resolve/main/model_chorus_bs_roformer_ep_267_sdr_24.1275.ckpt'
],
'needs_conf_edit': True
},
'BS-Rofo-SW-Fixed (by jarredou)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'BS-Rofo-SW-Fixed.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'BS-Rofo-SW-Fixed.ckpt'),
'download_urls': [
'https://huggingface.co/jarredou/BS-ROFO-SW-Fixed/resolve/main/BS-Rofo-SW-Fixed.yaml',
'https://huggingface.co/jarredou/BS-ROFO-SW-Fixed/resolve/main/BS-Rofo-SW-Fixed.ckpt'
],
'needs_conf_edit': True
},
'BS_ResurrectioN (by Gabox)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'BS-Roformer-Resurrection-Inst-Config.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'BS_ResurrectioN.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/BS-Roformer-Resurrection/resolve/main/BS-Roformer-Resurrection-Inst-Config.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/experimental/BS_ResurrectioN.ckpt'
],
'needs_conf_edit': True
}
},
"Instrumental Models": {
# === NEW MODELS (en üstte) ===
'Neo_InstVFX (by natanworkspace)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_neo_inst.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'Neo_InstVFX.ckpt'),
'download_urls': [
'https://huggingface.co/natanworkspace/melband_roformer/resolve/main/config_neo_inst.yaml',
'https://huggingface.co/natanworkspace/melband_roformer/resolve/main/Neo_InstVFX.ckpt'
],
'needs_conf_edit': True
},
'BS-Roformer-Resurrection-Inst (by unwa)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'BS-Roformer-Resurrection-Inst-Config.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'BS-Roformer-Resurrection-Inst.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/BS-Roformer-Resurrection/resolve/main/BS-Roformer-Resurrection-Inst-Config.yaml',
'https://huggingface.co/pcunwa/BS-Roformer-Resurrection/resolve/main/BS-Roformer-Resurrection-Inst.ckpt'
],
'needs_conf_edit': True
},
'bs_roformer_inst_hyperacev2 (by unwa)': {
'model_type': 'bs_roformer_custom',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_hyperacev2_inst.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_inst_hyperacev2.ckpt'),
'download_urls': [
('https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/v2_inst/config.yaml', 'config_hyperacev2_inst.yaml'),
'https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/v2_inst/bs_roformer_inst_hyperacev2.ckpt'
],
'custom_model_url': 'https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/v2_inst/bs_roformer.py',
'needs_conf_edit': True
},
'BS-Roformer-Large-Inst (by unwa)': {
'model_type': 'bs_roformer_custom',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_bs_large_inst.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_large_v2_inst.ckpt'),
'download_urls': [
('https://huggingface.co/pcunwa/BS-Roformer-Large-Inst/resolve/main/config.yaml', 'config_bs_large_inst.yaml'),
'https://huggingface.co/pcunwa/BS-Roformer-Large-Inst/resolve/main/bs_large_v2_inst.ckpt'
],
'custom_model_url': 'https://huggingface.co/pcunwa/BS-Roformer-Large-Inst/resolve/main/bs_roformer.py',
'needs_conf_edit': True
},
'bs_roformer_fno (by unwa)': {
'model_type': 'bs_roformer_custom',
'config_path': os.path.join(CHECKPOINT_DIR, 'bsrofo_fno.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_fno.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/BS-Roformer-Inst-FNO/resolve/main/bsrofo_fno.yaml',
'https://huggingface.co/pcunwa/BS-Roformer-Inst-FNO/resolve/main/bs_roformer_fno.ckpt'
],
'custom_model_url': 'https://huggingface.co/listra92/MyModels/resolve/main/misc/bs_roformer.py',
'needs_conf_edit': True
},
'Rifforge_final_sdr_14.24 (by meskvlla33)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_rifforge_full_mesk.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'rifforge_full_sdr_14.2436.ckpt'),
'download_urls': [
'https://huggingface.co/meskvlla33/rifforge/resolve/main/config_rifforge_full_mesk.yaml',
'https://huggingface.co/meskvlla33/rifforge/resolve/main/rifforge_full_sdr_14.2436.ckpt'
],
'needs_conf_edit': True
},
# === EXISTING MODELS ===
'Inst_GaboxFv8 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'Inst_GaboxFv8.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/Inst_GaboxFv8.ckpt',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml'
],
'needs_conf_edit': True
},
'INST-Mel-Roformer v1 (by unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_inst.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'melband_roformer_inst_v1.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/resolve/main/melband_roformer_inst_v1.ckpt',
'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/raw/main/config_melbandroformer_inst.yaml'
],
'needs_conf_edit': True
},
'INST-Mel-Roformer v1e+ (by unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_inst.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_v1e_plus.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/resolve/main/inst_v1e_plus.ckpt',
'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/raw/main/config_melbandroformer_inst.yaml'
],
'needs_conf_edit': True
},
'INST-Mel-Roformer v1+ (by unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_inst.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_v1_plus_test.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/resolve/main/inst_v1_plus_test.ckpt',
'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/raw/main/config_melbandroformer_inst.yaml'
],
'needs_conf_edit': True
},
'INST-Mel-Roformer v2 (by unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_inst_v2.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'melband_roformer_inst_v2.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/resolve/main/melband_roformer_inst_v2.ckpt',
'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/raw/main/config_melbandroformer_inst_v2.yaml'
],
'needs_conf_edit': True
},
'INST-VOC-Mel-Roformer a.k.a. duality (by unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_instvoc_duality.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'melband_roformer_instvoc_duality_v1.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Mel-Band-Roformer-InstVoc-Duality/resolve/main/melband_roformer_instvoc_duality_v1.ckpt',
'https://huggingface.co/pcunwa/Mel-Band-Roformer-InstVoc-Duality/raw/main/config_melbandroformer_instvoc_duality.yaml'
],
'needs_conf_edit': True
},
'INST-VOC-Mel-Roformer a.k.a. duality v2 (by unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_instvoc_duality.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'melband_roformer_instvox_duality_v2.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Mel-Band-Roformer-InstVoc-Duality/resolve/main/melband_roformer_instvox_duality_v2.ckpt',
'https://huggingface.co/pcunwa/Mel-Band-Roformer-InstVoc-Duality/raw/main/config_melbandroformer_instvoc_duality.yaml'
],
'needs_conf_edit': True
},
'INST-MelBand-Roformer (by Becruily)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_instrumental_becruily.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'mel_band_roformer_instrumental_becruily.ckpt'),
'download_urls': [
'https://huggingface.co/becruily/mel-band-roformer-instrumental/resolve/main/config_instrumental_becruily.yaml',
'https://huggingface.co/becruily/mel-band-roformer-instrumental/resolve/main/mel_band_roformer_instrumental_becruily.ckpt'
],
'needs_conf_edit': True
},
'inst_v1e (by unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_inst.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_v1e.ckpt'),
'download_urls': [
'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/resolve/main/inst_v1e.ckpt',
'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/resolve/main/config_melbandroformer_inst.yaml'
],
'needs_conf_edit': True
},
'inst_gabox (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_gabox.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.ckpt'
],
'needs_conf_edit': True
},
'inst_gaboxBV1 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_gaboxBv1.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gaboxBv1.ckpt'
],
'needs_conf_edit': True
},
'inst_gaboxBV2 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_gaboxBv2.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gaboxBv2.ckpt'
],
'needs_conf_edit': True
},
'inst_gaboxBFV1 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'gaboxFv1.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gaboxFv1.ckpt'
],
'needs_conf_edit': True
},
'inst_gaboxFV2 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_gaboxFv2.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gaboxFv2.ckpt'
],
'needs_conf_edit': True
},
'inst_Fv3 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_gaboxFv3.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gaboxFv3.ckpt'
],
'needs_conf_edit': True
},
'Intrumental_Gabox (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'intrumental_gabox.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/intrumental_gabox.ckpt'
],
'needs_conf_edit': True
},
'inst_Fv4Noise (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_Fv4Noise.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_Fv4Noise.ckpt'
],
'needs_conf_edit': True
},
'INSTV5 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'INSTV5.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/INSTV5.ckpt'
],
'needs_conf_edit': True
},
'inst_gaboxFV1 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_gaboxFv1.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gaboxFv1.ckpt'
],
'needs_conf_edit': True
},
'inst_gaboxFV6 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'INSTV6.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/INSTV6.ckpt'
],
'needs_conf_edit': True
},
'INSTV5N (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'INSTV5N.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/INSTV5N.ckpt'
],
'needs_conf_edit': True
},
'INSTV6N (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'INSTV6N.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/INSTV6N.ckpt'
],
'needs_conf_edit': True
},
'Inst_GaboxV7 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'Inst_GaboxV7.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/Inst_GaboxV7.ckpt'
],
'needs_conf_edit': True
},
'inst_Fv4 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_Fv4.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_Fv4.ckpt'
],
'needs_conf_edit': True
},
'INSTV7N (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'INSTV7N.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/INSTV7N.ckpt'
],
'needs_conf_edit': True
},
'inst_fv7b (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_fv7b.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/experimental/inst_fv7b.ckpt'
],
'needs_conf_edit': True
},
'inst_fv7z (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'Inst_GaboxFv7z.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/Inst_GaboxFv7z.ckpt'
],
'needs_conf_edit': True
},
'Inst_GaboxFv9 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'Inst_GaboxFv9.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/Inst_GaboxFv9.ckpt'
],
'needs_conf_edit': True
},
'inst_gaboxFlowersV10 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'v10.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_gaboxFlowersV10.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/v10.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gaboxFlowersV10.ckpt'
],
'needs_conf_edit': True
},
'Inst_FV8b (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'Inst_FV8b.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/experimental/Inst_FV8b.ckpt'
],
'needs_conf_edit': True
},
'Inst_Fv8 (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'Inst_Fv8.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/experimental/Inst_Fv8.ckpt'
],
'needs_conf_edit': True
}
},
"4-Stem Models": {
'4STEMS-SCNet_MUSDB18 (by starrytong)': {
'model_type': 'scnet',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_musdb18_scnet.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'scnet_checkpoint_musdb18.ckpt'),
'download_urls': [
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v.1.0.6/config_musdb18_scnet.yaml',
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v.1.0.6/scnet_checkpoint_musdb18.ckpt'
],
'needs_conf_edit': False
},
'4STEMS-SCNet_XL_MUSDB18 (by ZFTurbo)': {
'model_type': 'scnet',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_musdb18_scnet_xl.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_scnet_ep_54_sdr_9.8051.ckpt'),
'download_urls': [
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v1.0.13/config_musdb18_scnet_xl.yaml',
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v1.0.13/model_scnet_ep_54_sdr_9.8051.ckpt'
],
'needs_conf_edit': True
},
'4STEMS-SCNet_Large (by starrytong)': {
'model_type': 'scnet',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_musdb18_scnet_large_starrytong.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'SCNet-large_starrytong_fixed.ckpt'),
'download_urls': [
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v1.0.9/config_musdb18_scnet_large_starrytong.yaml',
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v1.0.9/SCNet-large_starrytong_fixed.ckpt'
],
'needs_conf_edit': True
},
'4STEMS-BS-Roformer_MUSDB18 (by ZFTurbo)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_bs_roformer_384_8_2_485100.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_bs_roformer_ep_17_sdr_9.6568.ckpt'),
'download_urls': [
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v1.0.12/config_bs_roformer_384_8_2_485100.yaml',
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v1.0.12/model_bs_roformer_ep_17_sdr_9.6568.ckpt'
],
'needs_conf_edit': True
},
'MelBandRoformer4StemFTLarge (SYH99999)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'MelBandRoformer4StemFTLarge.ckpt'),
'download_urls': [
'https://huggingface.co/SYH99999/MelBandRoformer4StemFTLarge/resolve/main/config.yaml',
'https://huggingface.co/SYH99999/MelBandRoformer4StemFTLarge/resolve/main/MelBandRoformer4StemFTLarge.ckpt'
],
'needs_conf_edit': True
}
},
"Denoise Models": {
'DENOISE-MelBand-Roformer-1 (by aufr33)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'model_mel_band_roformer_denoise.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'denoise_mel_band_roformer_aufr33_sdr_27.9959.ckpt'),
'download_urls': [
'https://huggingface.co/jarredou/aufr33_MelBand_Denoise/resolve/main/denoise_mel_band_roformer_aufr33_sdr_27.9959.ckpt',
'https://huggingface.co/jarredou/aufr33_MelBand_Denoise/resolve/main/model_mel_band_roformer_denoise.yaml'
],
'needs_conf_edit': True
},
'DENOISE-MelBand-Roformer-2 (by aufr33)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'model_mel_band_roformer_denoise.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'denoise_mel_band_roformer_aufr33_aggr_sdr_27.9768.ckpt'),
'download_urls': [
'https://huggingface.co/jarredou/aufr33_MelBand_Denoise/resolve/main/denoise_mel_band_roformer_aufr33_aggr_sdr_27.9768.ckpt',
'https://huggingface.co/jarredou/aufr33_MelBand_Denoise/resolve/main/model_mel_band_roformer_denoise.yaml'
],
'needs_conf_edit': True
},
'denoisedebleed (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'model_mel_band_roformer_denoise.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'denoisedebleed.ckpt'),
'download_urls': [
'https://huggingface.co/poiqazwsx/melband-roformer-denoise/resolve/main/model_mel_band_roformer_denoise.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/denoisedebleed.ckpt'
],
'needs_conf_edit': True
},
'bleed_suppressor_v1 (by unwa)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_bleed_suppressor_v1.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'bleed_suppressor_v1.ckpt'),
'download_urls': [
'https://huggingface.co/ASesYusuf1/MODELS/resolve/main/bleed_suppressor_v1.ckpt',
'https://huggingface.co/ASesYusuf1/MODELS/resolve/main/config_bleed_suppressor_v1.yaml'
],
'needs_conf_edit': True
}
},
"Dereverb Models": {
'DE-REVERB-MDX23C (by aufr33 & jarredou)': {
'model_type': 'mdx23c',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_dereverb_mdx23c.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'dereverb_mdx23c_sdr_6.9096.ckpt'),
'download_urls': [
'https://huggingface.co/jarredou/aufr33_jarredou_MDXv3_DeReverb/resolve/main/dereverb_mdx23c_sdr_6.9096.ckpt',
'https://huggingface.co/jarredou/aufr33_jarredou_MDXv3_DeReverb/resolve/main/config_dereverb_mdx23c.yaml'
],
'needs_conf_edit': False
},
'DE-REVERB-MelBand-Roformer aggr./v2/19.1729 (by anvuew)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'dereverb_mel_band_roformer_anvuew.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'dereverb_mel_band_roformer_anvuew_sdr_19.1729.ckpt'),
'download_urls': [
'https://huggingface.co/anvuew/dereverb_mel_band_roformer/resolve/main/dereverb_mel_band_roformer_anvuew_sdr_19.1729.ckpt',
'https://huggingface.co/anvuew/dereverb_mel_band_roformer/resolve/main/dereverb_mel_band_roformer_anvuew.yaml'
],
'needs_conf_edit': True
},
'DE-REVERB-Echo-MelBand-Roformer (by Sucial)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_dereverb-echo_mel_band_roformer.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'dereverb-echo_mel_band_roformer_sdr_10.0169.ckpt'),
'download_urls': [
'https://huggingface.co/Sucial/Dereverb-Echo_Mel_Band_Roformer/resolve/main/dereverb-echo_mel_band_roformer_sdr_10.0169.ckpt',
'https://huggingface.co/Sucial/Dereverb-Echo_Mel_Band_Roformer/resolve/main/config_dereverb-echo_mel_band_roformer.yaml'
],
'needs_conf_edit': True
},
'dereverb_mel_band_roformer_less_aggressive_anvuew': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'dereverb_mel_band_roformer_anvuew.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'dereverb_mel_band_roformer_less_aggressive_anvuew_sdr_18.8050.ckpt'),
'download_urls': [
'https://huggingface.co/anvuew/dereverb_mel_band_roformer/resolve/main/dereverb_mel_band_roformer_anvuew.yaml',
'https://huggingface.co/anvuew/dereverb_mel_band_roformer/resolve/main/dereverb_mel_band_roformer_less_aggressive_anvuew_sdr_18.8050.ckpt'
],
'needs_conf_edit': True
},
'dereverb_mel_band_roformer_anvuew': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'dereverb_mel_band_roformer_anvuew.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'dereverb_mel_band_roformer_anvuew_sdr_19.1729.ckpt'),
'download_urls': [
'https://huggingface.co/anvuew/dereverb_mel_band_roformer/resolve/main/dereverb_mel_band_roformer_anvuew.yaml',
'https://huggingface.co/anvuew/dereverb_mel_band_roformer/resolve/main/dereverb_mel_band_roformer_anvuew_sdr_19.1729.ckpt'
],
'needs_conf_edit': True
},
'dereverb_mel_band_roformer_mono (by anvuew)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'dereverb_mel_band_roformer_anvuew.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'dereverb_mel_band_roformer_mono_anvuew_sdr_20.4029.ckpt'),
'download_urls': [
'https://huggingface.co/anvuew/dereverb_mel_band_roformer/resolve/main/dereverb_mel_band_roformer_anvuew.yaml',
'https://huggingface.co/anvuew/dereverb_mel_band_roformer/resolve/main/dereverb_mel_band_roformer_mono_anvuew_sdr_20.4029.ckpt'
],
'needs_conf_edit': True
},
'dereverb-echo_128_4_4 (by Sucial)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_dereverb-echo_128_4_4_mel_band_roformer.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'dereverb-echo_128_4_4_mel_band_roformer_sdr_dry_12.4235.ckpt'),
'download_urls': [
'https://huggingface.co/Sucial/Dereverb-Echo_Mel_Band_Roformer/resolve/main/config_dereverb-echo_128_4_4_mel_band_roformer.yaml',
'https://huggingface.co/Sucial/Dereverb-Echo_Mel_Band_Roformer/resolve/main/dereverb-echo_128_4_4_mel_band_roformer_sdr_dry_12.4235.ckpt'
],
'needs_conf_edit': True
},
'dereverb_echo_mbr_v2 (by Sucial)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_dereverb_echo_mbr_v2.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'dereverb_echo_mbr_v2_sdr_dry_13.4843.ckpt'),
'download_urls': [
'https://huggingface.co/Sucial/Dereverb-Echo_Mel_Band_Roformer/resolve/main/config_dereverb_echo_mbr_v2.yaml',
'https://huggingface.co/Sucial/Dereverb-Echo_Mel_Band_Roformer/resolve/main/dereverb_echo_mbr_v2_sdr_dry_13.4843.ckpt'
],
'needs_conf_edit': True
},
'de_big_reverb_mbr_ep_362 (by Sucial)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_dereverb_echo_mbr_v2.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'de_big_reverb_mbr_ep_362.ckpt'),
'download_urls': [
'https://huggingface.co/Sucial/Dereverb-Echo_Mel_Band_Roformer/resolve/main/config_dereverb_echo_mbr_v2.yaml',
'https://huggingface.co/Sucial/Dereverb-Echo_Mel_Band_Roformer/resolve/main/de_big_reverb_mbr_ep_362.ckpt'
],
'needs_conf_edit': True
},
'de_super_big_reverb_mbr_ep_346 (by Sucial)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_dereverb_echo_mbr_v2.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'de_super_big_reverb_mbr_ep_346.ckpt'),
'download_urls': [
'https://huggingface.co/Sucial/Dereverb-Echo_Mel_Band_Roformer/resolve/main/config_dereverb_echo_mbr_v2.yaml',
'https://huggingface.co/Sucial/Dereverb-Echo_Mel_Band_Roformer/resolve/main/de_super_big_reverb_mbr_ep_346.ckpt'
],
'needs_conf_edit': True
},
'dereverb_room (by anvuew)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'dereverb_room_anvuew.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'dereverb_room_anvuew_sdr_13.7432.ckpt'),
'download_urls': [
'https://huggingface.co/anvuew/dereverb_room/resolve/main/dereverb_room_anvuew.yaml',
'https://huggingface.co/anvuew/dereverb_room/resolve/main/dereverb_room_anvuew_sdr_13.7432.ckpt'
],
'needs_conf_edit': True
}
},
"Karaoke": {
'KARAOKE-MelBand-Roformer (by aufr33 & viperx)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_mel_band_roformer_karaoke.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'mel_band_roformer_karaoke_aufr33_viperx_sdr_10.1956.ckpt'),
'download_urls': [
'https://huggingface.co/jarredou/aufr33-viperx-karaoke-melroformer-model/resolve/main/mel_band_roformer_karaoke_aufr33_viperx_sdr_10.1956.ckpt',
'https://huggingface.co/jarredou/aufr33-viperx-karaoke-melroformer-model/resolve/main/config_mel_band_roformer_karaoke.yaml'
],
'needs_conf_edit': True
},
'KaraokeGabox (by Gabox)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'karaokegabox_1750911344.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'Karaoke_GaboxV1.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/karaoke/karaokegabox_1750911344.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/karaoke/Karaoke_GaboxV1.ckpt'
],
'needs_conf_edit': True
},
'bs_karaoke_gabox_IS (by Gabox)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'karaoke_bs_roformer.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_karaoke_gabox_IS.ckpt'),
'download_urls': [
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/bsroformers/karaoke_bs_roformer.yaml',
'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/bsroformers/bs_karaoke_gabox_IS.ckpt'
],
'needs_conf_edit': True
},
'bs_roformer_karaoke_frazer_becruily': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_karaoke_frazer_becruily.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_karaoke_frazer_becruily.ckpt'),
'download_urls': [
'https://huggingface.co/becruily/bs-roformer-karaoke/resolve/main/config_karaoke_frazer_becruily.yaml',
'https://huggingface.co/becruily/bs-roformer-karaoke/resolve/main/bs_roformer_karaoke_frazer_becruily.ckpt'
],
'needs_conf_edit': True
},
'mel_band_roformer_karaoke_becruily': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_karaoke_becruily.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'mel_band_roformer_karaoke_becruily.ckpt'),
'download_urls': [
'https://huggingface.co/becruily/mel-band-roformer-karaoke/resolve/main/config_karaoke_becruily.yaml',
'https://huggingface.co/becruily/mel-band-roformer-karaoke/resolve/main/mel_band_roformer_karaoke_becruily.ckpt'
],
'needs_conf_edit': True
}
},
"Other Models": {
'OTHER-BS-Roformer_1053 (by viperx)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'model_bs_roformer_ep_937_sdr_10.5309.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_bs_roformer_ep_937_sdr_10.5309.ckpt'),
'download_urls': [
'https://github.com/TRvlvr/model_repo/releases/download/all_public_uvr_models/model_bs_roformer_ep_937_sdr_10.5309.ckpt',
'https://raw.githubusercontent.com/TRvlvr/application_data/main/mdx_model_data/mdx_c_configs/model_bs_roformer_ep_937_sdr_10.5309.yaml'
],
'needs_conf_edit': True
},
'CROWD-REMOVAL-MelBand-Roformer (by aufr33)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'model_mel_band_roformer_crowd.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'mel_band_roformer_crowd_aufr33_viperx_sdr_8.7144.ckpt'),
'download_urls': [
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v.1.0.4/mel_band_roformer_crowd_aufr33_viperx_sdr_8.7144.ckpt',
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v.1.0.4/model_mel_band_roformer_crowd.yaml'
],
'needs_conf_edit': True
},
'CINEMATIC-BandIt_Plus (by kwatcharasupat)': {
'model_type': 'bandit',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_dnr_bandit_bsrnn_multi_mus64.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_bandit_plus_dnr_sdr_11.47.chpt'),
'download_urls': [
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v.1.0.3/config_dnr_bandit_bsrnn_multi_mus64.yaml',
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v.1.0.3/model_bandit_plus_dnr_sdr_11.47.chpt'
],
'needs_conf_edit': False
},
'CINEMATIC-BandIt_v2 multi (by kwatcharasupat)': {
'model_type': 'bandit_v2',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_dnr_bandit_v2_mus64.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'checkpoint-multi_state_dict.ckpt'),
'download_urls': [
'https://huggingface.co/jarredou/banditv2_state_dicts_only/resolve/main/checkpoint-multi_state_dict.ckpt',
'https://raw.githubusercontent.com/ZFTurbo/Music-Source-Separation-Training/refs/heads/main/configs/config_dnr_bandit_v2_mus64.yaml'
],
'needs_conf_edit': True
},
'DRUMSEP-MDX23C_DrumSep_6stem (by aufr33 & jarredou)': {
'model_type': 'mdx23c',
'config_path': os.path.join(CHECKPOINT_DIR, 'aufr33-jarredou_DrumSep_model_mdx23c_ep_141_sdr_10.8059.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'aufr33-jarredou_DrumSep_model_mdx23c_ep_141_sdr_10.8059.ckpt'),
'download_urls': [
'https://github.com/jarredou/models/releases/download/aufr33-jarredou_MDX23C_DrumSep_model_v0.1/aufr33-jarredou_DrumSep_model_mdx23c_ep_141_sdr_10.8059.ckpt',
'https://github.com/jarredou/models/releases/download/aufr33-jarredou_MDX23C_DrumSep_model_v0.1/aufr33-jarredou_DrumSep_model_mdx23c_ep_141_sdr_10.8059.yaml'
],
'needs_conf_edit': False
},
'SYH99999/MelBandRoformerSYHFTB1_Model1 (by Amane)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model.ckpt'),
'download_urls': [
'https://huggingface.co/SYH99999/MelBandRoformerSYHFTB1/resolve/main/config.yaml',
'https://huggingface.co/SYH99999/MelBandRoformerSYHFTB1/resolve/main/model.ckpt'
],
'needs_conf_edit': True
},
'SYH99999/MelBandRoformerSYHFTB1_Model2 (by Amane)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model2.ckpt'),
'download_urls': [
'https://huggingface.co/SYH99999/MelBandRoformerSYHFTB1/resolve/main/config.yaml',
'https://huggingface.co/SYH99999/MelBandRoformerSYHFTB1/resolve/main/model2.ckpt'
],
'needs_conf_edit': True
},
'SYH99999/MelBandRoformerSYHFTB1_Model3 (by Amane)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model3.ckpt'),
'download_urls': [
'https://huggingface.co/SYH99999/MelBandRoformerSYHFTB1/resolve/main/config.yaml',
'https://huggingface.co/SYH99999/MelBandRoformerSYHFTB1/resolve/main/model3.ckpt'
],
'needs_conf_edit': True
},
'bs_hyperace (by unwa)': {
'model_type': 'bs_roformer_custom',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_hyperace.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_hyperace.ckpt'),
'download_urls': [
('https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/config.yaml', 'config_hyperace.yaml'),
'https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/bs_hyperace.ckpt'
],
'custom_model_url': 'https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/bs_roformer.py',
'needs_conf_edit': True
},
'becruily_deux (by becruily)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_deux_becruily.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'becruily_deux.ckpt'),
'download_urls': [
'https://huggingface.co/becruily/mel-band-roformer-deux/resolve/main/config_deux_becruily.yaml',
'https://huggingface.co/becruily/mel-band-roformer-deux/resolve/main/becruily_deux.ckpt'
],
'needs_conf_edit': True
},
'becruily_guitar (by becruily)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_guitar_becruily.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'becruily_guitar.ckpt'),
'download_urls': [
'https://huggingface.co/becruily/mel-band-roformer-guitar/resolve/main/config_guitar_becruily.yaml',
'https://huggingface.co/becruily/mel-band-roformer-guitar/resolve/main/becruily_guitar.ckpt'
],
'needs_conf_edit': True
},
'aspiration_mel_band_roformer (by Sucial)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_aspiration_mel_band_roformer.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'aspiration_mel_band_roformer_sdr_18.9845.ckpt'),
'download_urls': [
'https://huggingface.co/Sucial/Aspiration_Mel_Band_Roformer/resolve/main/config_aspiration_mel_band_roformer.yaml',
'https://huggingface.co/Sucial/Aspiration_Mel_Band_Roformer/resolve/main/aspiration_mel_band_roformer_sdr_18.9845.ckpt'
],
'needs_conf_edit': True
},
'dereverb_echo_mbr_v2 (by Sucial)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_dereverb_echo_mbr_v2.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'dereverb_echo_mbr_v2_sdr_dry_13.4843.ckpt'),
'download_urls': [
'https://huggingface.co/Sucial/Dereverb-Echo_Mel_Band_Roformer/resolve/main/config_dereverb_echo_mbr_v2.yaml',
'https://huggingface.co/Sucial/Dereverb-Echo_Mel_Band_Roformer/resolve/main/dereverb_echo_mbr_v2_sdr_dry_13.4843.ckpt'
],
'needs_conf_edit': True
},
'mdx23c_similarity (by ZFTurbo)': {
'model_type': 'mdx23c',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_mdx23c_similarity.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_mdx23c_ep_271_l1_freq_72.2383.ckpt'),
'download_urls': [
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v1.0.10/config_mdx23c_similarity.yaml',
'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v1.0.10/model_mdx23c_ep_271_l1_freq_72.2383.ckpt'
],
'needs_conf_edit': False
},
'mel_band_roformer_Lead_Rhythm_Guitar (by listra92)': {
'model_type': 'mel_band_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_mel_band_roformer_Lead_Rhythm_Guitar.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_mel_band_roformer_ep_72_sdr_3.2232.ckpt'),
'download_urls': [
'https://huggingface.co/listra92/MyModels/resolve/main/misc/config_mel_band_roformer_Lead_Rhythm_Guitar.yaml',
'https://huggingface.co/listra92/MyModels/resolve/main/misc/model_mel_band_roformer_ep_72_sdr_3.2232.ckpt'
],
'needs_conf_edit': True
},
'last_bs_roformer_4stem (by Amane)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_last_bs.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'last_bs_roformer.ckpt'),
'download_urls': [
'https://huggingface.co/listra92/MyModels/resolve/main/misc/config.yaml',
'https://huggingface.co/listra92/MyModels/resolve/main/misc/last_bs_roformer.ckpt'
],
'needs_conf_edit': True
},
'bs_roformer_4stems_ft (by SYH99999)': {
'model_type': 'bs_roformer',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_bs_4stems_ft.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_4stems_ft.pth'),
'download_urls': [
'https://huggingface.co/SYH99999/bs_roformer_4stems_ft/resolve/main/config.yaml',
'https://huggingface.co/SYH99999/bs_roformer_4stems_ft/resolve/main/bs_roformer_4stems_ft.pth'
],
'needs_conf_edit': True
},
'CINEMATIC-BandIt_v2_Eng (by kwatcharasupat)': {
'model_type': 'bandit_v2',
'config_path': os.path.join(CHECKPOINT_DIR, 'config_dnr_bandit_v2_mus64.yaml'),
'start_check_point': os.path.join(CHECKPOINT_DIR, 'checkpoint-eng_state_dict.ckpt'),
'download_urls': [
'https://huggingface.co/jarredou/banditv2_state_dicts_only/resolve/main/config_dnr_bandit_v2_mus64.yaml',
'https://huggingface.co/jarredou/banditv2_state_dicts_only/resolve/main/checkpoint-eng_state_dict.ckpt'
],
'needs_conf_edit': True
}
}
}
def get_model_config(clean_model=None, chunk_size=None, overlap=None):
"""Returns model type, config path, and checkpoint path for a given model name, downloading files if needed.
download_urls can contain:
- Simple strings: 'url' - downloads with filename from URL
- Tuples: ('url', 'target_filename') - downloads with custom filename
Also handles custom models loaded from custom_models.json
"""
if clean_model is None:
all_models = {model_name for category in MODEL_CONFIGS.values() for model_name in category.keys()}
# Add custom models
custom_models = load_custom_models()
all_models.update(custom_models.keys())
return all_models
# First check built-in models
for category in MODEL_CONFIGS.values():
if clean_model in category:
config = category[clean_model]
for url_entry in config['download_urls']:
# Handle both simple URL strings and (url, target_filename) tuples
if isinstance(url_entry, tuple):
url, target_filename = url_entry
download_file(url, target_filename=target_filename)
else:
download_file(url_entry)
if config.get('custom_model_url'):
custom_path = os.path.join(BASE_DIR, 'models', 'bs_roformer', 'bs_roformer_custom')
os.makedirs(custom_path, exist_ok=True)
# Create __init__.py for Python import support
init_file = os.path.join(custom_path, '__init__.py')
if not os.path.exists(init_file):
with open(init_file, 'w') as f:
f.write('# Auto-generated for custom BSRoformer models\n')
download_file(config['custom_model_url'], path=custom_path)
if config['needs_conf_edit'] and chunk_size is not None and overlap is not None:
conf_edit(config['config_path'], chunk_size, overlap)
return config['model_type'], config['config_path'], config['start_check_point']
# Then check custom models
custom_models = load_custom_models()
if clean_model in custom_models:
config = custom_models[clean_model]
checkpoint_path = os.path.join(CHECKPOINT_DIR, config['checkpoint_filename'])
config_path = os.path.join(CHECKPOINT_DIR, config['config_filename'])
# Download checkpoint
download_file(config['checkpoint_url'], target_filename=config['checkpoint_filename'])
# Download config with custom filename
download_file(config['config_url'], target_filename=config['config_filename'])
# Handle custom model URL if present
if config.get('custom_model_url'):
custom_path = os.path.join(BASE_DIR, 'models', 'bs_roformer', 'bs_roformer_custom')
os.makedirs(custom_path, exist_ok=True)
init_file = os.path.join(custom_path, '__init__.py')
if not os.path.exists(init_file):
with open(init_file, 'w') as f:
f.write('# Auto-generated for custom BSRoformer models\n')
download_file(config['custom_model_url'], path=custom_path)
# Apply config edits if needed
if config.get('needs_conf_edit', True) and chunk_size is not None and overlap is not None:
conf_edit(config_path, chunk_size, overlap, model_name=clean_model)
return config['model_type'], config_path, checkpoint_path
return "", "", ""
def get_all_model_configs_with_custom():
"""Returns MODEL_CONFIGS with Custom Models category added dynamically."""
all_configs = dict(MODEL_CONFIGS)
custom_models = load_custom_models()
if custom_models:
all_configs["Custom Models"] = {
name: {
'model_type': cfg['model_type'],
'config_path': os.path.join(CHECKPOINT_DIR, cfg['config_filename']),
'start_check_point': os.path.join(CHECKPOINT_DIR, cfg['checkpoint_filename']),
'download_urls': [cfg['checkpoint_url'], cfg['config_url']],
'custom_model_url': cfg.get('custom_model_url'),
'needs_conf_edit': cfg.get('needs_conf_edit', True)
}
for name, cfg in custom_models.items()
}
return all_configs
get_model_config.keys = lambda: {model_name for category in MODEL_CONFIGS.values() for model_name in category.keys()}.union(load_custom_models().keys())
def get_model_chunk_size(model_name):
"""Read the native chunk_size from a model's local YAML config if already downloaded.
Returns the int chunk_size on success, or None if the config is unavailable or
doesn't contain an audio.chunk_size entry.
"""
all_models = get_all_model_configs_with_custom()
for category in all_models.values():
if model_name in category:
config_path = category[model_name].get('config_path', '')
if config_path and os.path.exists(config_path):
try:
with open(config_path, 'r', encoding='utf-8') as f:
data = yaml.safe_load(f)
if isinstance(data, dict):
chunk_size = data.get('audio', {}).get('chunk_size')
if chunk_size:
return int(chunk_size)
except Exception:
pass
return None