ComfyPilotComfyPilot
工作流 / 音频 / Fish Audio:文本转语音
Fish Audio:文本转语音

Fish Audio:文本转语音

Fish Audio: Text to Speech

使用Fish Audio S2 Pro从文本生成自然、富有表现力的语音,这是一款支持80多种语言的文本转语音模型,可通过[whisper]或[excited]等内联标签精细控制情感、语调和节奏。输入文本即可获得一个高质量的音频输出,并可将可选风格标签直接编织到脚本中。非常适合配音制作、多语言内容创作以及游戏或动画中的角色对话。

音频 6 个节点 1 个输入 82 次使用 ComfyUI ≥ 0.33.2 ComfyUI 10 KB

下载工作流 JSON 查看官方来源

下载后把文件拖进 ComfyUI 窗口即可打开。

节点构成

FishAudioTextToSpeech × 1
SaveAudioAdvanced × 1
FishAudioVoiceSelector × 1
MarkdownNote × 1
FishAudioInstantVoiceClone × 1
LoadAudio × 1

官方标注的模型

Fish Audio

工作流 JSON

和上面「下载工作流 JSON」是同一份文件。

1{
2 "id": "1c3621ae-965c-43f9-ba79-dc0b92fcd468",
3 "revision": 0,
4 "last_node_id": 11,
5 "last_link_id": 9,
6 "nodes": [
7 {
8 "id": 1,
9 "type": "FishAudioTextToSpeech",
10 "pos": [
11 160,
12 220
13 ],
14 "size": [
15 440,
16 362
17 ],
18 "flags": [],
19 "order": 3,
20 "mode": 0,
21 "inputs": [
22 {
23 "name": "model.voices.voice0",
24 "shape": 7,
25 "type": "FISHAUDIO_VOICE",
26 "link": 6
27 },
28 {
29 "name": "model.voices.voice1",
30 "shape": 7,
31 "type": "FISHAUDIO_VOICE",
32 "link": 9
33 }
34 ],
35 "outputs": [
36 {
37 "name": "AUDIO",
38 "type": "AUDIO",
39 "links": [
40 3
41 ]
42 }
43 ],
44 "properties": {
45 "Node name for S&R": "FishAudioTextToSpeech"
46 },
47 "widgets_values": [
48 "[sigh] Yes, this voice is AI generated. \n[excited] Now in ComfyUI. Type text, add tags like this, and boom. Instant voice.",
49 "s2.1-pro",
50 0.7,
51 0.7,
52 1,
53 0,
54 true,
55 1481145631,
56 "randomize"
57 ],
58 "widgets_values_named": {
59 "text": "[sigh] Yes, this voice is AI generated. \n[excited] Now in ComfyUI. Type text, add tags like this, and boom. Instant voice.",
60 "model": "s2.1-pro",
61 "model.temperature": 0.7,
62 "model.top_p": 0.7,
63 "model.speed": 1,
64 "model.volume": 0,
65 "model.normalize": true,
66 "seed": 1481145631,
67 "control_after_generate": "randomize"
68 },
69 "color": "#432",
70 "bgcolor": "#653"
71 },
72 {
73 "id": 5,
74 "type": "SaveAudioAdvanced",
75 "pos": [
76 650,
77 220
78 ],
79 "size": [
80 730,
81 218
82 ],
83 "flags": [],
84 "order": 5,
85 "mode": 0,
86 "inputs": [
87 {
88 "name": "audio",
89 "type": "AUDIO",
90 "link": 3
91 }
92 ],
93 "outputs": [
94 {
95 "name": "audio",
96 "type": "AUDIO",
97 "links": null
98 }
99 ],
100 "properties": [],
101 "widgets_values": [
102 "audio/Fish_audio_t2s",
103 "mp3",
104 "V0"
105 ],
106 "widgets_values_named": {
107 "filename_prefix": "audio/Fish_audio_t2s",
108 "format": "mp3",
109 "format.quality": "V0"
110 }
111 },
112 {
113 "id": 6,
114 "type": "FishAudioVoiceSelector",
115 "pos": [
116 -420,
117 220
118 ],
119 "size": [
120 280,
121 86
122 ],
123 "flags": [],
124 "order": 0,
125 "mode": 0,
126 "inputs": [],
127 "outputs": [
128 {
129 "name": "voice",
130 "type": "FISHAUDIO_VOICE",
131 "links": [
132 6
133 ]
134 }
135 ],
136 "properties": {
137 "Node name for S&R": "FishAudioVoiceSelector"
138 },
139 "widgets_values": [
140 "Energetic Male (en)"
141 ],
142 "widgets_values_named": {
143 "voice": "Energetic Male (en)"
144 }
145 },
146 {
147 "id": 9,
148 "type": "MarkdownNote",
149 "pos": [
150 -1190,
151 140
152 ],
153 "size": [
154 500,
155 886.875
156 ],
157 "flags": [],
158 "order": 1,
159 "mode": 0,
160 "inputs": [],
161 "outputs": [],
162 "title": "Note: Guide",
163 "properties": [],
164 "widgets_values": [
165 "## Fish Audio Text to Speech\n\nGenerate speech from text with a preset Fish Audio voice.\n\n### How to use\n\n1. Sign in with your ComfyUI account. API nodes are pay per use.\n2. Type your script in the `text` field of the Fish Audio Text to Speech node.\n3. A preset voice is already connected. To change it, pick another voice in the Voice Selector, or switch to `custom` and paste a voice model ID from fish.audio.\n4. Keep parameters at their defaults unless needed.\n5. Queue the prompt, then preview or save the audio.\n\n### Inline tags\n\nWrite tags directly in the text. A tag applies from where it appears to the end of the sentence, or until the next tag.\n\n**Emotion** (start of sentence, one per sentence):\n\n- [happy] [sad] [angry] [excited] [calm]\n- [nervous] [confident] [surprised] [scared] [worried]\n- [frustrated] [empathetic] [proud] [relaxed] [curious]\n- ...and more: [sarcastic] [nostalgic] [determined] [hopeful] [bored] ...\n\n**Tone** (control volume and intensity):\n\n- [whispering] [shouting] [screaming]\n- [soft tone] [in a hurry tone] [emphasis]\n\n**Sound effects** (add matching text after, e.g. \"Ha, ha\" after [laughing]):\n\n- [laughing] [chuckling] [sobbing] [crying loudly]\n- [sighing] [groaning] [panting] [gasping]\n- [yawning] [snoring] [clear throat]\n\n**Pause and background:**\n\n- [break] [short pause] [long pause] [long-break]\n- [audience laughing] [background laughter] [crowd laughing]\n\n### Tag rules\n\n- One main emotion per sentence, max 3 tags combined\n- Pair physical tags with emotions: [whispering][scared], [panting][tired], [shouting][angry]\n- Intensity modifiers: [slightly sad], [very excited], [extremely angry]\n- Free-form descriptions work: [tired, end of a long shift]\n\n### Example\n\n[excited] Welcome back!\n[chuckling] You missed a lot.\n[calm] Let's get started.\n\n### Multi-speaker\n\nWith two or more voices connected, mark speaker changes:\n\n@Voice1 [nervous] Who's there?\n@Voice2 [calm] Just me. Relax.\n"
166 ],
167 "widgets_values_named": {
168 "text": "## Fish Audio Text to Speech\n\nGenerate speech from text with a preset Fish Audio voice.\n\n### How to use\n\n1. Sign in with your ComfyUI account. API nodes are pay per use.\n2. Type your script in the `text` field of the Fish Audio Text to Speech node.\n3. A preset voice is already connected. To change it, pick another voice in the Voice Selector, or switch to `custom` and paste a voice model ID from fish.audio.\n4. Keep parameters at their defaults unless needed.\n5. Queue the prompt, then preview or save the audio.\n\n### Inline tags\n\nWrite tags directly in the text. A tag applies from where it appears to the end of the sentence, or until the next tag.\n\n**Emotion** (start of sentence, one per sentence):\n\n- [happy] [sad] [angry] [excited] [calm]\n- [nervous] [confident] [surprised] [scared] [worried]\n- [frustrated] [empathetic] [proud] [relaxed] [curious]\n- ...and more: [sarcastic] [nostalgic] [determined] [hopeful] [bored] ...\n\n**Tone** (control volume and intensity):\n\n- [whispering] [shouting] [screaming]\n- [soft tone] [in a hurry tone] [emphasis]\n\n**Sound effects** (add matching text after, e.g. \"Ha, ha\" after [laughing]):\n\n- [laughing] [chuckling] [sobbing] [crying loudly]\n- [sighing] [groaning] [panting] [gasping]\n- [yawning] [snoring] [clear throat]\n\n**Pause and background:**\n\n- [break] [short pause] [long pause] [long-break]\n- [audience laughing] [background laughter] [crowd laughing]\n\n### Tag rules\n\n- One main emotion per sentence, max 3 tags combined\n- Pair physical tags with emotions: [whispering][scared], [panting][tired], [shouting][angry]\n- Intensity modifiers: [slightly sad], [very excited], [extremely angry]\n- Free-form descriptions work: [tired, end of a long shift]\n\n### Example\n\n[excited] Welcome back!\n[chuckling] You missed a lot.\n[calm] Let's get started.\n\n### Multi-speaker\n\nWith two or more voices connected, mark speaker changes:\n\n@Voice1 [nervous] Who's there?\n@Voice2 [calm] Just me. Relax.\n"
169 },
170 "color": "#222",
171 "bgcolor": "#000"
172 },
173 {
174 "id": 10,
175 "type": "FishAudioInstantVoiceClone",
176 "pos": [
177 -270,
178 470
179 ],
180 "size": [
181 350,
182 110
183 ],
184 "flags": [],
185 "order": 4,
186 "mode": 4,
187 "inputs": [
188 {
189 "name": "files.audio0",
190 "type": "AUDIO",
191 "link": 8
192 },
193 {
194 "name": "files.audio1",
195 "shape": 7,
196 "type": "AUDIO",
197 "link": null
198 }
199 ],
200 "outputs": [
201 {
202 "name": "voice",
203 "type": "FISHAUDIO_VOICE",
204 "links": [
205 9
206 ]
207 }
208 ],
209 "properties": {
210 "Node name for S&R": "FishAudioInstantVoiceClone"
211 },
212 "widgets_values": [
213 true
214 ],
215 "widgets_values_named": {
216 "enhance_audio_quality": true
217 },
218 "color": "#432",
219 "bgcolor": "#653"
220 },
221 {
222 "id": 11,
223 "type": "LoadAudio",
224 "pos": [
225 -630,
226 470
227 ],
228 "size": [
229 330,
230 170
231 ],
232 "flags": [],
233 "order": 2,
234 "mode": 4,
235 "inputs": [],
236 "outputs": [
237 {
238 "name": "AUDIO",
239 "type": "AUDIO",
240 "links": [
241 8
242 ]
243 }
244 ],
245 "properties": {
246 "Node name for S&R": "LoadAudio"
247 },
248 "widgets_values": [
249 "fish_audio_example.mp3",
250 null,
251 null
252 ],
253 "widgets_values_named": {
254 "audio": "62d0a069159eda8931ad7a6bf2a867e2695cfeb088f6a6892ceb86744a516cd3.mp3",
255 "upload": null
256 }
257 }
258 ],
259 "links": [
260 [
261 3,
262 1,
263 0,
264 5,
265 0,
266 "AUDIO"
267 ],
268 [
269 6,
270 6,
271 0,
272 1,
273 0,
274 "FISHAUDIO_VOICE"
275 ],
276 [
277 8,
278 11,
279 0,
280 10,
281 0,
282 "AUDIO"
283 ],
284 [
285 9,
286 10,
287 0,
288 1,
289 1,
290 "FISHAUDIO_VOICE"
291 ]
292 ],
293 "groups": [
294 {
295 "id": 1,
296 "title": "Option 2: Voice Clone (Select the node, then press Ctrl‑B to enable)",
297 "bounding": [
298 -640,
299 390,
300 740,
301 330
302 ],
303 "color": "#3f789e",
304 "flags": []
305 },
306 {
307 "id": 2,
308 "title": "Option 1: Preset Audio",
309 "bounding": [
310 -640,
311 110,
312 740,
313 250
314 ],
315 "color": "#3f789e",
316 "flags": []
317 }
318 ],
319 "config": [],
320 "extra": {
321 "ds": {
322 "scale": 0.6684863810589871,
323 "offset": [
324 1898.0274131242184,
325 276.01370087035906
326 ]
327 },
328 "frontendVersion": "1.52.5",
329 "VHS_latentpreview": false,
330 "VHS_latentpreviewrate": 0,
331 "VHS_MetadataImage": true,
332 "VHS_KeepIntermediate": true
333 },
334 "version": 0.4
335}