style(webui): 训练角色选择区布局微调 (产品/操作逻辑优化)

基于产品逻辑和操作流程调整新增菜单入口的布局:

1. 训练角色选择区从「模型切换」Group 内部提出为独立并列 Group
   (产品逻辑上它与手动切换权重是并列功能, 不应嵌套)

2. 「自动匹配权重」按钮移到模型切换区 (GPT/SoVITS 下拉旁)
   (它操作的就是那两个下拉框, 放在一起逻辑更内聚)

3. 「应用选中样本」按钮贴训练样本下拉框同行右侧
   (操作流程连贯: 选样本 -> 直接点应用, 不再独占一行割裂流程)

4. scale 对齐:
   - 模型切换区: GPT(14)+SoVITS(14)+刷新路径(7)+自动匹配(7) = 42
   - 训练角色区: 模型名(21)+刷新(7); 样本(21)+应用(7) = 28
   各 Row 内部比例统一, 视觉对齐

5. 样本预览播放器改为满宽显示 (不再与下拉挤在一行)

验证: 沙箱用真实 proplus 数据启动 WebUI, /config 确认 64 组件全渲染、
4 个事件绑定映射正确、端到端选模型返回 40 样本含 emotion 标签。
This commit is contained in:
XucroYuri 2026-07-07 12:53:03 +08:00
parent eb2db3c9b2
commit c0e7c75ab5

View File

@ -1424,38 +1424,39 @@ with gr.Blocks(title="GPT-SoVITS WebUI", analytics_enabled=False, js=js, css=css
interactive=True,
scale=14,
)
refresh_button = gr.Button(i18n("刷新模型路径"), variant="primary", scale=14)
refresh_button = gr.Button(i18n("刷新模型路径"), variant="primary", scale=7)
auto_select_weights_btn = gr.Button(i18n("自动匹配权重"), variant="secondary", scale=7)
refresh_button.click(fn=change_choices, inputs=[], outputs=[SoVITS_dropdown, GPT_dropdown])
# ===== 新增:训练角色选择区域 =====
with gr.Group():
gr.Markdown(html_center(i18n("训练角色选择(从训练数据中快速选择)"), "h3"))
with gr.Row():
model_name_dropdown = gr.Dropdown(
label=i18n("模型名(训练实验名)"),
choices=[],
value="",
interactive=True,
scale=14,
)
refresh_models_btn = gr.Button(i18n("刷新模型列表"), variant="primary", scale=7)
auto_select_weights_btn = gr.Button(i18n("自动匹配权重"), variant="secondary", scale=7)
with gr.Row():
ref_sample_dropdown = gr.Dropdown(
label=i18n("训练样本音频"),
choices=[],
value="",
interactive=True,
scale=14,
)
ref_sample_player = gr.Audio(
label=i18n("样本预览"),
type="filepath",
scale=14,
)
# ===== 新增:训练角色选择区域(独立 Group按操作流程纵向排列 =====
with gr.Group():
gr.Markdown(html_center(i18n("训练角色选择(从训练数据中快速选择)"), "h3"))
with gr.Row():
model_name_dropdown = gr.Dropdown(
label=i18n("模型名(训练实验名)"),
choices=[],
value="",
interactive=True,
scale=21,
)
refresh_models_btn = gr.Button(i18n("刷新模型列表"), variant="primary", scale=7)
with gr.Row():
ref_sample_dropdown = gr.Dropdown(
label=i18n("训练样本音频"),
choices=[],
value="",
interactive=True,
scale=21,
)
apply_sample_btn = gr.Button(
i18n("应用选中样本到参考音频和文本"),
variant="primary",
scale=7,
)
ref_sample_player = gr.Audio(
label=i18n("样本预览"),
type="filepath",
)
with gr.Group():
gr.Markdown(html_center(i18n("*请上传并填写参考信息"), "h3"))
with gr.Row():
inp_ref = gr.Audio(label=i18n("请上传参考音频推荐3~10秒"), type="filepath", scale=13)