Nodes/ComfyUI-TinyBreaker/💪TB | Tiny Dual Sampler
ComfyUI Node

💪TB | Tiny Dual Sampler

Two-stage sampling that makes a 0.6B model punch up

By martin-rizzo·Created 2 years ago·Updated about a year ago· 42
💪TB | Tiny Dual Sampler
  • latent_input
  • genparams
  • model
  • clip
  • transcoder
  • refiner_model
  • refiner_clip
  • latent_output
enable_cachetrue

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 Image or 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.

Category💪TinyBreaker

Inputs (8)

NameTypeDefaultDescription
latent_inputLATENTThe latent image to denoise.
genparamsGENPARAMSThe generation parameters containing the sampler configuration.
modelMODELThe model used for denoising the latent images.
clipCLIPThe T5 encoder used for embedding the prompts.
transcoderTRANSCODERThe transcoder model used for converting latent images from base to refiner.
refiner_modelMODELThe model used for refining latent images.
refiner_clipCLIPThe CLIP model used for embedding text prompts during refining.
enable_cacheBOOLEANtrueEnable 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)

NameTypeDescription
latent_outputLATENTLatent image after denoising.