ComfyUI Node

Lumina-Next-SFT Diffusers

Run Lumina-Next-SFT in ComfyUI — the Apache-licensed flow model everyone skipped

By Excidos·Created 2 years ago·Updated 2 years ago· 18
Lumina-Next-SFT Diffusers
  • latents
  • LATENT
model_pathAlpha-VLLM/Lumina-Next-SFT-diffusers
prompt
negative_prompt
num_inference_steps30
guidance_scale4.00
seed-1
batch_size1
scaling_watershed0.30
proportional_attntrue
clean_captiontrue
max_sequence_length256
use_time_shiftfalse
t_shift4
strength1.00

Don't feel bad if you've never heard of Lumina-Next. It launched mid-2024, did genuinely good work, and then Flux arrived and vacuumed up the entire conversation. The model is Alpha-VLLM's Apache-licensed text-to-image diffusion transformer - T5 text conditioning, flow-matching sampling, no API, no key, all local. This node is the lowest-effort way to actually run it inside ComfyUI: one single node that downloads the model, runs the whole diffusers pipeline, and hands you latents.

You'd reach for it for exactly one reason: curiosity about a real, open, redistributable alternative to the SD/Flux mainstream. The official ComfyUI-native Lumina implementation is a sprawling, fiddly thing. This wrapper is the opposite - one node, prompt in, latents out. It's a small enthusiast project (the author posted it to r/comfyui in July 2024 and was open about figuring out time-aware scaling as he went), so treat it as an on-ramp, not a production workhorse.

How it works

Under the hood it's a thin wrapper around HuggingFace's LuminaText2ImgPipeline. On first run, model_path (default Alpha-VLLM/Lumina-Next-SFT-diffusers) pulls the weights from Hugging Face, then saves a local copy into a folder next to the node itself, so subsequent runs load from disk. It loads in bf16 when your GPU supports it and falls back to fp32 otherwise - that fallback is where your VRAM budget goes, because this is a big transformer plus a T5 text encoder.

The clever bit: it returns a latent scaled for the SDXL VAE (0.13025 scale factor), which is exactly why the author says to decode with the standard SDXL_VAE. It also swaps in a FlowMatchEulerDiscreteScheduler and runs everything with output_type="latent".

Inputs and outputs that matter

You'll actually touch maybe five of these. prompt and negative_prompt are the obvious ones (Lumina isn't guidance-distilled, so the negative prompt really does work here). num_inference_steps (default 30) and guidance_scale (default 4.0) are solid starting points - nudge guidance up if output comes out mushy. seed (‑1 = random) and batch_size (1–4) do what you expect.

The rest are Lumina's personality:

  • scaling_watershed (0.3) - Lumina's resolution-scaling control. Leave it alone until you're pushing high resolutions.
  • proportional_attn (True) - keeps cross-attention proportional as resolution grows, so big generations don't fall apart. Keep it on.
  • clean_caption (True) - runs a caption-cleaning pass on your prompt before encoding.
  • max_sequence_length (256) - T5's token cap for the prompt. Generous enough.
  • use_time_shift / t_shift - the flow-matching shift knob. Off by default; flipping it on sets scheduler shift to 1 + t_shift, redistributing sampling effort between composition and detail.
  • strength plus the optional latents input - this is your img2img. Feed a latent in and lower strength to blend.

Output is a single LATENT. Wire it into a VAE Decode node using SDXL_VAE - the node never decodes for you, which trips up everyone on first run.

Installing it

The pack is in ComfyUI Manager - search "Lumina". Or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/Excidos/ComfyUI-Lumina-Next-SFT-DiffusersWrapper

Then restart ComfyUI. (Ignore the README's own clone URL - it's stale and points at a differently-named repo.) The heavy lifting is the dependency list: this installs the development branch of diffusers straight from GitHub (git+https://github.com/huggingface/diffusers), plus transformers, accelerate, and torchdiffeq. The README warns about it and so do I: that dev-branch diffusers is the single most likely thing to break other nodes that pin an older diffusers. It's the classic custom-node dependency collision, in the flesh.

Common issues

  • Other nodes start erroring after install - the dev-branch diffusers. It's usually fixable by re-pinning diffusers to a stable release, at which point this node may stop working too. Pick your poison.
  • Black image out of the decode - check the console. On any exception the node returns zeroed latents instead of raising, so the UI shows you a clean black box and the real error is in the log. Memory errors show up here.
  • OOM - the first run downloads several GB of weights and bf16 is your friend; on GPUs without it the fp32 fallback is hungry.
  • All-zero latents - if you feed a blank latent, the node injects noise automatically rather than failing, so "it ran but looks like static" means check your latent source.

It's a fun way to spend an evening with a model the community genuinely forgot. The repo even ships example workflows, including an iterative upscaler built on SDXL-Lightning. And if Lumina-Next hooks you, the real successor - Lumina-Image-2.0 - landed in 2025 with day-one ComfyUI support and a proper Apache license. That's where the model lives now; this node is how you try the warm-up act.

CategoryLuminaWrapper

Inputs (15)

NameTypeDefaultDescription
model_pathSTRINGAlpha-VLLM/Lumina-Next-SFT-diffusers
promptSTRING
negative_promptSTRING
num_inference_stepsINT301–200
guidance_scaleFLOAT4.000.1–20
seedINT-1
batch_sizeINT11–4
scaling_watershedFLOAT0.300–1
proportional_attnBOOLEANtrue
clean_captionBOOLEANtrue
max_sequence_lengthINT25664–512
use_time_shiftBOOLEANfalse
t_shiftINT41–20
strengthFLOAT1.000–1
latentsoptLATENT

Outputs (1)

NameTypeDescription
LATENTLATENT