Nodes/RyanOnTheInside/Flex Image Parallax βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
ComfyUI Node

Flex Image Parallax βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

Shift an image in x/y/z, feature-driven, with or without a depth map

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Flex Image Parallax βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
  • images
  • opt_feature
  • depth_map
  • IMAGE
β—„strength1.00β–Ί
β—„feature_threshold0.00β–Ί
β—„feature_paramβ–Ύβ–Ί
β—„feature_moderelativeβ–Ί
β—„shift_x0.10β–Ί
β—„shift_y0.10β–Ί
β—„shift_z0.10β–Ί

This is the pack's own lightweight parallax node: shift an image along x, y, or z, optionally guided by a depth map, and optionally driven live by a Feature signal instead of a fixed value. It's the same underlying technique that dedicated tools like DepthFlow are built entirely around - depth-based pixel displacement to fake camera movement - just folded into this pack's Flex Feature system rather than shipped as its own standalone animation engine.

How it works

Without a depth map, the shift is a straightforward 2D pan-and-push on the flat image. Feed in an optional depth_map, and the node uses it to displace pixels with actual near/far separation - the illusion of a camera drifting through a 3D scene rather than the image just sliding around. shift_x, shift_y, and shift_z each take a value from -1.0 to 1.0; wire a Feature into opt_feature and feature_param picks which one of those three that signal drives, with feature_mode deciding whether it's a relative offset or an absolute scale from zero, gated by feature_threshold.

Inputs and outputs that matter

  • images and the shift values: shift_x, shift_y, shift_z (all -1.0 to 1.0, default 0.1).
  • strength (0-1, overall multiplier) and feature_param (shift_x/shift_y/shift_z/None).
  • Optional: depth_map (IMAGE, for true 3D parallax instead of a flat shift) and opt_feature (FEATURE, the modulation input).

Output is a single IMAGE.

The one thing worth knowing before you use it

Depth-based parallax has a structural ceiling regardless of which node produces it: a depth map only describes what the original camera saw. Push the virtual camera far enough and you're asking for pixels that were never captured - the community consensus on this, echoed straight from people who use the dedicated DepthFlow tool for exactly this effect, is blunt: "the motion needs to be subtle because it has its limitations and if you push it too far the image starts tearing." That's not specific to this node, it's the technique itself - keep shift_z especially modest unless you're deliberately going for an overt zoom/push effect rather than a subtle drift.

If you want a dedicated, deeper parallax pipeline with motion presets, this pack's own README points at the external Depthflow Nodes pack as a compatible companion (it also plugs into this pack's Feature system). Use this node when you want a quick parallax touch inside a graph that's already built around Flex Features; reach for a dedicated parallax pack when parallax is the whole point.

Installing it

ComfyUI Manager: search RyanOnTheInside, install, restart. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside
cd ComfyUI_RyanOnTheInside
pip install -r requirements.txt

No model downloads - you'll need a depth map from a separate depth estimator node if you want the 3D version.

Where people get burned

Without depth_map plugged in, don't expect real parallax - you'll get a flat shift that reads as a pan, not depth. And matching resolution between depth_map and images matters here just like it does everywhere depth maps are used; a mismatch shows up as misaligned displacement rather than a clean error.

CategoryRyanOnTheInside/FlexFeatures/Targets/Images

Inputs (10)

NameTypeDefaultDescription
strengthFLOAT1.000–1Overall strength of the effect (0.0 to 1.0) Higher values create more dramatic changes, while lower values are more subtle.
feature_thresholdFLOAT0.000–1Minimum feature value to trigger the effect (0.0 to 1.0) Only applies the effect when the feature value exceeds this threshold. Lower values make the effect more sensitive, higher values make it more selective.
feature_paramCOMBOChoose which parameter to modulate: - shift_x: Dynamically adjust horizontal movement - shift_y: Dynamically adjust vertical movement - shift_z: Dynamically adjust depth movement - None: No parameter modulation
feature_modeCOMBOrelativeHow to apply the feature modulation: - relative: Changes are centered around the original value - absolute: Changes scale directly from zero to the maximum
imagesIMAGEInput image sequence to be processed (IMAGE type)
shift_xFLOAT0.10-1–1Horizontal shift factor for the parallax effect (-1.0 to 1.0)
shift_yFLOAT0.10-1–1Vertical shift factor for the parallax effect (-1.0 to 1.0)
shift_zFLOAT0.10-1–1Z-axis shift factor for the parallax effect (-1.0 to 1.0)
opt_featureoptFEATUREOptional feature input for modulation Connect any feature node here to control the effect. Features can come from audio, motion, color, or other sources.
depth_mapoptIMAGEOptional depth map for 3D parallax effect

Outputs (1)

NameTypeDescription
IMAGEIMAGEβ€”