ComfyUI Node

Cubemap Faces Extract

Pull cube faces out of a 360° image

By cedarconnor·Created about a year ago·Updated 7 months ago· 2
Cubemap Faces Extract
  • image
  • left
  • front
  • right
  • back
  • top
  • bottom
face_size512
interpolationlanczos

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 be face_size × face_size. If you plan to upscale or retexture, 1024+ keeps the pole regions from turning to mush.
  • interpolation - lanczos by default and usually right: it's the sharpest of the four options. Drop to bilinear or nearest only 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.

CategoryLatLong

Inputs (3)

NameTypeDefaultDescription
imageIMAGEEquirectangular input image tensor (B,H,W,C) in [0,1].
face_sizeoptINT51216–4096Resolution per cube face in pixels (each output will be face_size × face_size).
interpolationoptCOMBOlanczosResampling quality: lanczos (highest), bicubic, bilinear, nearest (fastest).

Outputs (6)

NameTypeDescription
leftIMAGE
frontIMAGE
rightIMAGE
backIMAGE
topIMAGE
bottomIMAGE