⭐ Star LTX Scheduler (Qwen Image 2.x)
Why Your Big Qwen Render Goes Griddy, and the Scheduler That Fixes It
- latent
- options
Here's a bug that isn't a bug. You render Qwen-Image or another big flow model at 1024², and it's clean. You push it to 2048², or you render a wide canvas with a lot of pixels in it, and a faint grid or a crawling noise pattern creeps in. Your sampler settings didn't change. Your prompt didn't change.
The cause is the noise schedule. Flow-matching models don't predict noise on a curved trajectory - they predict a velocity along a near-straight path from noise to data, and one consequence is that most of the scheduler tuning you learned on SDXL actively hurts. What's left to tune is a single number, a timestep shift, and ComfyUI gives you a fixed one. That's the problem: the right shift depends on how many image tokens you have, and a 2048² image has four times the tokens of a 1024² one.
Qwen-Image 2.x ships an official scheduler config for this - dynamic shifting, exponential, shift interpolated with token count. ⭐ Star LTX Scheduler (Qwen Image 2.x) is that schedule packaged as a plug-in option node.
What it is, mechanically
It is not a sampler. It doesn't sample anything and it doesn't produce a latent. It's a small options payload that goes into the options input of a Star sampler node, which then builds the sigma curve itself instead of using its dropdown scheduler.
The node takes steps - an INT, default 40, which is the official Qwen-Image-2.1 default and which overrides the step count on the sampler you plug into. And it takes an optional latent: the node reads its spatial size to work out the image token count. Leave it unconnected and the sampler falls back to counting tokens on its own latent, which is the same number in every workflow I can think of. Connect it anyway if you want to be explicit.
One output: options, typed STARNODES_OPTIONS. It only means anything to three nodes - ⭐ StarSampler (Unified), ⭐ Star Qwen2 Outpainter and ⭐ Star Flux2 Inpainter, all of which expose an options input. Plug it into anything else and nothing happens.
The actual math it applies
Qwen 2.x uses one latent token per pixel, so 1024² is 4096 tokens and 2048² is 16384. The shift is interpolated linearly across that range: the base shift of 0.5 sits at a 256-token reference length and the max shift of 0.9 sits at 8192 tokens. Bigger image, more shift.
The sampler clones your model, swaps its model_sampling object for a Flux-style flow variant, and reshapes the sigma curve so the smallest sigma lands on the terminal value of 0.02 - that's Qwen's own shift_terminal. Then it forces the simple schedule and runs the steps you gave it. Your scheduler dropdown is effectively a no-op from that point on, which is fine, because the whole point is that the widget scheduler was not resolution-aware.
Two things worth knowing about how it plays with the rest. It only applies to Flux-style flow models - on SDXL or a non-flow checkpoint the sampler logs a warning and quietly falls back to the widget scheduler, so you won't get a crash, you'll just get nothing. And if the sampler has a Detail Daemon schedule running, the LTX scheduler is ignored too; they're competing for the same curve.
The toggle you should know about first
Both ⭐ StarSampler (Unified) and ⭐ Star Qwen2 Outpainter have a use_ltx_scheduler switch, and it's on by default in the outpainter. Flipping it builds the same payload internally, with a minimum of 20 steps and the token count read from the latent being sampled.
So what does the standalone node actually buy you? Explicit step control - the payload from this node wins outright, no 20-step floor and no climbing over the sampler widget - plus an explicit latent if you want to base the shift on a different resolution than the one being sampled, which mainly matters in upscale chains where pass two is at a different size. If you're happy with the toggle, you don't need this node. If you're chasing why your steps aren't doing what you told them, this is that knob.
Installing it
Pack-wide, so the same two routes as every StarNodes node.
ComfyUI Manager: search Starnodes, Install, restart.
Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/Starnodes2024/ComfyUI_StarNodes
cd ComfyUI_StarNodes
pip install -r requirements.txt
No model downloads for this one - it ships with the pack and runs on torch and ComfyUI's own model_sampling module. The rest of requirements.txt (psd-tools, opencv-python, imageio-ffmpeg, ollama, scikit-learn) belongs to the pack's PSD, video and utility nodes.
When it doesn't seem to do anything
Check the console. The sampler writes a line like dynamic shift 0.9432 for 16384 tokens, 40 steps when the patch lands, and an explicit warning when it doesn't. If you see the warning, your model isn't Flux-style flow sampling, or a detail schedule is in the way.
Don't reach for this at 1024² and below - the fixed shift is what the model was tuned for at native resolution. If you're comparing outputs, hold the seed and prompt and change only the step count, because the two paths disagree about steps by design.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| steps | INT | 401–100 | Number of sampling steps (official Qwen-Image-2.1 default is 40). Overrides the steps widget on the connected sampler node. |
| latentopt | LATENT | The latent being sampled - its spatial size defines the image token count used for the dynamic shift. If left unconnected the sampler uses its own latent. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| options | STARNODES_OPTIONS | — |