From 4255cf7cd7dc752b4f74f72361b94a5426f6e22f Mon Sep 17 00:00:00 2001 From: dekun Date: Fri, 12 Jun 2026 18:40:19 +0800 Subject: [PATCH] Fix Gradio 4.x Audio compatibility on server Only pass show_download_button and show_share_button when the installed Gradio Audio component supports them, fixing PM2 startup TypeError. Co-authored-by: Cursor --- app.py | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/app.py b/app.py index 0cf1002..1cc9dcb 100644 --- a/app.py +++ b/app.py @@ -5,6 +5,7 @@ Gradio Web 中控:音色锁定 → Whisper 识别 → Gemma4 润色 → ChatTT from __future__ import annotations +import inspect import logging import re import shutil @@ -74,6 +75,22 @@ def ui_initial_history() -> tuple[dict, dict]: return gr.update(choices=choices, value=latest), ui_history_play(latest) +def _tts_output_audio(label: str) -> gr.Audio: + """成品播放器:兼容 Gradio 4.x(无 show_download_button 等参数)。""" + kwargs: dict = { + "label": label, + "type": "filepath", + "interactive": False, + "elem_classes": ["tts-output-audio"], + } + params = inspect.signature(gr.Audio.__init__).parameters + if "show_download_button" in params: + kwargs["show_download_button"] = True + if "show_share_button" in params: + kwargs["show_share_button"] = False + return gr.Audio(**kwargs) + + # --------------------------------------------------------------------------- # 全局 UI 状态(Gradio State) # --------------------------------------------------------------------------- @@ -1148,14 +1165,7 @@ def build_app() -> gr.Blocks: with gr.Row(elem_classes=["pipeline-output-row"]): pipe_raw = gr.Textbox(label="转写原文", lines=6) pipe_polished = gr.Textbox(label="润色稿", lines=6) - pipe_output = gr.Audio( - label="成品配音", - type="filepath", - interactive=False, - show_download_button=True, - show_share_button=False, - elem_classes=["tts-output-audio"], - ) + pipe_output = _tts_output_audio("成品配音") # ---- Tab 2: 分步流水线 ---- with gr.Tab("🔧 分步流水线"): @@ -1202,14 +1212,7 @@ def build_app() -> gr.Blocks: ) synth_btn = gr.Button("🔊 合成配音 WAV", variant="primary") synth_log = gr.Textbox(label="合成日志", lines=3, interactive=False) - output_audio = gr.Audio( - label="成品配音", - type="filepath", - interactive=False, - show_download_button=True, - show_share_button=False, - elem_classes=["tts-output-audio"], - ) + output_audio = _tts_output_audio("成品配音") transcribe_btn.click(ui_transcribe, rec_audio, [raw_text, transcribe_log]) polish_btn.click(ui_polish, raw_text, [polished_text, polish_log]) @@ -1255,14 +1258,7 @@ def build_app() -> gr.Blocks: scale=4, ) history_refresh_btn = gr.Button("🔄 刷新", scale=0, min_width=100) - history_player = gr.Audio( - label="历史试听 / 下载", - type="filepath", - interactive=False, - show_download_button=True, - show_share_button=False, - elem_classes=["tts-output-audio"], - ) + history_player = _tts_output_audio("历史试听 / 下载") history_refresh_btn.click(ui_history_dropdown, outputs=[history_select]) history_select.change(ui_history_play, history_select, history_player)