Clark Air Gemma Loader
The 2 GB text encoder that makes Sana understand English instead of tags
- CLARKAIR_GEMMA
Sana doesn't use a CLIP encoder. It uses Gemma-2-2B - an actual large language model - to read your prompt, and this node is how you get that encoder into your graph. If you've only ever run SDXL or Flux through ComfyUI's standard CLIP loaders, this is the first place the Clark Air pack quietly changes the rules on you. It's not a hard change, but it changes how you write prompts.
You'll wire this node exactly once per workflow. It loads the Gemma model and hands it to one or two ClarkAirGemmaEncode nodes, which do the actual text-to-conditioning work. One loader, two encoders - positive and negative - is the intended shape (the pack's example workflow does exactly that).
What you're actually loading
The default is unsloth/gemma-2-2b-it-bnb-4bit - the 4-bit version of Gemma-2-2B, about 2.1 GB, fetched from Hugging Face on first run. That's the smart default: a 4-bit text encoder costs almost nothing in quality on this model and keeps VRAM free for the transformer. The alternative in the dropdown, Efficient-Large-Model/gemma-2-2b-it, is the same model at fp16 (~5 GB) if you want maximum fidelity and have the headroom.
The three knobs that actually matter:
- model_name - the 4-bit unsloth build is default; only switch to fp16 if quality noticeably bothers you.
- device -
cudaunless you're diagnosing something. There's acpuoption but you won't want it at runtime. - dtype -
BF16is default and right for a 20-series card or newer; FP16 is fine if BF16 misbehaves on your hardware.
The output is a single CLARKAIR_GEMMA socket, which plugs into the gemma input of the encode node. Nothing else in ComfyUI accepts that type, so you can't accidentally wire it into a CLIP path.
Why an LLM encoder matters
The text encoder is the component that decides how prompting works - swap CLIP for an LLM and the whole habit set changes with it (text-encoder panel). There's no 77-token wall here (the encode node caps at 300), no (word:1.4) weighting that does anything useful, and booru tag soup is the wrong tool. Gemma wants sentences: "a corgi astronaut floating in space, photorealistic" beats "corgi, astronaut, space, photoreal" every time. The model reads an instruction, not a keyword list.
Installing it
This node ships in the Clark Air Sana pack, so the install is shared across all six of its nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/clark-labs-inc/ComfyUI-ClarkAirSana
then restart ComfyUI - the Python deps (transformers, accelerate, bitsandbytes, and the GemLite kernels) install automatically. ComfyUI Manager users can just search "Clark Air Sana" and hit install. The Gemma weights themselves download on the first queue, which is the one moment this node needs the internet; after that it loads from the local HF cache with no network check.
The gotchas
First queue after install is slow - that 2.1 GB has to come down before anything happens. Don't panic and restart. Second: this pack is built to run on NVIDIA CUDA with Linux or WSL2 as the smooth path; native Windows runs Triton in community-supported mode, and if the Gemma load itself fails, that's usually a bitsandbytes/Triton install issue, not your graph. And keep one eye on VRAM: Gemma (even at 4-bit), the 495 MB transformer, and the 1.2 GB VAE all want to sit on the card. It all fits comfortably on 8 GB at 512×512, which is the whole point of a model this size.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model_name | COMBO | 2 options: unsloth/gemma-2-2b-it-bnb-4bit, Efficient-Large-Model/gemma-2-2b-it | |
| device | COMBO | cuda | 2 options: cuda, cpu |
| dtype | COMBO | BF16 | 3 options: BF16, FP16, FP32 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CLARKAIR_GEMMA | CLARKAIR_GEMMA | — |