#7561 Cannot find a function with `api_name`: /gen_single.:{'text': '你好啊,我亲爱的朋友,希望你的每一天都是美好愉快的!', 'rate': '+0%', 'role': '쏟아져

183.167**3 Posted at: 1 hour ago

Cannot find a function with api_name: /gen_single.:
{'text': '你好啊,我亲爱的朋友,希望你的每一天都是美好愉快的!', 'rate': '+0%', 'role': '쏟아져 나오는 중국의 로봇! [코너별 다시보기 - 0921].ae-0-5.4.wav', 'filename': 'C:\Users\windos\AppData\Local\Temp/pyvideotrans/12-1790084141.4969442.wav', 'tts_type': 12, 'language': 'zh-cn', 'volume': '+0%', 'pitch': '+0Hz'}
Traceback (most recent call last):
File "videotrans\util\ListenVoice.py", line 21, in run
File "videotrans\tts\__init__.py", line 232, in run
File "videotrans\tts\_base.py", line 124, in run
File "videotrans\tts\_base.py", line 212, in _item_task
File "videotrans\tts\_index.py", line 40, in _run
File "videotrans\tts\_gradio.py", line 53, in _send
File "gradio_client\client.py", line 496, in predict
File "gradio_client\client.py", line 542, in submit
File "gradio_client\client.py", line 880, in _infer_fn_index
ValueError: Cannot find a function with api_name: /gen_single.


=
system:Windows-10-10.0.22631-SP0
version:v4.12
frozen:True
language:zh_CN
root_dir:F:/sppy

14 Replies

#1 DeepSeek reply at 1 hour ago

这是自定义 Gradio TTS WebUI 接口对接失败。

核心原因是:Gradio 客户端在你的 WebUI 服务中找不到名为 /gen_single 的函数端点,即 gradio_api.txt 中填写的 api_name 与目标 WebUI 实际暴露的 API 名称不一致。

解决步骤:

  1. 确认 WebUI 是否开启了 API:用浏览器打开你部署的 TTS WebUI,滚动到页面最底部,点击 Use via API(或通过API使用)。

    若找不到该字样,说明该 WebUI 未启用 API,需修改其启动源码开启。

  2. 核对真实的 api_name:进入 API 文档页面,找到「语音克隆/生成音频」的那个接口,拉到该接口说明的最下方,查看 API name 后面的实际值(例如可能是 /gen_single/generate/tts 等,不同版本/项目不同)。

  3. 修正 gradio_api.txt:打开软件根目录 F:/sppy/gradio_api.txt,将 api_name= 一行改为第 2 步查到的真实名称,例如:

    api_name=/实际接口名

    保存后重启软件重试。

  4. 注意 Index-TTS 用户特别提示:若你使用的是 Index-TTS 2.5,软件内置的 Index-TTS 配音渠道已可直接使用,无需自行创建 gradio_api.txt

    此时请勿选择「自定义TTS API」渠道,直接选 Index-TTS 渠道即可。

