Chroma Cache
Skip half of Chroma's transformer work — without swapping models
- model
- MODEL
Chroma is the community's answer to Flux licensing: an 8.9B Apache-2.0 uncensored rework of Flux Schnell, trained solo by LodestoneRock on donated compute. It's also famously slow - on a 12GB card unquantized, it's the kind of slow where you start counting seconds per image. You've got a few speed levers: quantize (FP8/GGUF), reach for Chroma1-Flash or a distilled-style low-step variant, or cache. The Chroma Cache node (ChromaCache from feffy380/comfyui-chroma-cache) is the caching lever, and it's the only one you can bolt onto an existing workflow without retraining or swapping checkpoints.
How it works: caching for a model that hates similarity checks
TeaCache and FBCache made caching mainstream in ComfyUI. Adjacent sampling steps often compute nearly identical transformer outputs, so you run a similarity check, skip the redundant blocks, and reuse the previous step's hidden states. Works great on Flux and the DiT video models. Chroma is the annoying exception: its first block residual has low similarity between timesteps, so threshold-based caching keeps failing and you'd almost never get a hit.
So this node flips the strategy. Forget similarity. It refreshes the cache on a fixed schedule - every cache_interval steps it runs the full transformer-block stack and saves the output; the steps in between just reload that saved result and skip the heavy compute. That's the whole trick, and it's why there are only four inputs. (The cache plumbing is borrowed from chengzeyi's Comfy-WaveSpeed, MIT licensed, so it's a battle-tested base rather than something hand-rolled.)
The inputs that matter
- model - your Chroma checkpoint. The source throws
Unsupported model <name>if the diffusion model isn't Chroma, so don't expect this to speed up plain Flux. - start (0–1, default 0) - where caching kicks in, as a fraction of sampling progress. The tooltip says at least 0.3, because early steps are more sensitive to the approximation. Ignore that at your image's peril.
- end (0–1, default 1) - where it turns back off. Leave it at 1.0.
- cache_interval (int, min 1, default 1) - consecutive cache hits before a refresh.
1means it resets every other step; the README's sweet spot is 2–4.
The single output is a MODEL - the patched model - and it replaces the model wire into your sampler. That's the whole graph change: Load Checkpoint → Chroma Cache → KSampler.
Install
Two minutes, no heavy dependencies (the pack only needs torch, which ComfyUI already ships):
cd ComfyUI/custom_nodes
git clone https://github.com/feffy380/comfyui-chroma-cache
# restart ComfyUI
Or search "Chroma Cache" in ComfyUI Manager and hit install. The only big download is the model itself - lodestones/Chroma1-HD on Hugging Face - which you almost certainly already have. feffy380's been shipping small community tools since the 2022 era (their prompt-morph script was the go-to for prompt-to-prompt walks back then), which is decent trust signal for a niche node like this.
Settings that work, and where people get burned
Start with the README's own values: start 0.30, end 1.0, cache_interval 2–4. That skips the transformer-block stack on roughly half to two-thirds of the steps in the active window - a real per-image speedup with the quality cost mostly invisible. Where people get burned: cranking cache_interval to 8+ for a bigger win, or dragging start toward 0 because you want the speed from step one. Both push the approximation into the steps that shape composition, and the image will tell you. It's a trade, not a bug - you're asking the model to reuse stale activations, and it will happily oblige until the picture falls apart.
It also composes fine with your other speed tricks: if you're already on an FP8 or GGUF build, this sits on top of whatever checkpoint you load. If Chroma feels unusable on your card, cache it before you give up on the model - it's the least invasive lever in the box.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| start | FLOAT | 0.000–1 | When to enable caching as a percentage of sampling progress. At least 0.3 is recommended because early steps are more sensitive. |
| end | FLOAT | 1.000–1 | When to disable caching as a percentage of sampling progress. |
| cache_interval | INT | 1 | Number of consecutive cache hits before the cache is reset. A value of 1 means the cache is reset every other step. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |