diff --git a/flask-dev-api/blueprints/ai_dubbing.py b/flask-dev-api/blueprints/ai_dubbing.py index d6bc678..fd2408b 100644 --- a/flask-dev-api/blueprints/ai_dubbing.py +++ b/flask-dev-api/blueprints/ai_dubbing.py @@ -58,8 +58,9 @@ def _default_config(): 'top_k': 5, 'top_p': 1.0, 'temperature': 1.0, 'batch_size': 1, 'speed_factor': 1.0, 'seed': -1, 'gpt_model_dir': '', 'sovits_model_dir': '', + 'gpt_model_dir_mode': 'absolute', 'sovits_model_dir_mode': 'absolute', 'last_gpt_model': '', 'last_sovits_model': '', - 'refer_audio_folder': '', + 'refer_audio_folder': '', 'refer_audio_folder_mode': 'absolute', } @@ -230,12 +231,16 @@ def get_config(): cfg = _load_config() cfg['engine_status'] = _engine_status # 扫描模型列表 - gpt_dir = cfg.get('gpt_model_dir', '') - sovits_dir = cfg.get('sovits_model_dir', '') + sovits_path = cfg.get('sovits_project_path', '') + gpt_dir_raw = cfg.get('gpt_model_dir', '') + gpt_dir = gpt_dir_raw if cfg.get('gpt_model_dir_mode') == 'absolute' else os.path.join(sovits_path, gpt_dir_raw) + sovits_dir_raw = cfg.get('sovits_model_dir', '') + sovits_dir = sovits_dir_raw if cfg.get('sovits_model_dir_mode') == 'absolute' else os.path.join(sovits_path, sovits_dir_raw) cfg['gpt_models'] = _scan_models(gpt_dir, '*.ckpt') cfg['sovits_models'] = _scan_models(sovits_dir, '*.pth') # 扫描参考音频 - refer_folder = cfg.get('refer_audio_folder', '') + refer_raw = cfg.get('refer_audio_folder', '') + refer_folder = refer_raw if cfg.get('refer_audio_folder_mode') == 'absolute' else os.path.join(sovits_path, refer_raw) if refer_folder and os.path.isdir(refer_folder): AUDIO_EXTS = ('.wav', '.mp3', '.flac', '.ogg', '.aac', '.m4a', '.wma') files = [os.path.join(refer_folder, f) for f in os.listdir(refer_folder) @@ -255,8 +260,9 @@ def save_config(): 'last_prompt_text', 'last_prompt_lang', 'last_text_lang', 'last_text_split_method', 'top_k', 'top_p', 'temperature', 'batch_size', 'speed_factor', 'seed', - 'gpt_model_dir', 'sovits_model_dir', - 'last_gpt_model', 'last_sovits_model', 'refer_audio_folder'): + 'gpt_model_dir', 'sovits_model_dir', 'refer_audio_folder', + 'gpt_model_dir_mode', 'sovits_model_dir_mode', 'refer_audio_folder_mode', + 'last_gpt_model', 'last_sovits_model'): if key in data: cfg[key] = data[key] _save_config(cfg) @@ -329,8 +335,10 @@ def switch_model(): return jsonify({'success': False, 'error': '缺少参数'}), 400 cfg = _load_config() + sovits_path = cfg.get('sovits_project_path', '') if model_type == 'gpt': - model_dir = cfg.get('gpt_model_dir', '') + model_dir_raw = cfg.get('gpt_model_dir', '') + model_dir = model_dir_raw if cfg.get('gpt_model_dir_mode') == 'absolute' else os.path.join(sovits_path, model_dir_raw) full_path = os.path.join(model_dir, filename) if model_dir else filename ok, err = _reload_model('reload_gpt', full_path) if ok: @@ -339,7 +347,8 @@ def switch_model(): return jsonify({'success': True, 'message': f'GPT 模型已切换: {filename}'}) return jsonify({'success': False, 'error': err}) elif model_type == 'sovits': - model_dir = cfg.get('sovits_model_dir', '') + model_dir_raw = cfg.get('sovits_model_dir', '') + model_dir = model_dir_raw if cfg.get('sovits_model_dir_mode') == 'absolute' else os.path.join(sovits_path, model_dir_raw) full_path = os.path.join(model_dir, filename) if model_dir else filename ok, err = _reload_model('reload_sovits', full_path) if ok: diff --git a/flask-dev-api/config/ai_dubbing_config.json b/flask-dev-api/config/ai_dubbing_config.json index b7f6416..1df0f0e 100644 --- a/flask-dev-api/config/ai_dubbing_config.json +++ b/flask-dev-api/config/ai_dubbing_config.json @@ -13,8 +13,11 @@ "seed": -1, "gpt_model_dir": "E:\\AI\\GPT-SoVITS-v4\\GPT_weights_v2", "sovits_model_dir": "E:\\AI\\GPT-SoVITS-v4\\SoVITS_weights_v2", + "gpt_model_dir_mode": "absolute", + "sovits_model_dir_mode": "absolute", "last_gpt_model": "bubu-e15.ckpt", - "last_sovits_model": "bubu_e4_s68.pth", - "refer_audio_folder": "D:\\UserData\\Desktop\\声音素材\\参考音频", + "last_sovits_model": "bubu_e8_s136.pth", + "refer_audio_folder": "E:\\AI\\GPT-SoVITS-v4\\参考音频", + "refer_audio_folder_mode": "absolute", "config_yaml": "GPT_SoVITS/configs/tts_infer.yaml" } \ No newline at end of file diff --git a/flask-dev-api/stats.db b/flask-dev-api/stats.db index 45acc01..9270be0 100644 Binary files a/flask-dev-api/stats.db and b/flask-dev-api/stats.db differ diff --git a/flask-dev-api/templates/ai_dubbing.html b/flask-dev-api/templates/ai_dubbing.html index ee716b7..8f56102 100644 --- a/flask-dev-api/templates/ai_dubbing.html +++ b/flask-dev-api/templates/ai_dubbing.html @@ -60,6 +60,9 @@ border-color: #0078d4; box-shadow: 0 0 0 2px rgba(0,120,212,0.06); } .input-group.no-icon input, .input-group.no-icon select { padding-left: 10px; } + .path-row { display: flex; gap: 6px; align-items: flex-end; } + .path-row select { width: 90px; flex-shrink: 0; padding: 7px 6px; font-size: 12px; } + .path-row input { flex: 1; padding-left: 10px !important; } .text-input { width: 100%; padding: 10px 12px; border: 1px solid #e0e0e0; border-radius: 6px; @@ -301,7 +304,7 @@ - +