Files
DemonGatanjieu-Anomalous_Mo…/docs/guides/audio-studio.md
T
Claude fe8e08d8cf fix(tts): follow Anomalous_TTS interface 13, no local paths
Anomalous_TTS no longer takes a folder or file path on this computer from
a request (ComfyUI-Manager review of the node): the storage place, other
character folders and pretrained sources are set only in its settings
file, and imported files are always uploaded.

- GPT-SoVITS settings shows the storage place, other places and package
  sources without change, move or remove buttons, and names the node's
  settings file (status.settings_file) with a copy button and how to edit it.
- The import window drops "from this computer": no server path picker
  (ui_tts_path_picker.js is gone), no local folder scan or local clip
  preview; a very large upload is confirmed instead.
- tts_setup_api.js loses the removed routes; formatSize moves there.
- The storage-change activity entry, unused locale keys and picker CSS go.

Verified: tools/check_structure.mjs; tts_setup_api in Node with fetch
stubbed; the settings card, batch hero, add menu, file sources and player
rendered with jsdom and stubbed ComfyUI scripts. Not run in ComfyUI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018P2T2R7TFbJsc3C9maCD8B
2026-10-08 20:21:50 +00:00

18 KiB
Raw Blame History

音频工作台使用说明

插件里也能看简版:进入音频页后,点右上角的 !。


0. 需要什么

音频页用 GPT-SoVITS 给角色配音,需要节点包 Anomalous_TTS。

  • 没装时,音频页中间会写它能做什么、怎么装。页面不会弹窗打扰你。
  • 装好后,重启 ComfyUI,再点“刷新音色”就能看到角色。
  • 没装也不影响插件的其他功能。

左边的侧栏

  • 分组:角色按语言分组(中文、日语、英语、未标语言)。点组名可以收起,下次打开还是收着的。只有一组时不分组。
  • 展开角色:点角色名左边的小箭头,下面会列出它的每条声音(主声音、{开心} 这样的情绪)。点一条就在右边播放,再点一下停。
  • 拖到节点上:侧栏里的角色可以直接拖到节点上,和拖右边卡片的标题栏一样。
  • 小红点:角色名后面有小红点,说明这个角色有问题(读取失败,或者没有能当主声音的音频)。鼠标停在点上能看到原因。
  • 搜索:角色有 6 个以上时,顶上会出现搜索框,可以搜角色名、别名或情绪名。
  • 拖文件:把音频、模型文件拖到侧栏里的某个角色上,会打开“添加文件”;拖到空白处就是导入新角色。

还没有角色的话,先看第 4 节“导入角色”。


1. 角色卡片怎么用

每个角色一张卡片:

┌───────────────────────────────────────────────┐
│ ⠿ 🎙 Arona      编辑情绪  读音  添加文件  3 角色音色预设 │  ← 标题栏:代表“整个角色”
├───────────────────────────────────────────────┤
│ ▶ MAIN   “それぞれの学園…”    [{main}]             │  ← 每一行:一条参考音频
│ ▶ ANGRY  “相手の雰囲気が…”    [{angry}]            │
│ ▶ HAPPY  “うん、よし!…”      [{happy}]            │
└───────────────────────────────────────────────┘
操作 结果
点 ▶ 试听这一条
点右边的 复制 {标签} 按钮(角色设了情绪才有) 复制标签,粘贴到台词里
拖标题栏 → 放到 角色语音 (GPT-SoVITS) 节点 节点的“角色”设为这个角色
编辑情绪 / 读音 / 添加文件 见第 2、4 节

情绪靠台词里的 {happy} 这种标签来切换,所以拖的是整个角色,不是某一条音频。

拖动时看提示

拖动时,鼠标旁边有一个提示框:

  • 白色:松手:GPT-SoVITS 节点的角色设为 Arona。可以松手。
  • 黄色:拖到了不合适的节点,提示会写原因和正确做法。这时候松手什么也不会改。

目前只接收 角色语音 (GPT-SoVITS) 节点,其他节点一律不接收。这是故意的:插件不靠猜,避免写错地方。

2. 配音:一段话多种情绪

  1. 在 角色语音 页顶部从 角色 切到 配音,或者在角色卡片上点 配音,直接带着这个角色过去。谁来念,在左边列表里点角色或在上方选。
  2. 把整段台词粘贴进去,点 分成句子。每句话会变成一张卡片。
  3. 每张卡片点一下情绪(主声音 / happy / angry……),旁边的小喇叭能听这个情绪原本的参考声音。角色只有主声音时不显示情绪按钮。也可以直接改字;鼠标移到卡片上会出现 ✂(在光标处拆开)、↧(和下一句合并)、×(删除)。

直接生成,不用画布

页面够宽时分成两栏:左边是台词卡片,右边是 生成语音 和 念法。窗口窄或者浏览器停靠在侧边时,生成按钮和设置放在台词下面。两种情况都只有台词这一块会滚动,句子再多,按钮也一直看得见。

  1. 念法 一直显示:语言(自动 / 中 / 日 / 英)点一下就选,语速用滑块。第一次用的是这个角色的默认值。 下面的 细调(一般不用动) 收着:候选数量 top_k、候选范围 top_p、随机程度 temperature、防重复 repetition_penalty,鼠标停在输入框上有说明。调过时那一行后面会写“调过”。
  2. 某次效果满意,点 把这套设置存为这个角色的默认:语言、语速和细调都会记住,下次打开这个角色直接用。种子不存,它只对当时那段台词有意义。
  3. 点 生成语音。插件直接交给 ComfyUI 生成,画布上的工作流一个不动;ComfyUI 正在出图时会先排队。
  4. 生成完自动播放,写着“生成好了,用时几秒”。文件存在 output/audio/角色名/;点 已存进音频库 › 直接去音频库。
  5. 不满意:
    • 某一句不好,点那张卡片上的 ↻,只把这一句换一版,其他句子不变(直接用缓存,很快)。
    • 整段都不好,点 整段换一版,换一个种子全部重新生成。

需要 Anomalous_TTS 接口版本 11 以上;旧版本时这里会提示更新,仍然可以推送到节点、在画布上运行。

放进自己的工作流

生成按钮下面的 放进自己的工作流 一栏,把剧本写进画布上的 角色语音 (GPT-SoVITS) 节点:

  • 点 推送到节点:写进选中的节点。画布上只有一个这种节点时,不用选。
  • 按住 拖到节点,把整段剧本拖到某个节点上。
  • 点 复制剧本:复制带标签的台词,例如
    {main} 老师,早上好!
    {happy} 今天也要加油哦!
    

推送和拖动都会同时设置“角色”和“台词”,写错了可以按 Ctrl+Z 撤回。节点里原来有台词时,会先问要不要覆盖。

某个词总是读错

角色卡片上的 读音 打开这个角色的读音表:左边写剧本里的字,右边写让它实际读的字,例如 C站 → 西站、粘进 → 沾进。剧本和字幕照常写,只影响念出来的声音。

  • 每一行的 现在 听这个角色现在怎么读左边的字,改后 听右边的字,对比着改。试听不会存进音频库。
  • 日语模型说中文时特别有用:它发不好的音(选、全这类 ü,模型、行这类后鼻音)换成好读的同音字,或在前面加个字;英文字母写成读音相近的汉字。
  • 长的先匹配,只替换一遍。只对这个角色生效。

3. 找回结果

  • 生成的音频在图标栏的 音频库:
    • 每条会显示台词、声音和种子,可以试听、按台词搜索、删除。
    • 只在预览里出现、还没保存的临时结果,列在“未保存的预览”里,点 保存 就能存到 output/audio/。

4. 导入角色和设置

设置

工具栏上有 导入角色。还没有角色时,中间是一块空的导入区,直接把文件拖进去或点 + 导入角色。

存放位置、底模这些设置在左边侧栏的最下面:GPT-SoVITS 设置,点开是一个窗口。底模缺了不会挡路(第一次生成时会自动下载),所以只在这个入口上放一个小黄点:已有角色用到的底模还没下载时才出现。窗口里第一行写着缺几个、多大,可以 现在下载,也可以点 不再提醒。以后导入了要用新底模的角色(比如第一个中文角色),小黄点会再出现。缺 Python 包时是小红点,不能关掉。下载的进度也写在这个入口下面。

窗口里有:

  • 角色存放位置:导入的角色都放在这里,默认 ComfyUI/models/gpt_sovits/。

  • 其他位置:设置文件里写的其他角色文件夹,以及 extra_model_paths.yaml 里的文件夹。

  • 底模:每个底模是已就绪、缺少还是下载中。可以单个 下载 或 全部下载。只说日语的角色不需要中文底模;标“可选”的缺了也能用。

  • Python 包:缺了哪种语言要的包,会给出安装命令,复制到命令行运行后重启 ComfyUI。

  • 设置文件:Anomalous_TTS 的设置文件 ComfyUI/user/anomalous_tts.json 的位置,可以复制路径。存放位置、其他角色文件夹和已有的 GPT-SoVITS 整合包(用包里的底模,不用再下一遍)都在这个文件里改,窗口里改不了:节点不接受网页指定的本机路径,这样网页就决定不了它在哪里建、删文件夹或读哪些文件。路径写完整,改完不用重启:

    {
      "format": 1,
      "storage": "D:/voices",
      "libraries": ["E:/old voices"],
      "pretrained": ["D:/GPT-SoVITS/GPT_SoVITS"]
    }
    

    要换存放位置,先把角色文件夹自己移过去,再改 storage。

