Nodes/SenseNova U1.5 (T8)/SenseNova Sampling Options
ComfyUI Node

SenseNova Sampling Options

The Easiest Node to Skip and the One You Can't — SenseNova's shift

By T8mars·Created 24 days ago·Updated 12 days ago· 21
SenseNova Sampling Options
  • model
  • MODEL
shift3.00

Every SenseNova workflow is Loader → SenseNova Sampling Options → KSampler, and this is the node beginners delete because it looks like a no-op. It isn't. SenseNova Sampling Options is what makes the model actually sample correctly - skip it and feed the raw loader output to a sampler and you'll get soft, off-character results that make you think the model is broken.

It does two jobs, and both matter.

Job one: the timestep shift

SenseNova U1.5 is a flow-matching model, and flow models want a shift knob: it controls how sampling effort is distributed between composition (early steps) and detail (late steps). It's basically the flow-matching replacement for picking a scheduler, and it's model-specific. The KB notes Z-Image Turbo wants 7, Flux wants its own values - SenseNova wants 3, and 3 is the default here. Leave it at 3 unless you're deliberately experimenting.

The implementation detail worth knowing: it patches the model with its own ModelSamplingDiscreteFlow subclass using the standard time_snr_shift math, while preserving the upstream sigma trajectory. In plain English - your chosen step count and scheduler behave normally; the shift just re-buckets the same trajectory. It also scales initial noise by resolution, so cranking to 2048×2048 doesn't quietly hand the sampler a canvas it was never tuned for.

Job two: the KV cache

This is the hidden speed win. SenseNova's text and reference-image prefixes are identical at every denoising step, so the pack caches those prefix keys and values for the duration of a single sampling job - later steps reuse them instead of re-encoding your references from scratch. For batch generation it goes further: the text/reference prefix is computed once per guidance branch, and only the small per-layer KV tensors are expanded across your 16 variants, rather than re-encoding the whole reference set sixteen times.

Two reassuring details from the source: the cache is execution-local - it's cleared when the job finishes, errors, or is cancelled, so it never hogs VRAM between runs - and the author verified cached vs. non-cached three-branch edits are element-wise identical. It's a pure speed optimization, not a quality gamble.

Wiring

Feed it the MODEL out of SenseNovaU15Loader, and take the MODEL output to your sampler. In the simple img_cfg=1 editing path that's a plain KSampler. In the custom-sampling path it matters more: the same MODEL output from this node has to go to both SenseNovaEditGuider and BasicScheduler - they need to be patched identically or the guider and scheduler disagree about the model.

Inputs are just model and shift (0.01–100, step 0.01). That's the entire surface.

Install

It ships with the pack, so it's one install for everything: search "SenseNova U1.5 (T8)" in ComfyUI Manager, or

cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-SenseNova-U1.5-Wrapper-T8.git

then restart. No extra Python dependencies, and the nodes never download models at runtime. If you're seeing washed-out or structurally wrong output from SenseNova, your first check shouldn't be CFG or the prompt - it should be whether this node is between the loader and the sampler.

Categorymodel/patch/SenseNova

Inputs (2)

NameTypeDefaultDescription
modelMODEL
shiftFLOAT3.000.01–100

Outputs (1)

NameTypeDescription
MODELMODEL