Fix Gradio 6.0 theme/css warning and refresh speaker status after lock.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-12 14:17:26 +08:00
parent 4a4f40fac4
commit fc96f834a0
+18 -10
View File
@@ -62,14 +62,15 @@ def _save_upload(upload_file) -> str | None:
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# 模块 1:音色锁定 # 模块 1:音色锁定
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
def ui_lock_speaker(audio_file, sample_transcript: str) -> str: def ui_lock_speaker(audio_file, sample_transcript: str) -> tuple[str, str]:
"""【音色锁定】从参考人声提取并保存 Speaker Embedding。""" """【音色锁定】从参考人声提取并保存 Speaker Embedding。"""
path = _save_upload(audio_file) path = _save_upload(audio_file)
if not path: if not path:
return "请上传 10-30 秒干净参考人声(wav/mp3 均可)。" return "请上传 10-30 秒干净参考人声(wav/mp3 均可)。", ui_speaker_status()
ok, msg = save_fixed_speaker(path, sample_transcript or "") ok, msg = save_fixed_speaker(path, sample_transcript or "")
return msg if ok else f"{msg}" result = msg if ok else f"{msg}"
return result, ui_speaker_status()
def ui_speaker_status() -> str: def ui_speaker_status() -> str:
@@ -201,9 +202,9 @@ footer { visibility: hidden; }
""" """
def build_app() -> gr.Blocks: def build_theme() -> gr.themes.Base:
"""构建 Gradio 主界面""" """构建暗黑科技风 Monochrome 主题(Gradio 6.0 需在 launch() 传入)"""
theme = gr.themes.Monochrome( return gr.themes.Monochrome(
primary_hue="slate", primary_hue="slate",
secondary_hue="gray", secondary_hue="gray",
neutral_hue="slate", neutral_hue="slate",
@@ -221,10 +222,11 @@ def build_app() -> gr.Blocks:
button_primary_background_fill_hover="#4a4a60", button_primary_background_fill_hover="#4a4a60",
) )
def build_app() -> gr.Blocks:
"""构建 Gradio 主界面。"""
with gr.Blocks( with gr.Blocks(
title="Trading Studio | 交易复盘配音中控", title="Trading Studio | 交易复盘配音中控",
theme=theme,
css=CUSTOM_CSS,
) as demo: ) as demo:
gr.Markdown( gr.Markdown(
f""" f"""
@@ -241,7 +243,7 @@ def build_app() -> gr.Blocks:
with gr.Row(): with gr.Row():
ollama_status = gr.Textbox( ollama_status = gr.Textbox(
label="Ollama 节点", label="Ollama 节点",
value=f"模型: {MODEL_NAME}", value="检测中...",
interactive=False, interactive=False,
scale=3, scale=3,
elem_classes=["status-bar"], elem_classes=["status-bar"],
@@ -280,7 +282,11 @@ def build_app() -> gr.Blocks:
) )
lock_btn = gr.Button("🔒 锁定音色", variant="primary") lock_btn = gr.Button("🔒 锁定音色", variant="primary")
lock_log = gr.Textbox(label="锁定结果", lines=4, interactive=False) lock_log = gr.Textbox(label="锁定结果", lines=4, interactive=False)
lock_btn.click(ui_lock_speaker, [spk_audio, spk_transcript], lock_log) lock_btn.click(
ui_lock_speaker,
[spk_audio, spk_transcript],
[lock_log, speaker_status],
)
# ---- Tab 2: 分步操作 ---- # ---- Tab 2: 分步操作 ----
with gr.Tab("🔧 分步流水线"): with gr.Tab("🔧 分步流水线"):
@@ -370,6 +376,8 @@ def main() -> None:
server_port=PORT, server_port=PORT,
share=False, share=False,
show_error=True, show_error=True,
theme=build_theme(),
css=CUSTOM_CSS,
allowed_paths=[str(Path(__file__).resolve().parent / "outputs")], allowed_paths=[str(Path(__file__).resolve().parent / "outputs")],
) )