⭐ 介绍

仅需一条5秒语音素材,就可完美优秀克隆素材本音呐!
只需要准备好你想克隆的角色语音,并对其语音进行文件名的标注(见下文),就可以快速生成语音。
或者使用官方在线api -> fish-audio即可享受快速云端的语音生成。
📜 免责声明
[!CAUTION]
本插件仅供学习和研究使用,使用者需自行承担使用插件的风险。作者不对插件的使用造成的任何损失或问题负责。请合理使用插件,遵守相关法律法规。
使用本插件即表示您已阅读并同意遵守以上免责声明。如果您不同意或无法遵守以上声明,请不要使用本插件。
💿 安装
安装
pipx 安装
pipx install nonebot-plugin-fishspeech-tts -U
在nonebot的pyproject.toml中的plugins = [“xxx”]添加此插件
nb-cli安装
nb plugin install nonebot-plugin-fishspeech-tts -U
git clone安装(不推荐)
git clone https://github.com/Cvandia/nonebot-plugin-fishspeech-tts
- 在窗口运行处
将文件夹
nonebot-plugin-fishspeech-tts复制到bot根目录下的src/plugins(或创建bot时的其他名称xxx/plugins)
注意
推荐镜像站下载
清华源https://pypi.tuna.tsinghua.edu.cn/simple
阿里源https://mirrors.aliyun.com/pypi/simple/
⚙️ 配置
在.env中添加以下配置
| 基础配置 |
类型 |
必填项 |
默认值 |
说明 |
| tts_is_online |
bool |
是 |
True |
是否使用云端api |
| tts_chunk_length |
literal |
否 |
“normal” |
请求时音频分片长度,默认为normal,可选:short, normal, long |
| tts_max_new_tokens |
int |
否 |
None |
每个文本分片的 token 上限;不配置时采用服务端默认值,0 的含义由后端决定 |
| tts_audio_path |
str |
否 |
“./data/参考音频” |
语音素材路径,默认为"./data/参考音频" |
| tts_prefix |
str |
否 |
None |
合成指令前缀;None 使用全部 COMMAND_START,空字符串表示无前缀 |
注:参考音频的文件名格式为:[角色名]音频对应的文字标签.[音频后缀名]
点击这里可选择下载推荐参考音频reference_audio.zip,解压并把音频并放入bot文件目录的data/参考音频下即可
! 支持同一角色的不同语音 !
音频后缀目前支持有详见files.py中的AUDIO_FILE_SUFFIX
如果你想使用官方的api,请将配置项tts_is_online设置为True并配置以下
| 配置项 |
类型 |
必填项 |
默认值 |
说明 |
| online_api_url |
str |
否 |
“https://api.fish.audio” |
官方 API 根地址;可显式配置其他兼容服务 |
| online_authorization |
str |
是 |
None |
官网api鉴权秘钥,详见链接 |
| online_model_first |
bool |
否 |
True |
如果你想调用官方模型,通过自己的参考音频,定制角色音色,将此项设为False。当然,如果你没有准备参考音频,也会调用官网已经有的音色,具体详见链接 |
| online_api_proxy |
str |
否 |
None |
代理地址,如:http://127.0.0.1:7890 |
如果你想使用自搭或者其他的fish-speech项目的api,请将配置项tts_is_online设置为False并配置以下
当前 API 兼容配置(2026-10-19)
云端 TTS 仍调用 POST /v1/tts,音色 ID 与基础合成模型是两个不同概念。
| 配置项 |
类型 |
默认值 |
说明 |
| online_model |
str |
s2.1-pro |
model 请求头;支持 s2.1-pro-free、s2-pro、drama-3 和仍在迁移期的 s1 |
| online_language |
str 或 None |
None |
新增的 BCP-47 文本语言提示,如 zh-CN;影响数字等文本归一化,不改变音色或口音 |
| online_reference_ids |
dict[str, str] |
{} |
角色名到云端音色 ID 的映射,优先于名称搜索;在 online_model_first=True 时使用 |
| offline_authorization |
str 或 None |
None |
本地服务 --api-key 对应的 Bearer 密钥 |
| offline_reference_ids |
dict[str, str] |
{} |
角色名到服务端已保存参考音色的映射;命中后无需上传本地音频 |
| offline_single_chunk |
bool |
False |
本地 Drama 3 的整段生成开关;其他模型保持 False |
| tts_is_stream |
bool |
False |
本地是否请求流式 WAV;插件仍收齐音频后发送语音,不提供边生成边播放 |
.env 示例(需要填写自己的 API 密钥和音色 ID):
TTS_IS_ONLINE=true
ONLINE_API_URL=https://api.fish.audio
ONLINE_AUTHORIZATION=your-api-key
ONLINE_MODEL=s2.1-pro
ONLINE_LANGUAGE=zh-CN
ONLINE_REFERENCE_IDS={"角色名":"your-voice-model-id"}
发送 角色名说[轻声]你好,方括号内的语气指令会保留并交给模型处理。
如需免费开发模型,可将 ONLINE_MODEL 显式设为 s2.1-pro-free;是否可用及额度以官网为准。默认 s2.1-pro 使用账户的付费 API 额度。
旧版 speech-1.5、speech-1.6 已退役;s1 将于 2026-12-31 退役。
升级后默认官方域名变为 api.fish.audio、本地端口统一为 8080;原有部署若使用其他域名或端口,请保留显式配置。
未设置 tts_max_new_tokens 时不再硬编码旧版 800 上限,已显式设置的数值继续生效。
参考音频走 MessagePack,云端音色 ID 请求走 JSON。HTTP 鉴权、余额不足、限流等错误会作为文字提示返回。
官方依据:TTS API、更新记录、模型退役说明、本地请求结构。
⭐ 使用
在线聊天体验
打开语音体验站 · 网站源码与部署说明
访客使用自己的 Fish Audio API 密钥,默认可莉音色,固定免费模型 s2.1-pro-free。像聊天一样发送文字或 /可莉说[激情]你好呀,接收可播放、可下载的语音。密钥不写入浏览器持久存储,刷新页面后清除;调用会经体验站代理转发到官方 API。
请注意你的 COMMAND_START 以及上述配置项。
所有指令均使用 nonebot-plugin-alconna 响应与解析(需要 >=0.62.1)。
合成指令保持 角色名说文本 写法,例如 /可莉说[轻声]你好;正文中的空格、引号、换行和方括号标签会原样保留。
回复一条消息后发送 /可莉说,可合成被回复的文字。tts_prefix 仅覆盖合成指令的前缀,角色列表和余额查询继续使用 COMMAND_START。
指令:
| 指令 |
需要@ |
范围 |
说明 |
权限 |
| xxx说xxx |
根据配置 |
all |
tts语音生成 |
all |
| 语音列表 |
是 |
all |
获取所有角色列表 |
all |
| 语音余额 |
是 |
all |
查询api余额 |
all |
🌙 Todo
喜欢记得点个star⭐
💝 特别鸣谢
⭐ 额外帮助
自建 fish-speech 服务
先按 官方安装文档 安装环境并下载模型权重,再按 服务端文档 启动 API。以 S2-Pro 为例:
python tools/api_server.py --llama-checkpoint-path checkpoints/s2-pro --decoder-checkpoint-path checkpoints/s2-pro/codec.pth --listen 127.0.0.1:8080
使用 GET http://127.0.0.1:8080/v1/health 检查服务。
插件配置 TTS_IS_ONLINE=false 和 OFFLINE_API_URL=http://127.0.0.1:8080,参考音频沿用 [角色名]文本.wav 命名。
如果服务启用了 --api-key,同时设置 OFFLINE_AUTHORIZATION。
本地基础模型由服务器加载的权重决定,不使用 ONLINE_MODEL;reference_id 仅选择保存的参考音色。
开发验证
uv venv
uv pip install -e . --group dev
uv run --no-project pytest -q
uv run --no-project ruff check .
回归测试使用模拟 HTTP 响应,不需要 API 密钥,也不会调用计费合成服务;真实音质和模型可用性需在实际后端验证。
评论