Nodes/ComfyUI_pytorch360convert_video/Create360SweepVideoFramesTensorNode
ComfyUI Node

Create360SweepVideoFramesTensorNode

Get your 360° sweep as a tensor, if your RAM can take it

By ProGamerGov·Created 10 months ago·Updated 10 months ago· 13
Create360SweepVideoFramesTensorNode
  • image
  • Video Frames
width1920
height1080
fps60
duration_per_image5.00
total_duration0.00
fov_h120.00
fov_w100.00
speed_profileconstant
interpolation_modebilinear
vertical_modenone
vertical_amplitude_deg15.00
vertical_patternsine
vertical_pole_fraction0.50
start_yaw_deg0.00
end_yaw_deg360.00

The sibling node in ComfyUI_pytorch360convert_video does the same sweep as Create360SweepVideoFramesNode - same yaw rotation, same FOV controls, same speed and vertical-motion options - but it hands you the finished frames back as a single IMAGE tensor instead of dumping hundreds of PNGs to disk. It's the version you reach for when the sweep is a step inside a bigger workflow rather than the final output.

When you'd use it

The save-to-disk node is terminal; this one is a pass-through. You feed it one equirectangular image, it returns a Video Frames tensor of shape (N, H, W, C) - every frame of the sweep stacked into one tensor - and from there the frames can go anywhere an image sequence goes: into a VAE encode to feed an image-to-video model, into a frame-preview node, or into your own video-save setup. Because it never touches the filesystem, it also makes long sweeps reproducible inside a single workflow: run it twice and the only thing you've created is the stack.

The catch is spelled out right in the README: "Only use this node if you have a lot of extra memory available." Each 1080p frame is roughly 25 MB as a float tensor, so the default 5 seconds at 60fps (300 frames) is about 7.5 GB of RAM sitting in that one tensor. That's the whole trade - you're paying for the convenience of not writing files, and the price is memory. Drop to 30fps or shorter durations if your box groans.

What you actually set

Inputs mirror the disk-save node minus the file-related ones (no output_dir, filename_prefix, or save_format):

  • image - the equirectangular image. Singular: this node expects a single image per run, unlike the batch-friendly sibling.
  • width / height and fov_h / fov_w - same as the other node, and same trap. For undistorted output, keep fov_h / fov_w equal to width / height. Defaults (120/100 FOV on a 16:9 frame) will stretch your image vertically. For 1080p, pair fov_h=120 with fov_w=67.5.
  • duration_per_image, fps, and total_duration - define the frame count. total_duration > 0 overrides duration_per_image and splits the time across images.
  • speed_profile - constant for a steady spin, ease_in_out for a slow-in/slow-out camera move.
  • vertical_mode - none, during (sine or linear pitch motion while rotating), or separate (appends a pole sweep from -85° to +85° at the center yaw). The vertical_* parameters only matter when this isn't none.
  • interpolation_mode - bilinear (default), bicubic, or nearest, for how the equirectangular source is sampled.

The single output, Video Frames, is an IMAGE tensor with one batch entry per frame, in the order the sweep was rendered. Wire it into whatever downstream expects a frame sequence.

Install and quirks

Same pack, same install: ComfyUI Manager → search "pytorch360convert", or:

cd ComfyUI/custom_nodes
git clone https://github.com/ProGamerGov/ComfyUI_pytorch360convert_video

The only dependency is the small pytorch360convert PyPI package, installed automatically. Restart and the node appears under pytorch360convert/video. No model files, no keys.

Two things to remember. First, this is the node that will eat your RAM - if you mostly just want a video file at the end, use the save-to-disk sibling and assemble with FFmpeg instead. Second, rendering happens on CPU by default, so very long sweeps are compute-bound: keep durations short while you're dialing in the FOV and speed, then render the real one last. When it all clicks, you've got a full camera orbit inside your graph with zero Blender involvement.

Categorypytorch360convert/video

Inputs (16)

NameTypeDefaultDescription
imageIMAGEInput equirectangular images (BHWC tensor).
widthINT1920Output frame width (pixels). Should match fov_w:fov_h ratio for best results.
heightINT1080Output frame height (pixels). Should match fov_w:fov_h ratio for best results.
fpsINT60Frames per second.
duration_per_imageFLOAT5.00Seconds per 360° sweep (per input image).
total_durationFLOAT0.00Total duration for all images (overrides duration_per_image if >0).
fov_hFLOAT120.00Horizontal FOV (degrees). Should match width:height ratio for best results.
fov_wFLOAT100.00Vertical FOV (degrees). Should match width:height ratio for best results.
speed_profileCOMBOconstantYaw speed profile.
interpolation_modeCOMBObilinearSampling mode for equirectangular to projection.
vertical_modeCOMBOnoneVertical movement mode. Only used if vertical_mode is not set to None.
vertical_amplitude_degFLOAT15.00Amplitude in degrees for vertical motion. Only used if vertical_mode is not set to None.
vertical_patternCOMBOsinePattern for vertical motion. Only used if vertical_mode is not set to None.
vertical_pole_fractionFLOAT0.50Fraction of frames for separate pole sweep. Only used if vertical_mode is not set to None.
start_yaw_degFLOAT0.00Starting yaw angle (degrees).
end_yaw_degFLOAT360.00Ending yaw angle (degrees).

Outputs (1)

NameTypeDescription
Video FramesIMAGE