一图多视角
One image, eight prompts, eight angles — the lazy multi-view generator
- clip
- image
- vae
- cond_1
- cond_2
- cond_3
- cond_4
- cond_5
- cond_6
- cond_7
- cond_8
- latent
Its display name is 一图多视角, "one image, multiple angles" - and that's the whole pitch. You've got a single reference of a character or object and you want front view, side view, three-quarter, back, a close-up, a full-body, each with its own prompt. Normally you'd build N copies of an encode block. This node takes one image, up to eight prompts, and spits out eight separate conditionings plus one shared latent. It's the node behind the pack's "Lazy Person's Multi-angle View" example workflow, and honestly the name is earned: it turns a multi-angle sheet from a layout task into "type the angles, hit go."
How it works
The image is preprocessed exactly once - VAE-encoded into a reference latent and downscaled for the vision-language tokenizer - then each prompt is encoded sequentially against that same image. Sequential encoding matters on small cards: it keeps VRAM flat instead of encoding eight conditionings at once, which is the difference between this running and OOMing on an 8GB GPU.
Output is cond_1 through cond_8 plus a single latent. If you wire a vae in, the latent is the reference latent (so you're doing img2img-style editing from your source); without a VAE it's an empty latent sized for the model type. The 模型类型 (model type) dropdown here only offers Flux2 and SD / SDXL - no Qwen Layered - and 匹配原图尺寸 (match source size) plus 输出宽度/输出高度 (output width/height) control the working resolution.
Inputs and outputs that matter
Required: clip, image, and prompt数量 (prompt count, 2–8, default 4). Optional: vae, instruction, the size widgets, and prompt1–prompt8. Note the counter widget is labeled in Chinese - it's the one that decides how many of the eight cond outputs actually carry real conditioning.
The cleanest setup, straight from the example workflow: drop your reference into image, set the count, write the eight angle prompts, then feed each cond_N to its own sampler. All eight samplers share the single latent output, so every angle renders from the same starting point - that consistency is what makes the result read as "the same character from different angles" instead of eight unrelated images.
Gotchas
- The 匹配原图尺寸 / 输出尺寸 mismatch. If you leave match-source off and the output size doesn't match your sampler's expectations, angles come out cropped or upscaled weirdly. The example workflow turns match-source ON and sets 720×1280 - do that unless you have a reason.
- It needs a vision-language CLIP. Qwen2.5-VL or the Qwen3-4B that pairs with Flux 2 Klein. A plain SD CLIP fails at tokenize time because it can't accept images.
- Unused cond outputs are dummies. If your count is 4,
cond_5–cond_8are empty placeholder conditionings - don't wire them to samplers or you'll sample noise.
Installing it
It's part of the Toggle-Pass pack:
cd ComfyUI/custom_nodes
git clone https://github.com/electricty00/ComfyUI-Toggle-Pass
restart ComfyUI (or search "ComfyUI-Toggle-Pass" in ComfyUI Manager). No requirements.txt, no pip dependencies - just ComfyUI's bundled torch/PIL/numpy. Small personal pack, no community footprint to speak of, but this is its flagship workflow and it shows: the example workflows are in the repo and they work.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| image | IMAGE | — | |
| prompt数量 | INT | 42–8 | — |
| vaeopt | VAE | — | |
| instructionopt | STRING | Describe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate. | — |
| 模型类型opt | COMBO | Flux2 | 2 options: Flux2, SD / SDXL |
| 匹配原图尺寸opt | COMBO | OFF | 2 options: OFF, ON |
| 输出宽度opt | INT | 1024256–4096 | — |
| 输出高度opt | INT | 1024256–4096 | — |
| prompt1opt | STRING | — | |
| prompt2opt | STRING | — | |
| prompt3opt | STRING | — | |
| prompt4opt | STRING | — | |
| prompt5opt | STRING | — | |
| prompt6opt | STRING | — | |
| prompt7opt | STRING | — | |
| prompt8opt | STRING | — |
Outputs (9)
| Name | Type | Description |
|---|---|---|
| cond_1 | CONDITIONING | — |
| cond_2 | CONDITIONING | — |
| cond_3 | CONDITIONING | — |
| cond_4 | CONDITIONING | — |
| cond_5 | CONDITIONING | — |
| cond_6 | CONDITIONING | — |
| cond_7 | CONDITIONING | — |
| cond_8 | CONDITIONING | — |
| latent | LATENT | — |