This commit is contained in:
DelLevin-Home
2026-06-16 13:03:06 +08:00
parent 2e05854f9d
commit bb66913eab
5 changed files with 63 additions and 24 deletions

View File

@@ -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 @@
<select id="quickSwitch" style="flex:1;">
<option value="">选择模型组</option>
</select>
<button class="btn btn-outline btn-sm" onclick="quickSwitchRandom()" style="white-space:nowrap;"><i class="fas fa-refresh"></i> 随机</button>
<button class="btn btn-outline btn-sm" onclick="quickSwitchRandom()" style="white-space:nowrap;"><i class="fas fa-refresh"></i> 模型随机参数</button>
</div>
<div style="display:flex;gap:6px;margin-top:6px;">
<button class="btn btn-outline btn-sm" onclick="quickSwitchPreset('rich_emotion')" style="flex:1;font-size:11px;">情感更丰富</button>
@@ -313,8 +316,8 @@
<div class="section-title-row" style="margin-top:8px;">
<span class="title-left"><i class="fas fa-brain"></i> 模型切换</span>
<div style="display:flex;gap:4px;">
<button class="btn btn-outline btn-sm" onclick="switchModels()"><i class="fas fa-refresh"></i> 切换</button>
<button class="btn btn-outline btn-sm" onclick="saveModelSelection()"><i class="fas fa-floppy-disk"></i> 保存</button>
<button class="btn btn-outline btn-sm" onclick="switchModels()"><i class="fas fa-refresh"></i> 切换模型(接口)</button>
<button class="btn btn-outline btn-sm" onclick="saveModelSelection()"><i class="fas fa-floppy-disk"></i> 保存配置</button>
</div>
</div>
<div class="input-group">
@@ -392,7 +395,7 @@
<div class="section-card">
<div class="section-title" style="display:flex;align-items:center;justify-content:space-between;">
<span><i class="fas fa-tags"></i> 推理参数</span>
<button class="btn btn-outline btn-sm" onclick="saveInferConfig()"><i class="fas fa-floppy-disk"></i> 保存</button>
<button class="btn btn-outline btn-sm" onclick="saveInferConfig()"><i class="fas fa-floppy-disk"></i> 保存推理配置</button>
</div>
<div class="input-group no-icon">
<label>文本分段</label>
@@ -526,15 +529,21 @@
<div class="section-title"><i class="fas fa-folder"></i> 模型文件夹</div>
<div class="input-group">
<label for="modalGptModelDir">GPT 模型文件夹</label>
<div class="input-wrap">
<i class="fas fa-folder-open"></i>
<div class="path-row">
<select id="modalGptModelDirMode">
<option value="absolute">绝对路径</option>
<option value="relative">相对路径</option>
</select>
<input type="text" id="modalGptModelDir" placeholder="含 .ckpt 文件的文件夹路径">
</div>
</div>
<div class="input-group">
<label for="modalSovitsModelDir">SoVITS 模型文件夹</label>
<div class="input-wrap">
<i class="fas fa-folder-open"></i>
<div class="path-row">
<select id="modalSovitsModelDirMode">
<option value="absolute">绝对路径</option>
<option value="relative">相对路径</option>
</select>
<input type="text" id="modalSovitsModelDir" placeholder="含 .pth 文件的文件夹路径">
</div>
</div>
@@ -547,8 +556,11 @@
<div class="section-title"><i class="fas fa-folder-open"></i> 参考音频文件夹</div>
<div class="input-group">
<label for="modalAudioFolder">音频文件夹路径</label>
<div class="input-wrap">
<i class="fas fa-folder-open"></i>
<div class="path-row">
<select id="modalAudioFolderMode">
<option value="absolute">绝对路径</option>
<option value="relative">相对路径</option>
</select>
<input type="text" id="modalAudioFolder" placeholder="例如 D:\声音素材\参考音频">
</div>
</div>
@@ -620,6 +632,9 @@
if (cfg.gpt_model_dir) document.getElementById('modalGptModelDir').value = cfg.gpt_model_dir;
if (cfg.sovits_model_dir) document.getElementById('modalSovitsModelDir').value = cfg.sovits_model_dir;
if (cfg.refer_audio_folder) document.getElementById('modalAudioFolder').value = cfg.refer_audio_folder;
document.getElementById('modalGptModelDirMode').value = cfg.gpt_model_dir_mode || 'absolute';
document.getElementById('modalSovitsModelDirMode').value = cfg.sovits_model_dir_mode || 'absolute';
document.getElementById('modalAudioFolderMode').value = cfg.refer_audio_folder_mode || 'absolute';
} catch (e) { showMessage('加载配置失败: ' + e.message, 'error'); }
checkEngineStatus();
}
@@ -635,7 +650,10 @@
method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
sovits_project_path: sovitsPath, sovits_config_yaml: configYaml,
gpt_model_dir: gptDir, sovits_model_dir: sovitsDir, refer_audio_folder: audioFolder
gpt_model_dir: gptDir, sovits_model_dir: sovitsDir, refer_audio_folder: audioFolder,
gpt_model_dir_mode: document.getElementById('modalGptModelDirMode').value,
sovits_model_dir_mode: document.getElementById('modalSovitsModelDirMode').value,
refer_audio_folder_mode: document.getElementById('modalAudioFolderMode').value
})
});
showMessage('设置已保存', 'success');
@@ -662,7 +680,11 @@
var sovitsDir = document.getElementById('modalSovitsModelDir').value.trim();
await fetch('/ai-dubbing/config', {
method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ gpt_model_dir: gptDir, sovits_model_dir: sovitsDir })
body: JSON.stringify({
gpt_model_dir: gptDir, sovits_model_dir: sovitsDir,
gpt_model_dir_mode: document.getElementById('modalGptModelDirMode').value,
sovits_model_dir_mode: document.getElementById('modalSovitsModelDirMode').value
})
});
showMessage('文件夹配置已保存', 'success');
refreshModels();
@@ -672,7 +694,10 @@
var folder = document.getElementById('modalAudioFolder').value.trim();
fetch('/ai-dubbing/config', {
method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ refer_audio_folder: folder })
body: JSON.stringify({
refer_audio_folder: folder,
refer_audio_folder_mode: document.getElementById('modalAudioFolderMode').value
})
}).then(function() { showMessage('已保存', 'success'); });
}