Generator node

Image Transform

Full geometric transformation of any image texture in one GPU pass: position, uniform and per-axis scale, rotation around a movable anchor, flip, skew and a projective perspective tilt — plus an artistic distortion layer with barrel/pincushion, twirl, bulge/pinch, wave and chromatic aberration, all animatable. Edge modes decide what lives beyond the source's borders, turning any image into an infinite scrolling or kaleidoscope-mirrored background.

Inputs

PortTypeDefault
ImageThe picture to transform. Cable any generator, camera or image node here; nothing connected leaves an empty frame.image—
EnableOff clears the output to fully transparent — downstream sees an empty frame, not the untouched source.booltrue
Position XSlides the picture sideways, in Grafit units where the shorter screen edge spans -1…1. Not limited; with Repeat or Mirror edges an animated value scrolls forever.float0
Position YSlides the picture up and down, in Grafit units. Not limited; drive it with an LFO for an endless vertical scroll.float0
ScaleUniform zoom applied on top of the per-axis scales. Clamped to 0.01…100; 1 is original size.float1
Scale XExtra horizontal stretch, multiplied with Scale. Clamped to 0.01…100.float1
Scale YExtra vertical stretch, multiplied with Scale. Clamped to 0.01…100.float1
RotationSpins the picture around the anchor, in degrees, positive going clockwise. Any value works — it simply keeps turning past 360.float0
Anchor XHorizontal pivot that rotation and scaling turn around, in Grafit units; 0 is the centre. Not limited, but the interesting range is inside the picture.float0
Anchor YVertical pivot for rotation and scaling, in Grafit units; 0 is the centre. Not limited.float0
Flip HorizontalMirrors the picture left to right, after all other transforms.boolfalse
Flip VerticalMirrors the picture top to bottom, after all other transforms.boolfalse
Skew XLeans the picture sideways, shifting rows more the further they are from the anchor. Clamped to ±2; ±0.5 is already a strong italic slant.float0
Skew YLeans the picture vertically, shifting columns by their distance from the anchor. Clamped to ±2.float0
Perspective XTilts the picture around the vertical axis so one side comes closer, like a card turned in space. Clamped to ±1.float0
Perspective YTilts the picture around the horizontal axis, laying the top or bottom away from you. Clamped to ±1.float0
Edge ModeWhat fills the area outside the source: Transparent, Clamp, Repeat or Mirror. Repeat or Mirror plus a moving Position gives an infinite tiling background; values outside the list snap to the nearest entry.int0
DistortLens bend: positive bulges the picture outward like a barrel, negative pinches it inward like a pincushion. Clamped to ±1.float0
TwirlSwirls the picture around its centre by this many degrees, fading out toward Twirl Radius. Clamped to ±1080, so up to three full turns.float0
Twirl RadiusHow far the swirl reaches from the centre, in Grafit units. Clamped to 0.05…4; small values twist only a tight core.float1
BulgeSpherizes the centre: positive pushes it out like a lens, negative sucks it in. Clamped to ±1.float0
Bulge RadiusSize of the bulge or pinch area, in Grafit units. Clamped to 0.05…4.float1
Wave AmountStrength of the flag or water ripple that bends the picture. Clamped to 0…1, where 1 displaces about a fifth of a unit.float0
Wave FrequencyHow many ripples fit across the picture — low is a slow flag wave, high is fine water chop. Clamped to 0.1…100.float10
Wave PhaseShifts the ripple along, in radians; animate it to make the wave travel. Any value works, one full cycle is about 6.28.float0
Chromatic AberrationSplits red and blue outward from the centre for a cheap lens look. Clamped to 0…1; even 0.2 is already visible on hard edges.float0

Outputs

PortType
ImageThe picture to transform. Cable any generator, camera or image node here; nothing connected leaves an empty frame.image
Widthfloat
Heightfloat

Live Preview

Interactive — Twirl, tile and wave distortions cycling

How It Works

Image Transform is an image-in / image-out filter on the generator contract: Image in, transformed Image out, computed by a single inverse-mapping compute kernel — for every destination pixel the kernel asks "which source position lands here?", walks the transform chain backwards, and samples the source with bilinear filtering. One thread per pixel, no geometry, no intermediate passes.

Work happens in centered, aspect-corrected content coordinates (the Grafit convention: origin at the image center, Y up, shorter edge spanning [-1, 1]). The inverse chain runs: translate → anchor → rotation (positive degrees = clockwise) → perspective → skew → scale → un-anchor, then the nonlinear distortions (twirl, bulge, lens distort, wave), then flips, and finally the resulting source position is converted to texture coordinates and passed through the Edge Mode:

ValueEdge ModeOutside the source you see
0TransparentNothing — samples outside are dropped (transparent)
1ClampEdge pixels smeared outward
2RepeatThe image tiled infinitely
3MirrorThe image tiled with alternating mirroring — seamless

