Nodes/SenseNova U1.5 (T8)/SenseNova 1.x Interleave
ComfyUI Node

SenseNova 1.x Interleave

SenseNova's text-and-pictures node

By T8mars·Created 24 days ago·Updated 12 days ago· 21
SenseNova 1.x Interleave
  • model
  • clip
  • positive
  • negative
  • sampler
  • sigmas
  • latent_image
  • samples
  • text
  • interleave_result
noise_seed0
cfg4.0
max_text_tokens1024
max_images4

Most of ComfyUI is one-shot: type a prompt, get an image, repeat. This node is the exception that earns the hype - it sits where a KSampler would and, instead of drawing one picture, the model writes and draws in turns. SenseNova U1.5 is natively multimodal: give it one prompt like "a three-step recipe for crispy fried chicken with a header image for each step" and it writes a paragraph, produces an image that matches, then keeps writing - with the picture it just made influencing what comes next. Storyboards, illustrated how-tos, comics with captions. That's "interleave," and it's what this model was built to do.

The pack is T8mars' local wrapper for the open 8B SenseNova U1.5. Despite the corporate-sounding name, nothing calls an API and there's no key - it all runs on your GPU, which is unusual for "native multimodal generation."

Where it sits in the graph

The clean way to read this pack is that the text side of the model is a language model and the picture side is a diffusion model, and this node is the bridge between them:

SenseNova Loader → SenseNova Sampling Options → MODEL/CLIP
SenseNova 1.x Text Encode (mode = interleave, pos & neg) → positive / negative
Empty SenseNova Pixel Latent → latent_image
KSamplerSelect + BasicScheduler → sampler / sigmas
           ↓
   SenseNova 1.x Interleave
   ├─ samples → VAE Decode → (feed images to Interleave Preview)
   ├─ text
   └─ interleave_result → SenseNova Interleave Preview

How it actually works

The mechanism is simpler than the wiring suggests. The node decodes text tokens autoregressively, one at a time, exactly like an LLM. The moment the model emits an "image start" token, it stops writing, runs a standard diffusion pass (your CFG, sampler, and sigmas from BasicScheduler) conditioned on everything written so far, then feeds the freshly generated image back into the positive and negative KV prefix. So the model can literally see what it just drew before deciding what to write next. It loops until end-of-text, max_images images, or max_text_tokens - no separate captioning call; the memory is built into the loop.

The inputs that matter

Most inputs are plumbing; only a few need your hands on them.

  • positive / negative - must both come from SenseNova 1.x Text Encode with mode = interleave. Wire either to a normal encoder and the node refuses to run with a clear error.
  • sampler / sigmas - standard KSamplerSelect + BasicScheduler, same as any custom-sampling graph. Recommended baseline: sampler euler, scheduler normal, 50 steps, CFG around 4, denoise 1.
  • latent_image - from Empty SenseNova Pixel Latent. This is pixel-space, not a normal VAE latent, and it has to be a single image. The node hard-errors if you hand it a batch - max_images is the knob for how many pictures you get, not batch size.
  • max_images (1–10, default 4) - how many pictures this session may produce. Each one costs a full diffusion run, so don't set it to 10 for fun.
  • max_text_tokens (1–8192, default 1024) - the text budget. Autoregressive decode is slow; the bigger this is, the longer you wait.

What comes out

  • samples (LATENT) - every generated image concatenated in order. VAE Decode it and save normally.
  • text (STRING) - the prose the model wrote, with image positions marked.
  • interleave_result - a custom type only SenseNova Interleave Preview understands. Feed it that so the text and images render in their true order instead of as two disconnected piles.

Installing

ComfyUI Manager is the easy road: search "SenseNova U1.5 (T8)" (registry id sensenova-u15-t8) and restart. Or the classic:

cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-SenseNova-U1.5-Wrapper-T8.git
pip install "gguf>=0.13.0"   # only if you cloned manually

Manager handles the gguf dependency for you but will not download the model - you need the ~35 GB SenseNova-U1.5-8B-MoT-BF16-T8.safetensors in models/diffusion_models/ (or a GGUF in models/gguf/), loaded through this pack's own Loader. CUDA + BF16 only, tested on 24 GB VRAM with 64 GB RAM; ComfyUI 0.31 or newer.

Where people get burned

  • Both conditioning branches must be interleave-mode. Forgetting the negative is the usual cause of its "requires positive and negative conditioning encoded with mode=interleave" error.
  • It's slow and it eats memory. Text decode runs on the same GPU as diffusion, and the interleave prefix KV cache is real VRAM. The first image has the worst cold-start cost. Start small and watch the memory readout.
  • Editing a SenseNova-generated image later? Don't reuse the generation seed for the edit pass - upstream confirmed that causes distribution drift and broken results. Change the seed.
  • Ready-made canvas workflows live in the repo (examples/interleave_workflow.json) - drag one in rather than rebuilding this graph by hand the first time.
Categorysampling/custom_sampling/SenseNova

Inputs (11)

NameTypeDefaultDescription
modelMODEL
clipCLIP
positiveCONDITIONING
negativeCONDITIONING
noise_seedINT00–18446744073709550000
cfgFLOAT4.00–100
samplerSAMPLER
sigmasSIGMAS
latent_imageLATENT
max_text_tokensINT10241–8192
max_imagesINT41–10

Outputs (3)

NameTypeDescription
samplesLATENT
textSTRING
interleave_resultSENSENOVA_INTERLEAVE_RESULT