HunyuanWorld Image to Panorama
The HunyuanWorld Image to Panorama node
- image
- panorama
- panorama_path
You have one photo of a place - a friend's apartment, a location scout still, a render you like - and you want the rest of the universe around it. That's this node. HYWorldImage2Pano takes a single perspective image, figures out what's behind and to the sides, and hallucinates the missing 360° into a seam-free equirectangular panorama. It's the image-in variant of the pack's text-in panorama node, and it's the more impressive trick of the two: given a decent source, the results feel like someone handed you a 360° camera that was pointed at your scene.
How it works
The heavy lifting is a FLUX.1-Fill-dev inpainting pipeline (black-forest-labs/FLUX.1-Fill-dev, also gated, also ~23 GB) with HunyuanWorld's PanoDiT-Image LoRA fused in. The clever part is the geometry, which the node does for you: your source image is resized to match the fov you declare, projected into equirectangular space (that's the Perspective → GetEquirec step), and the empty region is turned into an inpaint mask. The model then fills everything the mask covers - and it has to match the source's perspective, lighting, and style, which is exactly why an inpainting-tuned FLUX is the base. It also quietly appends its own quality prompt ("high-quality, high-resolution, sharp, 8k") and a negative that bans people and mess, so you don't have to.
Inputs and outputs that matter
image- required. Any IMAGE tensor you can produce: Load Image, a render, a screenshot.fov- default 80, range 30–180. This is the one to get right. It tells the node how wide your source photo is, and it drives the whole projection. A typical phone photo is roughly 65–75°; a game screenshot with a narrow lens might be 50. Say 120 when your lens is actually 70 and the model will warp the source before it even starts.prompt- optional text guidance. Handy for steering what the model fills in ("dense forest continues," "city skyline"). Empty is fine.height/width- panorama size, default 960×1920. Height tops out at 2048, width at 4096.guidance_scale- default 30 again, the HunyuanWorld house style. Don't dial it to 7 because FLUX told you so.blend_extend,fp8_quantization,use_cache- the seam blending and VRAM knobs, same as the text node.
Outputs: panorama (IMAGE) and panorama_path (STRING). Keep the string - HYWorldSceneGen wants a file path to feed the 3D stage.
Installing it
Same pack install as the rest: ComfyUI Manager → HunyuanWorld 3D World Generation, or
cd ComfyUI/custom_nodes
git clone https://github.com/krmahil/comfyui-hunyuan-world.git
pip install -r comfyui-hunyuan-world/requirements.txt
Then the pack prerequisites: HunyuanWorld-1.0 installed so hy3dworld imports, Real-ESRGAN, the ZIM segmentation models, and a HuggingFace login with the FLUX.1-Fill-dev license accepted. First run downloads the Fill model plus the ~478 MB PanoDiT-Image LoRA - budget 10–30 minutes.
Common issues
- The source image looks warped -
fovis wrong for your source. Measure or guess tighter before blaming the model. - Seam or lighting mismatch - nudge
blend_extendup, and give the prompt a hint about the scene continuing. - Gated model errors - accept FLUX.1-Fill-dev on HuggingFace and log in; it's a different gated repo from FLUX.1-dev, so accepting one doesn't grant the other.
- OOM - same story as the text node: FP8 (
fp8_quantization) gets you to ~24 GB, addinguse_cache(DeepCache) to ~20 GB. Without them you need ~40 GB.
Both FLUX pipelines (dev and Fill-dev) stay cached in memory after their first use - if you run this node and the text node in the same session, that's ~46 GB of models parked in VRAM. Throw a HYWorldUnloadModels at the end of the graph when you're done.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| promptopt | STRING | — | |
| negative_promptopt | STRING | — | |
| seedopt | INT | 420–2147483647 | — |
| heightopt | INT | 960256–2048 | — |
| widthopt | INT | 1920512–4096 | — |
| fovopt | INT | 8030–180 | — |
| guidance_scaleopt | FLOAT | 30.01–50 | — |
| num_inference_stepsopt | INT | 5010–100 | — |
| blend_extendopt | INT | 60–20 | — |
| fp8_quantizationopt | BOOLEAN | false | — |
| use_cacheopt | BOOLEAN | false | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| panorama | IMAGE | — |
| panorama_path | STRING | — |