ComfyPilotComfyPilot
工作流 / 音频 / Fish Audio Drama 3: 定向表演
Fish Audio Drama 3: 定向表演

Fish Audio Drama 3: 定向表演

Fish Audio Drama 3: Directed Performance

通过文本直接指导单次 Fish Audio Drama 3 表演:用[通俗语言指令]在台词中途切换表达方式,并用 <whisper>...</whisper> 标签包裹词语。

音频 6 个节点 1 个输入 146 次使用 ComfyUI ≥ 0.40.0 ComfyUI 13 KB

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

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

节点构成

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

官方标注的模型

Fish Audio

工作流 JSON

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

1{
2 "id": "c93f0a51-6d2b-4f77-9c58-1a7b3e5f2d64",
3 "revision": 0,
4 "last_node_id": 13,
5 "last_link_id": 11,
6 "nodes": [
7 {
8 "id": 9,
9 "type": "MarkdownNote",
10 "pos": [
11 -1190,
12 210
13 ],
14 "size": [
15 500,
16 880
17 ],
18 "flags": [],
19 "order": 0,
20 "mode": 0,
21 "inputs": [],
22 "outputs": [],
23 "title": "Note: Guide",
24 "properties": [],
25 "widgets_values": [
26 "## Fish Audio Drama 3 — Directed Performance\n\nOne voice, acted out with directions and word-level tags.\n\n### How to use\n\n1. Sign in with your ComfyUI account. API nodes are pay per use.\n2. Write the script in the `text` field of the Fish Audio Text to Speech node.\n3. Add `[directions]` in square brackets wherever the delivery should shift. A direction applies until the next one, so place it exactly where you want the change.\n4. Wrap individual words for a different delivery: `<whisper>It is all in the timing.</whisper>`. Inline sounds such as `[laugh]`, `[sigh]` and `[pause]` work in the same way.\n5. Pick a voice in the Fish Audio Voice Selector — Delia is connected by default. Set it to `custom` to paste a voice ID from fish.audio.\n6. Keep the other parameters at their defaults, then queue the prompt and preview the audio.\n\n### Model\n\n- `drama-3` (this template): `[plain-language directions]` and word tags, 80+ languages, and multi-speaker dialogue via `@Voice1`, `@Voice2`.\n- `s2.1-pro`: the previous generation; emotion cues such as `[happy]` at the start of a sentence.\n- `s1`: a single voice; emotion cues in parentheses, such as `(happy)`.\n\nText length and model both change the price: the badge on the node shows the estimate for the current text.\n\n### Cloning your own voice\n\nTo read the script in your own voice, select the two nodes in the `Option 2` group and press **Ctrl‑B** to enable them, then point `Load Audio` at a 10–30 second, clean recording. With two voices connected, mark the text with `@Voice1` and `@Voice2`.\n"
27 ],
28 "widgets_values_named": {
29 "text": "## Fish Audio Drama 3 — Directed Performance\n\nOne voice, acted out with directions and word-level tags.\n\n### How to use\n\n1. Sign in with your ComfyUI account. API nodes are pay per use.\n2. Write the script in the `text` field of the Fish Audio Text to Speech node.\n3. Add `[directions]` in square brackets wherever the delivery should shift. A direction applies until the next one, so place it exactly where you want the change.\n4. Wrap individual words for a different delivery: `<whisper>It is all in the timing.</whisper>`. Inline sounds such as `[laugh]`, `[sigh]` and `[pause]` work in the same way.\n5. Pick a voice in the Fish Audio Voice Selector — Delia is connected by default. Set it to `custom` to paste a voice ID from fish.audio.\n6. Keep the other parameters at their defaults, then queue the prompt and preview the audio.\n\n### Model\n\n- `drama-3` (this template): `[plain-language directions]` and word tags, 80+ languages, and multi-speaker dialogue via `@Voice1`, `@Voice2`.\n- `s2.1-pro`: the previous generation; emotion cues such as `[happy]` at the start of a sentence.\n- `s1`: a single voice; emotion cues in parentheses, such as `(happy)`.\n\nText length and model both change the price: the badge on the node shows the estimate for the current text.\n\n### Cloning your own voice\n\nTo read the script in your own voice, select the two nodes in the `Option 2` group and press **Ctrl‑B** to enable them, then point `Load Audio` at a 10–30 second, clean recording. With two voices connected, mark the text with `@Voice1` and `@Voice2`.\n"
30 },
31 "color": "#222",
32 "bgcolor": "#000"
33 },
34 {
35 "id": 1,
36 "type": "FishAudioTextToSpeech",
37 "pos": [
38 150,
39 270
40 ],
41 "size": [
42 440,
43 320
44 ],
45 "flags": [],
46 "order": 4,
47 "mode": 0,
48 "inputs": [
49 {
50 "localized_name": "text",
51 "name": "text",
52 "type": "STRING",
53 "widget": {
54 "name": "text"
55 },
56 "link": null
57 },
58 {
59 "localized_name": "model",
60 "name": "model",
61 "type": "COMFY_DYNAMICCOMBO_V3",
62 "widget": {
63 "name": "model"
64 },
65 "link": null
66 },
67 {
68 "localized_name": "voice0",
69 "name": "model.voices.voice0",
70 "shape": 7,
71 "type": "FISHAUDIO_VOICE",
72 "link": 10
73 },
74 {
75 "localized_name": "voice1",
76 "name": "model.voices.voice1",
77 "shape": 7,
78 "type": "FISHAUDIO_VOICE",
79 "link": null
80 },
81 {
82 "localized_name": "temperature",
83 "name": "model.temperature",
84 "type": "FLOAT",
85 "widget": {
86 "name": "model.temperature"
87 },
88 "link": null
89 },
90 {
91 "localized_name": "top_p",
92 "name": "model.top_p",
93 "type": "FLOAT",
94 "widget": {
95 "name": "model.top_p"
96 },
97 "link": null
98 },
99 {
100 "localized_name": "speed",
101 "name": "model.speed",
102 "type": "FLOAT",
103 "widget": {
104 "name": "model.speed"
105 },
106 "link": null
107 },
108 {
109 "localized_name": "volume",
110 "name": "model.volume",
111 "type": "FLOAT",
112 "widget": {
113 "name": "model.volume"
114 },
115 "link": null
116 },
117 {
118 "localized_name": "normalize",
119 "name": "model.normalize",
120 "type": "BOOLEAN",
121 "widget": {
122 "name": "model.normalize"
123 },
124 "link": null
125 },
126 {
127 "localized_name": "seed",
128 "name": "seed",
129 "type": "INT",
130 "widget": {
131 "name": "seed"
132 },
133 "link": null
134 }
135 ],
136 "outputs": [
137 {
138 "localized_name": "AUDIO",
139 "name": "AUDIO",
140 "type": "AUDIO",
141 "links": [
142 9
143 ]
144 }
145 ],
146 "properties": {
147 "Node name for S&R": "FishAudioTextToSpeech"
148 },
149 "widgets_values": [
150 "[calm and inviting] Welcome back to the studio.\n[leans in, conspiratorial] There is one trick nobody tells you about.\n[light, playful] Ready? <whisper>It is all in the timing.</whisper> [bright, back to full voice] And that is the whole secret.",
151 "drama-3",
152 0.7,
153 0.7,
154 1,
155 0,
156 true,
157 1562256311,
158 "randomize"
159 ],
160 "widgets_values_named": {
161 "text": "[calm and inviting] Welcome back to the studio.\n[leans in, conspiratorial] There is one trick nobody tells you about.\n[light, playful] Ready? <whisper>It is all in the timing.</whisper> [bright, back to full voice] And that is the whole secret.",
162 "model": "drama-3",
163 "model.temperature": 0.7,
164 "model.top_p": 0.7,
165 "model.speed": 1,
166 "model.volume": 0,
167 "model.normalize": true,
168 "seed": 1562256311,
169 "control_after_generate": "randomize"
170 },
171 "color": "#432",
172 "bgcolor": "#653"
173 },
174 {
175 "id": 5,
176 "type": "SaveAudioAdvanced",
177 "pos": [
178 640,
179 270
180 ],
181 "size": [
182 730,
183 220
184 ],
185 "flags": [],
186 "order": 5,
187 "mode": 0,
188 "inputs": [
189 {
190 "localized_name": "audio",
191 "name": "audio",
192 "type": "AUDIO",
193 "link": 9
194 },
195 {
196 "localized_name": "filename_prefix",
197 "name": "filename_prefix",
198 "type": "STRING",
199 "widget": {
200 "name": "filename_prefix"
201 },
202 "link": null
203 },
204 {
205 "localized_name": "format",
206 "name": "format",
207 "type": "COMFY_DYNAMICCOMBO_V3",
208 "widget": {
209 "name": "format"
210 },
211 "link": null
212 },
213 {
214 "localized_name": "quality",
215 "name": "format.quality",
216 "type": "COMBO",
217 "widget": {
218 "name": "format.quality"
219 },
220 "link": null
221 },
222 {
223 "localized_name": "audioUI",
224 "name": "audioUI",
225 "type": "AUDIO_UI",
226 "widget": {
227 "name": "audioUI"
228 },
229 "link": null
230 }
231 ],
232 "outputs": [
233 {
234 "localized_name": "audio",
235 "name": "audio",
236 "type": "AUDIO",
237 "links": null
238 }
239 ],
240 "properties": [],
241 "widgets_values": [
242 "audio/Fish_audio_drama3_directed",
243 "mp3",
244 "V0"
245 ],
246 "widgets_values_named": {
247 "filename_prefix": "audio/Fish_audio_drama3_directed",
248 "format": "mp3",
249 "format.quality": "V0"
250 }
251 },
252 {
253 "id": 11,
254 "type": "LoadAudio",
255 "pos": [
256 -640,
257 520
258 ],
259 "size": [
260 330,
261 170
262 ],
263 "flags": [],
264 "order": 1,
265 "mode": 4,
266 "inputs": [
267 {
268 "localized_name": "audio",
269 "name": "audio",
270 "type": "COMBO",
271 "widget": {
272 "name": "audio"
273 },
274 "link": null
275 },
276 {
277 "localized_name": "audioUI",
278 "name": "audioUI",
279 "type": "AUDIO_UI",
280 "widget": {
281 "name": "audioUI"
282 },
283 "link": null
284 },
285 {
286 "localized_name": "choose file to upload",
287 "name": "upload",
288 "type": "AUDIOUPLOAD",
289 "widget": {
290 "name": "upload"
291 },
292 "link": null
293 }
294 ],
295 "outputs": [
296 {
297 "localized_name": "AUDIO",
298 "name": "AUDIO",
299 "type": "AUDIO",
300 "links": [
301 11
302 ]
303 }
304 ],
305 "properties": {
306 "Node name for S&R": "LoadAudio"
307 },
308 "widgets_values": [
309 "fish_audio_example.mp3",
310 null
311 ],
312 "widgets_values_named": {
313 "audio": "fish_audio_example.mp3",
314 "upload": null
315 }
316 },
317 {
318 "id": 12,
319 "type": "FishAudioVoiceSelector",
320 "pos": [
321 -440,
322 280
323 ],
324 "size": [
325 270,
326 60
327 ],
328 "flags": [],
329 "order": 2,
330 "mode": 0,
331 "inputs": [
332 {
333 "localized_name": "voice",
334 "name": "voice",
335 "type": "COMFY_DYNAMICCOMBO_V3",
336 "widget": {
337 "name": "voice"
338 },
339 "link": null
340 }
341 ],
342 "outputs": [
343 {
344 "localized_name": "voice",
345 "name": "voice",
346 "type": "FISHAUDIO_VOICE",
347 "links": [
348 10
349 ]
350 }
351 ],
352 "properties": {
353 "Node name for S&R": "FishAudioVoiceSelector"
354 },
355 "widgets_values": [
356 "Delia (en)"
357 ],
358 "widgets_values_named": {
359 "voice": "Delia (en)"
360 }
361 },
362 {
363 "id": 13,
364 "type": "FishAudioInstantVoiceClone",
365 "pos": [
366 -260,
367 520
368 ],
369 "size": [
370 310,
371 100
372 ],
373 "flags": [],
374 "order": 3,
375 "mode": 4,
376 "inputs": [
377 {
378 "localized_name": "audio0",
379 "name": "files.audio0",
380 "type": "AUDIO",
381 "link": 11
382 },
383 {
384 "localized_name": "audio1",
385 "name": "files.audio1",
386 "shape": 7,
387 "type": "AUDIO",
388 "link": null
389 },
390 {
391 "localized_name": "enhance_audio_quality",
392 "name": "enhance_audio_quality",
393 "type": "BOOLEAN",
394 "widget": {
395 "name": "enhance_audio_quality"
396 },
397 "link": null
398 }
399 ],
400 "outputs": [
401 {
402 "localized_name": "voice",
403 "name": "voice",
404 "type": "FISHAUDIO_VOICE",
405 "links": null
406 }
407 ],
408 "properties": {
409 "Node name for S&R": "FishAudioInstantVoiceClone"
410 },
411 "widgets_values": [
412 true
413 ],
414 "widgets_values_named": {
415 "enhance_audio_quality": true
416 },
417 "color": "#432",
418 "bgcolor": "#653"
419 }
420 ],
421 "links": [
422 [
423 9,
424 1,
425 0,
426 5,
427 0,
428 "AUDIO"
429 ],
430 [
431 11,
432 11,
433 0,
434 13,
435 0,
436 "AUDIO"
437 ],
438 [
439 10,
440 12,
441 0,
442 1,
443 2,
444 "FISHAUDIO_VOICE"
445 ]
446 ],
447 "groups": [
448 {
449 "id": 1,
450 "title": "Option 1: Preset voice",
451 "bounding": [
452 -650,
453 190,
454 740,
455 210
456 ],
457 "color": "#3f789e",
458 "flags": []
459 },
460 {
461 "id": 2,
462 "title": "Option 2: Voice Clone (select both nodes, then press Ctrl+B to enable)",
463 "bounding": [
464 -650,
465 430,
466 740,
467 330
468 ],
469 "color": "#3f789e",
470 "flags": []
471 }
472 ],
473 "config": [],
474 "extra": {
475 "ds": {
476 "scale": 0.5234475436134131,
477 "offset": [
478 1748.3749656430628,
479 402.6760146504402
480 ]
481 },
482 "frontendVersion": "1.57.0"
483 },
484 "version": 0.4
485}