导入表单里选了语言后,下面会用小字写出生成时还要用到哪些底模。

这些操作会读写运行 ComfyUI 那台电脑上的文件,所以只能在那台电脑上用;从别的设备打开时按钮是灰的。

导入角色(新用户从这里开始)

点 导入角色。第一次打开时会有一段遮罩引导,一步步指给你看;之后随时点窗口右上角的 ? 再看一遍。窗口顶上写着现在在哪一步:① 选方式 → ② 放入文件 → ③ 导入。

① 选方式:窗口先问“你手上有什么?”

  • 一个角色:这个角色的 GPT 模型、SoVITS 模型和几段参考音频。会一步步带你放好。
  • 很多角色 / 整合包:一次导入好几个角色,或者选一个 GPT-SoVITS 整合包文件夹,会按名字自动分好。
  • 给已有角色加声音:选一个已经导入的角色,往里面加参考音频、台词文件或新模型。

直接把文件拖到音频页或这个窗口上,会跳过这一步,按“很多角色”处理(一个角色的文件也能正确认出来)。选错了可以点 ‹ 换一种方式(还没放文件时才有)。

② 放入文件:每个角色一张卡片,卡片最上面是一份待办清单,永远高亮下一步,按钮就在那一行:

  1. 放 GPT 模型(.ckpt,在整合包的 GPT_weights 文件夹里)
  2. 放 SoVITS 模型(.pth,在 SoVITS_weights 文件夹里)
  3. 放几段参考音频(3~10 秒、说得清楚的)
  4. 选一段当主声音:在音频列表里点 ☆,变成 ★ 就是主声音(一般会自动选好)
  5. 给角色起个名字(一般会从模型文件名自动填好;卡片标题就是名字,可以直接改)

做完一项就打勾;卡片标题旁写着“还差 N 步”,全部完成变成绿色的 可以导入。任何时候都可以直接把文件拖进窗口,会自动放到对的地方。

参考音频一段一行:点前面的 ▶ 试听,再点一次(■)停止;点另一段就直接换过去,方便一段段对比着挑。上传中、还没分给角色的音频都能听。填上情绪名(例如“开心”)就成了 {开心}。不在 3~10 秒的音频不会导入(节点用不了它们),连同同名的台词文件一起收进卡片底部的“不导入”,点开能看到是哪些。一个角色音频很多时先显示前 60 段,点 显示全部 看其余的。台词会自动从同名 .txt / .lab 或标注文件里找;台词框是黄框表示台词取自文件名,请确认;红色虚线框表示没找到,可以粘贴,也可以把 .txt / .lab / .list 拖到框里。卡片底部是台词文件和 角色说的语言(一般自动判断就行)。

很多角色 / 整合包时:

  • 一个文件夹一个角色:一个文件夹里(包括它的子文件夹)只有一套 GPT + SoVITS 模型,还有音频或台词,它就是一个角色,用文件夹名当角色名。比如 派蒙/ 里有 model-e10.ckpt、model_e10.pth 和参考音频,角色就叫“派蒙”;两个角色的模型都叫 model 也不会混在一起。文件夹叫 v2、v4 这类版本名时,前面加上上一级的名字(“派蒙 v2”)。
  • 模型放在整合包的 GPT_weights* / SoVITS_weights* 里,或者好几个角色的模型平铺在一起时,按模型文件名配成角色:ALuoNa-e15.ckpt 和 ALuoNa_e16_s224.pth 都算 ALuoNa。好几轮(e5、e10、e15)时自动用轮数最大的。
  • 其他的按所在的文件夹(同一个文件夹里的模型)、文件夹名(比如 参考音频/ALuoNa/)或文件名开头分给对应的角色。同一个文件夹里有 Guang 和 Guang_v4 两套模型时,归 Guang。
  • 没分给任何角色的 .list 标注文件,每个角色都放一份(节点按文件名找台词,不会找错)。
  • 同一个角色里有同名的文件(比如 开心/01.wav 和 难过/01.wav),后来的会在前面加上文件夹名(难过_01.wav),同名的台词文件一起改,不会丢;鼠标停在文件名上能看到原来的文件。
  • 分不出来的放在最上面一张黄色卡片里,放进角色后才上传。文件多时一个文件夹一行,可以把整个文件夹一次放到某个角色;点开这一行,也能一个一个选。分错的文件,右边也能改。
  • 不会读的文件夹:runtime、pretrained_models、venv 这类 Python 环境和底模文件夹;整合包里(旁边有 runtime、GPT_weights*、webui.py 这些)的 GPT_SoVITS、logs、output、TEMP、tools,里面是程序、训练中间存档和数据集切片。你自己起名叫 output、GPT_SoVITS 的文件夹照常读;你直接选中或拖进来的那个文件夹一定会读。跳过了哪些,窗口里会写出来。
  • 一次最多读 5000 个文件。
  • 角色很多时先打开一批(20 个角色,或者大约 800 个文件),其余的在“打开下一批”按钮里;这一批导入完,下一批会自动打开。这样一次拖进很大的文件夹也不会卡。
  • 一次要上传很多文件(超过 1500 个或 2 GB)时会先问你要不要继续。文件都是从浏览器上传给节点的,节点不会按路径去读你电脑上的文件。
  • 卡片收起时只有一行,点开看详情,一次只展开一张。右上角 + 继续添加 可以再加文件,+ 新角色 手动加一个角色。

