Generator node

Image Adjustment

Real-time GPU color grading for any image texture: exposure, contrast, saturation, vibrance, hue, white balance, levels, shadows/highlights, gamma, selective color removal or isolation, posterize, animated film grain and vignette — the full darkroom in one node. Feed it any generator's Image output and it returns the graded image at the same size, every frame, with a Mix dial to blend the grade against the untouched original.

Inputs

PortTypeDefault
ImageThe image to grade. Cable it from any generator, video player or other image filter.image—
EnableOff clears the output rather than passing the source through, so this branch disappears from the canvas.booltrue
ExposureOverall brightness in photographic stops — each whole step doubles or halves the light. Clamped to ±6.float0
ContrastSpreads tones away from mid grey, or pulls them toward it. Clamped to −1…+1, where −1 is nearly flat and +1 is hard and punchy.float0
SaturationColour intensity: 0 is black and white, 1 leaves it as-is. Floored at 0 but not capped above; past about 2 the colours go electric and start clipping.float1
VibranceLifts only the muted colours and leaves already-vivid ones alone — kinder to skin than raw saturation. Clamped to −1…+1.float0
Hue ShiftRotates every colour around the hue wheel, in degrees. Any value works and it simply wraps every 360.float0
TemperatureWhite balance from cool blue at −1 to warm orange at +1. Clamped to ±1.float0
TintThe other white-balance axis: green at −1, magenta at +1. Clamped to ±1.float0
GammaBends the midtones without moving black or white — above 1 opens them up, below 1 deepens them. Clamped to 0.2…3.float1
BlacksWhere black sits: raising it crushes the darkest tones to solid black. Clamped to 0…0.95.float0
WhitesWhere white sits: lowering it blows the brightest tones out to pure white. Clamped to 0.05…1.float1
ShadowsLifts or crushes the dark end only, leaving highlights alone. Clamped to −1…+1.float0
HighlightsCompresses or boosts the bright end only, leaving shadows alone. Clamped to −1…+1.float0
GrainAmount of animated film grain, refreshed at 24 frames per second for a real projector cadence. Clamped to 0…1.float0
Grain SizeHow coarse each grain speck is — 1 is per-pixel, larger values clump it into chunkier 16 mm texture. Clamped to 0.25…8.float1
Grain on BlacksWhere the grain lives: 0 follows the classic film curve and sits in the midtones, 1 pushes it into the shadows. Clamped to 0…1.float0
VignetteDarkens the corners toward the frame edge. Clamped to 0…1.float0
Vignette SoftnessHow gradually the vignette fades in — small values give a hard circular edge, large ones a slow falloff. Clamped to 0.05…1.float0.5
Color FilterSelective colour: off, remove the key colour and leave everything else, or isolate it and grey out the rest. Values outside those three snap to the nearest one.int0
Key ColorThe colour the selective filter targets. Only its hue matters — brightness and alpha are ignored — so pure red is enough to catch every shade of red.color—
Color RangeHow wide a slice of the hue wheel counts as matching the key colour. Clamped to 0.01…1; small values catch one exact shade, large ones sweep up neighbouring hues.float0.15
Color SoftnessFeathers the edge of that hue selection so it does not cut off abruptly. Clamped to 0…1.float0.1
PosterizeNumber of tone steps per channel for a flat, printed poster look. Clamped to 0…32, and anything below 2 leaves the image untouched.int0
MixBlends the whole graded result back against the original. Clamped to 0…1 — pull it down when a grade is too strong rather than undoing every slider.float1

Outputs

PortType
ImageThe image to grade. Cable it from any generator, video player or other image filter.image
Widthfloat
Heightfloat

Live Preview

Interactive — Exposure, saturation and temperature on a test strip

How It Works

Image Adjustment is an image-in / image-out filter that follows the generator contract: it takes an Image input, renders to an offscreen texture, and outputs Image, Width and Height — where Width/Height simply pass the source's content dimensions through (this is a 1:1 filter; nothing is resized or moved). When Enable is false or no source is connected, the output texture is cleared so a Canvas downstream never shows a stale frame.

The whole grade is a single pointwise compute kernel — one GPU thread per pixel, no intermediate passes. Source textures are premultiplied alpha (the Grafit generator convention), so the kernel first un-premultiplies, grades the straight RGB, then clamps and re-premultiplies on write. Alpha itself is never modified — transparent regions stay transparent.

