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
| Port | Type | Default |
|---|---|---|
| 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. | bool | true |
| 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. | float | 0 |
| Position YSlides the picture up and down, in Grafit units. Not limited; drive it with an LFO for an endless vertical scroll. | float | 0 |
| ScaleUniform zoom applied on top of the per-axis scales. Clamped to 0.01…100; 1 is original size. | float | 1 |
| Scale XExtra horizontal stretch, multiplied with Scale. Clamped to 0.01…100. | float | 1 |
| Scale YExtra vertical stretch, multiplied with Scale. Clamped to 0.01…100. | float | 1 |
| RotationSpins the picture around the anchor, in degrees, positive going clockwise. Any value works — it simply keeps turning past 360. | float | 0 |
| 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. | float | 0 |
| Anchor YVertical pivot for rotation and scaling, in Grafit units; 0 is the centre. Not limited. | float | 0 |
| Flip HorizontalMirrors the picture left to right, after all other transforms. | bool | false |
| Flip VerticalMirrors the picture top to bottom, after all other transforms. | bool | false |
| 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. | float | 0 |
| Skew YLeans the picture vertically, shifting columns by their distance from the anchor. Clamped to ±2. | float | 0 |
| Perspective XTilts the picture around the vertical axis so one side comes closer, like a card turned in space. Clamped to ±1. | float | 0 |
| Perspective YTilts the picture around the horizontal axis, laying the top or bottom away from you. Clamped to ±1. | float | 0 |
| 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. | int | 0 |
| DistortLens bend: positive bulges the picture outward like a barrel, negative pinches it inward like a pincushion. Clamped to ±1. | float | 0 |
| TwirlSwirls the picture around its centre by this many degrees, fading out toward Twirl Radius. Clamped to ±1080, so up to three full turns. | float | 0 |
| Twirl RadiusHow far the swirl reaches from the centre, in Grafit units. Clamped to 0.05…4; small values twist only a tight core. | float | 1 |
| BulgeSpherizes the centre: positive pushes it out like a lens, negative sucks it in. Clamped to ±1. | float | 0 |
| Bulge RadiusSize of the bulge or pinch area, in Grafit units. Clamped to 0.05…4. | float | 1 |
| 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. | float | 0 |
| Wave FrequencyHow many ripples fit across the picture — low is a slow flag wave, high is fine water chop. Clamped to 0.1…100. | float | 10 |
| Wave PhaseShifts the ripple along, in radians; animate it to make the wave travel. Any value works, one full cycle is about 6.28. | float | 0 |
| 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. | float | 0 |
Outputs
| Port | Type |
|---|---|
| ImageThe picture to transform. Cable any generator, camera or image node here; nothing connected leaves an empty frame. | image |
| Width | float |
| Height | float |
Live Preview
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:
| Value | Edge Mode | Outside the source you see |
|---|---|---|
| 0 | Transparent | Nothing — samples outside are dropped (transparent) |
| 1 | Clamp | Edge pixels smeared outward |
| 2 | Repeat | The image tiled infinitely |
| 3 | Mirror | The 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 Frequencycontrols ripple density); animateWave Phasewith 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
| Port | Default | Range | Meaning |
|---|---|---|---|
| Image | — | — | Source texture |
| Enable | true | — | Off clears the output |
| Position X | 0 | Grafit units | Horizontal offset |
| Position Y | 0 | Grafit units | Vertical offset |
| Scale | 1 | 0.01 … 100 | Uniform scale, multiplied with the per-axis scales |
| Scale X | 1 | 0.01 … 100 | Horizontal scale |
| Scale Y | 1 | 0.01 … 100 | Vertical scale |
| Rotation | 0 | degrees | Positive = clockwise, around the anchor |
| Anchor X | 0 | Grafit units | Pivot for rotation/scale/skew (0,0 = image center) |
| Anchor Y | 0 | Grafit units | Pivot Y |
| Flip Horizontal | false | — | Mirrors left/right |
| Flip Vertical | false | — | Mirrors up/down |
| Skew X | 0 | −2 … +2 | Horizontal shear (x shifted by y) |
| Skew Y | 0 | −2 … +2 | Vertical shear |
| Perspective X | 0 | −1 … +1 | Projective tilt around the vertical axis — one side recedes |
| Perspective Y | 0 | −1 … +1 | Projective tilt around the horizontal axis |
| Edge Mode | 0 | 0–3 | Transparent / Clamp / Repeat / Mirror |
Distortions
| Port | Default | Range | Meaning |
|---|---|---|---|
| Distort | 0 | −1 … +1 | Barrel (+) / pincushion (−) lens distortion |
| Twirl | 0 | −1080 … +1080 | Twirl angle in degrees, falling off from center |
| Twirl Radius | 1 | 0.05 … 4 | Radius of the twirl influence (shown when Twirl ≠ 0) |
| Bulge | 0 | −1 … +1 | Bulge (+) / pinch (−) spherize |
| Bulge Radius | 1 | 0.05 … 4 | Radius of the bulge influence (shown when Bulge ≠ 0) |
| Wave Amount | 0 | 0 … 1 | Sine displacement amplitude |
| Wave Frequency | 10 | 0.1 … 100 | Ripple density |
| Wave Phase | 0 | any | Ripple offset — drive with an LFO for motion |
| Chromatic Aberration | 0 | 0 … 1 | Radial 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;Mirrormode makes non-tileable images seamless. - VJ kaleidoscope warp: Camera Input → Image Transform (Audio FFT →
Twirl,Edge Mode = Mirror, someBulge) → Canvas. - Water / flag ripple: any generator → Image Transform (
Wave Amount 0.3, LFO →Wave Phase) → Canvas; lowerWave Frequencyfor slow swells, raise for shimmering. - Fake 3D card tilt: Image node → Image Transform (Mouse Position →
Perspective X/Perspective Y, slightRotation) → 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
ScaleandPosition X/Yover a photo,Edge Mode = Clampto 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 = Transparentplus 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 = Mirrorproduces 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.