PedroMarinhoDev/ComfyUI-Drama3

Fish Audio Drama 3 text to speech, natively in ComfyUI: voice cloning, dialogue and inline cues on cards from 8 GB, plus a native Qwen3-ASR. Built with Fish Audio.

Python

80

1 commits

updated Oct 17, 2026

See the code

See what people are saying

SourceMessageScoreDate

ComfyUI-Drama3 is 3-4x faster now (r/StableDiffusion)

https://reddit.com/link/1x8dj76/video/3gf1felnt1wh1/player I've updated the ComfyUI Drama-3 nodes and they're at least 3x faster now! Works with 8GB VRAM. Nodes: [https://github.com/PedroMarinhoDev/ComfyUI-Drama3](https://github.com/PedroMarinhoDev/ComfyUI-Drama3)

25

Oct 17, 2026

I created custom nodes for Fish Audio Drama 3 - Works with as little as 8GB VRAM - Quantized weights on HF (r/StableDiffusion)

Fish Audio Drama 3, converted for the native ComfyUI nodes of ComfyUI-Drama3: a 35B text-to-speech model for voice cloning, dialogue and inline cues such as [sighs] or [whispers], running on cards from 8 GB. 90% of the model is routed experts and each audio frame uses only 8 of the 256 in a layer,…

3

Oct 14, 2026

README

ComfyUI-Drama3: Fish Audio Drama 3 text to speech, natively in ComfyUI

ComfyUI v0.40+ VRAM 8 GB and up RAM 32 to 48 GB Code GPL-3.0, weights Fish Audio Community License

Listen to samples Quick start Weights on Hugging Face Workflows

Run Fish Audio Drama 3, a 35B text-to-speech model for voice cloning, dialogue and inline cues such as [sighs] or [whispers], natively in ComfyUI on cards from 8 GB. 90% of the model is routed experts and each audio frame uses only 8 of the 256 in a layer, so the experts stay in system RAM and the GPU keeps a cache of the ones in use. The pack also brings a native Qwen3-ASR that writes a voice clip's transcript for you, and nodes to save a cloned voice and load it again. Built with Fish Audio.

Six samples: voice cloning, inline cues, two speakers, five speakers, singing and Portuguese

Drama 3 FP8 · experts in RAM · temperature 1.0, top_p 0.9, top_k 30 · RTX 3090 and RTX 4090 · no real person cloned: the clones copy voices the model made up, the rest are voices it invents per seed. Click to listen.


Clone a voice from seconds of audio
A clip and its transcript are all it takes; save the voice and reuse it without the codec.

Up to 16 speakers in one text
Start each line with <|speaker:N|> and give each speaker a voice.

Cues where they should land
[laughs], [whispers], [sighs] and plain-language directions inside the text.

Long texts in one go
Read in chunks the way Fish Audio's server does, each chunk hearing the ones before it.

Experts in RAM
About 6 GB of the model stays on the GPU; the 32 GB of experts stream from RAM through a VRAM cache.

Transcripts by Qwen3-ASR
Native 1.7B and 0.6B speech recognition in 30 languages, no extra packages.

Quick start

  1. Install the nodes. Clone into custom_nodes and restart ComfyUI. There's nothing to pip install: the nodes only use what ComfyUI already has.

    cd ComfyUI/custom_nodes
    git clone https://github.com/PedroMarinhoDev/ComfyUI-Drama3
    
  2. Download three files from PedroMarinhoDev/Drama-3-ComfyUI and PedroMarinhoDev/Qwen3-ASR-ComfyUI:

    FileFolderSize
    drama3_fp8experts_bf16.safetensorsmodels/diffusion_models38.6 GB
    drama3_codec.safetensorsmodels/vae1.6 GB
    qwen3_asr_1.7b_bf16.safetensorsmodels/asr4.1 GB
    hf download PedroMarinhoDev/Drama-3-ComfyUI drama3_fp8experts_bf16.safetensors --local-dir ComfyUI/models/diffusion_models
    hf download PedroMarinhoDev/Drama-3-ComfyUI drama3_codec.safetensors --local-dir ComfyUI/models/vae
    hf download PedroMarinhoDev/Qwen3-ASR-ComfyUI qwen3_asr_1.7b_bf16.safetensors --local-dir ComfyUI/models/asr
    
  3. Open the workflow and queue. Drag example_workflows/drama3_voice_clone.json into ComfyUI, pick a few seconds of clean speech in Load Audio, write your text in Drama 3 Generate, run.

