1794 lines
105 KiB
Markdown
Executable File
1794 lines
105 KiB
Markdown
Executable File

|
||
|
||
<h1><img src="assets/logo_small.png" alt="AIIA Logo" align="center" /> AIIA Nodes for ComfyUI</h1>
|
||
|
||
欢迎来到 AIIA Nodes for ComfyUI 仓库!这是一个旨在为 ComfyUI 提供一系列强大、直观且高度可定制的节点的集合。这些节点专注于简化复杂的工作流,并为创意工作者提供最大的灵活性。
|
||
|
||
本节点套件致力于解决 ComfyUI 工作流中的核心痛点。
|
||
|
||
---
|
||
|
||
## 🚀 全新旗舰节点:AIIA 媒体浏览器 🚀
|
||
|
||
**还在费力地翻找 `output` 文件夹,或者对着一堆时间戳命名的文件猜内容吗?**
|
||
|
||
我们隆重推出 **AIIA 媒体浏览器**——一个完全集成在 ComfyUI 内部的、功能完备的媒体文件管理中心。它的诞生,旨在彻底改变你管理和使用生成结果的方式,让整个过程变得高效、直观且充满乐趣。
|
||
|
||

|
||
|
||
### ✨ 为何选择 AIIA 浏览器?
|
||
|
||
* **告别猜测:** 无需离开 ComfyUI 即可即时预览图片、视频和音频。
|
||
* **为性能而生:** 专为处理包含数千乃至数万个文件的海量输出文件夹而设计,极致流畅,拒绝卡顿。
|
||
* **精美且直观:** 拥有现代化的用户界面,与 ComfyUI 原生主题无缝融合,宛若天生。
|
||
|
||
### 核心亮点
|
||
|
||
#### 1. 强大的核心功能
|
||
|
||
* **一键加载工作流**: 直接从浏览器中加载任何图片、视频或工作流文件,瞬间恢复你的创作环境。
|
||
* **直接下载文件**: 无需再打开系统文件夹,一键下载你需要的任何文件。
|
||
* **内容丰富的工具提示 (Tooltip)**: 将鼠标悬停在任何文件或文件夹上,即可看到包含详细元数据(尺寸、时长、日期等)的浮窗,甚至还能 **直接在浮窗里预览图片、视频和音频**!
|
||
* **高级排序与筛选**: 按 **名称、日期、大小、类型、尺寸或时长** 对文件进行排序,并可选择隐藏文件夹,总能快速找到你想要的。
|
||
|
||
#### 2. 顶级的界面与用户体验
|
||
|
||
* **双视图模式:** 可在经典的 **图标视图**(支持缩放)和信息详尽的 **列表视图** 之间一键切换。
|
||
* **沉浸式全屏查看器:** 双击文件即可进入一个独立的媒体查看器。支持视频/音频播放、用于快速导航的胶片缩略图,并提供多种导航方式(鼠标滑动、滚轮、键盘方向键和长按按钮)。
|
||
* **全键盘导航:** 为高级用户设计,你可以完全通过键盘在文件夹之间穿梭、选择文件、打开预览、显示/隐藏工具提示,实现真正的“效率流”操作。
|
||
* **交互式路径与面包屑导航:** 通过可点击的面包屑轻松跳转目录,或直接输入路径进行导航。
|
||
|
||
#### 3. 无与伦比的性能与技术
|
||
|
||
* **高性能后端:** 基于 Python 的异步后端,利用 `ffmpeg` 和 `Pillow` 进行即时的缩略图与视频海报生成。
|
||
* **智能缓存:** 所有缩略图和元数据都会被智能缓存。浏览器仅在文件发生变化时才重新生成,确保后续加载瞬间完成。
|
||
* **懒加载与虚拟滚动:** 我们在图标视图中使用 `IntersectionObserver`,在列表视图中实现 **完全虚拟滚动**。这意味着浏览器永远只渲染屏幕上可见的内容,即使面对上万个文件也能保持极低的内存占用和零延迟。
|
||
* **无阻塞元数据分析:** 在列表视图中,浏览器会在后台批量分析视频时长、尺寸等元数据,并以进度条显示,完全不阻塞UI操作。
|
||
|
||
#### 4. 灵活的自定义选项
|
||
|
||
* 在设置面板中,你可以根据习惯隐藏文件夹侧边栏,或开关视频预览功能。所有设置都会被自动保存。
|
||
|
||
---
|
||
|
||
## 🚀 核心设计理念:为大规模生成而生
|
||
|
||
本节点套件的另一个核心设计初衷,是为了攻克困扰许多用户的技术难题,**特别是解决在生成长视频或处理大量图像帧时常见的内存不足(OOM)问题**。
|
||
|
||
### 🌟 告别OOM:为处理海量帧而生
|
||
|
||
处理成百上千张高清图像帧时,轻易就会耗尽 VRAM 和系统内存,导致工作流中断。AIIA 节点通过 **增量式处理(Incremental Processing)** 的策略从根本上解决了这个问题。
|
||
|
||
#### v1.9.21+ 内存优化
|
||
|
||
自 v1.9.21 起,**AIIA Body Sway** 和 **AIIA Video Combine** 节点实现了激进的内存管理策略:
|
||
* **分批处理**:每次只处理 50 帧,处理完立即释放中间变量。
|
||
* **逐帧释放**:每帧转换后立即 `del` 并定期 `gc.collect()`。
|
||
* **GPU 内存同步释放**:处理前移至 CPU 并调用 `torch.cuda.empty_cache()`。
|
||
|
||
这意味着即使处理 **1500+ 帧的高分辨率视频**(如 1288×1920),也能在合理的内存占用下完成,**无需磁盘中转**。
|
||
|
||
#### 两种工作模式
|
||
|
||
我们提供了两种工作模式,以适应不同场景:
|
||
|
||
- **内存模式 (推荐)**: 直接将上游节点的 `IMAGE` 张量输入。v1.9.21+ 的优化使其可处理数千帧而不 OOM。
|
||
- **磁盘模式**: 对于极端长序列或内存受限环境,仍可通过 `frames_directory` 从磁盘流式读取帧。
|
||
|
||
### 🔧 强大且可扩展的预设系统
|
||
|
||
通过简单的 **JSON 文件**,您可以完全自定义视频和音频的编码参数,并将其保存为可复用的格式预设。这使得高级用户可以轻松实现复杂的 FFmpeg 配置,而无需修改任何代码。
|
||
|
||
---
|
||
|
||
## 🛠️ 安装与先决条件
|
||
|
||
### 1. 安装 FFmpeg (视频与浏览器节点强依赖)
|
||
|
||
视频合并节点和媒体浏览器的视频功能依赖 `ffmpeg` 和 `ffprobe`。
|
||
|
||
- 访问 [FFmpeg 官网](https://ffmpeg.org/download.html) 下载并安装。
|
||
- **强烈建议**将 FFmpeg 的 `bin` 目录添加到您系统的 `PATH` 环境变量中。
|
||
- 在终端中运行 `ffmpeg -version` 和 `ffprobe -version` 来验证安装。
|
||
|
||
### 2. 安装 SoX (VibeVoice 变速不变调必须)
|
||
|
||
VibeVoice 节点的 `speed` 参数依赖系统级 `sox` 命令。
|
||
|
||
- **Ubuntu/Debian**: `sudo apt-get update && sudo apt-get install -y libsox-dev sox`
|
||
- **macOS**: `brew install sox`
|
||
- **Windows**: 下载 [SoX 编译版](https://sourceforge.net/projects/sox/files/sox/) 并将目录添加到 `PATH`。
|
||
|
||
### 3. 安装 NeMo 模型 (音频AI节点必须)
|
||
|
||
音频处理节点(如说话人日志)依赖 NeMo 模型。
|
||
|
||
- 在 ComfyUI 的 `models` 目录下,创建一个名为 `nemo_models` 的子目录。最终路径应为 `ComfyUI/models/nemo_models/`。
|
||
- 从 [NVIDIA NeMo 目录](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/nemo/models/diar_sortformer_telephonic_tele_ft_marblenet) 下载所需的 `.nemo` 模型文件。
|
||
- 基础模型: `diar_sortformer_4spk-v1.nemo`
|
||
- 流式模型 (v2.1): `diar_streaming_sortformer_4spk-v2.1.nemo`
|
||
- 将下载的 `.nemo` 文件放入 `ComfyUI/models/nemo_models/` 目录中。
|
||
|
||
**使用 huggingface-cli 下载 (推荐)**:
|
||
`nvidia/nemo-models` 仓库很大,建议直接下载指定文件:
|
||
|
||
```bash
|
||
# 进入 ComfyUI/models 目录
|
||
cd ComfyUI/models
|
||
mkdir -p nemo_models
|
||
|
||
# 下载基础模型
|
||
hf download nvidia/nemo-models diar_sortformer_4spk-v1.nemo --local-dir nemo_models
|
||
|
||
# 下载流式模型
|
||
hf download nvidia/nemo-models diar_streaming_sortformer_4spk-v2.1.nemo --local-dir nemo_models
|
||
```
|
||
|
||
### 4. 安装本节点套件
|
||
|
||
进入 ComfyUI 的自定义节点目录,然后克隆本仓库:
|
||
|
||
```bash
|
||
cd ComfyUI/custom_nodes/
|
||
git clone https://github.com/havvk/ComfyUI_AIIA.git
|
||
```
|
||
|
||
最后,**重启 ComfyUI**。
|
||
|
||
---
|
||
|
||
## ✨ 可用节点
|
||
|
||
### 1. 媒体管理 (Media Management)
|
||
|
||
#### AIIA 媒体浏览器
|
||
|
||
1. 安装并重启后,一个 **"AIIA Browser"** 按钮会出现在 ComfyUI 主菜单中。
|
||
2. 点击即可启动浏览器。
|
||
3. 尽情探索你的 `output` 目录吧!
|
||
|
||
---
|
||
|
||
### 2. 视频生成与合成 (Video Generation & Compositing)
|
||
|
||
#### 2.1 视频合并 (AIIA, 图像或目录)
|
||
|
||
这是一个功能强大且高度可定制的视频合并节点,是您工作流中处理视频生成的终极解决方案。
|
||
|
||

|
||
|
||
**核心亮点**:
|
||
|
||
- **内存高效**: 通过 `frames_directory` 输入,可以处理几乎无限数量的图像帧,完美解决了 OOM 问题。
|
||
- **直接张量输入**: 接受上游节点的 `IMAGE` 张量,方便快速迭代和测试。
|
||
- **全面的音频控制**: 支持 `AUDIO` 张量和外部文件,并提供对编解码器和码率的精细控制。
|
||
- **智能自动配置**: `auto` 模式能自动应用格式预设中的音频参数,并能自动检测源文件的码率。
|
||
- **安全清理帧目录** (v1.11.1 New): `cleanup_frames` 开关(默认关闭)。开启后,视频合成**成功**时自动删除输入的 `frames_directory`。
|
||
- **防误删机制**: 仅删除包含 `.aiia_temp` 标记文件的目录(由 AIIA 上游节点自动写入),用户自己提供的素材目录**永远不会被误删**。
|
||
- 合成**失败**时不执行任何删除操作,确保帧文件安全。
|
||
|
||
#### 2.2 FLOAT 影片生成 (内存与磁盘模式)
|
||
|
||
这组节点封装了先进的 **FLOAT** 模型,能够根据参考图像和音频生成高质量的口型同步影片。我们提供了两种模式,以应对不同长度的生成需求。
|
||
|
||
**1. Float Process (AIIA In-Memory)**
|
||
|
||
- **用途**: 用于生成**短片**、快速预览或直接与其他内存节点(如视频合并的 `images` 输入)连接。
|
||
- **输出**: `IMAGE` 张量。
|
||
- **优势**: 速度快,流程无缝。
|
||
- **限制**: 受限于您的 VRAM 和系统内存大小,不适合生成长视频。
|
||
|
||
**2. Float Process (AIIA To-Disk for Long Audio)**
|
||
|
||
- **用途**: 专门用于**长音频**的影片生成,是**解决OOM问题的关键**。
|
||
- **输出**: `STRING` (包含所有生成帧的目录路径) 和 `INT` (帧总数)。
|
||
- **优势**: 在解码过程中,节点以小批量方式处理帧并**逐帧保存到磁盘**,内存占用极低,可以处理任意长度的音频。
|
||
- **工作流**: 此节点的输出目录可以直接作为 **视频合并节点** 的 `frames_directory` 输入,构建一个完整的、内存高效的 talking head 视频生成管线。
|
||
|
||
#### 2.3 PersonaLive 视频驱动 (AIIA Integrated)
|
||
|
||
这组节点基于强大的 [PersonaLive](https://github.com/GVCLab/PersonaLive) 模型,专为生成高质量的 Talking Head 视频而设计。我们将原版代码完全重构并集成到 ComfyUI 中,通过特有的分块处理和磁盘流式技术,**彻底解决了长视频生成时的显存和内存溢出 (OOM) 问题**。
|
||
|
||
**1. PersonaLive Checkpoint Loader**
|
||
|
||
- **用途**: 加载所有必要的模型权重(Base Model, VAE, PersonaLive Weights)。
|
||
- **功能**: 首次运行时会自动从 HuggingFace 下载所需模型,无需手动配置。
|
||
|
||
**2. PersonaLive Photo Sampler (AIIA In-Memory)**
|
||
|
||
- **用途**: 标准生成模式,适合**短视频**或**中等长度**视频。
|
||
- **输出**: `IMAGE` 张量(所有生成的帧)。
|
||
- **机制**: 节点会自动将长视频切分为多个 Chunk 进行推理,每推理完一个 Chunk 就会清空显存,从而允许你在有限的显存下生成较长的视频。
|
||
|
||
**3. PersonaLive Photo Sampler (AIIA To-Disk for Long Video)**
|
||
|
||
- **用途**: 专门用于**超长视频**生成。这是解决系统内存(System RAM)OOM 的终极方案。
|
||
- **输出**: `STRING` (包含生成帧的目录路径) 和 `INT` (帧数)。
|
||
- **最佳实践**: 将此节点的输出目录直接连接到 **AIIA Video Combine** 节点,即可实现从生成到合成的全流程 OOM-Safe。
|
||
|
||
#### 2.4 EchoMimic V3 (AIIA Integrated)
|
||
|
||
这组节点集成了最新的 **EchoMimic V3** (1.3B Parameters) 模型,它是目前开源界效果最惊艳的 Talking Head 解决方案之一。
|
||
|
||
**特点**:
|
||
|
||
- **多模态驱动**: 支持 **Audio Only** (仅音频驱动) 和 **Audio + Reference Pose** (音频+参考姿态) 驱动。
|
||
- **自然度极高**: 相比 float 等早期模型,V3 在头部运动、表情微表情的自然度上有巨大提升。
|
||
- **ComfyUI 原生**: 我们将其封装为标准的 Loader 和 Sampler 节点,支持流式生成和内存优化。
|
||
|
||
**1. EchoMimic V3 Loader**
|
||
|
||
- **用途**: 加载模型权重 (Transformer, VAE, Wav2Vec, etc.)。
|
||
- **参数**:
|
||
- `model_subfolder`: 模型子目录名 (默认 `Wan2.1-Fun-V1.1-1.3B-InP`)。
|
||
- `device`: 指定运行设备 (CUDA)。
|
||
|
||
**2. EchoMimic V3 Sampler**
|
||
|
||
- **用途**: 执行推理生成。
|
||
- **输入**:
|
||
- `ref_image`: 参考人物图片 (建议 1:1 比例,如 768x768)。
|
||
- `ref_audio`: 驱动音频。
|
||
- **参数**:
|
||
- `cfg`: 视觉引导系数 (默认 4.0)。
|
||
- `audio_cfg`: 音频引导系数 (默认 2.9)。
|
||
- `enable_teacache`: **True** (默认)。开启后生成速度提升 1.5 倍以上,且质量无损。
|
||
- `keep_model_loaded`: **True** (默认)。即使显存占用增加,也强制将模型保留在 GPU 上,显著减少多段视频生成时的加载时间。
|
||
- `negative_prompt`: 已内置优化过的 **眼部修复 (Eye Correction)** 提示词,有效防止翻白眼和眼神飘忽。
|
||
|
||
**🚀 性能优化 (Performance)**:
|
||
|
||
- **Flash Attention 2**: 强烈推荐安装。检测到时会自动启用,大幅提升推理速度。
|
||
- **TeaCache**: 默认启用。通过缓存部分 Transformer 层计算,大幅加速生成。
|
||
- **Full GPU Mode**: 默认启用。适合显存充足 (24GB+) 用户,享受极致流畅的生成体验。
|
||
|
||
**🛠️ 模型下载指南 (Manual Download Guide)**
|
||
|
||
由于 EchoMimic V3 模型较大且组件较多,目前**不支持自动下载**,请按以下步骤手动准备模型。
|
||
|
||
目标目录: `ComfyUI/models/EchoMimicV3/`
|
||
|
||
**目录结构**:
|
||
|
||
```text
|
||
ComfyUI/models/EchoMimicV3/
|
||
├── Wan2.1-Fun-V1.1-1.3B-InP/ <-- 主模型目录
|
||
│ ├── transformer/
|
||
│ │ ├── config.json
|
||
│ │ └── diffusion_pytorch_model.safetensors
|
||
│ ├── vae/
|
||
│ │ ├── config.json
|
||
│ │ └── diffusion_pytorch_model.safetensors
|
||
│ ├── text_encoder/
|
||
│ ├── tokenizer/
|
||
│ ├── image_encoder/
|
||
│ └── scheduler/
|
||
└── wav2vec2-base-960h/ <-- 音频编码器 (必需)
|
||
├── config.json
|
||
├── pytorch_model.bin
|
||
└── ...
|
||
```
|
||
|
||
**下载地址**:
|
||
|
||
1. **主模型 (EchoMimicV3)**:
|
||
|
||
- HuggingFace: [BadToBest/EchoMimicV3](https://huggingface.co/BadToBest/EchoMimicV3)
|
||
- **下载命令 (推荐)**:
|
||
```bash
|
||
hf download BadToBest/EchoMimicV3 --local-dir models/EchoMimicV3/EchoMimicV3
|
||
```
|
||
- *注意:此模型包含 EchoMimic 特有的 Transformer 权重,是生成嘴型的核心。*
|
||
2. **底模 (Wan2.1-Fun-V1.1-1.3B-InP)**:
|
||
|
||
- HuggingFace: [alibaba-pai/Wan2.1-Fun-V1.1-1.3B-InP](https://huggingface.co/alibaba-pai/Wan2.1-Fun-V1.1-1.3B-InP)
|
||
- **下载命令**:
|
||
```bash
|
||
hf download alibaba-pai/Wan2.1-Fun-V1.1-1.3B-InP --local-dir models/EchoMimicV3/Wan2.1-Fun-V1.1-1.3B-InP
|
||
```
|
||
- *注意:作为 fallback 来源,提供 VAE、Text Encoder 和 Image Encoder权重。*
|
||
3. **音频编码器 (wav2vec2-base-960h)**:
|
||
|
||
- HuggingFace: [facebook/wav2vec2-base-960h](https://huggingface.co/facebook/wav2vec2-base-960h)
|
||
- **下载命令**:
|
||
```bash
|
||
hf download facebook/wav2vec2-base-960h --local-dir models/EchoMimicV3/wav2vec2-base-960h
|
||
```
|
||
|
||
**环境依赖**:
|
||
|
||
- 请确保安装了 `requirements.txt` 中的依赖,如 `diffusers>=0.30.1`。节点加载时会尝试自动引用,但如果报错缺包,请手动安装。
|
||
|
||
#### 2.5 Ditto Talking Head (AIIA Integrated)
|
||
|
||
这组节点集成了 [Ditto](https://github.com/antgroup/ditto-talkinghead) 数字人模型。我们采用了 **PyTorch** 原生实现,避免了复杂的 TensorRT 编译过程,让用户能够“开箱即用”地生成高质量的 Talking Head 视频。
|
||
|
||
**特点**:
|
||
|
||
- **PyTorch Native**: 无需安装 TensorRT,兼容性更好。
|
||
- **In-Memory Pipeline**: 针对 ComfyUI 优化的内存内处理流程,无需生成中间视频文件。
|
||
- **自动模型管理**: 支持自动下载模型权重。
|
||
|
||
**1. AIIA Ditto Loader**
|
||
|
||
- **用途**: 下载并加载 Ditto 模型 (约 1.2GB)。
|
||
- **参数**:
|
||
- `model_name`: 模型名称 (默认 `ditto-talkinghead`)。
|
||
- `device`: 运行设备 (CUDA/CPU)。
|
||
|
||
**2. AIIA Ditto Sampler**
|
||
|
||
- **用途**: 执行推理生成。
|
||
- **输入**:
|
||
- `pipe`: 来自 Loader 的模型管道。
|
||
- `ref_image`: 参考人物图片 (建议正方形,人脸居中)。
|
||
- `audio`: 驱动音频。
|
||
- `fps`: 建议 **25** (Ditto 针对 25FPS 训练)。即使输入其他值,目前内部逻辑也会优先保证 25FPS 的同步率。
|
||
- **输出**: `IMAGE` (视频帧), `AUDIO`。
|
||
- **高级参数 (Advanced Parameters)**:
|
||
- `seed`: **随机种子 (Random Seed)**。
|
||
- 控制扩散模型的噪声生成。
|
||
- **关键作用**: 在长语音生成中,当触发“静音重置”时,种子会被重置,从而确保每一句话的生成条件都与第一句话完全一致,彻底消除“长语音嘴型漂移”和“对口型不准”的问题。
|
||
- `crop_scale`: (默认 2.3) **面部工作区视野 (Face Context Scale)**。
|
||
- **注意**: 此参数**不会改变输出视频的分辨率**,它决定了模型“看”到了多少人脸周围的内容。
|
||
- **数值越大 (如 2.5)**: **广角视野**。模型能覆盖更多头发、脖子和背景。
|
||
- ✅ 优点:适合头部运动幅度大的场景,不容易出框。
|
||
- ❌ 缺点:在固定的推理画布中,人脸占比变小,生成的五官细节(如牙齿、眼神)可能会变糊。
|
||
- **数值越小 (如 2.0)**: **特写视野**。模型聚焦于面部核心区域。
|
||
- ✅ 优点:人脸占比大,五官细节极其清晰锐利。
|
||
- ❌ 缺点:容易裁掉下巴或额头,头部大幅运动时可能会出现“断头”或伪影。
|
||
- **推荐值**:
|
||
- 标准场景: **2.3**
|
||
- 大动态/全身/半身: **2.5** (牺牲细节换稳定性)
|
||
- 大头照/证件照: **2.0** (追求极致细节)
|
||
- `emo`: (默认 Neutral) 表情控制。可选 Angry, Happy, Sad 等。
|
||
- `drive_eye`: (默认 True) 是否驱动眼睛。关闭后眼睛将保持参考图状态(或微动),适合原图眼神较好的情况。
|
||
- `chk_eye_blink`: (已废弃,请使用 `blink_mode`)。
|
||
- `blink_mode`: (默认 Natural) **眨眼模式控制**。
|
||
- `Natural`: **拟人化随机眨眼**。
|
||
- 基础频率:90-150帧/次 (约 3.6s - 6.0s)。
|
||
- `Slow`: 慢速沉稳眨眼 (120-200帧/次)。
|
||
- `Fast`: 快速频繁眨眼 (10-40帧/次)。
|
||
- `None`: **彻底关闭眨眼**。
|
||
- `blink_amp`: (v1.9.1 New) **眨眼幅度控制**。
|
||
- **1.0 (默认)**: 标准闭眼幅度。
|
||
- **< 1.0 (推荐 0.8)**: 适合**男性角色**或眼睛较小的人物,避免“用力挤眼”的感觉。
|
||
- **> 1.0**: 加深闭眼力度。
|
||
- `mouth_amp`: (v1.9.1 New) **嘴型幅度控制**。
|
||
- **1.0 (默认)**: 标准嘴部开合幅度。
|
||
- **> 1.0 (推荐 1.1-1.2)**: 适合**大声说话**或需要更夸张表情的场景,增强口型辨识度。
|
||
- **< 1.0**: 适合轻声细语。
|
||
- `relax_on_silence`: (默认 True) **静音归位 (Relax Face on Silence)**。
|
||
- 结合下方的 `silence_release` 参数,针对静音片段进行**平滑过渡**(慢速闭合),避免“紧绷抿嘴”。
|
||
- **智能预测 (Predictive Logic)**: 自动识别短停顿(如逗号)与长静音(如句号)。短停顿不触发闭嘴动画,由模型自由发挥;长静音则触发优雅的慢速闭合。
|
||
- **防止累积误差 (Drift Correction)**:
|
||
- **精密网格对齐 (Exact Onset Alignment)**: 将模型的时间步长精确对齐到语音的开始(Onset),而不是固定的处理块。
|
||
- **状态重置 (State & RNG Reset)**: 在长静音后,强制重置模型状态和**随机种子**,确保每一句话的生成质量一致,彻底消除“长语音嘴型漂移”。
|
||
- `silence_release`: (v1.9.2 New) **静音闭嘴速度 (Adsr Release Control)**。
|
||
- **Natural (0.8s) [默认]**:
|
||
- 自然平衡模式。适合大多数常速对话。
|
||
- 触发阈值: >0.88s。
|
||
- **Fast (0.5s)**:
|
||
- 快速响应模式。适合语速极快、充满激情的演讲。
|
||
- 触发阈值: >0.56s。
|
||
- **Deep (1.3s)**:
|
||
- 深沉模式。适合朗诵、讲故事或情感类内容。超长尾韵,极度平滑。
|
||
- 触发阈值: >1.4s。
|
||
- `ref_threshold`: (默认 0.005) **静音检测相对阈值 (Relative Silence Threshold)**。
|
||
- 现在的阈值是基于**全段音频峰值音量**的比例 (例如 0.005 = 0.5% 的峰值音量)。
|
||
- 这意味着无论音频整体是大声还是小声,系统都能自动适应,准确捕捉微弱的语音片段。
|
||
- 只有低于此比例的音量才会被视为静音。
|
||
- `smo_k_d`: (默认 3) 运动平滑系数。数值越大动作越柔和,可抑制面部抖动。
|
||
- `hd_rot_p` / `y` / `r`: 头部旋转微调 (Pitch/Yaw/Roll)。
|
||
- `speech_pitch`: (v1.10.0 New) **说话时俯仰角补偿 (Speech Pitch Offset)**。
|
||
- 用于修正"说话时头抬得太高"或"需要低头说话"的场景。此偏移量仅在说话期间生效,并随语音强度平滑切入切出。
|
||
- **正值 (+) = 低头 (Look Down)**。例如 `5.0` 表示说话时微微低头。
|
||
- **负值 (-) = 抬头 (Look Up)**。
|
||
- `mouth_smoothing`: (v1.9.5 New) **嘴型惯性平滑 (Mouth Motion Inertia)**。
|
||
- 防止模型输出的嘴型瞬间开合(如爆破音时),增加物理惯性感。
|
||
- **`None (Raw)`**: 无平滑,模型原始输出。追求极致对口型,容忍偶尔快速开合。
|
||
- **`Light`** (0.3): 轻微平滑,**推荐快语速使用**。
|
||
- **`Normal`** (0.5) [默认]: 适中平滑,常规对话推荐。
|
||
- **`Heavy`** (0.7): 强力平滑,适合低质量音频或模型输出抖动严重的情况。
|
||
- `save_to_disk`: (v1.9.24 New) **OOM 安全模式 (OOM-Safe Mode)**。
|
||
- **`Memory (Default)`**: 传统模式,所有帧保存在内存中。适合短视频(<1000帧)。
|
||
- **`Disk (OOM-Safe)`**: **长视频推荐**。边生成边保存到磁盘,无 OOM 风险。
|
||
- 选择 Disk 模式时,`frames_dir` 输出会包含帧保存路径,可直接连接 **AIIA Video Combine** 节点的 `frames_directory` 输入。
|
||
- ⚠️ Disk 模式下 `images` 输出为占位符,请使用 `frames_dir` 连接后续节点。
|
||
- **输出**:
|
||
- `images`: 生成的视频帧序列(Memory 模式)或占位符(Disk 模式)。
|
||
- `audio`: 透传的音频。
|
||
- `frames_dir`: (v1.9.24 New) Disk 模式下的帧保存路径。Memory 模式下为空字符串。
|
||
|
||
**🛠️ 模型下载指南 (Manual Download Guide)**
|
||
|
||
如果自动下载失败,请手动下载模型并放入 `ComfyUI/models/ditto/` 目录。
|
||
|
||
**目标目录结构**:
|
||
|
||
```text
|
||
ComfyUI/models/ditto/
|
||
├── ditto_pytorch/
|
||
│ ├── audio2motion.pth
|
||
│ ├── ...
|
||
└── ditto_cfg/
|
||
├── v0.4_hubert_cfg_pytorch.pkl
|
||
├── ...
|
||
```
|
||
|
||
**下载地址**:
|
||
|
||
- HuggingFace: [digital-avatar/ditto-talkinghead](https://huggingface.co/digital-avatar/ditto-talkinghead)
|
||
|
||
**下载命令**:
|
||
|
||
```bash
|
||
# 进入 models 目录
|
||
cd ComfyUI/models
|
||
|
||
# 下载模型 (直接下载到 ditto 目录,避免多层嵌套)
|
||
hf download digital-avatar/ditto-talkinghead --local-dir ditto
|
||
```
|
||
|
||
#### 2.6 身体微动后处理 (Body Sway Post-Processing)
|
||
|
||
这个轻量级后处理节点可以为 Ditto 等 Talking Head 模型的输出添加**模拟的身体晃动效果**,让人物看起来更加自然、有呼吸感。
|
||
|
||
**工作原理**:
|
||
* 通过**裁切平移 + 轻微旋转**模拟人体站立或坐着时的自然重心漂移和呼吸起伏。
|
||
* 使用多频正弦波叠加(基于黄金比例)生成平滑、有机的运动轨迹。
|
||
* **纯裁切**方式,不放大图像,保持原始画质。
|
||
|
||
**AIIA Body Sway 节点**
|
||
|
||
- **输入**:
|
||
- `images` (可选): 来自 Ditto 等节点的视频帧张量 (Memory 模式)
|
||
- `frames_directory` (可选, v1.9.25 New): 帧目录路径 (Disk 模式,连接 Ditto 的 `frames_dir` 输出)
|
||
- **参数**:
|
||
- `crop_ratio`: (默认 0.99) 输出尺寸占输入的比例。
|
||
- 0.99 = 保留 99%,晃动幅度较小 (推荐)
|
||
- 0.98 = 保留 98%,晃动幅度中等
|
||
- 支持三位小数 (如 0.995)
|
||
- `rotation_amplitude`: (默认 0.1) 最大旋转角度 (度)。
|
||
- `smoothness`: (默认 0.02) Perlin 噪声平滑度。数值越小,运动越缓慢。
|
||
- `seed`: 控制随机轨迹。
|
||
- **输出**:
|
||
- `images`: 应用了微动效果的帧 (Memory 模式) 或占位符 (Disk 模式)。
|
||
- `output_frames_dir` (v1.9.25 New): Disk 模式下处理后的帧保存路径。
|
||
|
||
> [!NOTE]
|
||
> v1.9.17 改进:使用 **Perlin 噪声** 替代正弦波,运动更有机自然。**已移除垂直方向位移**,减少叠加 Ditto 头部运动时的"晕船"感。
|
||
|
||
> [!TIP]
|
||
> **OOM-Safe 工作流** (v1.9.24+): Ditto (`Disk`) → BodySway (`frames_directory`) → VideoCombine (`frames_directory`),全流程无 OOM 风险。
|
||
> **性能无损** (v1.9.28+): 采用并行 I/O 和零压缩策略,**Disk 模式生成速度与 Memory 模式完全一致** (~30fps+),且极大降低 RAM 占用。强烈推荐长视频生成使用!
|
||
> **自动清理** (v1.11.1 New): 开启 VideoCombine 的 `cleanup_frames` 后,中间帧目录会在合成成功后自动删除,无需手动清理磁盘。
|
||
|
||
### 3. 音频智能处理 (Intelligent Audio Processing)
|
||
|
||
#### 3.1 说话人日志 (Diarization)
|
||
|
||
这组节点利用 **NeMo Sortformer** E2E 模型,为您的音频提供先进的说话人识别功能。在4090RTX显卡上只需2秒钟就能完成10分钟音频的声纹分割聚类任务。
|
||
|
||
**1. AIIA Generate Speaker Segments**
|
||
|
||
- **用途**: 对一段音频进行分析,找出“**谁在什么时候说话**”。
|
||
- **输入**: `AUDIO` 张量。
|
||
- **输出**: `WHISPER_CHUNKS` (一个结构化的数据,包含一系列带有说话人标签的时间片段,如 `SPEAKER_00`, `SPEAKER_01` 等)。
|
||
- **亮点**: 提供多种**后处理配置**(从宽松到严格),让您可以微调分割的灵敏度,以适应不同质量的音频。
|
||
|
||
**2. AIIA E2E Speaker Diarization**
|
||
|
||
- **用途**: 将 `Generate Speaker Segments` 的识别结果**精确地应用**到由 Whisper 等工具生成的、带有文本的 `WHISPER_CHUNKS` 上。
|
||
- **输入**: `WHISPER_CHUNKS` (来自文本转录节点) 和 `AUDIO` 张量。
|
||
- **输出**: 更新后的 `WHISPER_CHUNKS`,其中每个文本块都已被赋予了最匹配的说话人标签。
|
||
- **工作流**: `(音频) -> Whisper -> (文本Chunks)` + `(音频) => E2E Diarizer` => **最终带有说话人标签的文本稿**。
|
||
|
||
#### 3.2 说话人隔离与合并 (Speaker Isolation & Merger)
|
||
|
||
**Audio Speaker Isolator (AIIA)**
|
||
|
||
- **用途**: 根据说话人日志(Diarization)产生的 JSON 数据,从原始音轨中精确提取属于特定说话人的声音。
|
||
- **输入**:
|
||
- `audio`: 原始音频张量。
|
||
- `whisper_chunks`: 由 Diarization 节点生成的 JSON 片段数据。
|
||
- `speaker_label`: 要提取的说话人 ID(例如 "SPEAKER_00")。
|
||
- `isolation_mode`:
|
||
- **Maintain Duration (推荐)**: 输出与原音频等长的音轨,非目标说话人部分填充静音。这对于 **视频驱动(Talking Head)** 工作流至关重要,能确保口型与原视频时间轴严格对齐。
|
||
- **Concatenate**: 将属于该说话人的所有片段无缝拼接在一起,去除中间的空隙。
|
||
- **亮点**:
|
||
- **防爆音**: 内置微小的淡入淡出(Fade In/Out)处理,确保片段边缘自然顺滑。
|
||
- **时间对齐**: 专门针对 AIIA 视频节点套件优化,保证音画同步。
|
||
|
||
**Audio Speaker Merger (AIIA)**
|
||
|
||
- **用途**: 将两段不同的音频流合并为一条。通常用于在分别对不同说话人进行视频驱动后,将各自的音轨重新混缩。
|
||
- **输入**:
|
||
- `audio_1`, `audio_2`: 待合并的两段音频。
|
||
- `duration_mode`:
|
||
- `Longest`: 输出时长等于两段音频中的最大值。
|
||
- `Shortest`: 输出时长等于两段音频中的最小值。
|
||
- `Audio 1 / Audio 2`: 严格跟随特定输入段的时长。
|
||
- `Specified`: 手动指定输出秒数。
|
||
- `normalize`: 开启后将自动防止音量叠加导致的破音。
|
||
|
||
#### 3.3 智能切片 (Smart Chunking)
|
||
|
||
**Audio Smart Chunker (Silence-based)**
|
||
|
||
- **用途**: 全量扫描长音频,寻找最优切片方案。
|
||
- **机制**:
|
||
- **全局静音扫描**: 自动识别音频中的天然停顿区间。
|
||
- **贪心优化算法**: 在不超出设定时长(如 27s)的前提下,计算出能让每一刀都切在静音处的片段序列。
|
||
- **输出**: 供 `Voice Conversion (AIIA Unlimited)` 使用的 `whisper_chunks` 引导数据。
|
||
- **协同优势**: 预先规划好切点,避免转换节点在词句中间暴力切分,是彻底消除拼接毛刺的关键。
|
||
|
||
#### 3.4 Voice Conversion (AIIA Unlimited) (CosyVoice 增强)
|
||
|
||
**1. CosyVoice Model Loader (AIIA)**
|
||
|
||
- **用途**: 不需要安装任何其他第三方节点,直接加载 CosyVoice 模型。
|
||
- **功能**:
|
||
- **自动安装依赖**: 首次运行时会自动安装 `cosyvoice` 及其依赖环境。
|
||
- **自动下载模型**: 选择模型后,首次运行会自动从 HuggingFace 下载模型权重。
|
||
- **支持模型**:
|
||
- `Fun-CosyVoice3-0.5B-2512` (最新 CosyVoice 3.0, **推荐**)
|
||
- `CosyVoice2-0.5B` (CosyVoice 2.0)
|
||
- `CosyVoice-300M` 系列 (SFT, Instruct, TTSFRD)
|
||
- **输出**: `COSYVOICE_MODEL` (专为 AIIA Voice Conversion 节点优化)。
|
||
- **✅ 依赖版本兼容性 (Dependency Compatibility)**:
|
||
CosyVoice 对 `transformers` 和 `PyTorch` 版本敏感。AIIA 已内置深度兼容层,**完美支持最新版本的 `transformers`**。
|
||
|
||
| 依赖 | 兼容版本 | 备注 |
|
||
|---|---|---|
|
||
| **transformers** | **全版本兼容** ✅ | AIIA 内置 Qwen2Encoder 兼容层,自动适配新旧版本 |
|
||
| **PyTorch** | ≤ 2.8.1 ✅ / ≥ 2.10.0 ✅ | 2.9.x ❌ (PyTorch regression bug) |
|
||
|
||
> [!NOTE]
|
||
> `transformers` > 4.53 重写了 `Qwen2Model.forward()` 的注意力掩码和隐藏状态输出,导致原版 CosyVoice 生成乱码。AIIA 通过手动逐层迭代 + SDPA 专用掩码 + POST-norm 输出还原,完全绕过了不兼容的新接口,确保与原始训练行为 100% 一致。
|
||
|
||
如遇到 PyTorch 2.9.x 导致的问题,请升级:
|
||
```bash
|
||
pip install torch==2.10.0 torchaudio==2.10.0 --index-url https://download.pytorch.org/whl/cu128
|
||
```
|
||
- **⚠️ 模型下载问题 (Model Download Issues)**:
|
||
如果遇到自动下载卡顿或失败,请**手工下载**模型文件夹,并将其放入 `ComfyUI/models/cosyvoice/` 目录中。
|
||
|
||
**目录结构示例 (Directory Structure)**:
|
||
请注意:文件夹名称建议与下方列表保持一致(即去除 `FunAudioLLM/` 前缀)。
|
||
|
||
```text
|
||
ComfyUI/models/cosyvoice/
|
||
├── Fun-CosyVoice3-0.5B-2512/ <-- 对应选项 FunAudioLLM/Fun-CosyVoice3-0.5B-2512
|
||
│ ├── cosyvoice.yaml
|
||
│ ├── model.pt
|
||
│ └── ...
|
||
├── CosyVoice2-0.5B/ <-- 对应选项 FunAudioLLM/CosyVoice2-0.5B
|
||
└── CosyVoice-300M/ <-- 对应选项 CosyVoice-300M
|
||
```
|
||
|
||
**下载地址 (Download Sources)**:
|
||
|
||
* [ModelScope (魔搭社区)](https://www.modelscope.cn/organization/iic) (搜索 CosyVoice)
|
||
* [HuggingFace - FunAudioLLM](https://huggingface.co/FunAudioLLM)
|
||
|
||
**使用命令行快速下载 (CLI Examples)**:
|
||
|
||
> [!TIP]
|
||
> **国内用户推荐使用 ModelScope (魔搭)**,下载速度更快且无需代理。
|
||
>
|
||
|
||
**1. 使用 ModelScope (推荐):**
|
||
|
||
```bash
|
||
# 进入 ComfyUI/models/cosyvoice 目录
|
||
cd ComfyUI/models/cosyvoice
|
||
|
||
# 下载 CosyVoice 3.0 (0.5B - 推荐)
|
||
modelscope download --model FunAudioLLM/Fun-CosyVoice3-0.5B-2512 --local_dir Fun-CosyVoice3-0.5B-2512
|
||
|
||
# 下载 CosyVoice 2.0 (0.5B)
|
||
modelscope download --model iic/CosyVoice2-0.5B --local_dir CosyVoice2-0.5B
|
||
|
||
# 下载 CosyVoice 300M 系列 (V1)
|
||
modelscope download --model iic/CosyVoice-300M --local_dir CosyVoice-300M
|
||
modelscope download --model iic/CosyVoice-300M-SFT --local_dir CosyVoice-300M-SFT
|
||
modelscope download --model iic/CosyVoice-300M-Instruct --local_dir CosyVoice-300M-Instruct
|
||
```
|
||
|
||
**2. 使用 HuggingFace:**
|
||
|
||
```bash
|
||
# 下载 CosyVoice 3.0 (0.5B)
|
||
huggingface-cli download FunAudioLLM/Fun-CosyVoice3-0.5B-2512 --local-dir Fun-CosyVoice3-0.5B-2512
|
||
|
||
# 下载 CosyVoice 2.0 (0.5B)
|
||
huggingface-cli download FunAudioLLM/CosyVoice2-0.5B --local-dir CosyVoice2-0.5B
|
||
|
||
# 下载 CosyVoice 300M 系列 (V1)
|
||
huggingface-cli download FunAudioLLM/CosyVoice-300M --local-dir CosyVoice-300M
|
||
huggingface-cli download FunAudioLLM/CosyVoice-300M-SFT --local-dir CosyVoice-300M-SFT
|
||
huggingface-cli download FunAudioLLM/CosyVoice-300M-Instruct --local-dir CosyVoice-300M-Instruct
|
||
```
|
||
|
||
**2. Voice Conversion (AIIA Unlimited)**
|
||
|
||
- **用途**: 增强版语音转换节点,解决了原版 CosyVoice3 只能转换 30 秒内语音的限制。
|
||
- **🔥 核心突破**: **全球首个突破时长限制的 ComfyUI 节点**。通过创新的静音点智能切片技术,本节点彻底突破了 CosyVoice 3 官方模型“建议 20 秒、最长 60 秒”的生成限制。它实现了**真正无限时长的音色克隆**,且拼接处自然无痕,完美满足长篇教学视频、有声书等专业制作需求。
|
||
- **创新设计 (创新亮点)**:
|
||
- **语义感知切片 (Semantic-Aware Chunking)**: 节点可选接入 `whisper_chunks` 数据。它能智能识别每句话之间的“缝隙”,优先在说话人停顿的天然空隙处进行切分,从根本上避免了“在单词中间切开”导致的违和感。
|
||
- **牺牲上下文无缝拼接 (Sacrificial Context Stitching)**: 针对生成式模型在重叠区域的相位不稳定性,我们在拼接时采用“牺牲上下文”策略。即利用重叠区域作为生成引导,但在最终拼接时丢弃前一片段的“尾部”,仅保留极短的 Cross-fade(约 50ms),从而彻底消除长音频拼接处的“发虚”和回声感。
|
||
- **双层寻点算法**: 在语义缝隙确定的候选范围内,算法会自动进行微秒级的**物理静音探测**(基于能量平滑曲线),确保切点处于绝对静默状态。
|
||
- **输入**:
|
||
- `model`: 连接 `CosyVoice Model Loader (AIIA)` 的输出。
|
||
- `source_audio`: 待转换的源音频(支持任意时长)。
|
||
- `whisper_chunks` (可选): 接入 Diarization 节点数据,开启语义感知切片。
|
||
- `target_audio`: 目标音色参考音频(自动截取前 30 秒)。
|
||
- `chunk_size`: 目标切片大小(默认 25 秒)。
|
||
- `overlap_size`: 重叠大小,用于平滑衔接。
|
||
|
||
#### 3.5 CosyVoice 3.0 TTS (AIIA) (全版本集成文本转语音)
|
||
|
||
- **用途**: 一个节点通连 CosyVoice 全系列模型 (V1, V2, V3),支持从纯文字描述生成到高保真音色克隆的全场景需求。
|
||
- **🔥 核心架构优势**:
|
||
- **全版本自适应 (Version-Agnostic)**: 自动根据 `Model Loader` 加载的模型版本切换底层推理逻辑。无论是老牌的 300M 系列还是最新的 V3 0.5B 模型,均能获得最佳表现。
|
||
- **300M-Instruct (V1) 专项修复**:
|
||
- **指令跟随 (Fixed)**: 已修复指令读出问题。
|
||
- **能力矩阵**:
|
||
- ✅ **支持**: 情感 (Emotion), 语速 (Speed), 基础性别 (Gender)。
|
||
- ⚠️ **注意**: 请务必使用 **英文指令** (如 "Sad tone", "Fast speed") 以确保生效。中文指令可能被忽略。
|
||
- ❌ **不支持**: 方言 (Dialect)。300M-Instruct 模型无法通过指令修改方言。
|
||
- **V3 稳定性引擎**: 深度适配 V3 模型的推理协议。内置自动补全机制,确保在任何配置下(即使缺少参考音频或内部音色)都能稳定运行,杜绝 `AudioDecoder` 和 `KeyError` 等常见崩溃。
|
||
- **无限长文本支持 (Streaming Architecture)**: 与 VibeVoice (类 GPT) 存在 8K/32K Token 上限不同,CosyVoice 采用流式架构,**理论支持无限长文本输入的连续生成**。系统会自动按句切分流式合成,适合长篇有声读物生成。
|
||
- **🚀 五种核心生成模式**:
|
||
1. **风格/情感建模 (Instruct)**: **文字 + 描述**。通过文字描述(如“非常开心地说”、“四川话”、“语速极快”)来控制生成的表现力。
|
||
2. **音色克隆 (Zero-Shot)**: **文字 + 音频**。通过极短的参考音频,完美复现目标说话人的身份和音色特征。
|
||
3. **混合控制 (Hybrid)**: **音频 + 描述**。在克隆音色的基础上,通过描述词改变情感或方言。
|
||
4. **跨语言 (Cross-Lingual)**: 让你的克隆音色流利说出 9 种语言。
|
||
5. **固定 ID (SFT)**: 直接选取模型内置的高保真音色(如 V3 的原生 01 序列)。
|
||
- **💡 进阶使用建议**:
|
||
- **V3 推荐用法**: 优先通过 `reference_audio` 提供一个高音质片段。V3 模型对比 V1 有质的飞跃,其对音质的还原度和表现力极高。
|
||
- **描述词技巧**: 尽量使用具体的场景化描述(例如“在大雨中嘶吼”或“温柔的枕边话”),V3 模型能捕捉到极其细微的情感波动。
|
||
- **种子音频回退**: 在“描述生成 (Instruct)”模式下,若不提供参考音频,系统将使用内置的高保真种子作为底色。可以通过切换 `base_gender` 来获取不同的基础人声方向。
|
||
|
||
#### 3.6 智能音频增强 (Audio AI Enhance) (推荐)
|
||
|
||
- **用途**: 专为 CosyVoice 等生成式语音设计的增强器。它基于 `resemble-enhance` 强大的 **Conditional Flow Matching (CFM)** 模型,能同时完成后处理降噪和超分辨率(Bandwidth Extension)。
|
||
- **核心能力**: 将任意低采样率(如 22kHz, 16kHz)的输入音频,重构为 **44.1kHz** 的高保真音频。
|
||
|
||
**参数详解**:
|
||
|
||
1. **mode**:
|
||
|
||
- `Enhance (Denoise + Bandwidth Ext)`: **(推荐)** 同时去除底噪并提升音质。
|
||
- `Denoise Only`: 仅去除噪声,不改变音质。
|
||
2. **solver**: 推理求解器。
|
||
|
||
- `Midpoint` (默认): 速度与质量的最佳平衡。
|
||
- `RK4`: 质量最高,但速度慢 2 倍。
|
||
- `Euler`: 速度最快,但可能产生条纹。
|
||
3. **nfe (Steps)**: 迭代步数。
|
||
|
||
- **32**: 快速预览。可能会有残留条纹。
|
||
- **64**: **(推荐)** 标准质量。
|
||
- **128**: 极高画质,消除所有细微伪影,但耗时。
|
||
4. **tau (Temperature)**: 先验温度 (默认 0.5)。
|
||
|
||
- 控制生成过程的“创造力”。
|
||
- 0.5 为平衡点。如果声音发虚,尝试降低到 0.3。
|
||
5. **denoise_strength (去噪强度)** :
|
||
|
||
- 范围 `0.0` - `1.0`。默认 `0.5`。
|
||
- `0.0`: 保留所有原始底噪。
|
||
- `1.0`: 强力去噪。
|
||
- **Tip**: 如果你在频谱图的低频部分看到 **水平条纹 (Hum/Buzz)**,请将此值提高到 **0.8 - 1.0**。
|
||
6. **high_pass_hz (高通滤波) 🔥 新增 (v1.4.82)**:
|
||
|
||
- **范围**: `0 - 1000` Hz。**默认 `0` (关闭)**。
|
||
- **作用**: 在 AI 增强**之前**,直接切除指定频率以下的低频信号。
|
||
- **为什么需要它?**: 如果 `denoise_strength=1.0` 仍无法消除低频条纹,说明 AI 把这些噪音当成了“真实信号”进行增强。
|
||
- **最佳实践**: 遇到顽固的低频条纹时,设置 **60 - 80 Hz**。
|
||
- **安全**: **只要保持默认为 0,此功能完全禁用,对原音质零影响。**
|
||
7. **chunk_seconds / overlap_seconds**:
|
||
|
||
- **30s / 1s**: **(推荐)** 4090 等显卡的最佳平衡点。
|
||
- **注意**: 首次运行时,模型会进行 **JIT 编译(约60秒)**。请耐心等待,这只发生一次。
|
||
|
||
- **依赖**: 首次运行会自动安装 `resemble-enhance`。
|
||
|
||
#### 3.7 智能音频降噪 (VoiceFixer) (Legacy)
|
||
|
||
- **用途**: 用于修复**严重受损**的音频(如老电影、严重削波或极强背景噪)。
|
||
- **注意**: 对于 CosyVoice 生成的较干净语音,**不推荐**使用此节点,因为它通过重构方式修复,容易在干净语音上引入伪影(Spectral Stripes)。请优先使用 `Audio AI Enhance`。
|
||
- **参数**:
|
||
|
||
- `mode`:
|
||
- **0 (Full)**: 去噪 + 去混响 + 去破音 + 超分。适合质量最差的音频。
|
||
- **1 (No DeClip)**: 去噪 + 去混响 + 超分。适合大多数情况。
|
||
- **2 (Denoise Only)**: 仅去噪。
|
||
- `use_cuda`: 是否使用 GPU (推荐)。
|
||
- **依赖**: 首次运行会自动安装 `voicefixer` 库。
|
||
- **⚠️ 模型下载问题 (Model Download Issues)**:
|
||
如果遇到下载卡顿或 `PytorchStreamReader` 报错,请尝试**手工下载**模型文件,并按以下结构放入 `ComfyUI/models/voicefixer` 目录中:
|
||
|
||
```text
|
||
ComfyUI/models/voicefixer/
|
||
├── analysis_module/
|
||
│ └── checkpoints/
|
||
│ └── vf.ckpt (466MB)
|
||
└── synthesis_module/
|
||
└── 44100/
|
||
└── model.ckpt-1490000_trimed.pt (135MB)
|
||
```
|
||
|
||
**下载地址 (Download Links)**:
|
||
|
||
* **vf.ckpt**: [HuggingFace Mirror](https://huggingface.co/Diogodiogod/VoiceFixer-vf.ckpt/resolve/main/vf.ckpt) 或 [Zenodo](https://zenodo.org/record/5600188/files/vf.ckpt?download=1)
|
||
* **model.ckpt-1490000_trimed.pt**: [HuggingFace Mirror](https://huggingface.co/Diogodiogod/VoiceFixer-model.ckpt-1490000_trimed.pt/resolve/main/model.ckpt-1490000_trimed.pt) 或 [Zenodo](https://zenodo.org/record/5513378/files/model.ckpt-1490000_trimed.pt?download=1)
|
||
|
||
**使用 huggingface-cli 下载 (CLI Example)**:
|
||
|
||
```bash
|
||
# 进入 ComfyUI/models/voicefixer 目录
|
||
cd ComfyUI/models/voicefixer
|
||
|
||
# 下载 vf.ckpt (注意路径)
|
||
hf download Diogodiogod/VoiceFixer-vf.ckpt vf.ckpt --local-dir analysis_module/checkpoints
|
||
|
||
# 下载 model.ckpt (注意路径)
|
||
hf download Diogodiogod/VoiceFixer-model.ckpt-1490000_trimed.pt model.ckpt-1490000_trimed.pt --local-dir synthesis_module/44100
|
||
```
|
||
|
||
#### 3.8 Audio Post-Process (Resample/Fade/Norm)
|
||
|
||
- **用途**: 音频后期处理“母带”节点。
|
||
- **功能**:
|
||
- **Resample**: 使用高精度算法(sinc_interp_hann)将音频上采样至 44.1kHz 或 48kHz,改善听感清晰度。
|
||
- **LowPass Filter**: 可选的低通滤波器(**默认 11000 Hz**)。采用 **6级级联(Cascaded)** 设计,像“砖墙”一样强力消除由 CosyVoice 带来的高频混叠(Resampling Artifacts)。
|
||
- **HighPass Filter**: 可选的高通滤波器(**默认 60 Hz**)。采用 **单级平滑** 设计,在去除低频轰鸣声和直流偏移的同时,完美保留人声的低音厚度。
|
||
- **Fade In/Out**: 对音频首尾添加淡入淡出,消除由于切割或拼接可能残留的爆音。
|
||
- **Normalize**: 将音量标准化至 -1dB,确保输出响度饱满且不破音。
|
||
- **场景**: 建议串联在 `Voice Conversion` 节点之后使用。
|
||
|
||
#### 3.9 Audio Splice Analyzer (AIIA Debug)
|
||
|
||
- **用途**: 可视化验证音频拼接质量。
|
||
- **功能**:
|
||
- 生成 Log-Mel 语谱图 (Spectrogram)。
|
||
- 如果接入了 `Voice Conversion` 节点的 `SPLICE_INFO` 输出,会自动在图上用红线标记出所有拼接点的位置。
|
||
- 帮助用户直观地检查拼接点是否位于静音区,以及是否有明显的频谱断裂。
|
||
- **依赖**: 需要 `matplotlib` 库。如果未安装,节点会生成一张提示错误的图片,不会导致工作流崩溃。
|
||
|
||
#### 3.10 音频信息查看 (Audio Info & Metadata)
|
||
|
||
- **用途**: 实时查看音频流的元数据,确保你的采样率符合预期。
|
||
- **输入**: `AUDIO` 张量。
|
||
- **输出**:
|
||
- `info_text`: 包含采样率、时长、通道数、BatchSize等详细信息的文本报告。
|
||
- `sample_rate`: 采样率 (INT)。
|
||
- `duration`: 时长秒数 (FLOAT)。
|
||
- `channels`: 通道数 (INT)。
|
||
|
||
#### 3.11 Microsoft VibeVoice (Beta)
|
||
|
||
- **用途**: 微软最新的 TTS/音色克隆模型,支持 1.5B 和 7B 两种规格。
|
||
- **当前状态**: ✅ 可用(已通过测试)
|
||
- **支持语言**: **英文 (en) 和 中文 (zh)**(官方仅在这两种语言数据集上训练)
|
||
- **可选模型**:
|
||
- `microsoft/VibeVoice-Realtime-0.5B`: **最新实时版**,极致速度,支持多种语言(如日、韩、英、中等),上下文 8K。推荐用于低延迟对话场景。
|
||
- `microsoft/VibeVoice-1.5B`: 轻量版,64K 上下文(~3GB 显存)。
|
||
- `vibevoice/VibeVoice-7B`: 高质量版,32K 上下文(~14GB 显存)。推荐用于生产环境。
|
||
- **特点**:
|
||
- **多语言支持**: 0.5B 版本支持比 1.5B/7B 更多的语言种类。
|
||
- **即时启动**: 无需预热或编译,首次运行即可使用(CosyVoice 首次需 ~1 分钟编译)。
|
||
- **语言自动识别**: 模型会自动识别中英文文本。
|
||
- **零样本音色克隆**: 输入 `reference_audio` 即可克隆声音。参考音频会自动重采样到 24000Hz。
|
||
- **节点参数 (推荐参数建议)**:
|
||
- `cfg_scale` (默认: 1.3): CFG 引导强度。建议使用 **1.3**。
|
||
- `ddpm_steps` (默认: 20): 扩散步数。
|
||
- `do_sample` (默认: "auto"): **智能采样开关**。
|
||
|
||
- `"auto"`: 自动适配。**1.5B 模型默认关闭**(保证稳定性),**7B 模型默认开启**(释放表达力)。
|
||
- `"true"`: 强制开启。如果 1.5B 开启后出现电音或逻辑混乱,请切换回 `"auto"`。
|
||
- `"false"`: 强制关闭(即 Greed Search)。
|
||
- `temperature` (默认: 0.8): 采样温度。仅在 `do_sample` 开启时有效。
|
||
- `top_k / top_p`: 采样约束。
|
||
- `speed` (默认: 1.0): 播放速度。
|
||
- `do_sample`: **"auto"** (或 `false`) - 保证极速和绝对稳定。
|
||
- `normalize_text`: **True** - 帮助处理各种语言的特殊符号。
|
||
- **特点**: 该模型支持包括**韩语、日语**在内的更多语种,速度极快。
|
||
|
||
#### 🔬 详细观察与进阶技巧
|
||
|
||
1. **0.5B 实时版**:
|
||
|
||
- **频谱特征**: 在静音区域(Silence)可能在全部频率范围内观察到较高的能量分布,尤其在中频区域。
|
||
- **听感**: 尽管频谱显示有能量,但**实际听感比较干净**,只有轻微的底噪。这表明其声码器可能存在某种特征泄露,但不影响实用性。
|
||
- **迭代次数**: 由于基于音素(Phoneme)和流式切片处理,其显示的迭代次数(Total Steps)通常多于标准版,这是正常的。
|
||
2. **1.5B vs 7B 对比**:
|
||
|
||
- **音质与风格**: 在参数调整得当(如开启 `do_sample`)的情况下,1.5B 模型生成的语音内容、风格和音质与 7B 模型**几乎无法区分**。
|
||
- **性价比**: 1.5B 模型的推理速度约为 7B 的 **2倍**,显存占用仅为 1/4。除非对极细微的表达有极致要求,否则 **1.5B 是生产环境的最佳选择**。
|
||
- **迭代差异**: 1.5B 的迭代次数(Token数)可能略少于 7B,这反映了不同模型对同一文本编码的简洁程度差异,属正常现象。
|
||
|
||
### 💡 7B 模型音质“全开”指南
|
||
|
||
要达到官方 Benchmark 的水准,请对 7B 模型尝试以下组合:
|
||
|
||
- `do_sample`: **True** (开启采样)
|
||
- `temperature`: **0.8 - 0.9**
|
||
- `cfg_scale`: **1.3 - 1.8**
|
||
- `ddpm_steps`: **20 - 50**
|
||
- `normalize_text`: **False**
|
||
- **环境要求**:
|
||
|
||
- **Flash Attention 2**: 强烈推荐安装(否则速度较慢)。
|
||
- **Transformers**: `>= 4.51`(重要: 旧版本不支持该模型)。
|
||
- **节点**:
|
||
|
||
- `VibeVoice Loader`: 加载模型。支持从 HuggingFace 自动下载,也支持加载本地模型。
|
||
- `VibeVoice TTS`: 支持 Zero-shot 音色克隆(输入 `reference_audio` 即可)。
|
||
- **模型准备 (Model Preparation)**:
|
||
如果遇到下载问题或分词器报错,请手动下载模型文件到 `models/vibevoice` 目录。
|
||
|
||
**必须的文件结构** (以 1.5B 为例,7B 类似):
|
||
|
||
```text
|
||
ComfyUI/models/vibevoice/microsoft/VibeVoice-1.5B/ # 或 VibeVoice-7B/
|
||
├── model-*.safetensors (模型权重)
|
||
├── config.json
|
||
└── [Tokenizer Files] (必须包含以下 Qwen 文件!)
|
||
├── tokenizer.json
|
||
├── tokenizer_config.json
|
||
├── vocab.json
|
||
└── merges.txt
|
||
```
|
||
|
||
**💡 说明**: 插件已内置并修复了所有 VibeVoice 的 Python 核心代码 (`vibevoice_core`)。你**不需要**也不建议在模型目录中保留 `modeling_vibevoice_*.py` 等 Python 脚本,以避免潜在的冲突。
|
||
|
||
**⚠️ 重要提示**: VibeVoice 依赖 **Qwen2.5** 的分词器。如果模型包里没有 tokenizer 文件,请手动补全:
|
||
|
||
- 1.5B 模型使用 [Qwen/Qwen2.5-1.5B](https://huggingface.co/Qwen/Qwen2.5-1.5B/tree/main) 的 tokenizer
|
||
- 7B 模型使用 [Qwen/Qwen2.5-7B](https://huggingface.co/Qwen/Qwen2.5-7B/tree/main) 的 tokenizer
|
||
|
||
### 💡 VibeVoice 使用指南 (Node Usage Guide)
|
||
|
||
由于模型架构不同,我们现在提供 **两个独立的 TTS 节点** 以优化体验:
|
||
|
||
#### 1. 🗣️ VibeVoice TTS (Standard)
|
||
|
||
- **适用模型**: `VibeVoice-1.5B`, `VibeVoice-7B`
|
||
- **参考音频 (Reference Audio)**: 可选 (`optional`)。如果不连接,将自动使用内置的高品质女声种子 (Fallback Seed) 进行生成。
|
||
- **功能**: 支持零样本音色克隆 (Zero-shot Cloning)。输入任何音频,它都会模仿该音色。
|
||
- **不支持**: `voice_preset` (预设)。
|
||
|
||
#### 2. 🗣️ VibeVoice TTS (Realtime 0.5B)
|
||
|
||
- **适用模型**: `VibeVoice-Realtime-0.5B`
|
||
- **必选参数**: `voice_preset` (音色预设) - **必须选择**。
|
||
- **功能**: 极速实时生成。基于预计算的 `.pt` 缓存文件生成语音。
|
||
- **不支持**: `reference_audio` (直接克隆)。
|
||
- **特点**:
|
||
- **极低延迟**: 首包延迟极低,适合即时交互。
|
||
- **BF16 加速**: 自动使用 Bloat16 精度进行推理(如果硬件支持),大幅提升速度。
|
||
- **多语言支持**: 官方预设涵盖英、日、韩、法、德等。
|
||
|
||
#### 3. 🎤 VibeVoice Preset Maker (0.5B) (Experimental ⚠️)
|
||
|
||
- **用途**: 尝试制作 0.5B 模型专用的 `.pt` 音色预设。
|
||
- **现状**: **极不稳定**。
|
||
- **原因**: 社区反馈和测试表明,VibeVoice-Realtime-0.5B 模型的权重似乎对自定义音色进行了限制或未进行充分的 Zero-Shot 泛化训练。即使使用长达 1 分钟的高质量音频,生成时也极易出现**死循环、胡言乱语或噪音**。
|
||
- **建议**:
|
||
|
||
- **首选**: 请直接下载并在 `Realtime 0.5B` 节点中使用 **微软官方提供的预设** (Carter, Emma 等)。
|
||
- **尝试**: 如果您一定要克隆音色,请使用 **VibeVoice 1.5B / 7B (Standard)** 节点,它们原生支持完美的 Zero-Shot 克隆。
|
||
- **仅供研究**: 此节点保留给开发者进行研究调试,普通用户**不推荐**使用。
|
||
|
||
**手动下载命令**:
|
||
|
||
```bash
|
||
# ===== 0.5B 实时多语言模型 (Realtime) =====
|
||
mkdir -p models/vibevoice/microsoft/VibeVoice-Realtime-0.5B
|
||
hf download microsoft/VibeVoice-Realtime-0.5B --local-dir models/vibevoice/microsoft/VibeVoice-Realtime-0.5B
|
||
# 补全 Tokenizer (使用 Qwen2.5-0.5B)
|
||
wget https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct/resolve/main/tokenizer.json -P models/vibevoice/microsoft/VibeVoice-Realtime-0.5B/
|
||
wget https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct/resolve/main/tokenizer_config.json -P models/vibevoice/microsoft/VibeVoice-Realtime-0.5B/
|
||
wget https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct/resolve/main/vocab.json -P models/vibevoice/microsoft/VibeVoice-Realtime-0.5B/
|
||
wget https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct/resolve/main/merges.txt -P models/vibevoice/microsoft/VibeVoice-Realtime-0.5B/
|
||
|
||
# 🔥 [重要] 下载 0.5B 官方音色库 (Voices Presets) 🔥
|
||
# 0.5B 模型必须配合官方音色预设使用,不支持零样本克隆。
|
||
# 请务必将以下文件下载到 `models/vibevoice/voices/streaming_model` 目录:
|
||
mkdir -p models/vibevoice/voices/streaming_model
|
||
cd models/vibevoice/voices/streaming_model
|
||
|
||
# 下载核心音色 (仅示例,全部音色请参考官方 GitHub)
|
||
# ⚠️ 注意:官方仓库目前暂未提供中文 (.pt) 预设,建议使用英文或日韩文测试,或自行制作预设。
|
||
|
||
# 英文 (English)
|
||
wget -N --no-check-certificate https://github.com/microsoft/VibeVoice/raw/main/demo/voices/streaming_model/en-Carter_man.pt
|
||
wget -N --no-check-certificate https://github.com/microsoft/VibeVoice/raw/main/demo/voices/streaming_model/en-Emma_woman.pt
|
||
# 日语 (Japanese)
|
||
wget -N --no-check-certificate https://github.com/microsoft/VibeVoice/raw/main/demo/voices/streaming_model/jp-Spk0_man.pt
|
||
wget -N --no-check-certificate https://github.com/microsoft/VibeVoice/raw/main/demo/voices/streaming_model/jp-Spk1_woman.pt
|
||
# 韩语 (Korean)
|
||
wget -N --no-check-certificate https://github.com/microsoft/VibeVoice/raw/main/demo/voices/streaming_model/kr-Spk0_woman.pt
|
||
wget -N --no-check-certificate https://github.com/microsoft/VibeVoice/raw/main/demo/voices/streaming_model/kr-Spk1_man.pt
|
||
# 更多语言 (德语 de, 法语 fr, 意大利语 it, 西班牙语 sp/es, 葡萄牙语 pt 等) 均支持!
|
||
|
||
# ===== 1.5B 基础模型 =====
|
||
mkdir -p models/vibevoice/microsoft/VibeVoice-1.5B
|
||
hf download microsoft/VibeVoice-1.5B --local-dir models/vibevoice/microsoft/VibeVoice-1.5B
|
||
# 补全 Tokenizer
|
||
wget https://huggingface.co/Qwen/Qwen2.5-1.5B/resolve/main/tokenizer.json -P models/vibevoice/microsoft/VibeVoice-1.5B/
|
||
wget https://huggingface.co/Qwen/Qwen2.5-1.5B/resolve/main/tokenizer_config.json -P models/vibevoice/microsoft/VibeVoice-1.5B/
|
||
wget https://huggingface.co/Qwen/Qwen2.5-1.5B/resolve/main/vocab.json -P models/vibevoice/microsoft/VibeVoice-1.5B/
|
||
wget https://huggingface.co/Qwen/Qwen2.5-1.5B/resolve/main/merges.txt -P models/vibevoice/microsoft/VibeVoice-1.5B/
|
||
|
||
# ===== 7B 模型 =====
|
||
mkdir -p models/vibevoice/vibevoice/VibeVoice-7B
|
||
hf download vibevoice/VibeVoice-7B --local-dir models/vibevoice/vibevoice/VibeVoice-7B
|
||
# 补全 Tokenizer (如果没有)
|
||
wget https://huggingface.co/Qwen/Qwen2.5-7B/resolve/main/tokenizer.json -P models/vibevoice/vibevoice/VibeVoice-7B/
|
||
wget https://huggingface.co/Qwen/Qwen2.5-7B/resolve/main/tokenizer_config.json -P models/vibevoice/vibevoice/VibeVoice-7B/
|
||
wget https://huggingface.co/Qwen/Qwen2.5-7B/resolve/main/vocab.json -P models/vibevoice/vibevoice/VibeVoice-7B/
|
||
wget https://huggingface.co/Qwen/Qwen2.5-7B/resolve/main/merges.txt -P models/vibevoice/vibevoice/VibeVoice-7B/
|
||
```
|
||
|
||
#### 3.12 VoxCPM 1.5 TTS (Beta)
|
||
|
||
- **用途**: 下一代 Tokenizer-free TTS 模型,提供 44.1kHz 原生高保真音质。
|
||
- **状态**: **Beta (骨架已上线,推理逻辑完善中)**
|
||
- **手动下载指南 (Manual Download)**:
|
||
如果节点无法自动下载模型,请手动下载 `openbmb/VoxCPM1.5` 并放入以下目录:
|
||
|
||
```text
|
||
ComfyUI/models/voxcpm/VoxCPM1.5/
|
||
├── model.safetensors
|
||
├── config.json
|
||
└── ... (其他相关文件)
|
||
```
|
||
|
||
**HuggingFace 下载命令**:
|
||
|
||
```bash
|
||
mkdir -p models/voxcpm/VoxCPM1.5
|
||
hf download openbmb/VoxCPM1.5 --local-dir models/voxcpm/VoxCPM1.5
|
||
```
|
||
|
||
**降噪模型 (Optional Denoiser - ZipEnhancer)**:
|
||
默认开启 `enable_denoiser` 会自动从 ModelScope 下载 `speech_zipenhancer_ans_multiloss_16k_base` 到以下目录:
|
||
|
||
```text
|
||
ComfyUI/models/voxcpm/speech_zipenhancer_ans_multiloss_16k_base/
|
||
```
|
||
|
||
如需手动下载(或离线使用):
|
||
|
||
```bash
|
||
pip install modelscope
|
||
modelscope download --model iic/speech_zipenhancer_ans_multiloss_16k_base --local_dir models/voxcpm/speech_zipenhancer_ans_multiloss_16k_base
|
||
```
|
||
|
||
> [!NOTE]
|
||
> **频谱特征说明 (Spectral Analysis Note)**:
|
||
> 用户实测发现,尽管该模型输出 44.1kHz 格式,但在频谱图上可能观察到以下特征:
|
||
>
|
||
> 1. **静音区能量较高 (High Noise Floor)**: 并非绝对静默。
|
||
> 2. **水平条纹 (Horizontal Stripes)**: 特别是在低频区域,这通常是 Neural Upsampling (VAE/GAN) 重构波形的典型痕迹。
|
||
> 3. **听感**: 这种“升频痕迹”可能会带来轻微的机械感或金属音,这属于模型权重的固有特性。
|
||
>
|
||
|
||
#### 💡 用户实测与选型指南 (Model Comparison & Selection)
|
||
|
||
经过深度测试,我们在三个主流模型中整理了以下对比,助您选择最适合的引擎:
|
||
|
||
| 维度 | **VoxCPM 1.5** (800M) | **CosyVoice 3.0** (0.5B/1.5B) | **VibeVoice** (1.5B/7B) |
|
||
| :--------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------- | :-------------------------------------------------------------- |
|
||
| **音质 (Fidelity)** | **44.1kHz 格式** `<br>`虽然物理格式为 44.1k,但因采用 **Neural Upsampling** (神经升频) 技术,听感上会有**含混 (Muffled)** 或**金属感**,且伴有底噪。 | **优秀** `<br>`听感最自然,但采样率稍低 (22/24kHz),有时需 AI 增强。 | **良好** `<br>`主要强在语气自然度,纯音质略逊。 |
|
||
| **推理速度 (Speed)** | **🚀 冠军 (RTF ~0.17)**`<br>`得益于 Tokenizer-free,极其高效。 | **极快** `<br>`流式响应仅 150ms,且支持 TensorRT 加速。 | **一般/较慢** `<br>`7B 版本较重,更适合离线生成。 |
|
||
| **克隆能力 (Cloning)** | **SOTA** (Zero-Shot)`<br>`只需 3-10秒,对**音色质感**还原极高。 | **SOTA** (稳定性)`<br>`对**说话韵律/口音**的捕捉最准。 | **良好** `<br>`适合克隆特定语气,而非纯粹音色。 |
|
||
| **多语言/方言** | **中/英** (双语优化) | **👑 霸主** (9种语言 + 18种方言) | **中/英** |
|
||
| **语音转换 (VC)** (Audio-to-Audio) | ❌**不支持** `<br>`仅支持 TTS (Text-to-Speech)。无法改变已有音频的音色。 | ✅**支持** `<br>`可以将任意音频转换为任意音色 (保留语调/停顿)。 | ❌**不支持** `<br>`纯 TTS 模型。仅支持 Text-to-Speech。 |
|
||
| **Qwen3-TTS** (1.7B/0.6B) | ✅**支持** `<br>`支持 Presets (内置音色) 和 VoiceDesign (描述)。 | ✅**支持** `<br>`支持 3秒极速 Clone (克隆) 模型。 | ✅**支持** `<br>`支持 10 种语言。 |
|
||
|
||
#### 3.13 Qwen3-TTS (New! 🔥)
|
||
|
||
- **用途**: 阿里巴巴 Qwen 团队推出的最新旗舰级 TTS 模型,支持 10 种主要语言及多种方言,具备极高的稳定性和表现力。
|
||
- **核心能力**:
|
||
- **Base (Clone)**: 核心能力为 **3秒极速音色克隆**。支持 X-Vector 模式提升稳定性。
|
||
- **CustomVoice (Presets)**: 阿里巴巴官方提供的 **9 种高品质内置音色** (如 Vivian, Zack 等),支持极强的情感和方言控制。
|
||
- **VoiceDesign**: 通过自然语言描述(如“活泼的少女音,带点羞涩”)从零设计音色。
|
||
- **环境要求**:
|
||
- **qwen-tts**: `pip install qwen-tts` (插件会自动尝试安装)。
|
||
- **Flash Attention 2**: 强烈推荐以获得最佳推理性能。
|
||
- **节点**:
|
||
- `🤖 Qwen3-TTS Loader`: 加载模型。支持 `Base (Clone)`、`CustomVoice (Presets)` 和 `VoiceDesign` 模型。
|
||
- `🗣️ Qwen3-TTS Synthesis`: 执行合成。支持单模型连接或通过 Router 连接的 Bundle。
|
||
- `🔌 Qwen3-Model Router (Bundle)`: **[新]** 路由节点。将多个分立的 Qwen 模型捆绑成一个,供对话节点自动调用。
|
||
- `🎙️ Qwen3-TTS Dialogue (Specialist)`: **[旗帜级]** 专为 Qwen3 设计的对话节点。单输入设计,支持通过 Router 实现混合克隆/捏人。
|
||
- **模型列表**:
|
||
- `Qwen/Qwen3-TTS-12Hz-1.7B-Base` (或 0.6B-Base)
|
||
- `Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice` (或 0.6B-CustomVoice)
|
||
- `Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign`
|
||
|
||
#### 📊 模型功能映射表 (Model Capability Mapping)
|
||
|
||
| 模型版本 | **音色克隆 (Clone)** | **情感控制 (Emotion)** | **文字捏人 (Design)** | **方言支持 (Dialect)** |
|
||
| :--- | :---: | :---: | :---: | :---: |
|
||
| **Base** (1.7B/0.6B) | **👑 最强** | ❌ 仅限录音自带 | ❌ 不支持 | ⚠️ 仅限录音自带 |
|
||
| **CustomVoice** (1.7B) | ⚠️ 效果极差 | ✅ 支持 | ⚠️ 指令干扰严重 | ⚠️ 效果一般 |
|
||
| **VoiceDesign** (1.7B) | ❌ 不支持 | **👑 专家** | **👑 专家** | **👑 完美支持** |
|
||
| **CustomVoice** (0.6B) | ⚠️ 效果极差 | ✅ 支持 | ✅ 表现优异 | ✅ 表现优异 |
|
||
|
||
> [!TIP]
|
||
> **关于 UI 简化**:
|
||
> 现在的对话节点只有一个 `qwen_model` 输入槽。
|
||
> - 如果你只需要一种模型,直接连上即可。
|
||
> - 如果你想实现“Speaker A 克隆,Speaker B 捏人”的混合效果,请使用 `🔌 Qwen3-Model Router` 节点进行打包连接。
|
||
|
||
> [!IMPORTANT]
|
||
> **结论**:
|
||
> 1. 做 **3秒音色克隆**:必须连 `Base` 模型。
|
||
> 2. 说 **方言** 或 **文字定制音色**:优先连 `VoiceDesign`(1.7B)或 `CustomVoice`(0.6B)。
|
||
> 3. 使用 **Vivian/Zack 内置音色**:连接 `CustomVoice` 模型。
|
||
|
||
**🛠️ 手工下载指南 (Manual Download Guide)**:
|
||
|
||
如果节点无法自动下载,或您需要在离线环境使用,请手动从 HuggingFace 或 ModelScope 下载模型文件夹,并放入以下目录(文件夹建议保留原名):
|
||
|
||
```text
|
||
ComfyUI/models/qwen_tts/Qwen/
|
||
├── Qwen3-TTS-12Hz-1.7B-Base/ <-- 对应 1.7B Base (Clone)
|
||
├── Qwen3-TTS-12Hz-1.7B-CustomVoice/ <-- 对应 1.7B CustomVoice
|
||
├── Qwen3-TTS-12Hz-1.7B-VoiceDesign/ <-- 对应 1.7B VoiceDesign
|
||
├── Qwen3-TTS-12Hz-0.6B-Base/ <-- 对应 0.6B Base (Clone)
|
||
└── Qwen3-TTS-12Hz-0.6B-CustomVoice/ <-- 对应 0.6B CustomVoice/VoiceDesign
|
||
```
|
||
|
||
**下载命令 (HuggingFace CLI)**:
|
||
|
||
```bash
|
||
mkdir -p models/qwen_tts/Qwen
|
||
|
||
# 1.7B 系列
|
||
hf download Qwen/Qwen3-TTS-12Hz-1.7B-Base --local-dir models/qwen_tts/Qwen/Qwen3-TTS-12Hz-1.7B-Base
|
||
hf download Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --local-dir models/qwen_tts/Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
|
||
hf download Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --local-dir models/qwen_tts/Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign
|
||
|
||
# 0.6B 系列
|
||
hf download Qwen/Qwen3-TTS-12Hz-0.6B-Base --local-dir models/qwen_tts/Qwen/Qwen3-TTS-12Hz-0.6B-Base
|
||
hf download Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice --local-dir models/qwen_tts/Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice
|
||
```
|
||
|
||
**ModelScope 下载 (国内推荐)**:
|
||
|
||
```bash
|
||
# 0.6B 示例
|
||
pip install modelscope
|
||
modelscope download --model qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice --local_dir models/qwen_tts/Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice
|
||
```
|
||
|
||
> [!NOTE]
|
||
> 对于 **0.6B** 系列,官方目前将 `CustomVoice` 和 `VoiceDesign`(文字设计)能力集成在同一个模型中。因此在设计模式下,加载 `0.6B-CustomVoice` 即可获得极佳效果。
|
||
|
||
#### 🎭 掌握指令控制 (Instruct Control)
|
||
|
||
Qwen3-TTS 最强大的特性之一是其**自然语言指令驱动**的能力。与传统的“固定标签”不同,你可以直接在 `instruct` 输入框中用一段描述来控制声音的表现。
|
||
|
||
**1. 情感与语气控制 (Emotion & Tone)**
|
||
虽然官方没有强制的固定标签列表,但以下描述词被证明效果极佳(支持中文或英文):
|
||
- **基础情感**: "开心" (Happy), "悲伤" (Sad), "生气" (Angry), "兴奋" (Excited), "温柔" (Gentle), "严肃" (Serious)。
|
||
- **微表情控制 (New!)**: 在 Specialist 节点中,你可以叠加更细腻的语气,如 "带点羞涩的" (With a hint of shyness), "语气充满诱惑力" (Seductive tone), "语气带着哭腔" (Crying tone), "语气充满笑意" (Cheerful tone) 等。
|
||
- **提示**: 这些指令可以组合,例如 `生气且激动的。` 或 `Very happy and excited.`
|
||
|
||
**2. 语速与节奏 (Prosody)**
|
||
虽然节点有专门的 `speed` 滑块,但通过 `instruct` 可以实现更自然的节奏控制:
|
||
- "语速极快" (Very fast speaking rate), "缓慢且深情地" (Slow and soulful), "中间有明显的停顿" (Dramatic pauses)。
|
||
|
||
**3. 音色设计 (Voice Design)**
|
||
在加载 **VoiceDesign** 模型时,指令框即为你的“捏人”引擎:
|
||
- **特征描述**: "沙哑的男低音" (Raspy deep male voice), "甜美的少女音" (Sweet young girl's voice), "充满磁性的中年女性" (Magnetic middle-aged female)。
|
||
- **示例**: `A young woman with a clear, bright voice, speaking with great confidence.`
|
||
|
||
- **示例**: `A young woman with a clear, bright voice, speaking with great confidence.`
|
||
- **方言与口音 (Dialect & Accent)**:
|
||
- 虽然官方称全系列支持,但实测发现不同模型遵循度不同:
|
||
- **VoiceDesign (1.7B/0.6B-Custom)**: **👑 效果最强**。因为没有固定身份限制,能完美呈现粤语、上海话等方言的韵律。
|
||
- **CustomVoice (Presets)**: 效果一般。由于 Vivian 等音色有固定的标准语设定,方言指令常会被弱化以维持音色一致性。
|
||
- **Base (Clone)**: 效果最弱。主要取决于你的参考音频本身是什么口音。
|
||
|
||
**4. 使用技巧**:
|
||
- **句尾符号**: 指令末尾建议加一个句号(如 `开心地。`),这有助于模型更稳定地理解指令边界。
|
||
- **对话剧本**: 在 `🎙️ Qwen3-TTS Dialogue (Specialist)` 节点中,如果某位 Speaker 处于 `Preset` 或 `Design` 模式,系统会自动将剧本中的情感标签(如 `[开心]`)转换为对应的 `instruct` 指令。
|
||
|
||
---
|
||
|
||
#### 3.14 IndexTTS-2 (New! 🔥)
|
||
|
||
- **用途**: Bilibili 开源的 **零样本语音克隆 + 情感控制** TTS 模型。支持**音色与情感解耦**,调整情感时不会导致音色漂移。
|
||
|
||
- **🔥 核心特性**:
|
||
- **音色/情感解耦 (Voice-Emotion Decoupling)**: 独立控制音色和情感,改变情感不影响声音音色。这解决了其他模型在调整情感时音色漂移的顽疾。
|
||
- **8 维情感向量控制**: 提供 `happy`, `angry`, `sad`, `afraid`, `disgusted`, `melancholic`, `surprised`, `calm` 八个情感滑块,精细控制输出语音的情感表达。
|
||
- **🆕 内联情感标签 (Inline Emotion Tags)**: 支持在文本中嵌入 `[Happy]`、`[Sad]` 等标签,**逐句控制不同情感**。节点自动按标签分段生成,再以余弦淡入淡出 + 静音间隔无缝拼接。
|
||
- **情感音频参考**: 支持通过额外的 `emotion_audio` 输入捕获参考音频中的情感特征,并通过 `emo_alpha` 控制混合强度。
|
||
- **QwenEmotion 自动推断**: 启用 `use_emo_text` 后,内置 Qwen 情感模型自动分析文本语义,推断最合适的情感向量。
|
||
- **零样本音色克隆**: 输入 `reference_audio` 即可克隆声音。
|
||
|
||
- **节点**:
|
||
|
||
**IndexTTS-2 Loader** — 加载 IndexTTS-2 模型
|
||
|
||
| 参数 | 默认 | 说明 |
|
||
|------|------|------|
|
||
| `use_fp16` | `True` | 半精度推理,降低 VRAM 占用 |
|
||
| `use_cuda_kernel` | `True` | BigVGAN CUDA 核心加速(仅 NVIDIA GPU,推理更快) |
|
||
| `model_dir` | 空 | 自定义模型路径,留空使用 `ComfyUI/models/indextts2/` |
|
||
|
||
**IndexTTS-2 TTS** — 执行语音合成
|
||
|
||
| 参数 | 默认 | 说明 |
|
||
|------|------|------|
|
||
| `text` | — | 待合成文本,支持中英文混合及 **内联情感标签** |
|
||
| `voice_preset` | `Female_HQ` | 内置音色预设(在无 `reference_audio` 时使用) |
|
||
| `reference_audio` | — | 音色参考音频(零样本克隆,优先于 preset) |
|
||
| `emotion_audio` | — | 独立的情感参考音频 |
|
||
| `emo_alpha` | `1.0` | 情感混合强度 (0=无情感, 1=100%情感) |
|
||
| `happy` ~ `calm` | `0.0` | 8 个情感滑块,直接控制向量 |
|
||
| `use_emo_text` | `False` | 启用后使用 Qwen 模型自动推断情感 |
|
||
| `emo_text` | 空 | 自定义情感提示文本(配合 `use_emo_text`) |
|
||
| `interval_silence` | `200` | 长文本分段间静音时长 (ms) |
|
||
| `max_text_tokens_per_segment` | `120` | 每段最大 token 数(控制切分粒度) |
|
||
| `use_random` | `False` | 随机采样(降低克隆保真度) |
|
||
| `seed` | `0` | 随机种子 (-1=随机) |
|
||
|
||
- **🆕 内联情感标签 (Inline Emotion Tags)**:
|
||
|
||
在文本中嵌入 `[标签名]` 即可逐句控制情感,节点会自动按标签拆分,每段独立生成后拼接。
|
||
|
||
**使用示例**:
|
||
```text
|
||
[happy] 今天天气真好,阳光明媚!
|
||
[sad] 但是我养的小猫走丢了,我好难过。
|
||
[calm] 不过我相信它一定会自己找到回家的路。
|
||
```
|
||
→ 生成 3 段音频,分别带 happy / sad / calm 情感,最终余弦淡入淡出无缝拼接为一段完整音频。
|
||
|
||
> [!IMPORTANT]
|
||
> **控制情感强度**: 内联标签默认映射到全强度的情感向量 (1.0)。如果发现音色失真或情感过于夸张(如嘶吼、破音),请尝试**降低** `emo_alpha` 参数(推荐值 **0.6 ~ 0.8**)。较低的 alpha 值能更好地保留原始音色特征,同时赋予适度的情感色彩。
|
||
|
||
**支持的 26 种标签**:
|
||
|
||
| 分类 | 标签 |
|
||
|------|------|
|
||
| 积极情感 | `happy`, `excited`, `enthusiastic`, `proud`, `romantic`, `innocent` |
|
||
| 消极情感 | `sad`, `angry`, `afraid`, `fearful`, `disgusted`, `disappointed`, `anxious`, `nervous` |
|
||
| 复合情感 | `sarcastic`, `nostalgic`, `confused`, `mysterious`, `gossip` |
|
||
| 中性情感 | `calm`, `neutral`, `gentle`, `serious`, `lazy`, `melancholic`, `surprised` |
|
||
|
||
每个标签自动映射到 IndexTTS-2 的 8 维情感向量。**未知标签**(不在上述列表中的)自动回退至 QwenEmotion 模型推断。
|
||
|
||
> [!TIP]
|
||
> 内联标签通常由 **AIIA Emotion Annotator** 节点自动注入到 Splitter 的输出中,无需手写。也可以手动添加来精细控制。
|
||
|
||
- **🔧 情感控制优先级**:
|
||
|
||
当多种情感来源同时存在时,按以下优先级生效:
|
||
|
||
| 优先级 | 来源 | 说明 |
|
||
|:------:|------|------|
|
||
| 1 (最高) | 内联标签 `[Tag]` | 逐句独立控制,覆盖所有其他设置 |
|
||
| 2 | 滑块向量 | 8 个滑块全局生效(无标签时) |
|
||
| 3 | `use_emo_text` | Qwen 自动推断(无标签无滑块时) |
|
||
| 4 (最低) | `emotion_audio` | 从参考音频提取情感 |
|
||
|
||
> [!NOTE]
|
||
> 如果文本含标签,则标签内的段落使用标签情感;**无标签的段落**继续使用滑块或其他全局设置。
|
||
|
||
- **✅ 依赖版本兼容性 (Dependency Compatibility)**:
|
||
AIIA 已内置深度兼容层,**完美支持 `transformers` 4.57+**。
|
||
|
||
> [!NOTE]
|
||
> IndexTTS-2 的官方代码基于 `transformers 4.52`,与最新版本存在多处 API 不兼容。AIIA 通过预注入 5 个兼容补丁(`QuantizedCacheConfig`、`_crop_past_key_values`、`NEED_SETUP_CACHE_CLASSES_MAPPING`、`QUANT_BACKEND_CLASSES_MAPPING`、`SequenceSummary`),确保在最新环境下正常运行。
|
||
|
||
- **⚠️ 模型下载 (Model Download)**:
|
||
IndexTTS-2 除了主模型外,还依赖 **4 个外部子模型**。AIIA 节点支持**全离线加载**,建议将所有模型统一放入 `ComfyUI/models/indextts2/`。
|
||
|
||
**目录结构 (Directory Structure)**:
|
||
|
||
```text
|
||
ComfyUI/models/indextts2/
|
||
├── config.yaml
|
||
├── gpt.pth <-- 主模型
|
||
├── s2mel.pth <-- 主模型
|
||
├── bpe.model
|
||
├── feat1.pt
|
||
├── feat2.pt
|
||
├── wav2vec2bert_stats.pt
|
||
├── qwen0.6bemo4-merge/ <-- 情感 LLM
|
||
│
|
||
├── semantic_codec/ <-- [外部] MaskGCT
|
||
│ └── model.safetensors
|
||
├── campplus_cn_common.bin <-- [外部] Campplus
|
||
├── bigvgan_v2_22khz_80band_256x/ <-- [外部] BigVGAN
|
||
└── w2v-bert-2.0/ <-- [外部] W2V-BERT
|
||
```
|
||
|
||
**一键下载命令 (Download Commands)**:
|
||
|
||
> [!TIP]
|
||
> **国内用户推荐使用 HF Mirror**,下载速度更快且无需代理。
|
||
|
||
```bash
|
||
cd ComfyUI/models
|
||
|
||
# 1. 下载主模型
|
||
HF_ENDPOINT=https://hf-mirror.com huggingface-cli download IndexTeam/IndexTTS-2 --local-dir indextts2
|
||
|
||
# 2. 下载外部子模型 (直接放入 indextts2 目录)
|
||
cd indextts2
|
||
|
||
# MaskGCT (只需 semantic_codec/model.safetensors)
|
||
HF_ENDPOINT=https://hf-mirror.com huggingface-cli download amphion/MaskGCT semantic_codec/model.safetensors --local-dir .
|
||
|
||
# Campplus
|
||
HF_ENDPOINT=https://hf-mirror.com huggingface-cli download funasr/campplus campplus_cn_common.bin --local-dir .
|
||
|
||
# BigVGAN (下载整个文件夹)
|
||
HF_ENDPOINT=https://hf-mirror.com huggingface-cli download nvidia/bigvgan_v2_22khz_80band_256x --local-dir bigvgan_v2_22khz_80band_256x
|
||
|
||
# W2V-BERT 2.0 (下载整个文件夹,排除大文件 checkpointers)
|
||
HF_ENDPOINT=https://hf-mirror.com huggingface-cli download facebook/w2v-bert-2.0 --local-dir w2v-bert-2.0 --exclude "*.pt"
|
||
```
|
||
|
||
> [!NOTE]
|
||
> 如果本地目录中未找到上述子模型,节点会自动尝试从 HuggingFace 在线加载(缓存到 `~/.cache/huggingface`)。
|
||
> **首次加载**时,WeTextProcessing 库需要编译中文文本正则化的 FST 语法(耗时约 3-5 分钟),后续启动会直接读取缓存。
|
||
|
||
#### 💡 用户实测与选型指南 (Model Comparison & Selection)
|
||
|
||
**选型建议**:
|
||
|
||
- **追求“听起来最像真人” (音质+音色)**: 选 **VoxCPM 1.5**。它的 Tokenizer-free 架构带来了质的飞跃。
|
||
- **追求“方言/多语言/稳定性”**: 选 **CosyVoice 3.0**。目前依然是生产环境最稳的选择。
|
||
- **追求“多样化音色设计/最新 Qwen 生态/长语音流畅度”**: 选 **Qwen3-TTS**。其 VoiceDesign 功能能让你用描述语“捏”出从未听过的声音。
|
||
- **追求“情感精细控制/音色情感解耦”**: 选 **IndexTTS-2**。独立的 8 维情感控制、内联情感标签(逐句不同情感)和情感音频参考是其独有优势。
|
||
- **要做“长篇广播剧/播客”**: 选 **VibeVoice**。它的长窗口上下文优势依然不可替代。
|
||
|
||
### 4. 播客与对话生成 (Podcast & Dialogue Generation)
|
||
|
||
https://github.com/user-attachments/assets/9a5502c5-79e3-4fc8-8a2d-2cbdbdbbc860
|
||
|
||
> 🎬 **点击观看演示视频** (GitHub 限制,需要手工取消静音)
|
||
|
||
🚀 **新增功能**:这是专门为生成双人对话、相声、广播剧设计的完整工作流节点。能够自动解析剧本、调度多角色 TTS,并实现长音频的智能拼接。
|
||
|
||
#### 4.1 AIIA Podcast Script Parser (脚本解析器)
|
||
|
||
负责将自然语言剧本转换为机器可读的结构化数据。
|
||
|
||
- **Script Text**: 剧本输入区域。
|
||
- **基本格式**: `角色名: 台词` (例如 `A: 大家好`)
|
||
- **暂停控制**: `(Pause N)` (例如 `(Pause 0.5)` 表示暂停 0.5 秒)
|
||
- **情感标签** (仅 CosyVoice): `[Emotion] 台词` (例如 `[Happy] 大家好`)
|
||
- **Speaker Mapping**: 角色映射配置 (可选)。
|
||
- 格式: `原剧本角色名=A`, `原剧本角色名=B`
|
||
- 示例: `Teacher=A`, `Student=B`
|
||
|
||
#### 4.2 AIIA Emotion Annotator (LLM 情感标注)
|
||
|
||
**[v1.13.0 New]** 使用 LLM 自动为对话剧本中的每句台词标注情感,无需手工逐句添加 `[Happy]` 等标签。
|
||
|
||
##### 定位与流程
|
||
|
||
插入在 **Script Parser → TTS** 之间,作为可选的中间处理环节:
|
||
|
||
```
|
||
Script Parser → Emotion Annotator → Dialogue TTS / Qwen Dialogue TTS
|
||
↓ ↓
|
||
写入 emotion 字段 读取 emotion 字段
|
||
"Happy" / "Calm" → CosyVoice: [Happy]文本
|
||
null (neutral) → 原文直读
|
||
```
|
||
|
||
> **无侵入设计**:如果不连接此节点,工作流行为与之前完全一致。连接后自动生效,对下游 TTS 透明。
|
||
|
||
##### 参数说明
|
||
|
||
| 参数 | 说明 |
|
||
|------|------|
|
||
| `dialogue_json` | 来自 Script Parser 的对话 JSON(连线输入) |
|
||
| `model` | LLM 模型选择:`llama-3.1-8b-instant` (默认/最快)、`llama-3.3-70b-versatile`、`qwen-qwq-32b`、`deepseek-r1-distill-llama-70b`、`gemma2-9b-it` |
|
||
| `override_mode` | `skip_existing`:保留剧本中已有的手工标签,只标注未标注的句子;`overwrite_all`:覆盖所有标签 |
|
||
| `api_base_url` | API 端点,默认 `https://api.groq.com/openai/v1`。支持任何 OpenAI-compatible API(Ollama、vLLM 等) |
|
||
| `api_key_override` | API Key。留空则自动读取环境变量 `GROQ_API_KEY` |
|
||
| `custom_model` | 自定义模型名(覆盖下拉选择,用于 Ollama 等自建服务) |
|
||
| `proxy_url` | HTTP/SOCKS5 代理地址。留空则使用环境变量 `HTTPS_PROXY` |
|
||
|
||
##### 工作原理
|
||
|
||
1. **收集台词**:从 `dialogue_json` 中提取所有 `type: "speech"` 的条目
|
||
2. **构造 Prompt**:将台词编号后发送给 LLM,附上 24 种预定义情感标签,要求 LLM 从中选择
|
||
3. **解析响应**:将 LLM 返回的 JSON 数组解析为 `{行号: 情感}` 映射
|
||
4. **写回标签**:将情感标签(如 `"Happy"`、`"Calm"`)写入每条台词的 `emotion` 字段
|
||
5. `neutral` 的句子不注入标签(`emotion: null`),TTS 以自然语调朗读
|
||
|
||
##### 支持的 24 种情感标签
|
||
|
||
`neutral` · `happy` · `sad` · `angry` · `excited` · `gentle` · `fearful` · `surprised` · `disappointed` · `serious` · `calm` · `romantic` · `sarcastic` · `proud` · `confused` · `anxious` · `disgusted` · `nostalgic` · `mysterious` · `enthusiastic` · `lazy` · `gossip` · `innocent` · `nervous`
|
||
|
||
##### 下游兼容性
|
||
|
||
| TTS 引擎 | 消费方式 | 效果 |
|
||
|----------|---------|------|
|
||
| **CosyVoice** | `[Happy] 文本...` 格式注入 | ✅ 精准情感控制 |
|
||
| **Qwen3-TTS (CustomVoice)** | 提取标签 → `instruct` 指令(按情感自动拆批) | ✅ 自动按情感分批生成 |
|
||
| **Qwen3-TTS (Base)** | 自动清洗标签(Base 模型不支持 instruct) | ✅ 标签被清洗,不影响克隆 |
|
||
| **VibeVoice** | 自动清洗 `[Emotion]` 标签后生成 | ✅ 无影响,不会朗读标签 |
|
||
|
||
> **Qwen3 智能分批**:当使用 Qwen3 Dialogue TTS 时,连续相同情感的句子会自动合并为一个批次,情感变化时自动拆分为新批次,确保每个批次的 `instruct` 只包含单一情感,语义准确。
|
||
|
||
> **VibeVoice 安全保障**:VibeVoice Standard / Realtime 节点在文本预处理阶段会自动清洗所有 24 种情感标签(如 `[Happy]`、`[Calm]`),因此即使通过 Podcast Splitter 传递了嵌标签的文本,VibeVoice 也不会将其作为普通文字朗读。
|
||
|
||
> **优先级规则**:如果用户在 Qwen3 节点的 UI 下拉框中手动选择了情感,该选择将**优先于**文本中的内嵌标签。标签仍会被清洗,但不会覆盖 UI 设置。
|
||
|
||
##### 典型工作流
|
||
|
||
**对话流程**(适合大多数场景):
|
||
```
|
||
Script Parser → Emotion Annotator → Dialogue TTS → Video Combine
|
||
```
|
||
|
||
**单人旁白流程**(配合 Text Splitter):
|
||
```
|
||
长文本 → Text Splitter → Emotion Annotator → Qwen3 TTS / CosyVoice
|
||
```
|
||
|
||
**高级拆分流程**(多引擎混合):
|
||
```
|
||
Script Parser → Emotion Annotator → Podcast Splitter → TTS_A (CosyVoice)
|
||
→ TTS_B (VibeVoice)
|
||
→ Podcast Stitcher
|
||
```
|
||
|
||
#### 4.3 AIIA Text Splitter (文本拆分器)
|
||
|
||
**[v1.13.0 New]** 将单人长文本按标点拆分为标准 `dialogue_json`,使其可直接接入 Emotion Annotator → TTS 管线。
|
||
|
||
##### 参数说明
|
||
|
||
| 参数 | 说明 |
|
||
|------|------|
|
||
| `text` | 待拆分文本(多行/长段落) |
|
||
| `speaker_name` | 说话人名称,默认 `Narrator` |
|
||
| `split_mode` | `auto`:智能拆分(句末标点 + 短句合并 + 长句再拆);`by_sentence`:仅按句号/问号/感叹号拆分;`by_line`:按换行拆分 |
|
||
| `min_chars` | 最小字符数,短于此的句子合并到前一句。默认 `4` |
|
||
| `max_chars` | 最大字符数,超长句子在逗号/分号处强制拆分。默认 `100` |
|
||
|
||
##### 拆分行为 (`auto` 模式)
|
||
|
||
1. **按换行分段** → 保留段落结构
|
||
2. **段内按句末标点拆分** → `。!?!?…` 和省略号 `……` / `...`
|
||
3. **短句合并** → 短于 `min_chars` 的句子追加到前一句
|
||
4. **长句拆分** → 超过 `max_chars` 的句子在逗号/分号处再切
|
||
|
||
##### 输出
|
||
|
||
- `dialogue_json`:标准格式,与 Script Parser 输出兼容,可直接接入 Emotion Annotator / Dialogue TTS
|
||
- `sentence_count`:拆分后的句子数
|
||
|
||
#### 4.4 AIIA Dialogue TTS (对话生成引擎)
|
||
|
||
核心调度与生成节点,支持自动角色切换和长音频拼接。
|
||
|
||
- **TTS Engine**: 后端引擎选择。
|
||
- **CosyVoice**: 精准控制型。
|
||
- **Qwen3-TTS**: 万能旗舰型。支持混合模式:通过连接多个 Qwen 模型,可实现在一个对话中同时使用克隆和内置音色。
|
||
- **Qwen Model Pins (Multi-Routing)**:
|
||
- `qwen_model`: 默认主模型。
|
||
- `qwen_base_model` (可选): 连接 `Base` 模型,专门处理有参考音频 (Clone) 的角色。
|
||
- `qwen_custom_model` (可选): 连接 `Custom` 模型,专门处理使用内置 ID (Presets) 的角色。
|
||
- `qwen_design_model` (可选): 连接 `VoiceDesign` 模型,专门处理复杂描述的角色。
|
||
- **Ref Audio**: 参考音频 (用于 Zero-Shot 克隆)。
|
||
- **ID**: 内置音色 ID (如 CosyVoice 的 `Chinese Female`)。
|
||
- **Batch Mode**: 生成模式控制。
|
||
- `Natural (Hybrid)`: 混合批处理。仅在 `(Pause)` 处断开。语流最自然,但可能发生音色泄漏。
|
||
- `Strict (Per-Speaker)`: 严格模式。每句话都会强制断开重置。彻底杜绝音色泄漏,但对话流畅度略低。
|
||
- `Whole (Single Batch)`: 全量模式。无视所有暂停,一次性生成整本剧本。连贯性最强,但无法控制停顿时间。
|
||
- **Batching Parameters**:
|
||
- `max_batch_char` (Default 1500): 单次批处理的最大字符上限。增加此值可大幅提升 Qwen3 的对话连贯性和情感一致性。最高支持模型上限 **32,768**。
|
||
- **Emotion Safeguard (New!)**:
|
||
- **智能检测**: 系统会自动嗅探加载模型的元数据。如果你使用 CosyVoice SFT/Base 或 VibeVoice 等不支持 `Instruct` 功能的模型,系统将自动跳过 `[Emotion]` 标签插入,防止模型读出方括号。
|
||
|
||
#### 4.5 AIIA Qwen Dialogue TTS (Qwen 旗舰对话节点)
|
||
|
||
**[v1.11.0 New]** 深度集成 Qwen3-TTS 的多模式特性,支持复杂的混合角色场景。
|
||
|
||
- **Parameters**:
|
||
- `seed`: 随机种子。
|
||
- `speed`: 语速调节。
|
||
- `cfg_scale`: 指令遵循强度 (Classifier-Free Guidance)。建议值 1.5 - 7.0。
|
||
- `emotion`: **[v1.11.1 New]** 选中预设情感(开心、悲伤、幽默、愤怒等系统预置微调)。
|
||
- `dialect`: **[v1.11.1 New]** 选中预设方言(粤语、上海话、东北话、四川话等)。
|
||
- `temperature`: 采样温度。
|
||
- `max_batch_char`: 单次批处理上限(最高 32,768)。
|
||
- **Speaker A/B/C Configuration**:
|
||
- **Mode**: 选择 `Clone` (音色克隆)、`Preset` (官方预设) 或 `Design` (文字设计)。
|
||
- **ID**: 当模式为 Preset 时,输入预设音色名 (如 `Vivian`, `Serena`, `Uncle_Fu`, `Dylan`, `Eric`, `Ryan`, `Aiden`, `Ono_Anna`, `Sohee`)。
|
||
- **Expression**: (New!) 为当前角色选择专属微表情描述。
|
||
- **Dialect**: **[v1.11.1 New]** 为当前角色选择方言/口音(支持粤语、上海话、四川话、东北话等)。
|
||
- **Design Description**: 当模式为 Design 时,输入对音色的详细自然语言描述。
|
||
- **Ref Audio**: 当模式为 Clone 时,连接参考音频。
|
||
- **特点**: 相对于通用对话节点,此节点能根据每个人的模式自动路由到最合适的 Qwen 引擎,且支持在 UI 直接输入设计描述。
|
||
|
||
#### 4.6 AIIA Subtitle Gen (字幕生成器)
|
||
|
||
**[v1.7.0 New]** 无需 STT,直接从生成过程中提取精准时间轴。
|
||
|
||
- **Input**:
|
||
- `segments_info`: 来自 `AIIA Dialogue TTS` 或 `AIIA Generate Segments` 的输出。
|
||
- `calibration_info` (可选): **[v1.10.2 新增]** 接入 `AIIA Generate Speaker Segments` 的输出。用于将估算的时间轴自动“吸附”到真实的 VAD 语音活动区间,解决 VibeVoice 等批处理引擎的时间轴偏移问题。
|
||
- **Output**:
|
||
- `SRT`: 通用字幕格式。
|
||
- `ASS`: 高级排版字幕格式 (自动区分角色颜色)。
|
||
- **原理**:
|
||
- **CosyVoice**: 使用生成时的精确时长。
|
||
- **VibeVoice**: 使用**智能插值算法 (Smart Interpolation)**,根据字符长度自动计算长音频段内的单句时间轴。
|
||
- **Qwen3-TTS**: 基于生成的音频振幅精准断句,支持多角色时间轴导出。
|
||
|
||
#### 4.7 AIIA Subtitle to Segments (字幕转分段)
|
||
|
||
**[v1.10.3 New]** 将现有的 SRT/ASS 字幕文件转换为 `segments_info` 格式,以便进行时间轴重新校准。
|
||
|
||
- **Input**:
|
||
- `subtitle_text`: SRT 或 ASS 格式的文本内容。
|
||
- `subtitle_path` (可选): 字幕文件的本地路径(如果提供,将优先读取文件)。
|
||
- **Output**:
|
||
- `segments_info`: 标准化的 JSON 字符串,可直接输入到 `AIIA Subtitle Gen`。
|
||
- **用途**: 结合 `Subtitle Gen` 的 `calibration_info` 输入,可以将**旧的、不准的字幕**自动对齐到**新的、精准的音轨**上。
|
||
|
||
#### 4.8 AIIA Subtitle Preview (字幕预览)
|
||
|
||
**[v1.7.1 New]** 实时校验音画同步效果。
|
||
|
||
- **Input**:
|
||
- `subtitle_content`: 来自 `Subtitle Gen` 的 `srt_content` 或 `ass_content`。
|
||
- `audio` (Optional): 待预览的音频。
|
||
- **Output**:
|
||
- **交互式界面**: 提供 Web 播放器,按时间轴滚动显示字幕。
|
||
- **ASS 样式渲染**: 尝试还原 ASS 字幕的字体颜色、大小和描边效果。
|
||
|
||
#### 4.9 Interactive Teaching (Web Export) (互动式教学导出)
|
||
|
||
**[v1.8.1 New]** 将播客升级为视听同步的互动网页。支持“读写分离”的缓存优化,修改 Visual 标签无需重跑 TTS。
|
||
|
||
- **工作流 (Workflow)**:
|
||
1. `Script Parser` 输出 `tts_data` (连接到 TTS) 和 `full_script` (连接到 Merge)。
|
||
2. `AIIA Dialogue TTS` 生成音频和 `segments_info`。
|
||
3. `AIIA Segment Merge` 将 `full_script` 中的 Visual 标签重新贴回到 `segments_info` 时间轴上。
|
||
4. `AIIA Web Export` 生成最终 HTML。
|
||
- **Input**:
|
||
- `audio`: 音频信号。
|
||
- `segments_info`: 来自 Merge 节点的包含 Visual 信息的 JSON。
|
||
- `template`: `Split Screen` (适合宽屏) 或 `Presentation` (适合演示)。
|
||
- **Visual Tag 语法**:
|
||
- 在剧本中插入 `(Visual: url)`。
|
||
- 支持绝对 URL: `(Visual: https://example.com)`
|
||
- 支持相对路径: `(Visual: ./slides/01.jpg)` (相对于导出 HTML 的位置)
|
||
|
||
#### 4.10 AIIA Podcast Splitter (对话拆分器)
|
||
|
||
**[v1.12.0 New]** 将对话 JSON 按说话人拆分为独立文本列表,用于"**拆分→生成→拼接**"的高级流程。
|
||
|
||
- **Input**:
|
||
- `dialogue_json`: 来自 `Script Parser` 的对话 JSON。
|
||
- **Output**:
|
||
- `split_map`: 拆分映射表(JSON),保存原始顺序和各句话归属信息。
|
||
- `text_A`, `text_B`: 分别为说话人 A、B 的纯文本列表(每行一句),可直接送入各自的 TTS 节点独立生成。
|
||
- **用途**: 实现对不同说话人使用不同 TTS 引擎/参数生成音频,再通过 Stitcher 精确拼接的高级工作流。
|
||
|
||
#### 4.11 AIIA ASR Node (语音识别)
|
||
|
||
**[v1.12.0 New]** 基于 FunASR 的语音识别节点,输出带词级时间戳的识别结果,为 Stitcher 提供精确对齐依据。
|
||
|
||
- **Input**: `audio` (AUDIO 张量)。
|
||
- **Output**: `ASR_RESULT`(包含词级时间戳的识别结果)。
|
||
- **依赖**: 需要安装 `funasr` 库。模型首次运行时自动下载。
|
||
|
||
#### 4.12 AIIA Podcast Stitcher (精确拼接器)
|
||
|
||
**[v1.12.0 New]** 将分轨生成的多角色音频按原始对话顺序精确拼接,还原自然对话节奏。
|
||
|
||
- **核心工作原理**:
|
||
1. 利用 ASR 词级时间戳找到每句话在各自音频中的时间边界。
|
||
2. 通过三层匹配策略(精确子串→编辑距离模糊→等分回退)实现鲁棒对齐。
|
||
3. 在切分边界处进行精细微调(能量检测或 VAD),确保不切断语音、不吃进相邻句子。
|
||
4. 对切片施加余弦淡入淡出,并在说话人切换处插入自然过渡间隙。
|
||
- **Input**:
|
||
- `split_map`: 来自 Splitter 的拆分映射。
|
||
- `audio_A`, `audio_B`: 各说话人独立生成的完整音频。
|
||
- `asr_A`, `asr_B`: 对应的 ASR 识别结果。
|
||
- **Parameters**:
|
||
- `gap_duration` (Default 0.25s): 说话人交替时的过渡间隙。
|
||
- `padding` (Default 0.10s): 切片前后保留的呼吸/尾音余量。
|
||
- `fade_ms` (Default 30ms): 余弦淡入淡出时长。
|
||
- `use_vad` (Default False): **🔬 启用 Silero VAD 精确边界检测**。
|
||
- 开启后,使用 Silero VAD 神经网络模型(~2MB,首次自动下载)替代基于能量的边界检测。
|
||
- VAD 能精确识别语音起止点,彻底解决清辅音误切、尾音截断等能量检测的固有缺陷。
|
||
- 关闭时使用内置的**平滑能量包络检测**(20ms 窗口 + 5-point 滑动平均),已能应对大部分场景。
|
||
- `use_forced_align` (Default False): **🎯 启用 MMS Forced Alignment 字级强制对齐**。
|
||
- 使用 Facebook MMS 声学模型(~1.2GB)对文本和音频进行字级强制对齐,精度最高。
|
||
- 中文文本自动转换为拼音(pypinyin)后送入模型。
|
||
- 当与 `use_vad` 同时启用时,三种方法(FA/VAD/Energy)全部运行,输出 IoU 匹配度用于质量评估。
|
||
- 模型首次使用时自动下载,成功后会自动复制到 `models/mms_fa/model.pt` 以便后续直接加载。
|
||
- **手动下载**(适用于网络受限环境):
|
||
```bash
|
||
# 方法 1:直接下载 torchaudio 官方权重
|
||
mkdir -p ComfyUI/models/mms_fa
|
||
wget -O ComfyUI/models/mms_fa/model.pt \
|
||
"https://dl.fbaipublicfiles.com/mms/torchaudio/ctc_alignment_mling_uroman/model.pt"
|
||
|
||
# 方法 2:从 HuggingFace 镜像下载
|
||
pip install huggingface_hub
|
||
huggingface-cli download facebook/mms-fa --local-dir ComfyUI/models/mms_fa
|
||
```
|
||
- **Output**: 拼接后的完整 `AUDIO` + `segments_info` (JSON)。
|
||
|
||
#### 💡 引擎选型与最佳实践 (Best Practices)
|
||
|
||
| 特性 | **CosyVoice** | **VibeVoice** | **Qwen3-TTS** |
|
||
| :----------------- | :----------------------------------------- | :----------------------------------------------------------------------------------------------- | :------------------------------------------ |
|
||
| **核心优势** | **精准控制 (Instruction)** | **自然演绎 (Context-Aware)** | **万能旗舰 (Voice Design)** |
|
||
| **情感控制** | ✅**支持** (使用 `[Happy]` 等标签) | ❌ 不支持显式标签 (依赖上下文) | ✅**支持** (通过 `instruct` 或标签) |
|
||
| **生成逻辑** | **逐句生成** (严格遵循每句话的指令) | **混合批处理** (Hybrid Batching) | **动态引擎** (支持流式与批处理) |
|
||
| **最佳场景** | 需要精确指定某句话语气、方言时 | 长篇对话、广播剧、闲聊 | 音色定制、高质量配音、极速克隆 |
|
||
| **使用建议** | 可以在剧本中详细标注情感。 | **尽量减少 `(Pause)`**!`<br>`让多句对话连在一起,模型能更好地联系上下文产生自然语气。 | 尝试使用其 Voice Design 进行创意捏人。 |
|
||
|
||
#### 📝 综合测试剧本 (Example Script)
|
||
|
||
复制以下内容到 Script Parser 进行测试,能够充分体现两种引擎的特性:
|
||
|
||
```text
|
||
# 这是一个展示 CosyVoice 和 VibeVoice 能力的综合剧本
|
||
# 角色映射建议:A=男声, B=女声
|
||
|
||
A: 大家好,欢迎来到 AIIA 播客直播间。
|
||
B: [开心] 哇,今天的人气好高啊!看到这么多朋友在线,我太激动了。
|
||
|
||
(Pause 0.5)
|
||
|
||
A: 呵呵,淡定一点。即使是 VibeVoice 这种基于 LLM 的模型,也需要你保持从容。
|
||
B: [疑惑] 为什么?难道它不喜欢太吵闹的声音吗?
|
||
A: 不是不喜欢,而是因为它会“读取”上下文。你越自然,它演得越像。
|
||
|
||
(Pause 0.8)
|
||
|
||
A: 比如说,如果我们用 CosyVoice,我可以强行指定你现在的状态。
|
||
B: [悲伤] 比如让我突然变得很伤心?
|
||
A: 对,就像这样。CosyVoice 是“指哪打哪”,非常听话。
|
||
|
||
(Pause 0.5)
|
||
|
||
B: [机器人的方式] 那如果我变成一个机器人呢?可以吗?
|
||
A: 哈哈,完全没问题。
|
||
|
||
(Pause 1.0)
|
||
|
||
A: 但是,如果你想演一场相声,或者很自然的闲聊,VibeVoice 的“混合批处理”就是神技了。
|
||
B: [excited] 也就是它会把我们现在说的这一长串话,一口气生成出来?
|
||
A: 没错!只要我们中间不加 Pause,它就会一口气读完,语气极其连贯,就像真人对话一样。
|
||
B: 太神奇了!那我们快去生成试试吧!
|
||
```
|
||
|
||
### 5. 图像工具 (Image Utilities)
|
||
|
||
#### Image Concatenate (AIIA Utils, Disk)
|
||
|
||
- **用途**: 将两个图像序列(来自两个不同的目录)逐帧拼接在一起,非常适合创建**对比视频**或**多面板视频**。
|
||
- **核心亮点 (OOM-Safe)**: 此节点**逐帧读取、处理和保存**,从不将整个图像序列加载到内存中,因此可以处理任意数量的帧。
|
||
- **功能**:
|
||
|
||
- 支持上下左右四个方向的拼接。
|
||
- 可自动调整其中一个图像序列的尺寸以匹配另一个,并保持宽高比。
|
||
- 可自定义背景填充颜色。
|
||
- **输出**: `STRING` (包含所有拼接后帧的新目录路径)。
|
||
|
||
#### AIIA Image Smart Crop (智能图像裁切)
|
||
|
||
- **用途**: 一个功能全面的智能裁切节点,专为解决人脸比例、视频构图等问题设计。
|
||
- **场景**: 强烈建议在 **Ditto Sampler** 或其他视频生成节点之前使用,以确保输入图像(特别是人脸)处于最佳位置和比例,避免“嘴巴太大”或“五官漂移”等问题。
|
||
- **参数**:
|
||
- `crop_basis`: 裁切基准。
|
||
- `fixed_width` / `fixed_height`: 锁定一条边 (使用 width/height 参数),另一条边自适应。
|
||
- `fixed_long_side`: **匹配原图长边**。裁切出的长边长度等于原图长边长度 (忽略 width/height 参数)。
|
||
- `fixed_short_side`: **匹配原图短边**。裁切出的短边长度等于原图短边长度 (忽略 width/height 参数)。适合“最大化裁切”。
|
||
- `custom_size`: 强制裁切为指定的 `width` x `height`。
|
||
- `aspect_ratio`: 裁切比例。
|
||
- 默认为 `original` (保持原图比例或使用 custom_size 的宽高)。
|
||
- 可选 `1:1`, `16:9`, `custom` 等。
|
||
- 选择非 original 时,会根据 `crop_basis` 自动计算另一条边的长度。
|
||
- `custom_aspect_ratio`: 自定义比例值 (例如 2.35)。仅在 `aspect_ratio` 选 `custom` 时生效。
|
||
- `position`: 锚点位置 (九宫格)。支持 `center`, `top`, `bottom_left` 等。
|
||
- `offset_x` / `offset_y`: 相对偏移量。用于在自动定位的基础上进行微调 (范围 -1.0 到 1.0)。
|
||
- **输出**: `IMAGE` (裁切后的图像)。
|
||
|
||
---
|
||
|
||
### 6. 调试与实用工具 (Debug & Utilities)
|
||
|
||
#### 6.1 文本调试拼接 (Text Debug Splicer)
|
||
|
||
- **用途**: 方便地将多段文本拼接为一个字符串,支持自定义标题和分隔符,常用于构建和调试复杂的 Prompt 或记录中间结果。
|
||
- **功能**:
|
||
- **多路输入**: 支持最多 3 路文本输入 (`text_1`~`3`) 和自定义标题 (`title`)。
|
||
- **灵活分隔**: 内置多种常用分隔符 (换行、分割线等)。
|
||
- **自动归档**: 支持将拼接结果自动保存为 `.txt` 文件,文件名支持**自定义前缀** (save_prefix),方便回溯。
|
||
- **输出**: `STRING` (拼接后的文本)。
|
||
|
||
#### 6.2 JSON 提取器 (AIIA JSON Extractor 🔑)
|
||
|
||
- **用途**: 从 `STRING` 类型的 JSON 字符串中,按 key 路径提取指定字段的值。无需依赖第三方 JSON 节点,完全基于 `STRING` 类型,兼容所有上下游节点。
|
||
- **功能**:
|
||
- **嵌套路径**: 支持 dot 路径 + 数组索引,例如 `data.items[0].name`、`[2].speaker`。
|
||
- **多类型输出**: 同时输出 `STRING`、`INT`、`FLOAT`、`BOOLEAN`,自动安全转换。
|
||
- **鲁棒容错**: JSON 格式错误、key 不存在、类型不匹配等情况**不会崩溃**,统一返回 `fallback` 默认值。
|
||
- **自动清理**: 自动处理 BOM、首尾空白等常见 JSON 字符串问题。
|
||
- **输入**:
|
||
- `json_string` (STRING, forceInput) — 待解析的 JSON 字符串
|
||
- `key_path` (STRING) — 提取路径,例: `name`, `data.items[0].text`, `[2].speaker`
|
||
- `fallback` (STRING, 可选) — 解析失败时的默认值
|
||
- **输出**: `value` (STRING), `value_int` (INT), `value_float` (FLOAT), `found` (BOOLEAN)
|
||
|
||
**路径语法示例:**
|
||
|
||
| 路径 | JSON 示例 | 提取结果 |
|
||
|---|---|---|
|
||
| `name` | `{"name": "Alice"}` | `Alice` |
|
||
| `data.count` | `{"data": {"count": 42}}` | `42` |
|
||
| `items[0].text` | `{"items": [{"text": "Hello"}]}` | `Hello` |
|
||
| `[2].speaker` | `[{}, {}, {"speaker": "B"}]` | `B` |
|
||
| *(空)* | `{"a": 1}` | 返回整个 JSON |
|
||
|
||
#### 6.3 JSON 构建器 (AIIA JSON Builder 🏗️)
|
||
|
||
- **用途**: 将多组 key-value 组装为 JSON 对象字符串,方便下游节点消费。
|
||
- **功能**:
|
||
- 支持最多 **4 对** key-value 输入。
|
||
- 值如果是合法 JSON(数组、对象、数字、布尔),会自动解析为对应类型而非字符串。
|
||
- **输入**: `key_1` + `value_1` (必填), `key_2`~`key_4` + `value_2`~`value_4` (可选)
|
||
- **输出**: `json_string` (STRING)
|
||
|
||
---
|
||
|
||
## ❓ 故障排查
|
||
|
||
- **错误: "FFmpeg not found" / "NeMo model not found"**
|
||
- 请返回阅读 [安装与先决条件](#-安装与先决条件) 部分,确保所有依赖都已正确安装和放置。
|
||
- **错误: "帧目录验证失败"**
|
||
- 请确保您填写的路径是**绝对路径**且真实存在。
|
||
|
||
## 许可证
|
||
|
||
本项目采用 [MIT 许可证](LICENSE)。
|
||
|
||
---
|
||
|
||
## Changelog
|
||
|
||
### [1.14.2] - 2026-02-17
|
||
|
||
- **NeMo Diarization 兼容性修复**: 修复 PyTorch 2.10+ 环境下 NeMo 说话人分割(`diarize()`)因 lhotse 1.32 不兼容报 `object.__init__() takes exactly one argument` 的崩溃。
|
||
- 自动检测 PyTorch 版本,仅在 >= 2.10 时 monkey-patch `CutSampler.__init__`,移除已废弃的 `data_source` 参数。
|
||
- **JSON Extractor 节点** (New): 从 `STRING` 类型的 JSON 字符串中按 key 路径提取值,支持嵌套路径和数组索引(如 `data.items[0].name`)。
|
||
- 多类型输出:`STRING`、`INT`、`FLOAT`、`BOOLEAN`。
|
||
- 鲁棒容错:JSON 格式错误、key 不存在时返回 `fallback` 默认值,不会崩溃。
|
||
- **JSON Builder 节点** (New): 将多组 key-value 组装为 JSON 对象字符串,支持最多 4 对输入。
|
||
- **Qwen3-TTS Voice Preset**: 新增 `voice_preset` 下拉框(Female_HQ/Male_HQ/Female/Male),无需手动接入参考音频即可使用内置音色,自动启用 Zero-Shot 模式。
|
||
- **Qwen3-TTS 鲁棒性**: `reference_text` 为空或字面值 `"None"` 时自动切换到 Zero-Shot 模式,防止意外走入慢速 ICL 模式。
|
||
- **CosyVoice 参考音频限制**: 参考音频超过 30 秒时自动截断,防止 `AssertionError`。
|
||
|
||
### [1.12.0] - 2026-02-16
|
||
|
||
- **Podcast Stitcher - MMS Forced Alignment 集成**: 新增 `use_forced_align` 开关,使用 Facebook MMS 声学模型(~1.2GB)进行字级强制对齐。
|
||
- 中文文本自动转拼音(pypinyin),英文自动小写化以兼容 MMS_FA tokenizer。
|
||
- **混合切割策略**: FA 精确定位语音起点 + 能量检测定位自然收尾点,兼顾起音精准与尾音完整。
|
||
- **重叠防护**: 尾部扩展不会吃进下一句 FA 起点,取中点并保底不低于 FA 原始终点。
|
||
- **三方法交叉验证**: FA + VAD + Energy 同时启用时,输出 IoU 匹配度(`✂️ USED` / `🔬`),方便评估各方法精度。
|
||
- 优先级: FA > VAD > Energy,FA 缺失时自动回退。
|
||
- 模型支持从 `models/mms_fa/model.pt` 本地加载,避免重复下载。
|
||
|
||
### [1.11.1] - 2026-02-15
|
||
|
||
- **Video Combine**: 新增 `cleanup_frames` 开关(默认关闭)。
|
||
- 开启后,视频合成成功时自动删除输入的 `frames_directory`,减少磁盘空间占用。
|
||
- **防误删安全机制**: 引入 `.aiia_temp` 标记文件,只有 AIIA 节点自动生成的帧目录才会包含此标记,用户提供的素材目录不会被误删。
|
||
- **ToDisk 节点安全标记**: 所有产生帧输出的节点(`FloatProcess_ToDisk`、`DittoSampler` 磁盘模式、`PersonaLive_ToDisk`、`BodySway`)现在会在输出目录中写入 `.aiia_temp` 标记文件。
|
||
|
||
### [1.11.0] - 2026-02-04
|
||
|
||
- **Qwen3-TTS**: 新增阿里巴巴 **Qwen3-TTS** 全系列支持。
|
||
- **🤖 Qwen3-TTS Loader**: 支持加载 Base, CustomVoice, VoiceDesign 及其 1.7B/0.6B 版本。
|
||
- **🗣️ Qwen3-TTS Synthesis**: 实现全功能生成,包括 Zero-shot 克隆、音色设计和内置音色合成。
|
||
- **Podcast Integration**: **AIIA Dialogue TTS** 节点现在正式集成 Qwen3-TTS 引擎。
|
||
- 支持多角色混合场景下的 Qwen3 驱动,支持使用脚本标签触发 `instruct`。
|
||
- **Auto-Dependency**: 首次运行 Qwen3 节点会自动检测并安装 `qwen-tts` 库。
|
||
|
||
### [1.10.17] - 2026-02-03
|
||
|
||
- **Subtitle**: 引入“说话人 ID 为了映射 (Speaker Mapping)”机制。
|
||
- 在字幕校准过程中,系统会建立脚本角色与 VAD 检测角色的对应关系。这确保了即使在短句重叠(Spillover)的情况下,字幕也能强制匹配到正确的说话人音频,避免被相邻的音量大/时长长的角色“抢走”。
|
||
|
||
### [1.10.16] - 2026-02-02
|
||
|
||
- **Subtitle**: 优化了多片段合并逻辑,引入“贪婪说话人占用”原则。
|
||
- 对于同一说话人的连续音频片段,只要中间没有被其他说话人占用且停顿小于 3s,都会自动合并到当前行字幕中。解决多句/长句被意外截断的问题。
|
||
|
||
### [1.10.15] - 2026-02-02
|
||
|
||
- **Subtitle**: 修复了字幕时间校准逻辑中的 Bug。
|
||
- 增加了说话人一致性检查,防止上一句音频片段(VAD Chunk)被错误地共享给下一个不同说话人的句子,从而导致当前句字幕被截断。
|
||
|
||
### [1.10.14] - 2026-02-02
|
||
|
||
- **Ditto Sampler**: 修复了由于 `comfy.model_management` 接口版本差异导致的 `AttributeError`。
|
||
|
||
### [1.10.13] - 2026-02-02
|
||
|
||
- **Ditto Sampler**: 修复了采样过程中无法正常响应 ComfyUI 中断/取消信号的问题。
|
||
- 为所有工作线程增加了超时检测和状态轮询,支持在长任务执行期间即时退出。
|
||
|
||
### [1.10.12] - 2026-02-02
|
||
|
||
- **Debug & Utilities**: 新增 **Text Debug Splicer** 节点。
|
||
- 支持多路文本拼接、自定义分隔符和自动文件归档。
|
||
|
||
### [1.9.0] - 2026-01-20
|
||
|
||
- **Ditto Talking Head**: 新增 Ditto 模型支持 (PyTorch 版)。
|
||
- **AIIA Ditto Loader**: 支持自动下载与加载。
|
||
- **AIIA Ditto Sampler**: 支持内存内流式生成。
|
||
- **EchoMimic V3**: 优化了音频同步逻辑,修复了唇形漂移问题。
|
||
|
||
### [1.8.4] - 2026-01-19
|
||
|
||
- **VibeVoice Speed Control**: 实现了基于系统 `sox` 命令的**变速不变调**(Time Stretching)。
|
||
- **稳定性修复**:
|
||
- 修复了 VibeVoice 在调整速度时由于张量类型不匹配(Half vs Float)导致的崩溃。
|
||
- 强制所有音频输出为 `float32`,解决了在 `speed=1.0` 且有参考音频时,下游节点(如 Resemble Enhance)报错的问题。
|
||
- **依赖更新**: 新增 `sox` 依赖。Linux 服务器用户请确保安装系统库:`sudo apt-get install libsox-dev sox`。
|
||
|
||
### [1.8.3] - 2026-01-07
|
||
|
||
- **VibeVoice TTS (Standard)**: `reference_audio` 变为可选参数。如果不输入,节点会自动加载内置的高品质女声种子,方便快速测试。
|
||
- **Fix**: 修复 GitHub Actions 发布的子模块错误。
|
||
|
||
### [1.8.1] - 2026-01-05
|
||
|
||
- **互动式教学 (Interactive Teaching)**: 新增 `AIIA Web Export` 节点,一键生成包含播放器、字幕和同步 Visual 展示的 HTML 页面。
|
||
- **Visual Tag 支持**: 剧本解析器支持 `(Visual: url)` 标签,并支持相对路径。
|
||
- **缓存优化 (Caching)**: 实现了 Script Parser 的读写分离和 `Segment Merge` 节点,支持修改 Visual 标签而不触发 TTS 重生成。
|
||
- **字幕增强**: 修复了 ASS 字幕的多角色颜色显示问题 (自动分配颜色)。
|
||
|
||
### [1.3.1] - 2026-01-03
|
||
|
||
本次更新标志着 CosyVoice 架构的**完全大一统**。通过“手术级”精准推理逻辑,我们成功解决了 300M 系列模型的所有顽疾。
|
||
|
||
#### ✅ 已完成 (Perfectly Supported)
|
||
|
||
- **V3 系列 (0.5B)**: 完美支持。性别、方言、情感以及指令文本均能精准跟随。
|
||
- **V2 系列 (0.5B)**: 完美支持。
|
||
- **300M-Instruct (V1)**: **彻底修复 (Fully Fixed)**。
|
||
- **指令跟随修复**: 强制注入官方缺失的 `<|endofprompt|>` 边界标识,完美解决了模型将指令文本读出来的问题。
|
||
- **能力矩阵**:
|
||
- ✅ **支持**: 情感控制 (Happy/Sad/Angry)、语速控制 (Fast/Slow)、基础性别 (Male/Female)。
|
||
> **Note**: 为了确保指令生效,**请务必使用英文描述** (如 "Sad tone", "Male speaker")。中文描述虽然不会导致报错,但模型极有可能忽略其语义。
|
||
>
|
||
- ❌ **不支持**: 方言指令 (Dialect) - 此模型架构原生不支持通过指令更改方言 (无论中文或英文),请使用 V3 或 V2 模型获取方言能力。
|
||
- **300M-SFT / Base (V1)**: 恢复原生巅峰音质。
|
||
- **稳定性**: 杜绝了 `AudioDecoder`、`KeyError` 以及 `llm_embedding` 缺失导致的各种崩溃。
|
||
|
||
#### 🔈 资源更新
|
||
|
||
- **HQ 种子音色**: 内置从 300M-SFT 提取的高保真男声/女声种子音频。在零参考音频的“指令模式”下,V2/V3 将自动调用这些高保真资源,消除破碎感。
|