ComfyPilotComfyPilot
工作流 / 音频 / Eleven v4:文本转语音
Eleven v4:文本转语音

Eleven v4:文本转语音

Eleven v4: Text to Speech

使用注重质量的 ElevenLabs 模型 Eleven v4,从文本生成富有表现力的语音。通过在脚本中写入 [whispers] 或 [excited] 等音频标签来指导表演,或上传语音样本以克隆声音并用其朗读脚本。输出一个音频文件。非常适合有声书、旁白和角色配音。

音频 8 个节点 1 个输入 555 次使用 ComfyUI ≥ 0.39.0 ComfyUI 12 KB

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

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

节点构成

ElevenLabsTextToSpeech × 1
LoadAudio × 1
ElevenLabsVoiceSelector × 1
ElevenLabsInstantVoiceClone × 1
RecordAudio × 1
Note × 1
SaveAudioAdvanced × 1
MarkdownNote × 1

官方标注的模型

ElevenLabs

工作流 JSON

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

1{
2 "id": "91f6bbe2-ed41-4fd6-bac7-71d5b5864ecb",
3 "revision": 0,
4 "last_node_id": 219,
5 "last_link_id": 300,
6 "nodes": [
7 {
8 "id": 208,
9 "type": "ElevenLabsTextToSpeech",
10 "pos": [
11 2430,
12 730
13 ],
14 "size": [
15 350,
16 280
17 ],
18 "flags": [],
19 "order": 6,
20 "mode": 0,
21 "inputs": [
22 {
23 "name": "voice",
24 "type": "ELEVENLABS_VOICE",
25 "link": 300
26 }
27 ],
28 "outputs": [
29 {
30 "name": "AUDIO",
31 "type": "AUDIO",
32 "links": [
33 298
34 ]
35 }
36 ],
37 "properties": {
38 "Node name for S&R": "ElevenLabsTextToSpeech",
39 "cnr_id": "comfy-core",
40 "ver": "0.14.1"
41 },
42 "widgets_values": [
43 "[low, gravelly voice, unhurried] The lighthouse was dark for eleven years... until tonight.\n\n[quietly, with wonder] I counted the flashes twice, just to be sure. One. Two. Three.\n\n[sharply, alarmed] Wait... that is NOT the pattern we agreed on.\n\n[whispering, urgent] Kill the lamp. We have to go. NOW.\n\n[dry laugh] ...Or we could stay, and see who is climbing the stairs.",
44 0.5,
45 "auto",
46 "eleven_v4",
47 0.75,
48 "",
49 755636914,
50 "randomize",
51 "mp3_44100_192"
52 ],
53 "widgets_values_named": {
54 "text": "[low, gravelly voice, unhurried] The lighthouse was dark for eleven years... until tonight.\n\n[quietly, with wonder] I counted the flashes twice, just to be sure. One. Two. Three.\n\n[sharply, alarmed] Wait... that is NOT the pattern we agreed on.\n\n[whispering, urgent] Kill the lamp. We have to go. NOW.\n\n[dry laugh] ...Or we could stay, and see who is climbing the stairs.",
55 "stability": 0.5,
56 "apply_text_normalization": "auto",
57 "model": "eleven_v4",
58 "model.similarity_boost": 0.75,
59 "language_code": "",
60 "seed": 755636914,
61 "control_after_generate": "randomize",
62 "output_format": "mp3_44100_192"
63 },
64 "color": "#432",
65 "bgcolor": "#653"
66 },
67 {
68 "id": 210,
69 "type": "LoadAudio",
70 "pos": [
71 1820,
72 950
73 ],
74 "size": [
75 250,
76 140
77 ],
78 "flags": [],
79 "order": 0,
80 "mode": 4,
81 "inputs": [],
82 "outputs": [
83 {
84 "name": "AUDIO",
85 "type": "AUDIO",
86 "links": [
87 296
88 ]
89 }
90 ],
91 "properties": {
92 "Node name for S&R": "LoadAudio",
93 "cnr_id": "comfy-core",
94 "ver": "0.14.1"
95 },
96 "widgets_values": [
97 "long_demo.mp3",
98 null
99 ],
100 "widgets_values_named": {
101 "audio": "long_demo.mp3",
102 "upload": null
103 }
104 },
105 {
106 "id": 211,
107 "type": "ElevenLabsVoiceSelector",
108 "pos": [
109 1920,
110 730
111 ],
112 "size": [
113 320,
114 80
115 ],
116 "flags": [],
117 "order": 1,
118 "mode": 0,
119 "inputs": [],
120 "outputs": [
121 {
122 "name": "voice",
123 "type": "ELEVENLABS_VOICE",
124 "links": [
125 300
126 ]
127 }
128 ],
129 "properties": {
130 "Node name for S&R": "ElevenLabsVoiceSelector",
131 "cnr_id": "comfy-core",
132 "ver": "0.14.1"
133 },
134 "widgets_values": [
135 "Roger (male, american)"
136 ],
137 "widgets_values_named": {
138 "voice": "Roger (male, american)"
139 }
140 },
141 {
142 "id": 212,
143 "type": "ElevenLabsInstantVoiceClone",
144 "pos": [
145 2110,
146 950
147 ],
148 "size": [
149 270,
150 100
151 ],
152 "flags": [],
153 "order": 5,
154 "mode": 4,
155 "inputs": [
156 {
157 "label": "audio0",
158 "name": "files.audio0",
159 "type": "AUDIO",
160 "link": 296
161 },
162 {
163 "name": "files.audio1",
164 "shape": 7,
165 "type": "AUDIO",
166 "link": null
167 }
168 ],
169 "outputs": [
170 {
171 "name": "voice",
172 "type": "ELEVENLABS_VOICE",
173 "links": null
174 }
175 ],
176 "properties": {
177 "Node name for S&R": "ElevenLabsInstantVoiceClone",
178 "cnr_id": "comfy-core",
179 "ver": "0.14.1"
180 },
181 "widgets_values": [
182 true
183 ],
184 "widgets_values_named": {
185 "remove_background_noise": true
186 },
187 "color": "#432",
188 "bgcolor": "#653"
189 },
190 {
191 "id": 214,
192 "type": "RecordAudio",
193 "pos": [
194 1820,
195 1180
196 ],
197 "size": [
198 240,
199 120
200 ],
201 "flags": [],
202 "order": 2,
203 "mode": 4,
204 "inputs": [],
205 "outputs": [
206 {
207 "name": "AUDIO",
208 "type": "AUDIO",
209 "links": null
210 }
211 ],
212 "properties": {
213 "Node name for S&R": "RecordAudio",
214 "cnr_id": "comfy-core",
215 "ver": "0.14.1"
216 },
217 "widgets_values": [
218 "",
219 ""
220 ],
221 "widgets_values_named": {
222 "audio": "",
223 "audio#1": ""
224 }
225 },
226 {
227 "id": 217,
228 "type": "Note",
229 "pos": [
230 2120,
231 1180
232 ],
233 "size": [
234 260,
235 100
236 ],
237 "flags": [],
238 "order": 3,
239 "mode": 0,
240 "inputs": [],
241 "outputs": [],
242 "title": "How to enable bypassed nodes",
243 "properties": [],
244 "widgets_values": [
245 "Please select and use Ctrl-B to enable the bypassed nodes."
246 ],
247 "widgets_values_named": {
248 "text": "Please select and use Ctrl-B to enable the bypassed nodes."
249 },
250 "color": "#222",
251 "bgcolor": "#000"
252 },
253 {
254 "id": 218,
255 "type": "SaveAudioAdvanced",
256 "pos": [
257 2820,
258 730
259 ],
260 "size": [
261 270,
262 160
263 ],
264 "flags": [],
265 "order": 7,
266 "mode": 0,
267 "inputs": [
268 {
269 "name": "audio",
270 "type": "AUDIO",
271 "link": 298
272 }
273 ],
274 "outputs": [
275 {
276 "name": "audio",
277 "type": "AUDIO",
278 "links": null
279 }
280 ],
281 "properties": {
282 "Node name for S&R": "SaveAudioAdvanced"
283 },
284 "widgets_values": [
285 "audio/ComfyUI",
286 "mp3",
287 "V0"
288 ],
289 "widgets_values_named": {
290 "filename_prefix": "audio/ComfyUI",
291 "format": "mp3",
292 "format.quality": "V0"
293 }
294 },
295 {
296 "id": 219,
297 "type": "MarkdownNote",
298 "pos": [
299 1370,
300 690
301 ],
302 "size": [
303 370,
304 350
305 ],
306 "flags": [],
307 "order": 4,
308 "mode": 0,
309 "inputs": [],
310 "outputs": [],
311 "properties": [],
312 "widgets_values": [
313 "## How to write the prompt\n\nEleven v4 and v4 Turbo treat the prompt as a performance script. Audio tags in square brackets set the delivery: `[whispers]`, `[laughs]`, `[sighs]`, `[excited]`, `[sarcastic]`, `[crying]` are a starting point. Place a tag right before or after the words it should affect.\n\n- Describe the voice quality instead of a sound cue: `[low, gravelly voice]` is clearer than a vague tag, because v4 can read an ambiguous tag as a request for a sound effect.\n- Punctuation sets the pacing: ellipses add pauses, capitals add emphasis, standard punctuation keeps a natural rhythm. SSML break tags are not supported, and v4 has no speed or style slider.\n- Match the tags to the voice: a calm narration voice follows `[whispers]` more reliably than `[giggles]`. Combine tags such as `[annoyed] [under your breath]` for a more complex delivery.\n- Stability controls how consistent the delivery stays: lower values are more expressive, higher values more monotone. Similarity controls how closely the output follows the reference voice.\n- `apply_text_normalization` covers numbers, dates and abbreviations. Keep the text within the model's limit: 10,000 characters per request for Eleven v4.\n\nExample prompt:\n\n```text\n[whispers] I never knew it could be this way, but I'm glad we're here.\n```\n\nThe **ElevenLabs Text to Speech** node ships with a demo script that uses these techniques: run it once to hear how the tags land, then replace the text with your own script.\n\nMore techniques: [ElevenLabs prompting guide](https://elevenlabs.io/docs/overview/capabilities/text-to-speech/best-practices#prompting-eleven-v4)\n\n\n## Input Asset\n\n- [long_demo.mp3](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/long_demo.mp3)\n\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
314 ],
315 "widgets_values_named": {
316 "text": "## How to write the prompt\n\nEleven v4 and v4 Turbo treat the prompt as a performance script. Audio tags in square brackets set the delivery: `[whispers]`, `[laughs]`, `[sighs]`, `[excited]`, `[sarcastic]`, `[crying]` are a starting point. Place a tag right before or after the words it should affect.\n\n- Describe the voice quality instead of a sound cue: `[low, gravelly voice]` is clearer than a vague tag, because v4 can read an ambiguous tag as a request for a sound effect.\n- Punctuation sets the pacing: ellipses add pauses, capitals add emphasis, standard punctuation keeps a natural rhythm. SSML break tags are not supported, and v4 has no speed or style slider.\n- Match the tags to the voice: a calm narration voice follows `[whispers]` more reliably than `[giggles]`. Combine tags such as `[annoyed] [under your breath]` for a more complex delivery.\n- Stability controls how consistent the delivery stays: lower values are more expressive, higher values more monotone. Similarity controls how closely the output follows the reference voice.\n- `apply_text_normalization` covers numbers, dates and abbreviations. Keep the text within the model's limit: 10,000 characters per request for Eleven v4.\n\nExample prompt:\n\n```text\n[whispers] I never knew it could be this way, but I'm glad we're here.\n```\n\nThe **ElevenLabs Text to Speech** node ships with a demo script that uses these techniques: run it once to hear how the tags land, then replace the text with your own script.\n\nMore techniques: [ElevenLabs prompting guide](https://elevenlabs.io/docs/overview/capabilities/text-to-speech/best-practices#prompting-eleven-v4)\n\n\n## Input Asset\n\n- [long_demo.mp3](https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/input/long_demo.mp3)\n\n\n## Report Issue\n\nNote: Please update ComfyUI first ([guide](https://docs.comfy.org/installation/update_comfyui)) and prepare required models. Desktop/Cloud updates follow stable releases, so some nightly-supported models may not be available yet.\n\n- Cannot run / runtime errors: [ComfyUI/issues](https://github.com/comfyanonymous/ComfyUI/issues)\n- UI / frontend issues: [ComfyUI_frontend/issues](https://github.com/Comfy-Org/ComfyUI_frontend/issues)\n- Workflow issues: [workflow_templates/issues](https://github.com/Comfy-Org/workflow_templates/issues)\n"
317 },
318 "color": "#222",
319 "bgcolor": "#000"
320 }
321 ],
322 "links": [
323 [
324 300,
325 211,
326 0,
327 208,
328 0,
329 "ELEVENLABS_VOICE"
330 ],
331 [
332 296,
333 210,
334 0,
335 212,
336 0,
337 "AUDIO"
338 ],
339 [
340 298,
341 208,
342 0,
343 218,
344 0,
345 "AUDIO"
346 ]
347 ],
348 "groups": [
349 {
350 "id": 1,
351 "title": "Option 2: Create a Voice Clone",
352 "bounding": [
353 1790,
354 870,
355 600,
356 510
357 ],
358 "color": "#3f789e",
359 "flags": []
360 },
361 {
362 "id": 2,
363 "title": "Option 1: Use Preset Voice",
364 "bounding": [
365 1790,
366 660,
367 600,
368 200
369 ],
370 "color": "#3f789e",
371 "flags": []
372 }
373 ],
374 "config": [],
375 "extra": {
376 "ds": {
377 "scale": 0.8376431567963556,
378 "offset": [
379 -708.619555879183,
380 -356.28310857753746
381 ]
382 },
383 "frontendVersion": "1.56.0",
384 "workflowRendererVersion": "Vue-corrected",
385 "ue_links": [],
386 "links_added_by_ue": [],
387 "VHS_latentpreview": false,
388 "VHS_latentpreviewrate": 0,
389 "VHS_MetadataImage": true,
390 "VHS_KeepIntermediate": true
391 },
392 "version": 0.4
393}