[!TIP] Qwen3-ASR fills in the voice's transcript. Cut the clip between sentences: a transcript that misses the clip's last words is the most common reason a take falls silent.

Requirements

MinimumTested
GPUNVIDIA, 8 GB of VRAM with experts in RAMRTX 4090 and RTX 3090 (24 GB); 12 GB and 8 GB simulated on the 3090
System RAMthe model file plus ~8 GB: ~32 GB for W4A8, ~48 GB for FP8188 GB
Disk26 GB (W4A8 and the codec)NVMe
ComfyUIv0.40v0.40.0

Choosing a file

Start with FP8: it holds Fish Audio's own expert weights, byte for byte, next to the checkpoint's bf16 layers. Take a smaller file when your RAM is short of the FP8 file's ~48 GB. An int8 ConvRot file (38.7 GB) can be built with tools/convert.py; it measured as close to the original as FP8.

FileSizeExpertsRAM with experts in RAMNotes
drama3_fp8experts_bf1638.6 GBFP8, as Fish Audio ships them~48 GBthe original weights
drama3_w6a8experts_bf1632.7 GBW6A8~40 GBno silent take in 16 cloned test takes
drama3_w4a8experts_bf1624.6 GBW4A8~32 GBfalls silent more often with real voice clips

Qwen3-ASR comes in two sizes, qwen3_asr_1.7b_bf16 (4.1 GB) and qwen3_asr_0.6b_bf16 (1.6 GB). In our tests both wrote nearly the same transcripts of clean speech, and the 0.6B took half the time.

Performance

Drama 3 makes 21.5 audio frames per second of speech, so 46 ms per frame is real time. Experts in RAM, a cloned voice, ~9 s of speech, measured on 2026-10-14; the time includes the prompt pass.

GPUFileExpert cachems per framePeak VRAM
RTX 4090 (PCIe 4.0 ×8)W4A816 GB5321.4 GB
RTX 4090 (PCIe 4.0 ×8)W4A84 GB6911.7 GB
RTX 4090 (PCIe 4.0 ×8)int816 GB7221.5 GB
RTX 4090 (PCIe 4.0 ×8)int84 GB10511.9 GB
RTX 3090 (PCIe 4.0 ×8)FP816 GB83–
RTX 3090 (PCIe 4.0 ×8)FP84 GB119–
RTX 3090 held to 12 GBFP8automatic1379.8 GB
RTX 3090 held to 8 GBFP8automatic2146.5 GB

The held rows ran with the rest of the 3090's memory taken by another process, as on a 12 GB or 8 GB card. Qwen3-ASR transcribes a 6.6 s clip in ~2 s with the 1.7B model and ~1 s with the 0.6B (RTX 3090, model load included).

Nodes
NodeWhat it does
Load Drama 3Loads a model file. experts: in RAM (default) or in VRAM; expert_cache_gb: VRAM for cached experts (0 = what is free); advanced: a second GPU for the experts-in-VRAM split.
Load Drama 3 CodecLoads the codec from models/vae.
Drama 3 Encode VoiceA voice to clone: an audio clip and its exact transcript.
Save Drama 3 Voice / Load Drama 3 VoiceKeep an encoded voice (codes and transcript, a few KB) in output/drama3_voices and use it again without the codec.
Drama 3 GenerateText and any number of voices to audio codes. Long text is generated in chunks, each continuing from the first and the latest chunk.
Drama 3 DecodeCodes to 44.1 kHz audio.
Load Qwen3-ASRLoads a Qwen3-ASR file from models/asr.
Qwen3-ASR TranscribeAudio to text and its language; language detects it or forces one of 30; context takes names and terms that help recognition.

The codec runs only before and after generation, so it never sits in VRAM next to the model.

How it fits on an 8 GB card

