CoolFace
Apppublic

ASesYusuf1/SESA_Audio_Separation

sourceHugging Facemitupdated 6mo agoView on Hugging Face
14likes
model.py1881 linesDownload Raw Back to root
1import os2import yaml3import json4import re5import shutil6from urllib.parse import quote, urlparse7from pathlib import Path8 9# Temel dizin ve checkpoint dizini sabit olarak tanımlanıyor10BASE_DIR = os.path.dirname(os.path.abspath(__file__))11CHECKPOINT_DIR = os.path.join(BASE_DIR, 'ckpts')12CUSTOM_MODELS_FILE = os.path.join(BASE_DIR, 'assets', 'custom_models.json')13 14 15def fix_huggingface_url(url):16    """Convert Hugging Face blob URLs to raw/resolve URLs.17    18    Hugging Face has two URL formats:19    - /blob/ URLs show the web page (HTML) - WRONG for downloading20    - /resolve/ URLs provide the raw file content - CORRECT for downloading21    22    This function converts blob URLs to resolve URLs automatically.23    24    Args:25        url: The URL to fix26        27    Returns:28        The corrected URL (or original if not a HF blob URL)29    """30    if not url:31        return url32    33    # Check if it's a Hugging Face URL with /blob/34    if 'huggingface.co' in url and '/blob/' in url:35        fixed_url = url.replace('/blob/', '/resolve/')36        return fixed_url37    38    return url39 40 41def validate_yaml_content(content, filepath=None):42    """Validate that content is YAML and not HTML.43    44    Args:45        content: The file content to validate46        filepath: Optional filepath for error messages47        48    Returns:49        tuple: (is_valid: bool, error_message: str or None)50    """51    # Check if content looks like HTML52    html_indicators = [53        '<!DOCTYPE',54        '<html',55        '<head>',56        '<body>',57        '<script>',58        '<link rel=',59        'text/html',60    ]61    62    content_lower = content.lower() if isinstance(content, str) else content.decode('utf-8', errors='ignore').lower()63    64    for indicator in html_indicators:65        if indicator.lower() in content_lower:66            error_msg = f"""67The downloaded file appears to be an HTML page, not a YAML config file.68{"File: " + filepath if filepath else ""}69 70This usually happens when using a Hugging Face '/blob/' URL instead of a '/resolve/' URL.71 72To fix this:731. Use the raw file URL with '/resolve/' instead of '/blob/'74   Example: https://huggingface.co/user/repo/resolve/main/file.yaml75   762. Or copy the raw URL from Hugging Face:77   - Go to the file on Hugging Face78   - Click "Download" or right-click and "Copy link address"79"""80            return False, error_msg81    82    return True, None83 84# Supported model types for auto-detection and manual selection85SUPPORTED_MODEL_TYPES = [86    'bs_roformer',87    'bs_roformer_custom',88    'mel_band_roformer',89    'mdx23c',90    'bandit_v2',91    'scnet',92    'htdemucs',93    'torchseg'94]95 96def detect_model_type_from_url(checkpoint_url, config_url=None):97    """Auto-detect model type from URL patterns."""98    urls_to_check = [checkpoint_url]99    if config_url:100        urls_to_check.append(config_url)101    102    combined_text = ' '.join(urls_to_check).lower()103    104    patterns = [105        (r'bs[-_]?roformer[-_]?custom|hyperace', 'bs_roformer_custom'),106        (r'bs[-_]?roformer|bsroformer', 'bs_roformer'),107        (r'mel[-_]?band[-_]?roformer|melbandroformer|mbr', 'mel_band_roformer'),108        (r'mdx23c', 'mdx23c'),109        (r'bandit[-_]?v?2?', 'bandit_v2'),110        (r'scnet', 'scnet'),111        (r'htdemucs|demucs', 'htdemucs'),112        (r'torchseg', 'torchseg'),113    ]114    115    for pattern, model_type in patterns:116        if re.search(pattern, combined_text):117            return model_type118    return None119 120def detect_model_type_from_config(config_url):121    """Try to detect model type by downloading and parsing config YAML."""122    try:123        import requests124        response = requests.get(config_url, timeout=10)125        if response.status_code == 200:126            config_data = yaml.safe_load(response.text)127            if 'model_type' in config_data:128                return config_data['model_type']129            if 'model' in config_data and 'model_type' in config_data['model']:130                return config_data['model']['model_type']131    except Exception:132        pass133    return None134 135def load_custom_models():136    """Load custom models from JSON file."""137    if not os.path.exists(CUSTOM_MODELS_FILE):138        return {}139    try:140        with open(CUSTOM_MODELS_FILE, 'r', encoding='utf-8') as f:141            return json.load(f)142    except (json.JSONDecodeError, IOError):143        return {}144 145def save_custom_models(models):146    """Save custom models to JSON file."""147    os.makedirs(os.path.dirname(CUSTOM_MODELS_FILE), exist_ok=True)148    with open(CUSTOM_MODELS_FILE, 'w', encoding='utf-8') as f:149        json.dump(models, f, indent=2, ensure_ascii=False)150 151def add_custom_model(model_name, model_type, checkpoint_url, config_url, custom_model_url=None, auto_detect=True):152    """Add a new custom model."""153    if not model_name or not model_name.strip():154        return False, "Model name is required"155    if not checkpoint_url or not checkpoint_url.strip():156        return False, "Checkpoint URL is required"157    if not config_url or not config_url.strip():158        return False, "Config URL is required"159    160    model_name = model_name.strip()161    checkpoint_url = checkpoint_url.strip()162    config_url = config_url.strip()163    custom_model_url = custom_model_url.strip() if custom_model_url else None164    165    # Auto-fix Hugging Face URLs166    checkpoint_url = fix_huggingface_url(checkpoint_url)167    config_url = fix_huggingface_url(config_url)168    if custom_model_url:169        custom_model_url = fix_huggingface_url(custom_model_url)170    171    if auto_detect and (not model_type or model_type == "auto"):172        detected_type = detect_model_type_from_url(checkpoint_url, config_url)173        if not detected_type:174            detected_type = detect_model_type_from_config(config_url)175        if detected_type:176            model_type = detected_type177        else:178            return False, "Could not auto-detect model type. Please select manually."179    180    if model_type not in SUPPORTED_MODEL_TYPES:181        return False, f"Unsupported model type: {model_type}"182    183    checkpoint_filename = os.path.basename(checkpoint_url.split('?')[0])184    config_filename = f"config_{model_name.replace(' ', '_').lower()}.yaml"185    186    models = load_custom_models()187    if model_name in models:188        return False, f"Model '{model_name}' already exists"189    190    models[model_name] = {191        'model_type': model_type,192        'checkpoint_url': checkpoint_url,193        'config_url': config_url,194        'custom_model_url': custom_model_url,195        'checkpoint_filename': checkpoint_filename,196        'config_filename': config_filename,197        'needs_conf_edit': True198    }199    save_custom_models(models)200    return True, f"Model '{model_name}' added successfully"201 202def delete_custom_model(model_name):203    """Delete a custom model."""204    models = load_custom_models()205    if model_name not in models:206        return False, f"Model '{model_name}' not found"207    208    model_config = models[model_name]209    checkpoint_path = os.path.join(CHECKPOINT_DIR, model_config.get('checkpoint_filename', ''))210    config_path = os.path.join(CHECKPOINT_DIR, model_config.get('config_filename', ''))211    212    try:213        if os.path.exists(checkpoint_path):214            os.remove(checkpoint_path)215        if os.path.exists(config_path):216            os.remove(config_path)217    except Exception:218        pass219    220    del models[model_name]221    save_custom_models(models)222    return True, f"Model '{model_name}' deleted successfully"223 224def get_custom_models_list():225    """Get list of custom model names with their types."""226    models = load_custom_models()227    return [(name, config.get('model_type', 'unknown')) for name, config in models.items()]228 229def preprocess_yaml_content(content):230    """Pre-process YAML content to fix common issues before parsing.231    232    Fixes:233    - Replaces tabs with spaces234    - Attempts to quote unquoted URLs and paths containing colons235    """236    # Replace tabs with spaces237    if '\t' in content:238        content = content.replace('\t', '    ')239    240    # Fix unquoted URLs/paths with colons in values (common issue)241    # This regex finds lines like "key: http://..." or "key: C:\path" and quotes the value242    lines = content.split('\n')243    fixed_lines = []244    245    for line in lines:246        # Skip comments and empty lines247        stripped = line.strip()248        if not stripped or stripped.startswith('#'):249            fixed_lines.append(line)250            continue251        252        # Check if line has a key-value pattern with potential problematic value253        # Match: "  key: value_with_colon_or_backslash"254        match = re.match(r'^(\s*)([^:#]+?):\s+(.+)$', line)255        if match:256            indent, key, value = match.groups()257            # Check if value contains a colon (like URL) or backslash (like Windows path)258            # and is not already quoted259            if ((':' in value or '\\' in value) and 260                not (value.startswith('"') and value.endswith('"')) and261                not (value.startswith("'") and value.endswith("'"))):262                # Quote the value263                escaped_value = value.replace('"', '\\"')264                fixed_lines.append(f'{indent}{key}: "{escaped_value}"')265                continue266        267        fixed_lines.append(line)268    269    return '\n'.join(fixed_lines)270 271 272def get_yaml_error_context(content, line_num, column=None):273    """Get context around a YAML error for better debugging."""274    lines = content.split('\n')275    if line_num < 1 or line_num > len(lines):276        return "Could not extract error context"277    278    context_lines = []279    start = max(0, line_num - 3)280    end = min(len(lines), line_num + 2)281    282    for i in range(start, end):283        line_indicator = ">>> " if i == line_num - 1 else "    "284        context_lines.append(f"{line_indicator}{i + 1}: {lines[i]}")285        286        # Add column indicator for the error line287        if i == line_num - 1 and column:288            pointer = " " * (len(str(i + 1)) + 6 + column - 1) + "^"289            context_lines.append(pointer)290    291    return '\n'.join(context_lines)292 293 294def conf_edit(config_path, chunk_size, overlap, model_name=None):295    """Edits the configuration file overlap and training flags.296    The model's native audio.chunk_size from the YAML is preserved unchanged.297    298    Args:299        config_path: Path to the config file300        chunk_size: Unused – kept for API compatibility (native YAML value is used instead)301        overlap: Overlap between chunks302        model_name: Optional model name for re-downloading config on error303    """304    full_config_path = os.path.join(CHECKPOINT_DIR, os.path.basename(config_path))305    if not os.path.exists(full_config_path):306        raise FileNotFoundError(f"Configuration file not found: {full_config_path}")307    308    # Create backup before modifying309    backup_path = full_config_path + '.backup'310    try:311        shutil.copy2(full_config_path, backup_path)312    except Exception:313        pass314    315    try:316        # Read and pre-process content317        with open(full_config_path, 'r', encoding='utf-8') as f:318            original_content = f.read()319        320        # Check if file is HTML (wrong URL was used)321        is_valid, html_error = validate_yaml_content(original_content, full_config_path)322        if not is_valid:323            # Restore backup and raise error324            if os.path.exists(backup_path):325                shutil.copy2(backup_path, full_config_path)326            raise ValueError(html_error)327        328        content = preprocess_yaml_content(original_content)329        330        # Write pre-processed content if changed331        if content != original_content:332            with open(full_config_path, 'w', encoding='utf-8') as f:333                f.write(content)334        335        # Try to parse YAML336        try:337            with open(full_config_path, 'r', encoding='utf-8') as f:338                data = yaml.load(f, Loader=yaml.SafeLoader)339        except yaml.YAMLError as e:340            # Extract error details341            error_msg = str(e)342            line_num = None343            column = None344            345            if hasattr(e, 'problem_mark') and e.problem_mark:346                line_num = e.problem_mark.line + 1347                column = e.problem_mark.column + 1348            349            # Get context around error350            context = ""351            if line_num:352                context = get_yaml_error_context(content, line_num, column)353            354            # Provide helpful error message355            error_details = f"""356YAML Parsing Error in config file: {full_config_path}357 358Error: {error_msg}359 360{"Error Context:" + chr(10) + context if context else ""}361 362Possible causes:3631. Unquoted string containing a colon (e.g., URLs like https://...)3642. Unquoted Windows path with backslashes (e.g., C:\\path\\to\\file)3653. Malformed YAML structure3664. File corruption from previous processing367 368Suggested fixes:3691. Delete the config file and let it re-download: {full_config_path}3702. Manually edit the file to quote problematic values3713. Check if the source config URL provides valid YAML372"""373            # Restore backup374            if os.path.exists(backup_path):375                try:376                    shutil.copy2(backup_path, full_config_path)377                except Exception:378                    pass379            380            raise yaml.YAMLError(error_details) from e381        382        # Validate required sections exist383        if not isinstance(data, dict):384            raise ValueError(f"Config file does not contain a valid YAML dictionary: {full_config_path}")385        386        # Apply modifications safely387        if 'use_amp' not in data:388            if 'training' not in data:389                data['training'] = {}390            data['training']['use_amp'] = True391 392        # Do NOT overwrite audio.chunk_size — keep the model's native value from the YAML.393        if 'audio' not in data:394            data['audio'] = {}395 396        if 'inference' not in data:397            data['inference'] = {}398        data['inference']['num_overlap'] = overlap399        if data['inference'].get('batch_size', 1) == 1:400            data['inference']['batch_size'] = 2401        402        # Write updated config403        with open(full_config_path, 'w', encoding='utf-8') as f:404            yaml.dump(data, f, default_flow_style=False, sort_keys=False, Dumper=yaml.Dumper)405        406        # Remove backup on success407        if os.path.exists(backup_path):408            try:409                os.remove(backup_path)410            except Exception:411                pass412                413    except Exception as e:414        # Restore backup on any error415        if os.path.exists(backup_path):416            try:417                shutil.copy2(backup_path, full_config_path)418                os.remove(backup_path)419            except Exception:420                pass421        raise422 423 424def redownload_config(model_name):425    """Re-download a corrupted config file for a custom model.426    427    Args:428        model_name: Name of the custom model429        430    Returns:431        tuple: (success: bool, message: str)432    """433    custom_models = load_custom_models()434    if model_name not in custom_models:435        return False, f"Model '{model_name}' not found in custom models"436    437    config = custom_models[model_name]438    config_url = config.get('config_url')439    config_filename = config.get('config_filename')440    441    if not config_url or not config_filename:442        return False, f"Config URL or filename not found for model '{model_name}'"443    444    config_path = os.path.join(CHECKPOINT_DIR, config_filename)445    446    # Auto-fix URL before re-downloading447    config_url = fix_huggingface_url(config_url)448    449    # Delete existing config450    if os.path.exists(config_path):451        try:452            os.remove(config_path)453        except Exception as e:454            return False, f"Could not delete config file: {e}"455    456    # Re-download with validation457    try:458        download_file(config_url, target_filename=config_filename, validate_yaml=True)459        return True, f"Config file re-downloaded successfully: {config_filename}"460    except Exception as e:461        return False, f"Failed to re-download config: {e}"462 463def download_file(url, path=None, target_filename=None, validate_yaml=True):464    """Downloads a file from a URL with progress reporting.465    466    Args:467        url: The URL to download from.468        path: The directory to save the file to. Defaults to CHECKPOINT_DIR.469        target_filename: Optional custom filename to save as. If None, uses filename from URL.470        validate_yaml: If True and file is .yaml/.yml, validate it's not HTML471    """472    import requests473    474    # Auto-fix Hugging Face URLs475    url = fix_huggingface_url(url)476    477    encoded_url = quote(url, safe=':/')478    if path is None:479        path = CHECKPOINT_DIR480    os.makedirs(path, exist_ok=True)481    # Use custom target filename if provided, otherwise extract from URL482    filename = target_filename if target_filename else os.path.basename(encoded_url)483    file_path = os.path.join(path, filename)484    if os.path.exists(file_path):485        print(f"File '{filename}' already exists at '{path}'.")486        return487    try:488        response = requests.get(url, stream=True)489        if response.status_code == 200:490            # Get total file size for progress reporting491            total_size = int(response.headers.get('content-length', 0))492            493            # For YAML files, download to memory first and validate494            is_yaml_file = filename.lower().endswith(('.yaml', '.yml'))495            496            if is_yaml_file and validate_yaml:497                content = response.content498                is_valid, error_msg = validate_yaml_content(content, file_path)499                if not is_valid:500                    print(f"ERROR: Downloaded file is not valid YAML!")501                    print(error_msg)502                    raise ValueError(f"Downloaded file is HTML, not YAML. URL may be incorrect: {url}")503                504                with open(file_path, 'wb') as f:505                    f.write(content)506            else:507                # Download with progress reporting508                downloaded_size = 0509                last_percent = -1510                print(f"[SESA_DOWNLOAD]START:{filename}", flush=True)511                512                with open(file_path, 'wb') as f:513                    for chunk in response.iter_content(chunk_size=8192):514                        f.write(chunk)515                        downloaded_size += len(chunk)516                        517                        # Report download progress518                        if total_size > 0:519                            percent = int((downloaded_size / total_size) * 100)520                            if percent != last_percent:521                                last_percent = percent522                                # Format: [SESA_DOWNLOAD]filename:percent523                                print(f"[SESA_DOWNLOAD]{filename}:{percent}", flush=True)524                525                print(f"[SESA_DOWNLOAD]END:{filename}", flush=True)526        else:527            print(f"Error downloading '{filename}': Status code {response.status_code}")528    except Exception as e:529        print(f"Error downloading file '{filename}' from '{url}': {e}")530        raise531 532# Model konfigurasyonlarını kategorize bir sözlükte tut533MODEL_CONFIGS = {534    "Vocal Models": {535        # === NEW MODELS (en üstte) ===536        'bs_roformer_voc_hyperacev2 (by unwa)': {537            'model_type': 'bs_roformer_custom',538            'config_path': os.path.join(CHECKPOINT_DIR, 'config_hyperacev2_voc.yaml'),539            'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_voc_hyperacev2.ckpt'),540            'download_urls': [541                ('https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/v2_voc/config.yaml', 'config_hyperacev2_voc.yaml'),542                'https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/v2_voc/bs_roformer_voc_hyperacev2.ckpt'543            ],544            'custom_model_url': 'https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/v2_voc/bs_roformer.py',545            'needs_conf_edit': True546        },547        'BS-Roformer-Resurrection (by unwa)': {548            'model_type': 'bs_roformer',549            'config_path': os.path.join(CHECKPOINT_DIR, 'BS-Roformer-Resurrection-Config.yaml'),550            'start_check_point': os.path.join(CHECKPOINT_DIR, 'BS-Roformer-Resurrection.ckpt'),551            'download_urls': [552                'https://huggingface.co/pcunwa/BS-Roformer-Resurrection/resolve/main/BS-Roformer-Resurrection-Config.yaml',553                'https://huggingface.co/pcunwa/BS-Roformer-Resurrection/resolve/main/BS-Roformer-Resurrection.ckpt'554            ],555            'needs_conf_edit': True556        },557        'bs_roformer_revive3e (by unwa)': {558            'model_type': 'bs_roformer',559            'config_path': os.path.join(CHECKPOINT_DIR, 'config_revive.yaml'),560            'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_revive3e.ckpt'),561            'download_urls': [562                ('https://huggingface.co/pcunwa/BS-Roformer-Revive/resolve/main/config.yaml', 'config_revive.yaml'),563                'https://huggingface.co/pcunwa/BS-Roformer-Revive/resolve/main/bs_roformer_revive3e.ckpt'564            ],565            'needs_conf_edit': True566        },567        'bs_roformer_revive2 (by unwa)': {568            'model_type': 'bs_roformer',569            'config_path': os.path.join(CHECKPOINT_DIR, 'config_revive.yaml'),570            'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_revive2.ckpt'),571            'download_urls': [572                ('https://huggingface.co/pcunwa/BS-Roformer-Revive/resolve/main/config.yaml', 'config_revive.yaml'),573                'https://huggingface.co/pcunwa/BS-Roformer-Revive/resolve/main/bs_roformer_revive2.ckpt'574            ],575            'needs_conf_edit': True576        },577        'bs_roformer_revive (by unwa)': {578            'model_type': 'bs_roformer',579            'config_path': os.path.join(CHECKPOINT_DIR, 'config_revive.yaml'),580            'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_revive.ckpt'),581            'download_urls': [582                ('https://huggingface.co/pcunwa/BS-Roformer-Revive/resolve/main/config.yaml', 'config_revive.yaml'),583                'https://huggingface.co/pcunwa/BS-Roformer-Revive/resolve/main/bs_roformer_revive.ckpt'584            ],585            'needs_conf_edit': True586        },587        'karaoke_bs_roformer_anvuew (by anvuew)': {588            'model_type': 'bs_roformer',589            'config_path': os.path.join(CHECKPOINT_DIR, 'karaoke_bs_roformer_anvuew.yaml'),590            'start_check_point': os.path.join(CHECKPOINT_DIR, 'karaoke_bs_roformer_anvuew.ckpt'),591            'download_urls': [592                'https://huggingface.co/anvuew/karaoke_bs_roformer/resolve/main/karaoke_bs_roformer_anvuew.yaml',593                'https://huggingface.co/anvuew/karaoke_bs_roformer/resolve/main/karaoke_bs_roformer_anvuew.ckpt'594            ],595            'needs_conf_edit': True596        },597        # === EXISTING MODELS ===598        'VOCALS-big_beta6X (by Unwa)': {599            'model_type': 'mel_band_roformer',600            'config_path': os.path.join(CHECKPOINT_DIR, 'big_beta6x.yaml'),601            'start_check_point': os.path.join(CHECKPOINT_DIR, 'big_beta6x.ckpt'),602            'download_urls': [603                'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/big_beta6x.yaml',604                'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/big_beta6x.ckpt'605            ],606            'needs_conf_edit': False607        },608        'VOCALS-big_beta6 (by Unwa)': {609            'model_type': 'mel_band_roformer',610            'config_path': os.path.join(CHECKPOINT_DIR, 'big_beta6.yaml'),611            'start_check_point': os.path.join(CHECKPOINT_DIR, 'big_beta6.ckpt'),612            'download_urls': [613                'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/big_beta6.yaml',614                'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/big_beta6.ckpt'615            ],616            'needs_conf_edit': False617        },618        'VOCALS-Mel-Roformer FT 3 Preview (by unwa)': {619            'model_type': 'mel_band_roformer',620            'config_path': os.path.join(CHECKPOINT_DIR, 'config_kimmel_unwa_ft.yaml'),621            'start_check_point': os.path.join(CHECKPOINT_DIR, 'kimmel_unwa_ft3_prev.ckpt'),622            'download_urls': [623                'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/config_kimmel_unwa_ft.yaml',624                'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/kimmel_unwa_ft3_prev.ckpt'625            ],626            'needs_conf_edit': False627        },628        'VOCALS-InstVocHQ': {629            'model_type': 'mdx23c',630            'config_path': os.path.join(CHECKPOINT_DIR, 'config_vocals_mdx23c.yaml'),631            'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_vocals_mdx23c_sdr_10.17.ckpt'),632            'download_urls': [633                'https://raw.githubusercontent.com/ZFTurbo/Music-Source-Separation-Training/main/configs/config_vocals_mdx23c.yaml',634                'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v1.0.0/model_vocals_mdx23c_sdr_10.17.ckpt'635            ],636            'needs_conf_edit': False637        },638        'VOCALS-MelBand-Roformer (by KimberleyJSN)': {639            'model_type': 'mel_band_roformer',640            'config_path': os.path.join(CHECKPOINT_DIR, 'config_vocals_mel_band_roformer_kj.yaml'),641            'start_check_point': os.path.join(CHECKPOINT_DIR, 'MelBandRoformer.ckpt'),642            'download_urls': [643                'https://raw.githubusercontent.com/ZFTurbo/Music-Source-Separation-Training/main/configs/KimberleyJensen/config_vocals_mel_band_roformer_kj.yaml',644                'https://huggingface.co/KimberleyJSN/melbandroformer/resolve/main/MelBandRoformer.ckpt'645            ],646            'needs_conf_edit': True647        },648        'VOCALS-BS-Roformer_1297 (by viperx)': {649            'model_type': 'bs_roformer',650            'config_path': os.path.join(CHECKPOINT_DIR, 'model_bs_roformer_ep_317_sdr_12.9755.yaml'),651            'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_bs_roformer_ep_317_sdr_12.9755.ckpt'),652            'download_urls': [653                'https://raw.githubusercontent.com/ZFTurbo/Music-Source-Separation-Training/main/configs/viperx/model_bs_roformer_ep_317_sdr_12.9755.yaml',654                'https://github.com/TRvlvr/model_repo/releases/download/all_public_uvr_models/model_bs_roformer_ep_317_sdr_12.9755.ckpt'655            ],656            'needs_conf_edit': True657        },658        'VOCALS-BS-Roformer_1296 (by viperx)': {659            'model_type': 'bs_roformer',660            'config_path': os.path.join(CHECKPOINT_DIR, 'model_bs_roformer_ep_368_sdr_12.9628.yaml'),661            'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_bs_roformer_ep_368_sdr_12.9628.ckpt'),662            'download_urls': [663                'https://github.com/TRvlvr/model_repo/releases/download/all_public_uvr_models/model_bs_roformer_ep_368_sdr_12.9628.ckpt',664                'https://raw.githubusercontent.com/TRvlvr/application_data/main/mdx_model_data/mdx_c_configs/model_bs_roformer_ep_368_sdr_12.9628.yaml'665            ],666            'needs_conf_edit': True667        },668        'VOCALS-BS-RoformerLargev1 (by unwa)': {669            'model_type': 'bs_roformer',670            'config_path': os.path.join(CHECKPOINT_DIR, 'config_bsrofoL.yaml'),671            'start_check_point': os.path.join(CHECKPOINT_DIR, 'BS-Roformer_LargeV1.ckpt'),672            'download_urls': [673                'https://huggingface.co/jarredou/unwa_bs_roformer/resolve/main/BS-Roformer_LargeV1.ckpt',674                'https://huggingface.co/jarredou/unwa_bs_roformer/raw/main/config_bsrofoL.yaml'675            ],676            'needs_conf_edit': True677        },678        'VOCALS-Mel-Roformer big beta 4 (by unwa)': {679            'model_type': 'mel_band_roformer',680            'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_big_beta4.yaml'),681            'start_check_point': os.path.join(CHECKPOINT_DIR, 'melband_roformer_big_beta4.ckpt'),682            'download_urls': [683                'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/melband_roformer_big_beta4.ckpt',684                'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/raw/main/config_melbandroformer_big_beta4.yaml'685            ],686            'needs_conf_edit': True687        },688        'VOCALS-Melband-Roformer BigBeta5e (by unwa)': {689            'model_type': 'mel_band_roformer',690            'config_path': os.path.join(CHECKPOINT_DIR, 'big_beta5e.yaml'),691            'start_check_point': os.path.join(CHECKPOINT_DIR, 'big_beta5e.ckpt'),692            'download_urls': [693                'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/big_beta5e.ckpt',694                'https://huggingface.co/pcunwa/Mel-Band-Roformer-big/resolve/main/big_beta5e.yaml'695            ],696            'needs_conf_edit': True697        },698        'VOCALS-VitLarge23 (by ZFTurbo)': {699            'model_type': 'segm_models',700            'config_path': os.path.join(CHECKPOINT_DIR, 'config_vocals_segm_models.yaml'),701            'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_vocals_segm_models_sdr_9.77.ckpt'),702            'download_urls': [703                'https://raw.githubusercontent.com/ZFTurbo/Music-Source-Separation-Training/refs/heads/main/configs/config_vocals_segm_models.yaml',704                'https://github.com/ZFTurbo/Music-Source-Separation-Training/releases/download/v1.0.0/model_vocals_segm_models_sdr_9.77.ckpt'705            ],706            'needs_conf_edit': False707        },708        'VOCALS-MelBand-Roformer Kim FT (by Unwa)': {709            'model_type': 'mel_band_roformer',710            'config_path': os.path.join(CHECKPOINT_DIR, 'config_kimmel_unwa_ft.yaml'),711            'start_check_point': os.path.join(CHECKPOINT_DIR, 'kimmel_unwa_ft.ckpt'),712            'download_urls': [713                'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/kimmel_unwa_ft.ckpt',714                'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/config_kimmel_unwa_ft.yaml'715            ],716            'needs_conf_edit': True717        },718        'VOCALS-MelBand-Roformer (by Becruily)': {719            'model_type': 'mel_band_roformer',720            'config_path': os.path.join(CHECKPOINT_DIR, 'config_instrumental_becruily.yaml'),721            'start_check_point': os.path.join(CHECKPOINT_DIR, 'mel_band_roformer_vocals_becruily.ckpt'),722            'download_urls': [723                'https://huggingface.co/becruily/mel-band-roformer-vocals/resolve/main/config_vocals_becruily.yaml',724                'https://huggingface.co/becruily/mel-band-roformer-vocals/resolve/main/mel_band_roformer_vocals_becruily.ckpt'725            ],726            'needs_conf_edit': True727        },728        'VOCALS-Male Female-BS-RoFormer Male Female Beta 7_2889 (by aufr33)': {729            'model_type': 'bs_roformer',730            'config_path': os.path.join(CHECKPOINT_DIR, 'config_chorus_male_female_bs_roformer.yaml'),731            'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_male_female_by_aufr33_sdr_7.2889.ckpt'),732            'download_urls': [733                'https://huggingface.co/RareSirMix/AIModelRehosting/resolve/main/bs_roformer_male_female_by_aufr33_sdr_7.2889.ckpt',734                'https://huggingface.co/Sucial/Chorus_Male_Female_BS_Roformer/resolve/main/config_chorus_male_female_bs_roformer.yaml'735            ],736            'needs_conf_edit': True737        },738        'VOCALS-MelBand-Roformer Kim FT 2 (by Unwa)': {739            'model_type': 'mel_band_roformer',740            'config_path': os.path.join(CHECKPOINT_DIR, 'config_kimmel_unwa_ft.yaml'),741            'start_check_point': os.path.join(CHECKPOINT_DIR, 'kimmel_unwa_ft2.ckpt'),742            'download_urls': [743                'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/config_kimmel_unwa_ft.yaml',744                'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/kimmel_unwa_ft2.ckpt'745            ],746            'needs_conf_edit': True747        },748        'voc_gaboxBSroformer (by Gabox)': {749            'model_type': 'bs_roformer',750            'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gaboxBSroformer.yaml'),751            'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_gaboxBSR.ckpt'),752            'download_urls': [753                'https://huggingface.co/GaboxR67/BSRoformerVocTest/resolve/main/voc_gaboxBSroformer.yaml',754                'https://huggingface.co/GaboxR67/BSRoformerVocTest/resolve/main/voc_gaboxBSR.ckpt'755            ],756            'needs_conf_edit': True757        },758        'voc_gaboxMelReformer (by Gabox)': {759            'model_type': 'mel_band_roformer',760            'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),761            'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_gabox.ckpt'),762            'download_urls': [763                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',764                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.ckpt'765            ],766            'needs_conf_edit': True767        },768        'voc_gaboxMelReformerFV1 (by Gabox)': {769            'model_type': 'mel_band_roformer',770            'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),771            'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_gaboxFv1.ckpt'),772            'download_urls': [773                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',774                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gaboxFv1.ckpt'775            ],776            'needs_conf_edit': True777        },778        'voc_gaboxMelReformerFV2 (by Gabox)': {779            'model_type': 'mel_band_roformer',780            'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),781            'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_gaboxFv2.ckpt'),782            'download_urls': [783                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',784                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gaboxFv2.ckpt'785            ],786            'needs_conf_edit': True787        },788        'VOCALS-MelBand-Roformer Kim FT 2 Blendless (by unwa)': {789            'model_type': 'mel_band_roformer',790            'config_path': os.path.join(CHECKPOINT_DIR, 'config_kimmel_unwa_ft.yaml'),791            'start_check_point': os.path.join(CHECKPOINT_DIR, 'kimmel_unwa_ft2_bleedless.ckpt'),792            'download_urls': [793                'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/config_kimmel_unwa_ft.yaml',794                'https://huggingface.co/pcunwa/Kim-Mel-Band-Roformer-FT/resolve/main/kimmel_unwa_ft2_bleedless.ckpt'795            ],796            'needs_conf_edit': True797        },798        'Voc_Fv3 (by Gabox)': {799            'model_type': 'mel_band_roformer',800            'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),801            'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_Fv3.ckpt'),802            'download_urls': [803                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',804                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_Fv3.ckpt'805            ],806            'needs_conf_edit': True807        },808        'FullnessVocalModel (by Amane)': {809            'model_type': 'mel_band_roformer',810            'config_path': os.path.join(CHECKPOINT_DIR, 'config.yaml'),811            'start_check_point': os.path.join(CHECKPOINT_DIR, 'FullnessVocalModel.ckpt'),812            'download_urls': [813                'https://huggingface.co/Aname-Tommy/MelBandRoformers/blob/main/config.yaml',814                'https://huggingface.co/Aname-Tommy/MelBandRoformers/blob/main/FullnessVocalModel.ckpt'815            ],816            'needs_conf_edit': True817        },818        'voc_fv4 (by Gabox)': {819            'model_type': 'mel_band_roformer',820            'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),821            'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_fv4.ckpt'),822            'download_urls': [823                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',824                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_fv4.ckpt'825            ],826            'needs_conf_edit': True827        },828        'voc_fv5 (by Gabox)': {829            'model_type': 'mel_band_roformer',830            'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),831            'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_fv5.ckpt'),832            'download_urls': [833                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',834                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_fv5.ckpt'835            ],836            'needs_conf_edit': True837        },838        'voc_fv6 (by Gabox)': {839            'model_type': 'mel_band_roformer',840            'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),841            'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_fv6.ckpt'),842            'download_urls': [843                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',844                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_fv6.ckpt'845            ],846            'needs_conf_edit': True847        },848        'voc_fv7 (by Gabox)': {849            'model_type': 'mel_band_roformer',850            'config_path': os.path.join(CHECKPOINT_DIR, 'v7.yaml'),851            'start_check_point': os.path.join(CHECKPOINT_DIR, 'voc_fv7.ckpt'),852            'download_urls': [853                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/v7.yaml',854                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_fv7.ckpt'855            ],856            'needs_conf_edit': True857        },858        'vocfv7beta1 (by Gabox)': {859            'model_type': 'mel_band_roformer',860            'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),861            'start_check_point': os.path.join(CHECKPOINT_DIR, 'vocfv7beta1.ckpt'),862            'download_urls': [863                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',864                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/experimental/vocfv7beta1.ckpt'865            ],866            'needs_conf_edit': True867        },868        'vocfv7beta2 (by Gabox)': {869            'model_type': 'mel_band_roformer',870            'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),871            'start_check_point': os.path.join(CHECKPOINT_DIR, 'vocfv7beta2.ckpt'),872            'download_urls': [873                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',874                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/experimental/vocfv7beta2.ckpt'875            ],876            'needs_conf_edit': True877        },878        'vocfv7beta3 (by Gabox)': {879            'model_type': 'mel_band_roformer',880            'config_path': os.path.join(CHECKPOINT_DIR, 'voc_gabox.yaml'),881            'start_check_point': os.path.join(CHECKPOINT_DIR, 'vocfv7beta3.ckpt'),882            'download_urls': [883                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/vocals/voc_gabox.yaml',884                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/experimental/vocfv7beta3.ckpt'885            ],886            'needs_conf_edit': True887        },888        'MelBandRoformerSYHFTV3Epsilon (by SYH99999)': {889            'model_type': 'mel_band_roformer',890            'config_path': os.path.join(CHECKPOINT_DIR, 'config_vocals_mel_band_roformer_ft.yaml'),891            'start_check_point': os.path.join(CHECKPOINT_DIR, 'MelBandRoformerSYHFTV3Epsilon.ckpt'),892            'download_urls': [893                'https://huggingface.co/SYH99999/MelBandRoformerSYHFT/resolve/main/config_vocals_mel_band_roformer_ft.yaml',894                'https://huggingface.co/SYH99999/MelBandRoformerSYHFTV3Epsilon/resolve/main/MelBandRoformerSYHFTV3Epsilon.ckpt'895            ],896            'needs_conf_edit': True897        },898        'MelBandRoformerBigSYHFTV1 (by SYH99999)': {899            'model_type': 'mel_band_roformer',900            'config_path': os.path.join(CHECKPOINT_DIR, 'config_big_syhft.yaml'),901            'start_check_point': os.path.join(CHECKPOINT_DIR, 'MelBandRoformerBigSYHFTV1.ckpt'),902            'download_urls': [903                'https://huggingface.co/SYH99999/MelBandRoformerBigSYHFTV1Fast/resolve/main/config.yaml',904                'https://huggingface.co/SYH99999/MelBandRoformerBigSYHFTV1Fast/resolve/main/MelBandRoformerBigSYHFTV1.ckpt'905            ],906            'needs_conf_edit': True907        },908        'model_chorus_bs_roformer_ep_146 (by Sucial)': {909            'model_type': 'bs_roformer',910            'config_path': os.path.join(CHECKPOINT_DIR, 'config_chorus_male_female_bs_roformer.yaml'),911            'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_chorus_bs_roformer_ep_146_sdr_23.8613.ckpt'),912            'download_urls': [913                'https://huggingface.co/Sucial/Chorus_Male_Female_BS_Roformer/resolve/main/config_chorus_male_female_bs_roformer.yaml',914                'https://huggingface.co/Sucial/Chorus_Male_Female_BS_Roformer/resolve/main/model_chorus_bs_roformer_ep_146_sdr_23.8613.ckpt'915            ],916            'needs_conf_edit': True917        },918        'model_chorus_bs_roformer_ep_267 (by Sucial)': {919            'model_type': 'bs_roformer',920            'config_path': os.path.join(CHECKPOINT_DIR, 'config_chorus_male_female_bs_roformer.yaml'),921            'start_check_point': os.path.join(CHECKPOINT_DIR, 'model_chorus_bs_roformer_ep_267_sdr_24.1275.ckpt'),922            'download_urls': [923                'https://huggingface.co/Sucial/Chorus_Male_Female_BS_Roformer/resolve/main/config_chorus_male_female_bs_roformer.yaml',924                'https://huggingface.co/Sucial/Chorus_Male_Female_BS_Roformer/resolve/main/model_chorus_bs_roformer_ep_267_sdr_24.1275.ckpt'925            ],926            'needs_conf_edit': True927        },928        'BS-Rofo-SW-Fixed (by jarredou)': {929            'model_type': 'bs_roformer',930            'config_path': os.path.join(CHECKPOINT_DIR, 'BS-Rofo-SW-Fixed.yaml'),931            'start_check_point': os.path.join(CHECKPOINT_DIR, 'BS-Rofo-SW-Fixed.ckpt'),932            'download_urls': [933                'https://huggingface.co/jarredou/BS-ROFO-SW-Fixed/resolve/main/BS-Rofo-SW-Fixed.yaml',934                'https://huggingface.co/jarredou/BS-ROFO-SW-Fixed/resolve/main/BS-Rofo-SW-Fixed.ckpt'935            ],936            'needs_conf_edit': True937        },938        'BS_ResurrectioN (by Gabox)': {939            'model_type': 'bs_roformer',940            'config_path': os.path.join(CHECKPOINT_DIR, 'BS-Roformer-Resurrection-Inst-Config.yaml'),941            'start_check_point': os.path.join(CHECKPOINT_DIR, 'BS_ResurrectioN.ckpt'),942            'download_urls': [943                'https://huggingface.co/pcunwa/BS-Roformer-Resurrection/resolve/main/BS-Roformer-Resurrection-Inst-Config.yaml',944                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/experimental/BS_ResurrectioN.ckpt'945            ],946            'needs_conf_edit': True947        }948    },949    "Instrumental Models": {950        # === NEW MODELS (en üstte) ===951        'Neo_InstVFX (by natanworkspace)': {952            'model_type': 'mel_band_roformer',953            'config_path': os.path.join(CHECKPOINT_DIR, 'config_neo_inst.yaml'),954            'start_check_point': os.path.join(CHECKPOINT_DIR, 'Neo_InstVFX.ckpt'),955            'download_urls': [956                'https://huggingface.co/natanworkspace/melband_roformer/resolve/main/config_neo_inst.yaml',957                'https://huggingface.co/natanworkspace/melband_roformer/resolve/main/Neo_InstVFX.ckpt'958            ],959            'needs_conf_edit': True960        },961        'BS-Roformer-Resurrection-Inst (by unwa)': {962            'model_type': 'bs_roformer',963            'config_path': os.path.join(CHECKPOINT_DIR, 'BS-Roformer-Resurrection-Inst-Config.yaml'),964            'start_check_point': os.path.join(CHECKPOINT_DIR, 'BS-Roformer-Resurrection-Inst.ckpt'),965            'download_urls': [966                'https://huggingface.co/pcunwa/BS-Roformer-Resurrection/resolve/main/BS-Roformer-Resurrection-Inst-Config.yaml',967                'https://huggingface.co/pcunwa/BS-Roformer-Resurrection/resolve/main/BS-Roformer-Resurrection-Inst.ckpt'968            ],969            'needs_conf_edit': True970        },971        'bs_roformer_inst_hyperacev2 (by unwa)': {972            'model_type': 'bs_roformer_custom',973            'config_path': os.path.join(CHECKPOINT_DIR, 'config_hyperacev2_inst.yaml'),974            'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_inst_hyperacev2.ckpt'),975            'download_urls': [976                ('https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/v2_inst/config.yaml', 'config_hyperacev2_inst.yaml'),977                'https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/v2_inst/bs_roformer_inst_hyperacev2.ckpt'978            ],979            'custom_model_url': 'https://huggingface.co/pcunwa/BS-Roformer-HyperACE/resolve/main/v2_inst/bs_roformer.py',980            'needs_conf_edit': True981        },982        'BS-Roformer-Large-Inst (by unwa)': {983            'model_type': 'bs_roformer_custom',984            'config_path': os.path.join(CHECKPOINT_DIR, 'config_bs_large_inst.yaml'),985            'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_large_v2_inst.ckpt'),986            'download_urls': [987                ('https://huggingface.co/pcunwa/BS-Roformer-Large-Inst/resolve/main/config.yaml', 'config_bs_large_inst.yaml'),988                'https://huggingface.co/pcunwa/BS-Roformer-Large-Inst/resolve/main/bs_large_v2_inst.ckpt'989            ],990            'custom_model_url': 'https://huggingface.co/pcunwa/BS-Roformer-Large-Inst/resolve/main/bs_roformer.py',991            'needs_conf_edit': True992        },993        'bs_roformer_fno (by unwa)': {994            'model_type': 'bs_roformer_custom',995            'config_path': os.path.join(CHECKPOINT_DIR, 'bsrofo_fno.yaml'),996            'start_check_point': os.path.join(CHECKPOINT_DIR, 'bs_roformer_fno.ckpt'),997            'download_urls': [998                'https://huggingface.co/pcunwa/BS-Roformer-Inst-FNO/resolve/main/bsrofo_fno.yaml',999                'https://huggingface.co/pcunwa/BS-Roformer-Inst-FNO/resolve/main/bs_roformer_fno.ckpt'1000            ],1001            'custom_model_url': 'https://huggingface.co/listra92/MyModels/resolve/main/misc/bs_roformer.py',1002            'needs_conf_edit': True1003        },1004        'Rifforge_final_sdr_14.24 (by meskvlla33)': {1005            'model_type': 'mel_band_roformer',1006            'config_path': os.path.join(CHECKPOINT_DIR, 'config_rifforge_full_mesk.yaml'),1007            'start_check_point': os.path.join(CHECKPOINT_DIR, 'rifforge_full_sdr_14.2436.ckpt'),1008            'download_urls': [1009                'https://huggingface.co/meskvlla33/rifforge/resolve/main/config_rifforge_full_mesk.yaml',1010                'https://huggingface.co/meskvlla33/rifforge/resolve/main/rifforge_full_sdr_14.2436.ckpt'1011            ],1012            'needs_conf_edit': True1013        },1014        # === EXISTING MODELS ===1015        'Inst_GaboxFv8 (by Gabox)': {1016            'model_type': 'mel_band_roformer',1017            'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),1018            'start_check_point': os.path.join(CHECKPOINT_DIR, 'Inst_GaboxFv8.ckpt'),1019            'download_urls': [1020                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/Inst_GaboxFv8.ckpt',1021                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml'1022            ],1023            'needs_conf_edit': True1024        },   1025        'INST-Mel-Roformer v1 (by unwa)': {1026            'model_type': 'mel_band_roformer',1027            'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_inst.yaml'),1028            'start_check_point': os.path.join(CHECKPOINT_DIR, 'melband_roformer_inst_v1.ckpt'),1029            'download_urls': [1030                'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/resolve/main/melband_roformer_inst_v1.ckpt',1031                'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/raw/main/config_melbandroformer_inst.yaml'1032            ],1033            'needs_conf_edit': True1034        },1035        'INST-Mel-Roformer v1e+ (by unwa)': {1036            'model_type': 'mel_band_roformer',1037            'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_inst.yaml'),1038            'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_v1e_plus.ckpt'),1039            'download_urls': [1040                'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/resolve/main/inst_v1e_plus.ckpt',1041                'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/raw/main/config_melbandroformer_inst.yaml'1042            ],1043            'needs_conf_edit': True1044        },1045        'INST-Mel-Roformer v1+ (by unwa)': {1046            'model_type': 'mel_band_roformer',1047            'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_inst.yaml'),1048            'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_v1_plus_test.ckpt'),1049            'download_urls': [1050                'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/resolve/main/inst_v1_plus_test.ckpt',1051                'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/raw/main/config_melbandroformer_inst.yaml'1052            ],1053            'needs_conf_edit': True1054        },1055        'INST-Mel-Roformer v2 (by unwa)': {1056            'model_type': 'mel_band_roformer',1057            'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_inst_v2.yaml'),1058            'start_check_point': os.path.join(CHECKPOINT_DIR, 'melband_roformer_inst_v2.ckpt'),1059            'download_urls': [1060                'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/resolve/main/melband_roformer_inst_v2.ckpt',1061                'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/raw/main/config_melbandroformer_inst_v2.yaml'1062            ],1063            'needs_conf_edit': True1064        },1065        'INST-VOC-Mel-Roformer a.k.a. duality (by unwa)': {1066            'model_type': 'mel_band_roformer',1067            'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_instvoc_duality.yaml'),1068            'start_check_point': os.path.join(CHECKPOINT_DIR, 'melband_roformer_instvoc_duality_v1.ckpt'),1069            'download_urls': [1070                'https://huggingface.co/pcunwa/Mel-Band-Roformer-InstVoc-Duality/resolve/main/melband_roformer_instvoc_duality_v1.ckpt',1071                'https://huggingface.co/pcunwa/Mel-Band-Roformer-InstVoc-Duality/raw/main/config_melbandroformer_instvoc_duality.yaml'1072            ],1073            'needs_conf_edit': True1074        },1075        'INST-VOC-Mel-Roformer a.k.a. duality v2 (by unwa)': {1076            'model_type': 'mel_band_roformer',1077            'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_instvoc_duality.yaml'),1078            'start_check_point': os.path.join(CHECKPOINT_DIR, 'melband_roformer_instvox_duality_v2.ckpt'),1079            'download_urls': [1080                'https://huggingface.co/pcunwa/Mel-Band-Roformer-InstVoc-Duality/resolve/main/melband_roformer_instvox_duality_v2.ckpt',1081                'https://huggingface.co/pcunwa/Mel-Band-Roformer-InstVoc-Duality/raw/main/config_melbandroformer_instvoc_duality.yaml'1082            ],1083            'needs_conf_edit': True1084        },1085        'INST-MelBand-Roformer (by Becruily)': {1086            'model_type': 'mel_band_roformer',1087            'config_path': os.path.join(CHECKPOINT_DIR, 'config_instrumental_becruily.yaml'),1088            'start_check_point': os.path.join(CHECKPOINT_DIR, 'mel_band_roformer_instrumental_becruily.ckpt'),1089            'download_urls': [1090                'https://huggingface.co/becruily/mel-band-roformer-instrumental/resolve/main/config_instrumental_becruily.yaml',1091                'https://huggingface.co/becruily/mel-band-roformer-instrumental/resolve/main/mel_band_roformer_instrumental_becruily.ckpt'1092            ],1093            'needs_conf_edit': True1094        },1095        'inst_v1e (by unwa)': {1096            'model_type': 'mel_band_roformer',1097            'config_path': os.path.join(CHECKPOINT_DIR, 'config_melbandroformer_inst.yaml'),1098            'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_v1e.ckpt'),1099            'download_urls': [1100                'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/resolve/main/inst_v1e.ckpt',1101                'https://huggingface.co/pcunwa/Mel-Band-Roformer-Inst/resolve/main/config_melbandroformer_inst.yaml'1102            ],1103            'needs_conf_edit': True1104        },1105        'inst_gabox (by Gabox)': {1106            'model_type': 'mel_band_roformer',1107            'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),1108            'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_gabox.ckpt'),1109            'download_urls': [1110                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',1111                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.ckpt'1112            ],1113            'needs_conf_edit': True1114        },1115        'inst_gaboxBV1 (by Gabox)': {1116            'model_type': 'mel_band_roformer',1117            'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),1118            'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_gaboxBv1.ckpt'),1119            'download_urls': [1120                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',1121                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gaboxBv1.ckpt'1122            ],1123            'needs_conf_edit': True1124        },1125        'inst_gaboxBV2 (by Gabox)': {1126            'model_type': 'mel_band_roformer',1127            'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),1128            'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_gaboxBv2.ckpt'),1129            'download_urls': [1130                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',1131                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gaboxBv2.ckpt'1132            ],1133            'needs_conf_edit': True1134        },1135        'inst_gaboxBFV1 (by Gabox)': {1136            'model_type': 'mel_band_roformer',1137            'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),1138            'start_check_point': os.path.join(CHECKPOINT_DIR, 'gaboxFv1.ckpt'),1139            'download_urls': [1140                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',1141                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gaboxFv1.ckpt'1142            ],1143            'needs_conf_edit': True1144        },1145        'inst_gaboxFV2 (by Gabox)': {1146            'model_type': 'mel_band_roformer',1147            'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),1148            'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_gaboxFv2.ckpt'),1149            'download_urls': [1150                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',1151                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gaboxFv2.ckpt'1152            ],1153            'needs_conf_edit': True1154        },1155        'inst_Fv3 (by Gabox)': {1156            'model_type': 'mel_band_roformer',1157            'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),1158            'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_gaboxFv3.ckpt'),1159            'download_urls': [1160                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',1161                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gaboxFv3.ckpt'1162            ],1163            'needs_conf_edit': True1164        },1165        'Intrumental_Gabox (by Gabox)': {1166            'model_type': 'mel_band_roformer',1167            'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),1168            'start_check_point': os.path.join(CHECKPOINT_DIR, 'intrumental_gabox.ckpt'),1169            'download_urls': [1170                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',1171                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/intrumental_gabox.ckpt'1172            ],1173            'needs_conf_edit': True1174        },1175        'inst_Fv4Noise (by Gabox)': {1176            'model_type': 'mel_band_roformer',1177            'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),1178            'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_Fv4Noise.ckpt'),1179            'download_urls': [1180                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',1181                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_Fv4Noise.ckpt'1182            ],1183            'needs_conf_edit': True1184        },1185        'INSTV5 (by Gabox)': {1186            'model_type': 'mel_band_roformer',1187            'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),1188            'start_check_point': os.path.join(CHECKPOINT_DIR, 'INSTV5.ckpt'),1189            'download_urls': [1190                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',1191                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/INSTV5.ckpt'1192            ],1193            'needs_conf_edit': True1194        },1195        'inst_gaboxFV1 (by Gabox)': {1196            'model_type': 'mel_band_roformer',1197            'config_path': os.path.join(CHECKPOINT_DIR, 'inst_gabox.yaml'),1198            'start_check_point': os.path.join(CHECKPOINT_DIR, 'inst_gaboxFv1.ckpt'),1199            'download_urls': [1200                'https://huggingface.co/GaboxR67/MelBandRoformers/resolve/main/melbandroformers/instrumental/inst_gabox.yaml',

Showing the first 1,200 of 1881 lines. Download the file for the rest.