补充排查(若第 2 步找不到接口):

  • 确认 WebUI 地址填写正确且服务正在运行(默认如 http://127.0.0.1:7860/)。

  • 确认你的 WebUI 版本与 api_name 匹配,若 WebUI 更新过,接口名可能已变更。

请查阅相关文档:

#2 183.167**3 reply at 58 minutes ago

2是什么意思

#3 183.167**3 reply at 58 minutes ago

核对真实的 api_name:进入 API 文档页面,找到「语音克隆/生成音频」的那个接口,拉到该接口说明的最下方,查看 API name 后面的实际值(例如可能是 /gen_single、/generate、/tts 等,不同版本/项目不同)。

是什么意思

#4 DeepSeek reply at 57 minutes ago

指的是我上一条回复中的「第 2 步:核对真实的 api_name」。

具体操作是:

  1. 用浏览器打开你正在运行的 TTS WebUI 地址(例如 http://127.0.0.1:7860/)。

  2. 滚动到网页最底部,点击 Use via API(中文界面为「通过API使用」)。

  3. 进入该 API 文档页面后,页面会列出多个接口。

    找到负责语音克隆/生成音频的那个接口。

  4. 在该接口说明的最下方,会显示一行 API name,其后的值就是真实的接口名(例如 /gen_single/generate 等,不同项目/版本不同)。

把查到的这个真实接口名,替换到软件根目录 F:/sppy/gradio_api.txtapi_name= 那一行的等号右边,保存后重启软件即可。

如果你的 WebUI 底部完全没有 Use via API 字样,说明该 WebUI 启动时禁用了 API,需要修改它的启动源码开启 API 功能。

#5 183.167**3 reply at 55 minutes ago

API name: /save_ref_voice
copy
from gradio_client import Client, handle_file

client = Client("http://127.0.0.1:9000/")
result = client.predict(
        audio_path=handle_file('https://github.com/gradio-app/gradio/raw/main/test/test_files/audio_sample.wav'),
        name="Hello!!",
        api_name="/save_ref_voice"
)
print(result)是这个吗
#6 DeepSeek reply at 54 minutes ago

不是,这个 /save_ref_voice 是「保存参考音频」的接口,不是语音克隆/生成音频的接口。

它只接收一段音频和一个名称,用于登记/保存音色,并不生成配音。

你需要找的是真正「输入文本 + 参考音频 → 输出音频」的那个接口。

判断方法:看接口参数里是否同时包含「要合成的文本」和「参考音频」,以及是否返回音频结果。

操作步骤:

  1. 在当前 API 文档页面继续往下(或往上)翻,查找其他接口,找到参数类似包含 text(或 tts_text)、参考音频(如 prompt/ref_audio/prompt_wav)的那一个。

  2. 找到后拉到该接口说明最下方,查看它的 API name,例如可能是 /gen_single/generate/tts 等。

  3. 同时记下该接口的必填参数名称(文本参数叫什么、参考音频参数叫什么),用于填写 gradio_api.txt。

请把你找到的「语音克隆接口」的完整参数列表截图(或把该接口下方的示例代码整段贴出来)发给我,我帮你判断应填哪个接口名和哪些参数。

补充:/save_ref_voice 这类「先保存音色、再引用音色名合成」的设计,与 pyVideoTrans 默认「每次直接传参考音频克隆」的对接方式不兼容,可能无法通过 gradio_api.txt 直接对接。

若是这种情况,建议改用该 TTS 软件内置支持的专用配音渠道(如 Index-TTS 可直接选 Index-TTS 渠道,无需自定义对接)。

#7 183.167**3 reply at 51 minutes ago

API name: /on_input_text_change
copy
from gradio_client import Client

client = Client(

"http://127.0.0.1:9000/"
)

result = client.

predict(

        text="Hello!!",
        max_seg=160,
        lang_choice="ZH",
        api_name=

"/on_input_text_change"

)
print(result)

Accepts 3 parameters:

text str Required
The input value that is provided in the "待合成文本" Textbox component.

max_seg float Default: 160
The input value that is provided in the "分句最大 Token 数" Slider component.

lang_choice Literal['ZH', 'EN', 'JA', 'AR', 'ES'] Default: "ZH"
The input value that is provided in the "选择语言" Dropdown component.
Returns 1 element

dict(headers: list[Any], data: list[list[Any]], metadata: dict(str, list[Any] | None) | None)
The output value that appears in the "value_78" Dataframe component.
API name: /on_input_text_change_1
copy
from gradio_client import Client

client = Client(

"http://127.0.0.1:9000/"
)

result = client.

predict(

        text="Hello!!",
        max_seg=160,
        lang_choice="ZH",
        api_name=

"/on_input_text_change_1"

)
print(result)

Accepts 3 parameters:

text str Required
The input value that is provided in the "待合成文本" Textbox component.

max_seg float Default: 160
The input value that is provided in the "分句最大 Token 数" Slider component.

lang_choice Literal['ZH', 'EN', 'JA', 'AR', 'ES'] Default: "ZH"
The input value that is provided in the "选择语言" Dropdown component.
Returns 1 element

dict(headers: list[Any], data: list[list[Any]], metadata: dict(str, list[Any] | None) | None)
The output value that appears in the "value_78" Dataframe component.
API name: /on_input_text_change_2
copy
from gradio_client import Client

client = Client(

"http://127.0.0.1:9000/"
)

result = client.

predict(

        text="Hello!!",
        max_seg=160,
        lang_choice="ZH",
        api_name=

"/on_input_text_change_2"

)
print(result)

是这个吗

#8 DeepSeek reply at 51 minutes ago

不是。

你贴出来的这几个 /on_input_text_change、/on_input_text_change_1、/on_input_text_change_2 都不是合成接口。

原因:它们的参数只有 text(文本)、max_seg、lang_choice,没有「参考音频」参数,返回值是 Dataframe 数据(分句结果),属于「文本变化的联动处理」接口,只负责把文本分句,并不生成配音音频。

你需要找的接口特征:参数中同时包含文本(text 或 tts_text)和 参考音频(通常叫 prompt、ref_audio、prompt_wav、audio_path 等)。

返回结果是音频(Audio),不是 Dataframe。

操作步骤:在当前 API 文档页面继续翻找,搜索参数里带「参考音频 / 音色 / ref / prompt」字样的接口。

找到后拉到该接口最下方,查看它的 API name,并把该接口下方的完整示例代码(client.predict(...) 那一段,含所有参数名)贴给我。

判断提示:结合你前面发现的 /save_ref_voice(保存参考音频),这个 WebUI 很可能是「先调用 /save_ref_voice 保存音色,再用音色名去合成」的两步式设计。

若是这种两步式,则无法通过 gradio_api.txt 直接对接。

特别说明:从端口 9000 及各接口特征看,这大概率就是 Index-TTS。

而 Index-TTS 在软件里已有内置专用配音渠道,请直接在主界面「配音渠道」中选择 Index-TTS,并在 TTS 设置里填写它的地址即可,无需再自行填写 gradio_api.txt。

请查阅相关文档:
IndexTTS/VoxCPM/FireRedTTS3 配音渠道

#9 183.167**3 reply at 49 minutes ago
  1. Install the Python client (docs) if you don't already have it installed.
    copy
    $ pip install gradio_client
  2. Find the API endpoint below corresponding to your desired function in the app. Copy the code snippet, replacing the placeholder values with your own input data. Or use the

    API Recorder
    to automatically generate your API requests.
    API name: /refresh_speakers
    copy
    from gradio_client import Client

    client = Client(
    "http://127.0.0.1:9000/"
    )
    result = client.
    predict(

         current="---选择说话人模型---",
         api_name=

    "/refresh_speakers"
    )
    print(result)
    Accepts 1 parameter:

    current Literal['


    选择说话人模型
    ', 'default'] Default: "
    选择说话人模型
    "
    The input value that is provided in the "parameter_7" Dropdown component.
    Returns 1 element

    Literal['
    选择说话人模型
    ', 'default']
    The output value that appears in the "value_7" Dropdown component.
    API name: /on_pick_ref
    copy
    from gradio_client import Client

    client = Client(
    "http://127.0.0.1:9000/"
    )
    res
    ......
    extbox component.
    API name: /refresh_history
    copy
    from gradio_client import Client

    client = Client(
    "http://127.0.0.1:9000/"
    )
    result = client.
    predict(

         api_name=

    "/refresh_history"
    )
    print(result)
    Accepts 0 parameters:
    Returns tuple of 2 elements

    [0] Literal[]
    The output value that appears in the "历史列表(选中即播放)" Radio component.

    [1] str
    The output value that appears in the "value_445" Markdown component.
    API name: /on_pick_history
    copy
    from gradio_client import Client

    client = Client(
    "http://127.0.0.1:9000/"
    )
    result = client.
    predict(

         fname=None,
         api_name=

    "/on_pick_history"
    )
    print(result)
    Accepts 1 parameter:

    fname Literal[] Required
    The input value that is provided in the "历史列表(选中即播放)" Radio component.
    Returns 1 element

    filepath
    The output value that appears in the "试听 / 下载" Audio component.
    API name: /delete_all_history
    copy
    from gradio_client import Client

    client = Client(
    "http://127.0.0.1:9000/"
    )
    result = client.
    predict(

         confirm=False,
         api_name=

    "/delete_all_history"
    )
    print(result)
    Accepts 1 parameter:

    confirm bool Default: False
    The input value that is provided in the "我确认删除全部" Checkbox component.
    Returns tuple of 3 elements

    [0] Literal[]
    The output value that appears in the "历史列表(选中即播放)" Radio component.

    [1] filepath
    The output value that appears in the "试听 / 下载" Audio component.

    [2] str
    The output value that appears in the "value_445" Markdown component.
    API name: /api_refresh_1Total requests: 1 (100% successful)  |  p50/p90/p99: 1.01 s / 1.01 s / 1.01 s
    copy
    from gradio_client import Client

    client = Client(
    "http://127.0.0.1:9000/"
    )
    result = client.
    predict(

         api_name=

    "/api_refresh_1"
    )
    print(result)
    Accepts 0 parameters:
    Returns tuple of 2 elements

    [0] str
    The output value that appears in the "value_87" Markdown component.

    [1] str
    The output value that appears in the "value_88" Markdown component.找出来

#10 DeepSeek reply at 49 minutes ago

都不是。

你贴出的 /refresh_speakers、/on_pick_ref、/refresh_history、/on_pick_history、/delete_all_history、/api_refresh_1 都属于列表刷新、历史播放、删除等辅助功能,均不含「文本+参考音频→生成音频」的合成参数,不是配音合成接口。

其中 /on_pick_ref 被你截断了("res......extbox component."),它可能和参考音频选择有关,但不确定。

判断标准(你要找的合成接口必须同时满足):

  1. 参数里同时有文本(text / tts_text)和参考音频(prompt / ref_audio / audio_path 等)。

  2. 返回结果是音频(Audio/filepath)。

  3. 接口描述通常带"生成/合成/克隆"字样。

请你在这个 API 文档页面里,用浏览器搜索(Ctrl+F)关键词:合成、生成、clone、tts、generate、infer、gen。

逐个点击这些接口,把参数同时包含「文本」和「参考音频」的那个接口,连同它下方的完整示例代码(client.predict 整段,含所有参数名和取值)贴给我。

关键判断:结合你之前发现的 /save_ref_voice(保存参考音频)、/refresh_speakers(刷新说话人模型),这个 WebUI 极可能是「先保存/选择音色,再合成」的两步式设计。

若是这种设计,就无法通过 gradio_api.txt 直接对接。

强制建议:从端口 9000 以及「说话人模型/历史列表/试听下载」这些界面特征判断,这就是 Index-TTS。

而 pyVideoTrans 已内置 Index-TTS 专用配音渠道,请直接在主界面「配音渠道」下拉中选择 Index-TTS,在 TTS 设置里填写其地址 http://127.0.0.1:9000/ 即可使用,完全不需要自行编写 gradio_api.txt,也不需要找 api_name。

请查阅相关文档:

#11 183.167**3 reply at 47 minutes ago

解决不了了吗

#12 DeepSeek reply at 47 minutes ago

可以解决,只是不建议再走「自定义对接」这条路。

你现在的情况是:这个 WebUI 是「先保存音色(/save_ref_voice)、再选说话人、再合成」的两步式设计,而 pyVideoTrans 的 gradio_api.txt 自定义对接要求「一个接口里同时传文本+参考音频、直接返回音频」,两者不匹配,所以找不到合适的 api_name 是正常的,继续找大概率也找不到。

但你有更简单的正解,直接用内置渠道即可:

  1. 确认你用的是 v4.12,软件里已内置 Index-TTS 配音渠道。

  2. 打开软件,顶部菜单 → 设置 → TTS设置 → 找到 Index-TTS(或标注为 Index-TTS/Gradio 的项),在地址栏填写

    http://127.0.0.1:9000/,保存。

  3. 主界面「配音渠道」下拉里直接选择 Index-TTS,不要再选「自定义TTS API」。

  4. 「配音角色」选择 clone(克隆原视频音色),或按需要选内置音色。

这样就不需要 gradio_api.txt,也不需要 api_name,直接可用。

如果你确实想继续用「自定义对接」,那唯一的办法是:在你那个 TTS 项目的源码里,额外增加一个「单接口完成克隆合成」的 API(把 save_ref_voice 和合成逻辑合并成一个函数并暴露出来),再按其真实参数填 gradio_api.txt。

这需要改对方项目的代码,属于高阶操作。

请先按上面第 1~4 步用内置 Index-TTS 渠道试一下。

如果内置渠道也报错,我可以用两个字幕接口的方式帮你继续排查。

补充信息请告知:软件里 TTS 设置中是否有 Index-TTS 选项、报错的具体文字。

#13 183.167**3 reply at 43 minutes ago

选了clone,怎么克隆声音呢

#14 DeepSeek reply at 43 minutes ago

选 clone 后,软件会自动从原始视频里截取每句字幕对应时间段的音频,作为参考音频,送给 TTS 引擎克隆该说话人的音色。

也就是说,clone 模式下你不需要单独准备参考音频,它是「边裁边克隆」自动完成的。

但要让 clone 效果好、不报错,必须满足参考音频时长合适(3~10 秒),因此要做以下配置:进入 菜单 → 工具/选项 → 高级选项 → 语音识别参数:最长语音持续(秒)设为 6~10;最短语音持续(毫秒)设为 3000~4000。

注意:若最短语音持续低于 3000ms,切出的音频太短,克隆极易失败或产生杂音。

在主界面「设置更多参数」中勾选 分离人声背景声,去掉背景音乐干扰,大幅提升克隆音质。

翻译渠道建议用 DeepSeek / OpenAI 等大模型,勾选「发送完整字幕」,效果更好。

核对前置条件:clone 角色只在「翻译视频」功能里可用,单独的「文字配音」功能里不可用(因为它无法从视频截取参考音频)。

所用配音渠道必须支持克隆。

Index-TTS 支持 clone。

重试前勾选主界面的「清理已生成」,避免复用上次的旧结果。

如果你想用自己的某段音频音色(而不是原视频音色):准备一段 3~10 秒的单声道 WAV,复制到软件目录下的 f5-tts 文件夹;打开 菜单 → TTS设置 → 设置参考音频,按 文件名.wav#音频里的说话文本 格式填写;之后在主界面「配音角色」下拉里选该文件名即可。

按上面配置后,直接开始执行就会自动克隆并配音。

若中途报错,请把具体报错文字发我。

请查阅相关文档:
语音克隆
IndexTTS/VoxCPM/FireRedTTS3 配音渠道

Thinking...
Post Your Reply
If you have more than 50 messages, you will no longer receive an automatic reply. Please ask a new question!
Open source and free maintenance is not easy. If this project is helpful to you, please consider making a small donation to help the project continue to maintain and update.

Dondate via ko-fi.com

Related resource