Drama 3 is a Qwen3.5-style mixture of experts: 40 layers, each with 256 routed experts of which 8 run per frame, plus attention or DeltaNet, a shared expert and a 13-layer codebook decoder. Everything except the routed experts is about 6 GB and stays on the GPU. With experts in RAM the 32 GB of experts stay in pinned system memory: each frame copies the 8 experts per layer it needs, and a least-recently-used cache in the VRAM left free keeps the ones that come back (85–95% of reads hit a 13 GB cache). The prompt uses nearly every expert, so its pass streams each layer's experts once and keeps the ones the prompt used most. Decoding one frame at a time is CPU-bound, so the cache size moves the speed less than you would expect.

With experts in VRAM the whole file sits on the GPU; two 24 GB cards can split the layers (second_gpu).

Settings
  • temperature 1.0, top_p 0.9, top_k 30 are the defaults of Fish Audio's own Drama 3 server. Lower values make takes slower, flatter and more likely to fall silent.
  • The model copies the reference's delivery: a flat clip gives a flat take, a lively one a lively take.
  • Speakers: start each line with <|speaker:N|> and give each speaker a voice whose transcript starts with the same tag (no tag means speaker 0).
  • max_frames caps each chunk (21.5 frames per second); generation stops earlier at the end of speech.
Building the files yourself

From the official checkpoints, one GPU visible (CUDA_VISIBLE_DEVICES=N), with ComfyUI on PYTHONPATH:

python tools/convert.py model <drama-3 folder> drama3_fp8experts_bf16.safetensors --format fp8
python tools/convert.py model <drama-3 folder> drama3_int8experts_bf16.safetensors --format int8_convrot
python tools/convert.py model <drama-3 folder> drama3_w6a8experts_bf16.safetensors --format w6a8
python tools/convert.py model <drama-3 folder> drama3_w4a8experts_bf16.safetensors --format w4a8
python tools/convert.py codec <drama-3 folder>/codec.pth drama3_codec.safetensors
python tools/convert.py asr <Qwen3-ASR-1.7B folder> qwen3_asr_1.7b_bf16.safetensors
python tools/convert.py asr <Qwen3-ASR-0.6B folder> qwen3_asr_0.6b_bf16.safetensors
How close it is to the official code
  • Drama 3: against Fish Audio's own PyTorch code, with the same frames forced, the main token's distribution differs by a KL of 0.004–0.007 nats and the top token agrees 93–94% of the time, the noise of bf16 arithmetic; the FP8 and int8 files measure the same. Prompt rows match the builders of Fish Audio's server and of fish-speech token for token, and the codec produces 99.94% of the same codes.
  • Qwen3-ASR: against Qwen's qwen-asr package, the prompt ids are identical, the encoder output matches within 1e-6 in fp32 and the first token is the same; transcripts match on clips up to 8 s. On longer clips the encoder attends in Qwen's 8 s windows, as their vLLM backend does, which can move a comma.

Troubleshooting

A take falls silent after a second, or speaks only part of the text

Check the voice first: the transcript must cover every word of the clip, and the clip should be clean speech cut between sentences. Then queue again for a new seed. Some clips make the model fall silent in Fish Audio's own code too (known issue); try another stretch of the recording. A take that goes silent is stopped and its silent tail cut, with a warning in the console.

Speech is slow or flat

Keep temperature at 1.0 and top_p at 0.9 or above, and use a reference with the delivery you want.

Out of memory, or the first run takes minutes

Lower expert_cache_gb, or pick a smaller file if system RAM is the limit. The first run reads the whole model file from disk once; later runs start in seconds.

License and credits

The code in this repository is under the GNU GPL v3, except the parts ported from Fish Audio's code and Fish Audio's tokenizer and config, which remain under the Fish Audio Community License, and the parts adapted from Qwen's qwen-asr, under the Apache License 2.0. NOTICE lists them.

[!NOTE] Drama 3's weights and outputs fall under the Fish Audio Community License: free for research and non-commercial use, and for commercial use below USD 500k annual revenue; a hosted TTS service needs a license from Fish Audio. Don't clone the voice of an identifiable person without their consent.

Built with Fish Audio. Drama 3 and its codec are by Fish Audio; Qwen3-ASR is by the Qwen team. This project is not affiliated with or endorsed by either.

comfyui
comfyui-nodes
fish-audio
speech-recognition
text-to-speech
voice-cloning

