Nodes/Comfyui-Qwen-Image-2.1-MultiAngle-T8/Comfyui-Qwen-Image-2.1-MultiAngle-T8
ComfyUI Node

Comfyui-Qwen-Image-2.1-MultiAngle-T8

Pick the camera angle before you spend a sampler run

By T8mars·Created 24 days ago·Updated 3 days ago· 85
Comfyui-Qwen-Image-2.1-MultiAngle-T8
  • reference_image
  • structure_image
  • actor_references
  • pose_keypoints
  • guide_image_2
  • prompt
  • scene_json
  • anyangle_lora_strength
◄snapshot►

You have one good photo of a character. You want the same character, same jacket, same light, shot from three-quarters instead of straight on. The Multiple-Angles LoRA on Qwen-Image-Edit made that a slider in late 2025, but you're aiming blind: type a number, wait 20 steps, discover you got a slightly different person at slightly the wrong angle.

AnyAngle Studio's pitch is that you aim first. Open the node, it reconstructs your subject as a 3D gaussian splat locally, you orbit it until the framing is right, and only then does Qwen render. The guide image it hands downstream is a clean render of that camera position, not a vague prompt.

What it actually does

There are two halves, and only one of them is a ComfyUI node.

The node is small on purpose. Its only required input is snapshot, a JSON token pointing at a scene document under ComfyUI/input/anyangle_studio/. When the graph runs it loads the guide PNG you applied and emits it as guide_image_2, plus the canned prompt, the raw scene_json, and anyangle_lora_strength - 1.0 in AnyAngle mode, 0.0 in base-model mode.

The workbench is a WebGL iframe the frontend extension opens when you click the node. Reconstruction there is real native ComfyUI TripoSplat: a graph gets submitted to /prompt - load your image, cut the subject out with BiRefNet, preprocess, condition, sample, decode to 262,144 gaussians, and save a Gaussian PLY. Then you drag the camera. The other modes are simpler: DWPose gives you the original's skeleton, Depth Anything 3 Small gives you depth, and Canny edges are computed in the browser for free.

That split is the whole design, and it explains the weird bits. Pose, depth and Canny extracted from the original stay at the original camera - they can't rotate, they're 2D facts. Only the splat, an imported GLB, or the bundled MakeHuman doll can be re-aimed.

The inputs and outputs that matter

reference_image is your original. Connect it twice: here, and to the encoder's image_1. structure_image is optional and only used in base-model mode with pose/depth/Canny - the tooltip says "Optional OpenPose, Depth Anything or Canny image for the base-model guide."

Wire the outputs into a Qwen Image 2.1 graph: guide_image_2 → image_2 on TextEncodeQwenImage21, prompt → prompt, and anyangle_lora_strength → strength_model on the loader. The author's example workflow is the answer key - original at image_1, guide at image_2, KSampler at 20 steps, CFG 3, euler/simple, prompt Change the camera angle from <image2> to <image1>. In base-model mode the node swaps in a canned structure-following prompt instead; you don't write these.

Installing it

ComfyUI Manager, search Comfyui-Qwen-Image-2.1-MultiAngle-T8 (registry ID qwen-image-21-multiangle-t8). If the release isn't listed yet, git it:

cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-Qwen-Image-2.1-MultiAngle-T8.git ComfyUI-AnyAngle-Studio-T8
cd ComfyUI-AnyAngle-Studio-T8
python -m pip install -r requirements.txt   # onnxruntime, opencv-python-headless, huggingface_hub
python install_assets.py --download-lora    # MakeHuman doll + QI2.1_AnyAngle.safetensors
python install_reconstruction.py            # ~3.78 GB of TripoSplat weights

That folder name isn't cosmetic. Name it Comfyui-Qwen-Image-2.1-... and the frontend truncates the source label at the decimal, so every node reads Comfyui-Qwen-Image-2. Use the dotless directory; renaming an existing install is safe.

You need a ComfyUI with native Qwen Image 2.1, TripoSplat, BiRefNet and DINOv3 nodes - 0.36.0 is what the author verified - plus WebGL hardware acceleration in your browser. The Qwen Image 2.1 UNET, Qwen3-VL 8B encoder and VAE you supply yourself (swap the workflow's example filenames for whatever compatible weights you have). DWPose (~351 MB) downloads on your first pose extraction, DA3 Small (~137 MB) on your first depth click.

Where people get burned

  • snapshot is empty. The node refuses to run. Open the workbench and apply a shot first.
  • You changed the source image after applying. It errors rather than silently mixing a new photo with an old splat. Rebuild.
  • Your workflow moved to another machine and came back blank. Scenes, coarse renders and splats live in ComfyUI/input/anyangle_studio/. Copy that folder with the workflow.
  • Exports looked zoomed or cropped on a high-DPI display. Fixed in 1.0.2; close the workbench, Ctrl+F5, and re-apply.
  • MakeHuman asset: HTTP 404. git pull in the node folder, then python install_assets.py.
  • You expected a ControlNet. There isn't one. The structure image goes to the encoder as an image reference, so a pose map is a suggestion to a strong edit model, not a hard constraint.
  • Single-image reconstruction guesses. Sides and back that weren't in the photo are the model's invention. The experimental "keep background" mode feeds the whole frame to TripoSplat, which is not a room scanner - walls and occluded areas warp at steep angles.

Batch jobs need a Save Image connected; results land in ComfyUI/output/. Verified on a 24 GB RTX 5090 Laptop. And one warning from the author worth repeating: the /anyangle-studio/* routes live inside your ComfyUI server, which has no login of its own.

CategoryT8/AnyAngle

Inputs (5)

NameTypeDefaultDescription
snapshotSTRING—
reference_imageoptIMAGE—
structure_imageoptIMAGE—
actor_referencesoptCOMFY_AUTOGROW_V3—
pose_keypointsoptPOSE_KEYPOINT—

Outputs (4)

NameTypeDescription
guide_image_2IMAGE—
promptSTRING—
scene_jsonSTRING—
anyangle_lora_strengthFLOAT—