The distortion layer, applied after the affine chain:

  • Distort — lens distortion: positive bulges outward (barrel), negative pinches inward (pincushion), strength growing with distance² from center.
  • Twirl — rotation angle (in degrees, up to ±1080° = three turns) that falls off smoothly from the center to Twirl Radius; outside the radius the image is untouched.
  • Bulge — spherize: positive magnifies the center (bulge), negative shrinks it (pinch), within Bulge Radius.
  • Wave — two crossed sine displacements (Wave Frequency controls ripple density); animate Wave Phase with an LFO for flag/water motion.
  • Chromatic Aberration — samples red, green and blue at slightly different radial scales (up to ±3% at full strength); red spreads outward, blue inward, alpha taken from the center (green) tap — the classic cheap-lens fringe.

The output texture fills the viewport (the transform can move content anywhere), so Width/Height report the viewport-fit size in Grafit units, and the output is premultiplied alpha like every generator. Enable = false or a disconnected source clears the texture, so Canvas never shows a stale frame.

Parameters in Depth

Affine chain

PortDefaultRangeMeaning
Image——Source texture
Enabletrue—Off clears the output
Position X0Grafit unitsHorizontal offset
Position Y0Grafit unitsVertical offset
Scale10.01 … 100Uniform scale, multiplied with the per-axis scales
Scale X10.01 … 100Horizontal scale
Scale Y10.01 … 100Vertical scale
Rotation0degreesPositive = clockwise, around the anchor
Anchor X0Grafit unitsPivot for rotation/scale/skew (0,0 = image center)
Anchor Y0Grafit unitsPivot Y
Flip Horizontalfalse—Mirrors left/right
Flip Verticalfalse—Mirrors up/down
Skew X0−2 … +2Horizontal shear (x shifted by y)
Skew Y0−2 … +2Vertical shear
Perspective X0−1 … +1Projective tilt around the vertical axis — one side recedes
Perspective Y0−1 … +1Projective tilt around the horizontal axis
Edge Mode00–3Transparent / Clamp / Repeat / Mirror

Distortions

PortDefaultRangeMeaning
Distort0−1 … +1Barrel (+) / pincushion (−) lens distortion
Twirl0−1080 … +1080Twirl angle in degrees, falling off from center
Twirl Radius10.05 … 4Radius of the twirl influence (shown when Twirl ≠ 0)
Bulge0−1 … +1Bulge (+) / pinch (−) spherize
Bulge Radius10.05 … 4Radius of the bulge influence (shown when Bulge ≠ 0)
Wave Amount00 … 1Sine displacement amplitude
Wave Frequency100.1 … 100Ripple density
Wave Phase0anyRipple offset — drive with an LFO for motion
Chromatic Aberration00 … 1Radial RGB split, up to ±3% channel scale

Interactions: Scale multiplies with Scale X/Scale Y, so use Scale for animation and the per-axis pair for fixed aspect correction. The anchor is shared by rotation, perspective, skew and scale — moving it to a corner makes rotation swing the image around that corner. Distortions act on the already transformed image, so a rotated image twirls around the (transformed) view center.

Use Cases

  • Infinite scrolling background: Image node → Image Transform (Edge Mode = Repeat, Time → Position X) → Canvas — any texture becomes an endless conveyor; Mirror mode makes non-tileable images seamless.
  • VJ kaleidoscope warp: Camera Input → Image Transform (Audio FFT → Twirl, Edge Mode = Mirror, some Bulge) → Canvas.
  • Water / flag ripple: any generator → Image Transform (Wave Amount 0.3, LFO → Wave Phase) → Canvas; lower Wave Frequency for slow swells, raise for shimmering.
  • Fake 3D card tilt: Image node → Image Transform (Mouse Position → Perspective X/Perspective Y, slight Rotation) → Canvas — a poster that leans toward the cursor.
  • Retro lens look: Video Player → Image Transform (Distort 0.2, Chromatic Aberration 0.4) → Image Adjustment (vignette, grain) → Canvas.
  • Ken Burns moves: slow LFOs on Scale and Position X/Y over a photo, Edge Mode = Clamp to avoid revealing borders.

Tips

  • The result is an offscreen texture — route it through a Canvas node to appear on screen; chain it with Image Adjustment or Composite freely, each stays one GPU pass.
  • Because sampling is inverse-mapped and bilinear, extreme minification (Scale far below 1, or heavy perspective) can shimmer — there is no mipmapping; keep motion smooth or add softness downstream.
  • Edge Mode = Transparent plus a downscaled image gives you a floating picture with real transparency around it — mask- and composite-friendly since everything stays premultiplied.
  • For pure placement on the viewport (position/rotation/size with 3D depth), the Canvas node's own transform is cheaper; reach for Image Transform when you need skew, perspective, tiling edges, or any of the distortions baked into the texture itself.
  • Twirl accepts up to ±1080° — three full revolutions — which at high values with Edge Mode = Mirror produces dense spiral marbling.
  • All parameters are plain float/int/bool ports: everything here is animatable per frame from LFO, Audio, Time or Mouse nodes.

Open Image Transform in the interactive catalog →

Image Transform is one of 381 nodes in Grafit Pro.

Free download. Every feature for 7 days, no card. Then €99.99 once — or keep playing your projects as a Player.

More Generator nodes