PedroMarinhoDev/ComfyUI-Drama3

Fish Audio Drama 3 text to speech, natively in ComfyUI: voice cloning, dialogue and inline cues on cards from 8 GB, plus a native Qwen3-ASR. Built with Fish Audio.

Python

80

1 commits

updated Oct 17, 2026

See the code

See what people are saying

SourceMessageScoreDate

ComfyUI-Drama3 is 3-4x faster now (r/StableDiffusion)

https://reddit.com/link/1x8dj76/video/3gf1felnt1wh1/player I've updated the ComfyUI Drama-3 nodes and they're at least 3x faster now! Works with 8GB VRAM. Nodes: [https://github.com/PedroMarinhoDev/ComfyUI-Drama3](https://github.com/PedroMarinhoDev/ComfyUI-Drama3)

25

Oct 17, 2026

I created custom nodes for Fish Audio Drama 3 - Works with as little as 8GB VRAM - Quantized weights on HF (r/StableDiffusion)

Fish Audio Drama 3, converted for the native ComfyUI nodes of ComfyUI-Drama3: a 35B text-to-speech model for voice cloning, dialogue and inline cues such as [sighs] or [whispers], running on cards from 8 GB. 90% of the model is routed experts and each audio frame uses only 8 of the 256 in a layer,…

3

Oct 14, 2026

README

ComfyUI-Drama3: Fish Audio Drama 3 text to speech, natively in ComfyUI

ComfyUI v0.40+ VRAM 8 GB and up RAM 32 to 48 GB Code GPL-3.0, weights Fish Audio Community License

Listen to samples Quick start Weights on Hugging Face Workflows

Run Fish Audio Drama 3, a 35B text-to-speech model for voice cloning, dialogue and inline cues such as [sighs] or [whispers], natively in ComfyUI on cards from 8 GB. 90% of the model is routed experts and each audio frame uses only 8 of the 256 in a layer, so the experts stay in system RAM and the GPU keeps a cache of the ones in use. The pack also brings a native Qwen3-ASR that writes a voice clip's transcript for you, and nodes to save a cloned voice and load it again. Built with Fish Audio.

Six samples: voice cloning, inline cues, two speakers, five speakers, singing and Portuguese

Drama 3 FP8 · experts in RAM · temperature 1.0, top_p 0.9, top_k 30 · RTX 3090 and RTX 4090 · no real person cloned: the clones copy voices the model made up, the rest are voices it invents per seed. Click to listen.


Clone a voice from seconds of audio
A clip and its transcript are all it takes; save the voice and reuse it without the codec.

Up to 16 speakers in one text
Start each line with <|speaker:N|> and give each speaker a voice.

Cues where they should land
[laughs], [whispers], [sighs] and plain-language directions inside the text.

Long texts in one go
Read in chunks the way Fish Audio's server does, each chunk hearing the ones before it.

Experts in RAM
About 6 GB of the model stays on the GPU; the 32 GB of experts stream from RAM through a VRAM cache.

Transcripts by Qwen3-ASR
Native 1.7B and 0.6B speech recognition in 30 languages, no extra packages.

Quick start

  1. Install the nodes. Clone into custom_nodes and restart ComfyUI. There's nothing to pip install: the nodes only use what ComfyUI already has.

    cd ComfyUI/custom_nodes
    git clone https://github.com/PedroMarinhoDev/ComfyUI-Drama3
    
  2. Download three files from PedroMarinhoDev/Drama-3-ComfyUI and PedroMarinhoDev/Qwen3-ASR-ComfyUI:

    FileFolderSize
    drama3_fp8experts_bf16.safetensorsmodels/diffusion_models38.6 GB
    drama3_codec.safetensorsmodels/vae1.6 GB
    qwen3_asr_1.7b_bf16.safetensorsmodels/asr4.1 GB
    hf download PedroMarinhoDev/Drama-3-ComfyUI drama3_fp8experts_bf16.safetensors --local-dir ComfyUI/models/diffusion_models
    hf download PedroMarinhoDev/Drama-3-ComfyUI drama3_codec.safetensors --local-dir ComfyUI/models/vae
    hf download PedroMarinhoDev/Qwen3-ASR-ComfyUI qwen3_asr_1.7b_bf16.safetensors --local-dir ComfyUI/models/asr
    
  3. Open the workflow and queue. Drag example_workflows/drama3_voice_clone.json into ComfyUI, pick a few seconds of clean speech in Load Audio, write your text in Drama 3 Generate, run.

