ComfyPilotComfyPilot
工作流 / 音频 / Fish Audio:语音克隆转语音
Fish Audio:语音克隆转语音

Fish Audio:语音克隆转语音

Fish Audio: Voice Clone to Speech

从短录音中克隆任何声音,然后用它通过Fish Audio朗读任何脚本。录制2-3段15-20秒的片段,将它们连接到实时语音克隆节点,克隆的声音直接输入文本转语音,无需等待训练。添加情感标签来控制克隆声音如何传递每一行。非常适合个性化旁白、角色声音以及用您自己的声音制作的内容。

音频 7 个节点 1 个输入 318 次使用 ComfyUI ≥ 0.34.0 ComfyUI 11 KB

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

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

节点构成

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

官方标注的模型

Fish Audio

工作流 JSON

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

1{
2 "id": "1c3621ae-965c-43f9-ba79-dc0b92fcd468",
3 "revision": 0,
4 "last_node_id": 12,
5 "last_link_id": 10,
6 "nodes": [
7 {
8 "id": 1,
9 "type": "FishAudioTextToSpeech",
10 "pos": [
11 160,
12 220
13 ],
14 "size": [
15 440,
16 426
17 ],
18 "flags": [],
19 "order": 5,
20 "mode": 0,
21 "inputs": [
22 {
23 "name": "model.voices.voice0",
24 "shape": 7,
25 "type": "FISHAUDIO_VOICE",
26 "link": 9
27 },
28 {
29 "name": "model.voices.voice1",
30 "shape": 7,
31 "type": "FISHAUDIO_VOICE",
32 "link": 10
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 "[curious] Want a voice that sounds exactly like you?\n[calm] Record a short clip, clone it with Fish Audio, and type your script.\n[confident] Your voice, saying anything. Right in ComfyUI.",
49 "s2.1-pro",
50 0.7,
51 0.7,
52 1,
53 0,
54 true,
55 731226986,
56 "randomize"
57 ],
58 "widgets_values_named": {
59 "text": "[curious] Want a voice that sounds exactly like you?\n[calm] Record a short clip, clone it with Fish Audio, and type your script.\n[confident] Your voice, saying anything. Right in ComfyUI.",
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": 731226986,
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": 6,
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 -410,
117 790
118 ],
119 "size": [
120 280,
121 86
122 ],
123 "flags": [],
124 "order": 0,
125 "mode": 4,
126 "inputs": [],
127 "outputs": [
128 {
129 "name": "voice",
130 "type": "FISHAUDIO_VOICE",
131 "links": [
132 10
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 210
152 ],
153 "size": [
154 500,
155 890
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 -260,
178 260
179 ],
180 "size": [
181 350,
182 170
183 ],
184 "flags": [],
185 "order": 4,
186 "mode": 0,
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 -620,
226 260
227 ],
228 "size": [
229 330,
230 170
231 ],
232 "flags": [],
233 "order": 2,
234 "mode": 0,
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 "api_fishaudio_voice_clone_tts_fish_audio_example.mp3",
250 null,
251 null
252 ],
253 "widgets_values_named": {
254 "audio": "62d0a069159eda8931ad7a6bf2a867e2695cfeb088f6a6892ceb86744a516cd3.mp3",
255 "upload": null
256 }
257 },
258 {
259 "id": 12,
260 "type": "RecordAudio",
261 "pos": [
262 -620,
263 500
264 ],
265 "size": [
266 330,
267 114
268 ],
269 "flags": [],
270 "order": 3,
271 "mode": 4,
272 "inputs": [],
273 "outputs": [
274 {
275 "name": "AUDIO",
276 "type": "AUDIO",
277 "links": null
278 }
279 ],
280 "properties": {
281 "Node name for S&R": "RecordAudio"
282 },
283 "widgets_values": [
284 "",
285 ""
286 ],
287 "widgets_values_named": {
288 "audio": ""
289 }
290 }
291 ],
292 "links": [
293 [
294 3,
295 1,
296 0,
297 5,
298 0,
299 "AUDIO"
300 ],
301 [
302 8,
303 11,
304 0,
305 10,
306 0,
307 "AUDIO"
308 ],
309 [
310 9,
311 10,
312 0,
313 1,
314 0,
315 "FISHAUDIO_VOICE"
316 ],
317 [
318 10,
319 6,
320 0,
321 1,
322 1,
323 "FISHAUDIO_VOICE"
324 ]
325 ],
326 "groups": [
327 {
328 "id": 1,
329 "title": "Option 1: Voice Clone",
330 "bounding": [
331 -630,
332 180,
333 750,
334 470
335 ],
336 "color": "#3f789e",
337 "flags": []
338 },
339 {
340 "id": 2,
341 "title": "Option 2: Preset Audio (Select the node, then press Ctrl‑B to enable)",
342 "bounding": [
343 -630,
344 680,
345 750,
346 250
347 ],
348 "color": "#3f789e",
349 "flags": []
350 }
351 ],
352 "config": [],
353 "extra": {
354 "ds": {
355 "scale": 0.558492093424192,
356 "offset": [
357 1658.8180274807814,
358 454.8249702530177
359 ]
360 },
361 "frontendVersion": "1.52.5",
362 "VHS_latentpreview": false,
363 "VHS_latentpreviewrate": 0,
364 "VHS_MetadataImage": true,
365 "VHS_KeepIntermediate": true
366 },
367 "version": 0.4
368}