SenseNova 1.x Interleave
SenseNova's text-and-pictures node
- model
- clip
- positive
- negative
- sampler
- sigmas
- latent_image
- samples
- text
- interleave_result
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 Encodewithmode = 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: samplereuler, schedulernormal, 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_imagesis 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 Decodeit and save normally. - text (STRING) - the prose the model wrote, with image positions marked.
- interleave_result - a custom type only
SenseNova Interleave Previewunderstands. 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.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| noise_seed | INT | 00–18446744073709550000 | — |
| cfg | FLOAT | 4.00–100 | — |
| sampler | SAMPLER | — | |
| sigmas | SIGMAS | — | |
| latent_image | LATENT | — | |
| max_text_tokens | INT | 10241–8192 | — |
| max_images | INT | 41–10 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| samples | LATENT | — |
| text | STRING | — |
| interleave_result | SENSENOVA_INTERLEAVE_RESULT | — |