Nodes/ComfyUI-Tutu-360VR-Tools/TUTU In-Place Longitude Roll
ComfyUI Node

TUTU In-Place Longitude Roll

Spin a 360 frame sideways without doubling your RAM

By zhaotututu·Created 2 months ago·Updated 2 months ago· 0
TUTU In-Place Longitude Roll
  • image
  • IMAGE
degrees180
in_placetrue

This node is a one-liner with a hidden footgun, and if you're doing 360 VR outpainting you'll want it anyway. It's called "TUTU In-Place Longitude Roll", and all it does is slide an equirectangular frame left or right by some number of degrees - the equirect equivalent of panning the camera view around the sphere. In an outpainting pipeline you do that constantly: nudge the generated region into position, park the seam somewhere it won't be seen, or rotate the known source strip back under your composite. It's boring, and boring is the point.

An equirectangular frame is a 2:1 rectangle where the horizontal axis is longitude (0° to 360°). Rolling it by 180° is the "swap which half of the world sits at the seam" move. The node computes the pixel shift as width × degrees / 360 and does a simple horizontal roll on every frame. Nothing clever, no model, no VRAM spike.

The clever part is in the name. With in_place on (the default), it rolls each frame by copying pixels into the existing tensor buffer instead of allocating a whole new batch. When your frames are 4096×2048 and you've got a hundred of them in a batch, a fresh duplicate is real system RAM - and this pack exists specifically because LTX 2.3 360 workflows eat memory for breakfast. There's no magic here, just "don't allocate what you don't need."

Here's the footgun. in_place means the node mutates its input tensor. If anything else upstream is also reading that same image - a preview node, a branch you're comparing against - it will see the already-rolled frames. The README is blunt about it: this node should be the only consumer of its input image. If you need the original somewhere else, flip in_place to false and get a fresh rolled tensor instead.

The inputs you'll actually touch:

  • degrees - how far to roll, from -360 to 360. Default 180. Positive rolls one way, negative the other. At 0 or ±360 it's a no-op and returns the input untouched (fast path, no copy).
  • in_place (optional) - leave it true unless another node needs the same image.

That's it: image in, image out. There's a torch.no_grad() wrapper and it copies one frame at a time, so even long batches roll in seconds.

Installing it. This is one of three nodes in the ComfyUI-Tutu-360VR-Tools pack. Either search the pack title in ComfyUI Manager, or:

cd ComfyUI/custom_nodes
git clone https://github.com/zhaotututu/ComfyUI-Tutu-360VR-Tools.git

Restart ComfyUI. No extra Python dependencies - it's plain torch and comfy.utils, no model files to download.

Where it bites. The mutation trap is the whole troubleshooting section, honestly. If you roll a frame and the image downstream looks "wrong" in a place you didn't touch, check whether something else is consuming the same image tensor - that's almost certainly it. And don't expect this node to fix seam artifacts; it just moves longitude around. It's a utility that belongs between your outpaint and your composite, not a magic fix.

It's the simplest node in the pack, and the least likely to make you rage-quit. Set your degrees, wire it up, move on.

CategoryTUTU/360VR

Inputs (3)

NameTypeDefaultDescription
imageIMAGE
degreesFLOAT180-360–360
in_placeoptBOOLEANtrue

Outputs (1)

NameTypeDescription
IMAGEIMAGE