💪TB | Tiny Dual Sampler
Two-stage sampling that makes a 0.6B model punch up
- latent_input
- genparams
- model
- clip
- transcoder
- refiner_model
- refiner_clip
- latent_output
This is the node the whole pack exists for. 💪TB | Tiny Dual Sampler is where the actual image generation happens, and it's the reason TinyBreaker gets results way above its parameter count. The trick, inherited from the author's earlier "Abominable Workflows" project: don't sample once with one model, sample twice with a base model and then a refiner.
The base is PixArt Sigma - the 0.6B DiT that the community spent early 2024 calling the best open-source prompt follower around. The refiner is a separate small model that runs on the latent after the base is done, adding detail. Sample with the base, then hand the result to the refiner, and you get output that reads far above the architecture's size. On an RTX 3080 the whole thing produces ~1536×1024 in roughly 12 seconds at 6–8 GB VRAM. That's the entire pitch: surprisingly good, surprisingly fast, surprisingly cheap.
What you wire in
The node takes a lot of inputs, but they map cleanly onto the two-stage idea:
- latent_input - where you start (usually from
Empty Latent Imageor the genparams flow). - model and clip - the base model and its T5 encoder, straight from
LoadTinyBreakerCkpt. - refiner_model and refiner_clip - the second stage's model and encoder, from the same loader.
- transcoder - the piece that converts the base model's latent space into the refiner's. Without it the two stages can't talk to each other properly.
- genparams - the parameter bundle carrying prompt, seed, steps, CFG. This is where the pack's "settings as a wire" design pays off: you don't tune this node, you tune the genparams nodes upstream.
- enable_cache - default on. The sampler caches encoded prompts and intermediate results so it doesn't recompute when nothing changed. The tooltip is the troubleshooting guide: if you get errors or the image isn't updating, turn it off.
Output is a single latent_output, ready for Tiny Decode.
How the two stages actually differ
The mechanism, from the source: it denoises with the base sampler first, then transcodes the latent into refiner space and runs the refiner stage on it. Denoising parameters come from genparams under denoising.base and denoising.refiner, so if you're wondering how the refiner's steps/CFG are set differently from the base's - the genparams bundle does that per-stage.
Installing and the honest gotchas
cd ComfyUI/custom_nodes
git clone https://github.com/martin-rizzo/ComfyUI-TinyBreaker
or install via ComfyUI Manager ("tinybreaker"), restart. No pip requirements. You do need tinybreaker_prototype1.safetensors (3 GB) in models/checkpoints and t5xxl_fp8_e4m3fn.safetensors (4.9 GB) in models/clip.
Community reports since the prototype0 launch in Feb 2025 flag a couple of real rough edges: users have hit "Expected all tensors to be on the same device" errors - the classic CPU/GPU mismatch when the CLIP or model lands on the wrong device - and some report having to disable enable_cache to get live updates while iterating. TinyBreaker is honest about its limits too: no text generation, and it struggles with complex action verbs. Know that going in and it's a delight; expect Flux and you'll be disappointed.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| latent_input | LATENT | The latent image to denoise. | |
| genparams | GENPARAMS | The generation parameters containing the sampler configuration. | |
| model | MODEL | The model used for denoising the latent images. | |
| clip | CLIP | The T5 encoder used for embedding the prompts. | |
| transcoder | TRANSCODER | The transcoder model used for converting latent images from base to refiner. | |
| refiner_model | MODEL | The model used for refining latent images. | |
| refiner_clip | CLIP | The CLIP model used for embedding text prompts during refining. | |
| enable_cache | BOOLEAN | true | Enable internal cache to avoid redundant computations. It might be necessary to disable it if errors occur or the image is not updating correctly. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| latent_output | LATENT | Latent image after denoising. |