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:
@@ -62,14 +62,15 @@ def _save_upload(upload_file) -> str | None:
|
||||
# ---------------------------------------------------------------------------
|
||||
# 模块 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。"""
|
||||
path = _save_upload(audio_file)
|
||||
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 "")
|
||||
return msg if ok else f"❌ {msg}"
|
||||
result = msg if ok else f"❌ {msg}"
|
||||
return result, ui_speaker_status()
|
||||
|
||||
|
||||
def ui_speaker_status() -> str:
|
||||
@@ -201,9 +202,9 @@ footer { visibility: hidden; }
|
||||
"""
|
||||
|
||||
|
||||
def build_app() -> gr.Blocks:
|
||||
"""构建 Gradio 主界面。"""
|
||||
theme = gr.themes.Monochrome(
|
||||
def build_theme() -> gr.themes.Base:
|
||||
"""构建暗黑科技风 Monochrome 主题(Gradio 6.0 需在 launch() 传入)。"""
|
||||
return gr.themes.Monochrome(
|
||||
primary_hue="slate",
|
||||
secondary_hue="gray",
|
||||
neutral_hue="slate",
|
||||
@@ -221,10 +222,11 @@ def build_app() -> gr.Blocks:
|
||||
button_primary_background_fill_hover="#4a4a60",
|
||||
)
|
||||
|
||||
|
||||
def build_app() -> gr.Blocks:
|
||||
"""构建 Gradio 主界面。"""
|
||||
with gr.Blocks(
|
||||
title="Trading Studio | 交易复盘配音中控",
|
||||
theme=theme,
|
||||
css=CUSTOM_CSS,
|
||||
) as demo:
|
||||
gr.Markdown(
|
||||
f"""
|
||||
@@ -241,7 +243,7 @@ def build_app() -> gr.Blocks:
|
||||
with gr.Row():
|
||||
ollama_status = gr.Textbox(
|
||||
label="Ollama 节点",
|
||||
value=f"模型: {MODEL_NAME}",
|
||||
value="检测中...",
|
||||
interactive=False,
|
||||
scale=3,
|
||||
elem_classes=["status-bar"],
|
||||
@@ -280,7 +282,11 @@ def build_app() -> gr.Blocks:
|
||||
)
|
||||
lock_btn = gr.Button("🔒 锁定音色", variant="primary")
|
||||
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: 分步操作 ----
|
||||
with gr.Tab("🔧 分步流水线"):
|
||||
@@ -370,6 +376,8 @@ def main() -> None:
|
||||
server_port=PORT,
|
||||
share=False,
|
||||
show_error=True,
|
||||
theme=build_theme(),
|
||||
css=CUSTOM_CSS,
|
||||
allowed_paths=[str(Path(__file__).resolve().parent / "outputs")],
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user