HunyuanWorld Text to Panorama
The HunyuanWorld Text to Panorama node
- panorama
- panorama_path
Type "a serene mountain lake at dawn, mist over the water" and this node hands you a full 360° equirectangular panorama. Not a flat image - a seam-free wrap-around view, 2:1, that the pack's next node can turn into layered 3D geometry you can actually move around in. It's the first stage of Tencent's HunyuanWorld 1.0, wrapped into ComfyUI by the krmahil/comfyui-hunyuan-world pack, and it's the node you reach for when you want to generate a place, not a picture.
Here's the honest framing before you go any further: this is not a lightweight toy. Behind the scenes it's a full FLUX.1-dev pipeline (the ~23 GB gated model from Black Forest Labs) with HunyuanWorld's PanoDiT-Text LoRA fused in, running in bfloat16 with model CPU offload and VAE tiling. First run downloads everything, and "first run" means 10–30 minutes of downloading before you see a single pixel. The payoff is a panorama nobody else can just prompt their way into.
How it works
The node loads Text2PanoramaPipelines from the hy3dworld package (that's HunyuanWorld-1.0 proper - see install below), points it at black-forest-labs/FLUX.1-dev, fuses the ~478 MB HunyuanWorld-PanoDiT-Text LoRA, then generates an equirectangular image at 960×1920 by default. Two knobs make it run on a normal GPU: fp8_quantization swaps the FLUX attention and GEMM processors for FP8 versions (the ~40 GB full-precision footprint drops to ~24 GB), and use_cache enables DeepCache, HunyuanWorld's caching trick that skips work on a schedule of timesteps to shave time and VRAM further (~20 GB).
The generated panorama is saved to a temp file and you get it back twice: as an IMAGE tensor for previewing, and as a file path string for the 3D stage.
Inputs and outputs that matter
Most of the dials are the usual diffusion suspects, but two deserve your attention.
prompt- required, multiline. This is the whole job. Describe the scene; the model thinks in scene language, so paint the light and the layout ("ancient temple courtyard, golden hour, fog") rather than dumping tags.guidance_scale- default 30. Yes, thirty. That would absolutely torch a normal FLUX image, but HunyuanWorld's pano pipeline is built around high CFG. Leave it alone until you have a specific reason not to.num_inference_steps- default 50. Fine where it is.blend_extend- default 6. Controls how the model blends the panorama's horizontal seam. If you see a visible seam at 0, this is what fixes it.fp8_quantization/use_cache- your VRAM budget. FP8 if you're under ~40 GB; both if you're on a 24 GB card.
Outputs: panorama (IMAGE - wire it into a Preview/Save node), and panorama_path (STRING). That string is the one the next node wants. HYWorldSceneGen takes a file path, not an image, so keep this wire.
Installing it
The node itself is the easy part. ComfyUI Manager has it as 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 real work, straight from the README: clone and install HunyuanWorld-1.0 so hy3dworld is importable, install Real-ESRGAN and the ZIM segmentation ONNX models, and log into HuggingFace - huggingface-cli login --token YOUR_TOKEN. FLUX.1-dev is gated: you must accept the license on the HF model page first or the download 401s.
Common issues
- "hy3dworld not available" on startup - you skipped the HunyuanWorld-1.0 install. The requirements.txt does not install it for you; that's a separate clone.
- Gated model / auth errors - accept the FLUX.1-dev license and re-login with a token.
- OOM - you're running full precision. Turn on
fp8_quantization, adduse_cache, or accept that this pipeline wants an A100-class card without them. - Slow first run - expected. ~23 GB of FLUX weights plus LoRAs download on the first queue.
One thing to know: the pack caches this FLUX pipeline in memory so your second call is fast, but it stays resident afterward. When you're done, run HYWorldUnloadModels to claw your VRAM back before loading something else.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| negative_promptopt | STRING | — | |
| seedopt | INT | 420–2147483647 | — |
| heightopt | INT | 960256–2048 | — |
| widthopt | INT | 1920512–4096 | — |
| 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 | — |