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.
See the code
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.
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. |
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
Download three files from PedroMarinhoDev/Drama-3-ComfyUI and PedroMarinhoDev/Qwen3-ASR-ComfyUI:
| File | Folder | Size |
|---|---|---|
drama3_fp8experts_bf16.safetensors | models/diffusion_models | 38.6 GB |
drama3_codec.safetensors | models/vae | 1.6 GB |
qwen3_asr_1.7b_bf16.safetensors | models/asr | 4.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
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.
| Minimum | Tested | |
|---|---|---|
| GPU | NVIDIA, 8 GB of VRAM with experts in RAM | RTX 4090 and RTX 3090 (24 GB); 12 GB and 8 GB simulated on the 3090 |
| System RAM | the model file plus ~8 GB: ~32 GB for W4A8, ~48 GB for FP8 | 188 GB |
| Disk | 26 GB (W4A8 and the codec) | NVMe |
| ComfyUI | v0.40 | v0.40.0 |
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.
| File | Size | Experts | RAM with experts in RAM | Notes |
|---|---|---|---|---|
drama3_fp8experts_bf16 | 38.6 GB | FP8, as Fish Audio ships them | ~48 GB | the original weights |
drama3_w6a8experts_bf16 | 32.7 GB | W6A8 | ~40 GB | no silent take in 16 cloned test takes |
drama3_w4a8experts_bf16 | 24.6 GB | W4A8 | ~32 GB | falls 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.
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.
| GPU | File | Expert cache | ms per frame | Peak VRAM |
|---|---|---|---|---|
| RTX 4090 (PCIe 4.0 ×8) | W4A8 | 16 GB | 53 | 21.4 GB |
| RTX 4090 (PCIe 4.0 ×8) | W4A8 | 4 GB | 69 | 11.7 GB |
| RTX 4090 (PCIe 4.0 ×8) | int8 | 16 GB | 72 | 21.5 GB |
| RTX 4090 (PCIe 4.0 ×8) | int8 | 4 GB | 105 | 11.9 GB |
| RTX 3090 (PCIe 4.0 ×8) | FP8 | 16 GB | 83 | – |
| RTX 3090 (PCIe 4.0 ×8) | FP8 | 4 GB | 119 | – |
| RTX 3090 held to 12 GB | FP8 | automatic | 137 | 9.8 GB |
| RTX 3090 held to 8 GB | FP8 | automatic | 214 | 6.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).
| Node | What it does |
|---|---|
| Load Drama 3 | Loads 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 Codec | Loads the codec from models/vae. |
| Drama 3 Encode Voice | A voice to clone: an audio clip and its exact transcript. |
| Save Drama 3 Voice / Load Drama 3 Voice | Keep an encoded voice (codes and transcript, a few KB) in output/drama3_voices and use it again without the codec. |
| Drama 3 Generate | Text 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 Decode | Codes to 44.1 kHz audio. |
| Load Qwen3-ASR | Loads a Qwen3-ASR file from models/asr. |
| Qwen3-ASR Transcribe | Audio 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.
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).
<|speaker:N|> and give each speaker a voice whose transcript starts with the
same tag (no tag means speaker 0).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
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.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.
Keep temperature at 1.0 and top_p at 0.9 or above, and use a reference with the delivery you want.
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.
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.
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.
See the code
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.
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. |
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
Download three files from PedroMarinhoDev/Drama-3-ComfyUI and PedroMarinhoDev/Qwen3-ASR-ComfyUI:
| File | Folder | Size |
|---|---|---|
drama3_fp8experts_bf16.safetensors | models/diffusion_models | 38.6 GB |
drama3_codec.safetensors | models/vae | 1.6 GB |
qwen3_asr_1.7b_bf16.safetensors | models/asr | 4.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
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.
| Minimum | Tested | |
|---|---|---|
| GPU | NVIDIA, 8 GB of VRAM with experts in RAM | RTX 4090 and RTX 3090 (24 GB); 12 GB and 8 GB simulated on the 3090 |
| System RAM | the model file plus ~8 GB: ~32 GB for W4A8, ~48 GB for FP8 | 188 GB |
| Disk | 26 GB (W4A8 and the codec) | NVMe |
| ComfyUI | v0.40 | v0.40.0 |
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.
| File | Size | Experts | RAM with experts in RAM | Notes |
|---|---|---|---|---|
drama3_fp8experts_bf16 | 38.6 GB | FP8, as Fish Audio ships them | ~48 GB | the original weights |
drama3_w6a8experts_bf16 | 32.7 GB | W6A8 | ~40 GB | no silent take in 16 cloned test takes |
drama3_w4a8experts_bf16 | 24.6 GB | W4A8 | ~32 GB | falls 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.
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.
| GPU | File | Expert cache | ms per frame | Peak VRAM |
|---|---|---|---|---|
| RTX 4090 (PCIe 4.0 ×8) | W4A8 | 16 GB | 53 | 21.4 GB |
| RTX 4090 (PCIe 4.0 ×8) | W4A8 | 4 GB | 69 | 11.7 GB |
| RTX 4090 (PCIe 4.0 ×8) | int8 | 16 GB | 72 | 21.5 GB |
| RTX 4090 (PCIe 4.0 ×8) | int8 | 4 GB | 105 | 11.9 GB |
| RTX 3090 (PCIe 4.0 ×8) | FP8 | 16 GB | 83 | – |
| RTX 3090 (PCIe 4.0 ×8) | FP8 | 4 GB | 119 | – |
| RTX 3090 held to 12 GB | FP8 | automatic | 137 | 9.8 GB |
| RTX 3090 held to 8 GB | FP8 | automatic | 214 | 6.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).
| Node | What it does |
|---|---|
| Load Drama 3 | Loads 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 Codec | Loads the codec from models/vae. |
| Drama 3 Encode Voice | A voice to clone: an audio clip and its exact transcript. |
| Save Drama 3 Voice / Load Drama 3 Voice | Keep an encoded voice (codes and transcript, a few KB) in output/drama3_voices and use it again without the codec. |
| Drama 3 Generate | Text 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 Decode | Codes to 44.1 kHz audio. |
| Load Qwen3-ASR | Loads a Qwen3-ASR file from models/asr. |
| Qwen3-ASR Transcribe | Audio 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.
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).
<|speaker:N|> and give each speaker a voice whose transcript starts with the
same tag (no tag means speaker 0).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
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.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.
Keep temperature at 1.0 and top_p at 0.9 or above, and use a reference with the delivery you want.
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.
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.