[!TIP] Qwen3-ASR fills in the voice's transcript. Cut the clip between sentences: a transcript that misses the clip's last words is the most common reason a take falls silent.

Requirements

MinimumTested
GPUNVIDIA, 8 GB of VRAM with experts in RAMRTX 4090 and RTX 3090 (24 GB); 12 GB and 8 GB simulated on the 3090
System RAMthe model file plus ~8 GB: ~32 GB for W4A8, ~48 GB for FP8188 GB
Disk26 GB (W4A8 and the codec)NVMe
ComfyUIv0.40v0.40.0

Choosing a file

Start with FP8: it holds Fish Audio's own expert weights, byte for byte, next to the checkpoint's bf16 layers. Take a smaller file when your RAM is short of the FP8 file's ~48 GB. An int8 ConvRot file (38.7 GB) can be built with tools/convert.py; it measured as close to the original as FP8.

FileSizeExpertsRAM with experts in RAMNotes
drama3_fp8experts_bf1638.6 GBFP8, as Fish Audio ships them~48 GBthe original weights
drama3_w6a8experts_bf1632.7 GBW6A8~40 GBno silent take in 16 cloned test takes
drama3_w4a8experts_bf1624.6 GBW4A8~32 GBfalls silent more often with real voice clips

Qwen3-ASR comes in two sizes, qwen3_asr_1.7b_bf16 (4.1 GB) and qwen3_asr_0.6b_bf16 (1.6 GB). In our tests both wrote nearly the same transcripts of clean speech, and the 0.6B took half the time.

Performance

Drama 3 makes 21.5 audio frames per second of speech, so 46 ms per frame is real time. Experts in RAM, a cloned voice, ~9 s of speech, measured on 2026-10-14; the time includes the prompt pass.

GPUFileExpert cachems per framePeak VRAM
RTX 4090 (PCIe 4.0 ×8)W4A816 GB5321.4 GB
RTX 4090 (PCIe 4.0 ×8)W4A84 GB6911.7 GB
RTX 4090 (PCIe 4.0 ×8)int816 GB7221.5 GB
RTX 4090 (PCIe 4.0 ×8)int84 GB10511.9 GB
RTX 3090 (PCIe 4.0 ×8)FP816 GB83–
RTX 3090 (PCIe 4.0 ×8)FP84 GB119–
RTX 3090 held to 12 GBFP8automatic1379.8 GB
RTX 3090 held to 8 GBFP8automatic2146.5 GB

The held rows ran with the rest of the 3090's memory taken by another process, as on a 12 GB or 8 GB card. Qwen3-ASR transcribes a 6.6 s clip in ~2 s with the 1.7B model and ~1 s with the 0.6B (RTX 3090, model load included).

Nodes
NodeWhat it does
Load Drama 3Loads a model file. experts: in RAM (default) or in VRAM; expert_cache_gb: VRAM for cached experts (0 = what is free); advanced: a second GPU for the experts-in-VRAM split.
Load Drama 3 CodecLoads the codec from models/vae.
Drama 3 Encode VoiceA voice to clone: an audio clip and its exact transcript.
Save Drama 3 Voice / Load Drama 3 VoiceKeep an encoded voice (codes and transcript, a few KB) in output/drama3_voices and use it again without the codec.
Drama 3 GenerateText and any number of voices to audio codes. Long text is generated in chunks, each continuing from the first and the latest chunk.
Drama 3 DecodeCodes to 44.1 kHz audio.
Load Qwen3-ASRLoads a Qwen3-ASR file from models/asr.
Qwen3-ASR TranscribeAudio to text and its language; language detects it or forces one of 30; context takes names and terms that help recognition.

The codec runs only before and after generation, so it never sits in VRAM next to the model.

How it fits on an 8 GB card

Drama 3 is a Qwen3.5-style mixture of experts: 40 layers, each with 256 routed experts of which 8 run per frame, plus attention or DeltaNet, a shared expert and a 13-layer codebook decoder. Everything except the routed experts is about 6 GB and stays on the GPU. With experts in RAM the 32 GB of experts stay in pinned system memory: each frame copies the 8 experts per layer it needs, and a least-recently-used cache in the VRAM left free keeps the ones that come back (85–95% of reads hit a 13 GB cache). The prompt uses nearly every expert, so its pass streams each layer's experts once and keeps the ones the prompt used most. Decoding one frame at a time is CPU-bound, so the cache size moves the speed less than you would expect.

With experts in VRAM the whole file sits on the GPU; two 24 GB cards can split the layers (second_gpu).

Settings
  • temperature 1.0, top_p 0.9, top_k 30 are the defaults of Fish Audio's own Drama 3 server. Lower values make takes slower, flatter and more likely to fall silent.
  • The model copies the reference's delivery: a flat clip gives a flat take, a lively one a lively take.
  • Speakers: start each line with <|speaker:N|> and give each speaker a voice whose transcript starts with the same tag (no tag means speaker 0).
  • max_frames caps each chunk (21.5 frames per second); generation stops earlier at the end of speech.
Building the files yourself

From the official checkpoints, one GPU visible (CUDA_VISIBLE_DEVICES=N), with ComfyUI on PYTHONPATH:

python tools/convert.py model <drama-3 folder> drama3_fp8experts_bf16.safetensors --format fp8
python tools/convert.py model <drama-3 folder> drama3_int8experts_bf16.safetensors --format int8_convrot
python tools/convert.py model <drama-3 folder> drama3_w6a8experts_bf16.safetensors --format w6a8
python tools/convert.py model <drama-3 folder> drama3_w4a8experts_bf16.safetensors --format w4a8
python tools/convert.py codec <drama-3 folder>/codec.pth drama3_codec.safetensors
python tools/convert.py asr <Qwen3-ASR-1.7B folder> qwen3_asr_1.7b_bf16.safetensors
python tools/convert.py asr <Qwen3-ASR-0.6B folder> qwen3_asr_0.6b_bf16.safetensors
How close it is to the official code
  • Drama 3: against Fish Audio's own PyTorch code, with the same frames forced, the main token's distribution differs by a KL of 0.004–0.007 nats and the top token agrees 93–94% of the time, the noise of bf16 arithmetic; the FP8 and int8 files measure the same. Prompt rows match the builders of Fish Audio's server and of fish-speech token for token, and the codec produces 99.94% of the same codes.
  • Qwen3-ASR: against Qwen's qwen-asr package, the prompt ids are identical, the encoder output matches within 1e-6 in fp32 and the first token is the same; transcripts match on clips up to 8 s. On longer clips the encoder attends in Qwen's 8 s windows, as their vLLM backend does, which can move a comma.

Troubleshooting

A take falls silent after a second, or speaks only part of the text

Check the voice first: the transcript must cover every word of the clip, and the clip should be clean speech cut between sentences. Then queue again for a new seed. Some clips make the model fall silent in Fish Audio's own code too (known issue); try another stretch of the recording. A take that goes silent is stopped and its silent tail cut, with a warning in the console.

Speech is slow or flat

Keep temperature at 1.0 and top_p at 0.9 or above, and use a reference with the delivery you want.

Out of memory, or the first run takes minutes

Lower expert_cache_gb, or pick a smaller file if system RAM is the limit. The first run reads the whole model file from disk once; later runs start in seconds.

License and credits

The code in this repository is under the GNU GPL v3, except the parts ported from Fish Audio's code and Fish Audio's tokenizer and config, which remain under the Fish Audio Community License, and the parts adapted from Qwen's qwen-asr, under the Apache License 2.0. NOTICE lists them.

[!NOTE] Drama 3's weights and outputs fall under the Fish Audio Community License: free for research and non-commercial use, and for commercial use below USD 500k annual revenue; a hosted TTS service needs a license from Fish Audio. Don't clone the voice of an identifiable person without their consent.

Built with Fish Audio. Drama 3 and its codec are by Fish Audio; Qwen3-ASR is by the Qwen team. This project is not affiliated with or endorsed by either.

comfyui
comfyui-nodes
fish-audio
speech-recognition
text-to-speech
voice-cloning