Operations apply in a fixed, deliberate order (each stage feeds the next):

  1. White balance — Temperature shifts red/blue (−1 cool … +1 warm), Tint shifts green/magenta.
  2. Exposure — photographic stops: gain = 2^EV.
  3. Levels — Blacks and Whites remap the black/white points: rgb = (rgb − Blacks) / (Whites − Blacks).
  4. Shadows / Highlights — luma-masked lifts: shadows weighted by (1 − luma)², highlights by luma².
  5. Contrast — pivot at 0.5: rgb = (rgb − 0.5) · (1 + Contrast) + 0.5.
  6. Gamma — rgb = rgb^(1/Gamma); above 1 brightens midtones.
  7. Hue Shift — YIQ hue rotation in degrees.
  8. Saturation + Vibrance — blend toward luminance gray; Vibrance adds extra saturation scaled by how unsaturated a pixel already is, protecting skin tones and already-vivid colors.
  9. Selective color — Color Filter measures each pixel's hue distance (on the hue circle) to Key Color within Color Range, feathered by Color Softness. Remove Color desaturates matching pixels; Isolate Color desaturates everything else (the "Sin City" look).
  10. Posterize — quantizes each channel to N levels (active from 2 upward; 0 = off).
  11. Film grain — animated noise refreshed at 24 fps (film cadence), sized by Grain Size in pixels. Weighting follows a classic film curve — strongest in midtones, 4·luma·(1−luma) — and Grain on Blacks morphs that toward a shadows-weighted curve (1−luma)² that leaves whites clean.
  12. Vignette — aspect-correct radial darkening from the frame center, feathered by Vignette Softness.
  13. Mix — final linear blend between the untouched original and the fully graded result.
ValueColor FilterEffect
0OffNo selective color processing
1Remove ColorPixels matching the key hue become grayscale
2Isolate ColorOnly pixels matching the key hue keep color; the rest becomes grayscale

Parameters in Depth

Tone

PortDefaultRangeMeaning
Image——Source texture to grade
Enabletrue—Off clears the output
Exposure0−6 … +6Brightness in photographic stops (EV)
Contrast0−1 … +1Contrast around a 0.5 pivot
Gamma10.2 … 3Midtone curve; >1 brightens midtones
Blacks00 … 0.95Black point — raise to crush shadows
Whites10.05 … 1White point — lower to blow highlights
Shadows0−1 … +1Lift (+) or crush (−) shadow regions only
Highlights0−1 … +1Boost (+) or compress (−) highlight regions only

Color

PortDefaultRangeMeaning
Saturation10 … 20 = black & white, 1 = original, >1 boosted
Vibrance0−1 … +1Smart saturation — boosts muted colors more than vivid ones
Hue Shift0degreesRotates all hues around the color wheel
Temperature0−1 … +1Cool (blue) to warm (orange)
Tint0−1 … +1Green to magenta
Color Filter00–2Off / Remove Color / Isolate Color
Key Color(1, 0, 0, 1)colorTarget hue for the selective filter (default red)
Color Range0.150.01 … 1Hue-distance tolerance around the key color
Color Softness0.10 … 1Feathering of the match boundary
Posterize00 … 32Levels per channel; 0–1 = off, 2+ = active

Finish

PortDefaultRangeMeaning
Grain00 … 1Film grain amount, luminance-weighted, animated at 24 fps
Grain Size10.25 … 8Grain particle size in pixels
Grain on Blacks00 … 10 = midtone film curve, 1 = shadows-weighted (whites stay clean)
Vignette00 … 1Radial edge darkening strength
Vignette Softness0.50.05 … 1Vignette falloff width
Mix10 … 10 = original, 1 = fully graded — the master subtlety dial

Order matters between parameters: Blacks/Whites re-span the histogram before Shadows/Highlights and Contrast act on it, and Saturation is applied after Hue Shift — so a hue-rotated image desaturates exactly as you'd expect. Vibrance stacks additively with Saturation.

Use Cases

  • Classic black & white: Video Player → Image Adjustment (Saturation 0, then shape with Contrast, Blacks/Whites, Shadows/Highlights, finish with Grain and Vignette) → Canvas.
  • The "Sin City" look: Camera Input → Image Adjustment (Color Filter = Isolate Color, Key Color red, Color Range ≈ 0.1) → Canvas — only red survives on a monochrome frame.
  • VJ color pulse: Audio FFT band → Hue Shift or Exposure — the grade breathes with the music; keep Mix around 0.7 so the source stays readable.
  • Film emulation chain: Image node → Image Adjustment (Temperature warm, lifted Blacks, soft Highlights, Grain 0.4 with Grain Size 1.5, Vignette 0.3) → Canvas.
  • Poster art: any generator → Image Adjustment (Posterize 4–6, high Contrast, Saturation 1.5) → Composite over a flat background color.
  • Day-for-night: Exposure −2, Temperature −0.6, crushed Shadows, gentle Vignette on live camera input.

Tips

  • A generator's texture only reaches the screen through a Canvas node — chain Image Adjustment between the source and its Canvas.
  • Filters chain freely: Image Transform → Image Adjustment → Composite all speak the same Image contract, and each stays a single GPU pass.
  • Mix is the fastest way to make an aggressive grade tasteful — dial the full look in at Mix 1, then back off.
  • Grain is animated from the global time at a fixed 24 fps refresh, so it flickers like film even on a 120 fps output; Grain on Blacks = 1 gives the "lifted shadows on scanned negative" texture without peppering highlights.
  • The selective color filter matches on hue only — very dark or desaturated pixels have unstable hue, so widen Color Softness if edges sizzle.
  • Alpha is preserved untouched: grading a transparent-background generator (text, shapes) grades only the visible pixels and composites cleanly downstream.

Open Image Adjustment in the interactive catalog →

Image Adjustment 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