ELLA Text Encode (Prompt)
The node that teaches SD 1.5 to read sentences
- ella
- CONDITIONING
This is the node you were actually after when you described a busy scene to SD 1.5 and got back a picture missing half the objects. SD 1.5's CLIP encoder is the weakest link in the whole pipeline - a 77-token ceiling that truncates long prompts, bleeds tags into each other, and gets called out for having the worst prompt adherence of any common base. ELLA Text Encode is the workaround that keeps the SD 1.5 UNet you love and swaps out the part that can't understand you.
Instead of CLIP, it runs your prompt through flan-t5-xl - a real language model - and feeds those embeddings into the UNet through a small adapter. In practical terms, "a person in a blue jacket and a red beanie stands in shallow waters fishing" stops being a coin flip and starts being something SD 1.5 actually renders. People were genuinely excited about it: one thread called ELLA's prompt following "outright superior to SDXL in many cases" with just the ~300 MB adapter and a few-GB encoder, and the KB notes it used with CyberRealistic to get strong results from complex prompts.
How it works
Two pieces, both loaded by the LoadElla node upstream. The T5 embedder turns your text into semantic embeddings; then the ELLA module - a Perceiver-style resampler, 6 layers, 8 attention heads, 64 latent tokens - fuses those embeddings with a timestep embedding derived from your sigma value, and the result goes into the UNet's cross-attention as standard conditioning.
That timestep conditioning is the whole reason this node has a sigma input at all. ELLA's adapter is aware of where in the denoising process it's being applied, so the sigma you give it has to match what the KSampler is doing - feed it the wrong stage and the prompt guidance lands where it does no good. Hence the workflow's dance: Get Sigma (BNK) computes the exact sigma for your sampler, and you wire that into this node.
The inputs that matter
- text - multiline. Write a real sentence. This is the entire point; tag-heavy prompting still works, but you're paying for a language model, so give it language. The README says prompt weighting behaves "1:1 with all conditioning nodes," so your
(word:1.2)syntax still applies. - sigma - FLOAT, default 1. Right-click and "convert sigma to input," then wire it from Get Sigma. If you hardcode it, it's only correct for one sampler/scheduler/steps combo.
- ella - the bundle from LoadElla.
The single CONDITIONING output goes straight into your KSampler's positive (and a second instance, with sigma 1, for the negative). Because it emits ordinary conditioning, ControlNet and conditioning-node stacking all still work - the reference workflow uses two of these nodes side by side.
Install
Part of the ComfyUI_ELLA pack: ComfyUI Manager, search ComfyUI_ELLA, or clone and restart:
cd ComfyUI/custom_nodes
git clone https://github.com/ExponentialML/ComfyUI_ELLA
Then make sure LoadElla has both models (the adapter plus the flan-t5-xl folder - see the LoadElla article for the exact paths).
Honest caveats
ELLA fixes prompt comprehension, not everything wrong with SD 1.5. It does not fix text-in-image rendering - SD 1.5 still can't reliably draw legible words, and nothing here changes that. Only the SD 1.5 weights exist, so this is a tool for breathing new life into a legacy model, not a bridge to anything newer. And the T5 encoder adds a real chunk of VRAM and a slower encode pass.
The classic failure when something looks off: your sigma doesn't match the sampler. Get Sigma should be in the loop; if the prompt seems half-obeyed, check that connection before touching the text. And if you hit the layerNormKernelImpl not implemented for 'Half' error after encoding, launch ComfyUI with --fp32-text-enc - that one's a known, community-confirmed fix. Worth it, because when it works, SD 1.5 finally understands the sentence you wrote.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — | |
| sigma | FLOAT | 1.00 | — |
| ella | ELLA | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |