Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 23 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ ComfyUI-SoulX-Podcast 是一个用于 ComfyUI 的自定义节点插件,将 Sou

## ✨ 主要特性

- 🎙️ **双人播客生成**:支持两个说话人的对话生成
- 🎙️ **多人播客生成**:支持最多 10 个说话人的对话生成(S1-S10)
- 🌍 **多方言支持**:支持多种中文方言(需使用方言模型)
- 📝 **灵活的对话脚本**:通过简单的脚本格式定义对话
- ⏸️ **停顿控制**:支持内联停顿标签 `<|pause:MS|>` 和不同说话人间停顿配置
- 🎵 **提示音频驱动**:使用参考音频(Suno)来克隆说话人的音色
- 🔄 **长文本生成**:支持生成长篇播客内容
- 🎛️ **可视化工作流**:在 ComfyUI 中通过节点连接完成整个生成流程
Expand Down Expand Up @@ -112,7 +113,7 @@ ComfyUI/

### 节点二:SoulX Podcast Input Parser(播客输入处理器)

**功能**:处理所有输入数据(音频、文本、对话脚本),并预处理为模型可以使用的格式。**支持双人对话(S1和S2)**。
**功能**:处理所有输入数据(音频、文本、对话脚本),并预处理为模型可以使用的格式。**支持最多 10 个说话人(S1-S10)**。

#### 必需输入

Expand All @@ -126,8 +127,10 @@ ComfyUI/
| 参数名 | 类型 | 说明 |
|--------|------|------|
| **S1_prompt_audio** | AUDIO | 说话人1(S1)的提示音频,用于提取音色特征 |
| **S2_prompt_audio** | AUDIO | 说话人2(S2)的提示音频(可选,用于双人对话) |
| **dialogue_script** | 多行文本 | 对话脚本,定义整个播客的对话内容<br>格式:`[S1] 第一句话\n[S2] 第二句话`<br>系统会自动从每个说话人的第一句话中提取提示文本 |
| **S2_prompt_audio** | AUDIO | 说话人2(S2)的提示音频(可选,用于多人对话) |
| **S3-S10_prompt_audio** | AUDIO | 说话人3-10的提示音频(可选,根据需要连接) |
| **dialogue_script** | 多行文本 | 对话脚本,定义整个播客的对话内容<br>格式:`[S1] 第一句话\n[S2] 第二句话\n[S3] 第三句话`<br>支持内联停顿标签:`[S1] 你好 <|pause:500|> 世界`<br>系统会自动从每个说话人的第一句话中提取提示文本 |
| **diff_spk_pause_ms** | 整数 | 不同说话人之间的停顿时间(毫秒),默认为 0 |

#### 输出

Expand Down Expand Up @@ -226,8 +229,24 @@ S1 你好 # ❌ 缺少方括号
```
[S1] 你好 # ✅ 正确
[S2] 你好 # ✅ 正确
[S3] 你好 # ✅ 正确(支持 S1-S10)
```

### Q5: 如何使用停顿控制?

**内联停顿标签**:
```
[S1] 今天天气不错 <|pause:500|> 我们出去走走吧 <|pause:800|> 怎么样?
[S2] 好的 <|pause:200|> 走吧
```
- `<|pause:MS|>` 中的 MS 是停顿时长,单位为毫秒
- 可以在同一说话人的文本中插入多个停顿标签

**说话人间停顿**:
- 在 Input Parser 节点中设置 `diff_spk_pause_ms` 参数
- 此参数控制不同说话人之间自动插入的停顿时长(毫秒)
- 默认值为 0(无停顿)


---

Expand Down
27 changes: 23 additions & 4 deletions README_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ ComfyUI-SoulX-Podcast is a custom node plugin for ComfyUI that packages the core

## ✨ Key Features

- 🎙️ **Two-Person Podcast Generation**: Supports dialogue generation between two speakers
- 🎙️ **Multi-Speaker Podcast Generation**: Supports dialogue generation with up to 10 speakers (S1-S10)
- 🌍 **Multi-Dialect Support**: Supports multiple Chinese dialects (requires dialect model)
- 📝 **Flexible Dialogue Scripts**: Define dialogues through simple script format
- ⏸️ **Pause Control**: Supports inline pause tags `<|pause:MS|>` and configurable pauses between different speakers
- 🎵 **Prompt Audio Driven**: Clone speaker voice characteristics using reference audio (Suno)
- 🔄 **Long-Form Generation**: Supports generation of long-form podcast content
- 🎛️ **Visual Workflow**: Complete the entire generation process through node connections in ComfyUI
Expand Down Expand Up @@ -112,7 +113,7 @@ This example includes:

### Node 2: SoulX Podcast Input Parser

**Function**: Processes all input data (audio, text, dialogue script) and preprocesses it into a format usable by the model. **Supports two-person dialogue (S1 and S2)**.
**Function**: Processes all input data (audio, text, dialogue script) and preprocesses it into a format usable by the model. **Supports up to 10 speakers (S1-S10)**.

#### Required Inputs

Expand All @@ -126,8 +127,10 @@ This example includes:
| Parameter | Type | Description |
|-----------|------|-------------|
| **S1_prompt_audio** | AUDIO | Speaker 1 (S1) prompt audio for extracting voice characteristics |
| **S2_prompt_audio** | AUDIO | Speaker 2 (S2) prompt audio (optional, for two-person dialogue) |
| **dialogue_script** | Multi-line text | Dialogue script defining the entire podcast dialogue<br>Format: `[S1] First sentence\n[S2] Second sentence`<br>The system automatically extracts the first sentence from each speaker as prompt text |
| **S2_prompt_audio** | AUDIO | Speaker 2 (S2) prompt audio (optional, for multi-speaker dialogue) |
| **S3-S10_prompt_audio** | AUDIO | Speaker 3-10 prompt audio (optional, connect as needed) |
| **dialogue_script** | Multi-line text | Dialogue script defining the entire podcast dialogue<br>Format: `[S1] First sentence\n[S2] Second sentence\n[S3] Third sentence`<br>Supports inline pause tags: `[S1] Hello <|pause:500|> world`<br>The system automatically extracts the first sentence from each speaker as prompt text |
| **diff_spk_pause_ms** | Integer | Pause duration in milliseconds between different speakers, default is 0 |

#### Output

Expand Down Expand Up @@ -226,8 +229,24 @@ S1 Hello # ❌ Missing brackets
```
[S1] Hello # ✅ Correct
[S2] Hello # ✅ Correct
[S3] Hello # ✅ Correct (supports S1-S10)
```

### Q5: How to use pause control?

**Inline pause tags**:
```
[S1] The weather is nice today <|pause:500|> let's go for a walk <|pause:800|> shall we?
[S2] Sure <|pause:200|> let's go
```
- `<|pause:MS|>` where MS is the pause duration in milliseconds
- Multiple pause tags can be inserted in the same speaker's text

**Pause between speakers**:
- Set the `diff_spk_pause_ms` parameter in the Input Parser node
- This parameter controls the automatically inserted pause duration (milliseconds) between different speakers
- Default value is 0 (no pause)

---

## 📚 Technical Architecture
Expand Down
Loading