Create360SweepVideoFramesTensorNode
Get your 360° sweep as a tensor, if your RAM can take it
- image
- Video Frames
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/heightandfov_h/fov_w- same as the other node, and same trap. For undistorted output, keepfov_h / fov_wequal towidth / height. Defaults (120/100 FOV on a 16:9 frame) will stretch your image vertically. For 1080p, pairfov_h=120withfov_w=67.5.duration_per_image,fps, andtotal_duration- define the frame count.total_duration > 0overridesduration_per_imageand splits the time across images.speed_profile-constantfor a steady spin,ease_in_outfor a slow-in/slow-out camera move.vertical_mode-none,during(sine or linear pitch motion while rotating), orseparate(appends a pole sweep from -85° to +85° at the center yaw). Thevertical_*parameters only matter when this isn'tnone.interpolation_mode-bilinear(default),bicubic, ornearest, 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.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | Input equirectangular images (BHWC tensor). | |
| width | INT | 1920 | Output frame width (pixels). Should match fov_w:fov_h ratio for best results. |
| height | INT | 1080 | Output frame height (pixels). Should match fov_w:fov_h ratio for best results. |
| fps | INT | 60 | Frames per second. |
| duration_per_image | FLOAT | 5.00 | Seconds per 360° sweep (per input image). |
| total_duration | FLOAT | 0.00 | Total duration for all images (overrides duration_per_image if >0). |
| fov_h | FLOAT | 120.00 | Horizontal FOV (degrees). Should match width:height ratio for best results. |
| fov_w | FLOAT | 100.00 | Vertical FOV (degrees). Should match width:height ratio for best results. |
| speed_profile | COMBO | constant | Yaw speed profile. |
| interpolation_mode | COMBO | bilinear | Sampling mode for equirectangular to projection. |
| vertical_mode | COMBO | none | Vertical movement mode. Only used if vertical_mode is not set to None. |
| vertical_amplitude_deg | FLOAT | 15.00 | Amplitude in degrees for vertical motion. Only used if vertical_mode is not set to None. |
| vertical_pattern | COMBO | sine | Pattern for vertical motion. Only used if vertical_mode is not set to None. |
| vertical_pole_fraction | FLOAT | 0.50 | Fraction of frames for separate pole sweep. Only used if vertical_mode is not set to None. |
| start_yaw_deg | FLOAT | 0.00 | Starting yaw angle (degrees). |
| end_yaw_deg | FLOAT | 360.00 | Ending yaw angle (degrees). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Video Frames | IMAGE | — |