Cubemap Faces Extract
Pull cube faces out of a 360° image
- image
- left
- front
- right
- back
- top
- bottom
Most people don't need a cubemap - they need a part of a cubemap. The Cubemap Faces Extract node is for when you have one 360° equirectangular image and you want six clean square images: left, front, right, back, top, bottom. It hands you all six as separate IMAGE outputs, and you decide what happens to each.
That's the whole trick of this node, and it's surprisingly useful. Once a panorama is split into faces you can upscale each face individually, run a per-face inpaint pass on a wall you don't like, or rebuild the scene in a game engine or Blender where cube maps are the native currency. It's also the friendlier version of building your own layout: instead of wrestling with the Flexible To-Cubemap node's stack output, you just get six labeled wires.
How it works
Under the hood this is the same face-rendering engine as the Equirectangular → Cubemap (3x2) node. For each face it figures out which view direction that face covers, walks every pixel back to the latitude/longitude on the sphere, and samples the equirectangular image there. The remap is done with OpenCV's cv2.remap and BORDER_WRAP, so longitude wraps around naturally and the faces meet up seamlessly when you put them back together.
The face order is fixed and matches the 3×2 atlas layout: top row is left, front, right; bottom row is back, top, bottom. Worth knowing because if you hand these six images to something that expects a different order, the scene looks like it fell apart mid-teleport.
Inputs and outputs that matter
Only one input is strictly required:
image- your equirectangular tensor (B,H,W,C) in [0,1], i.e. anything a Load Image or a VAE-decoded latent drops out.
Then the two you'll actually touch:
face_size- resolution per face, default 512, up to 4096. Each output will beface_size × face_size. If you plan to upscale or retexture, 1024+ keeps the pole regions from turning to mush.interpolation-lanczosby default and usually right: it's the sharpest of the four options. Drop tobilinearornearestonly when you're previewing at speed.
The outputs are exactly what the name promises: left, front, right, back, top, bottom, each an IMAGE. Wire them anywhere - Save Image, an upscaler, an inpaint node, a latent encode.
Installing it
Install the pack via ComfyUI Manager - search "LatLong" (pack title "ComfyUI LatLong - Equirectangular Image Processing Nodes") - or clone it yourself:
cd ComfyUI/custom_nodes
git clone https://github.com/cedarconnor/comfyui-LatLong
cd comfyui-LatLong
pip install -r requirements.txt
Then restart ComfyUI. Dependencies are numpy, opencv-python, scipy, torch, and Pillow - nothing exotic, and there are no model files to download. You'll find the node under the LatLong menu (this one sits directly under LatLong, not the LatLong/Cubemap subgroup where the Flexible variants live).
Gotchas
Six outputs means six wires. That's the feature, but it's also why this node exists alongside the atlas-style converter: if you just need one packed image to feed an engine, use Equirectangular → Cubemap (3x2) instead and skip the spaghetti.
The real gotcha is expectations about the top and bottom faces. The poles are where equirectangular projection stretches pixels the hardest, so top and bottom will look smeared at low face sizes. Treat them as the place to be generous with face_size, not the place to save memory.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | Equirectangular input image tensor (B,H,W,C) in [0,1]. | |
| face_sizeopt | INT | 51216–4096 | Resolution per cube face in pixels (each output will be face_size × face_size). |
| interpolationopt | COMBO | lanczos | Resampling quality: lanczos (highest), bicubic, bilinear, nearest (fastest). |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| left | IMAGE | — |
| front | IMAGE | — |
| right | IMAGE | — |
| back | IMAGE | — |
| top | IMAGE | — |
| bottom | IMAGE | — |