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:音色锁定
|
# 模块 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")],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user