③ 导入:底部按钮写着“导入 N 个角色”,只导入“可以导入”的那些。每个角色单独导入,一个失败不影响其他的;失败的留在窗口里标红,改好再点一次。全部导入完窗口自动关闭,并滚到新角色的卡片。底部还写着会保存到哪里(想换地方,在设置里改存放位置)。

节点会建好 角色名/GPT_weights/、SoVITS_weights/、参考音频/ 和设置文件。一律复制,原文件不动;中途出错时存放位置保持原样,不会留下半个角色。

给已有角色加音频或情绪:点卡片上的 添加文件,或者把文件拖到那张卡片(或侧栏里的角色名)上。这时放进来的文件都归这个角色,模型可以不放。已有的文件不会被覆盖,主声音也不会被换掉(除非你点了“★ 主声音”)。

一条一条加也不会越加越乱:

  • 角色里已经有一模一样的文件,那一行是灰色的“角色里已有,跳过”,不会再复制一份。
  • 标注文件(.list 等)再放一次,只会把新的行追加进角色里已有的那份,写着“合并新台词”。
  • 只加一条音频、不带标注文件时,台词会从角色里已有的标注文件里找。
  • 只有“同名但内容不同”的文件会标红,不能导入。改个文件名,或者删掉那一行。

角色文件夹的规则

  • 一个角色就是一个文件夹,里面至少有一个 .ckpt(GPT 权重)和一个 .pth(SoVITS 权重)。
  • 角色文件夹放在存放位置里(默认 ComfyUI/models/gpt_sovits/),也可以放在 extra_model_paths.yaml 里写的 gpt_sovits 目录。自己往存放位置里放整理好的角色文件夹也可以,点 刷新音色 就能看到。
  • 同一个角色有日配、中配两个版本时,会显示成 阿罗娜/日配、阿罗娜/中配 两个角色。

编辑情绪

点角色卡片上的 编辑情绪:

  1. 主声音 {main}:选一条 3~10 秒的参考音频。留空的话,节点会自己挑一条。
  2. 情绪:每行填一个情绪名(例如“开心”),再从角色文件夹里选一条参考音频。输入框可以直接打字搜索文件名。
  3. 参考台词:可以不填,节点会自己去找同名 .txt 或 GPT-SoVITS 的标注文件。
  4. 点 保存。设置会写进角色文件夹里的 anomalous_tts.json,由节点检查后保存。选了不存在的文件时,会提示原因,什么都不会改。

文件名本身带情绪的音频(例如 Arona_Talk.开心.wav)会被自动识别,不用再填一遍。只是扩展名的部分不算情绪,例如 Arona_Talk.ogg.wav、Arona_Talk.ogg (1).ogg。

角色列表会缓存一会儿,切换页面不会卡。往模型文件夹里加了角色或音频后,点 刷新音色 才会重新读取。

台词里的其他写法

  • [普拉娜]:换人说。要写角色名或别名。
  • [pause:1s]:停顿。

5. 常见问题

现象 原因和解决
拖到节点上提示“列表里还没有 …” ComfyUI 还没刷新节点定义。按 R 后再拖
标题栏拖不动 这个角色没有主声音
拖到别的语音节点被拒绝 目前只支持“角色语音 (GPT-SoVITS)”节点
卡片上提示“没有找到合适的主声音” 角色文件夹里没有 3~10 秒、找得到台词的音频。点“编辑情绪”手动选一条
新放进去的角色或音频没出现 点 刷新音色。节点那边在 ComfyUI 里按 R 刷新下拉框
侧栏里看不到“GPT-SoVITS 设置”,工具栏上没有“导入角色” Anomalous_TTS 版本太旧(没有接口版本 3)。更新 Anomalous_TTS 后重启 ComfyUI
同名文件导入时报“有重名的文件” Anomalous_TTS 早于接口版本 9。更新后重启 ComfyUI
“导入角色”是灰的 页面是从别的设备打开的。导入会写文件,只能在运行 ComfyUI 的电脑上做