Skip to content

Colour, tone and filters

Photos that arrive from different suppliers never match: one is dark, one is cold, one was shot under a yellow lamp. Put side by side on a catalogue page they look like three shops. The adjustment nodes bring them to one standard — the same brightness, the same warmth, the same contrast — and do it the same way every time, for the hundredth photo as for the first. The filter nodes go further and give pictures a style: black and white, a duotone in the brand’s two colours, a soft vignette.

Every node on this page works on the picture’s own pixels, keeps its format, costs no credits, and gives the same result for the same input and settings (Film Grain aside, which is random by nature). None of them invents anything: to change a background, relight a scene or restore a damaged photo, see the AI pages. This page gives, for each node, what it really does — some names promise more elsewhere than they do here — and the lab shows them all on one photo.

A correction is best done in this order, each step on the result of the previous one:

  1. Exposure and range — make the picture neither too dark nor too flat: Auto Enhance, or Levels and Curves.
  2. Colour — remove a cast (Temperature & Tint, Colour Balance), then set the saturation (Vibrance).
  3. Detail — Denoise before, Unsharp Mask last, because sharpening also sharpens noise.
  4. Style — a LUT, a duotone, grayscale, a vignette: after the corrections, so they start from a clean picture.

For a batch, build the chain once and run it on every photo with an iteration: the same steps give the same look.

Node What it does Settings
Auto Enhance (image/auto_enhance) Stretches the picture to use the full range, from black to white, and reduces noise lightly autoLevels, normalize, enhance (all on). Quick and good on flat photos; it can shift the colour of a picture dominated by one hue
Brightness & Contrast (image/brightness_contrast) The two classic sliders brightness, contrast: −100 … 100
Exposure (image/exposure) Like opening or closing the lens stops (−5 … 5, +1 doubles the light), then gamma
Levels (image/levels) Sets which input tones become black and white, and the midtone blackPoint, whitePoint (0–255), gamma, outputBlackPoint, outputWhitePoint; channel: rgb, red, green or blue
Curves (image/curves) A tone curve through control points — an S-curve adds contrast points: at least two {"input": 0–255, "output": 0–255} (either letter case); channel
Shadows & Highlights (image/shadows_highlights) Lifts or deepens the dark tones, brightens or recovers the light ones; black and white stay in place shadows, highlights: −100 … 100. It is a tone curve applied to the whole picture, not a local correction
Node What it does Settings
Hue & Saturation (image/hue_saturation) Turns every hue, and raises or lowers saturation and lightness everywhere alike hue (−180 … 180), saturation, lightness (−100 … 100)
Vibrance (image/vibrance) Saturation that moves muted colours most and vivid ones least; greys stay grey amount: −100 … 100. It does not recognise skin — it only reads how saturated each colour is
Temperature & Tint (image/temperature_tint) Warmer or cooler, greener or more magenta temperature, tint: −100 … 100
Colour Balance (image/color_balance) A colour shift in the shadows, the midtones and the highlights separately Nine sliders, −100 … 100, named after the pairs CyanRed, MagentaGreen, YellowBlue: positive adds red, green or blue to that range. Blue shadows with warm highlights is the classic “teal and orange”
Colour LUT (image/color_lut) Applies a look stored in a HALD CLUT image The LUT is an image on the lut input (required); intensity 0–1 mixes it with the original
Grayscale (image/grayscale) Black and white method: rec709 (as the eye sees), rec601, average

A LUT is how a look travels: a colourist designs it once, exports it as a HALD image (a square of colours, 512 px for level 8), and every workflow that loads it gets exactly that look. Keep it as a workspace asset and connect it to the lut input.

Node What it does Settings
Gaussian Blur (image/gaussian_blur) Soft blur sigma (strength), radius (0 = automatic)
Motion Blur (image/motion_blur) Blur in one direction sigma, angle (0–360)
Radial Blur (image/radial_blur) Spin around the centre angle
Unsharp Mask (image/unsharp_mask) Sharpening — last, after every resize sigma (size of the detail), amount, threshold (ignore flat areas)
Denoise (image/denoise) A light noise reduction strength 0–1; mild — it cannot rescue a very noisy photo
Vignette (image/vignette) Darkens the edges into backgroundColor along an oval sigma (softness of the edge), radius, x and y (inset of the oval)
Film Grain (image/film_grain) Adds grain amount 0–1, monochrome. Random: two runs differ slightly
Sepia (image/sepia) Old-photograph toning threshold
Colorize (image/colorize) Tints the picture with one colour color, opacity (0–100)
Gradient Map (image/gradient_map) Maps darks to one colour and lights to another — a duotone startColor, endColor, optional midColor
Posterize (image/posterize) Reduces each channel to a few levels levels 2–32
Threshold (image/threshold) Pure black and white at a cut-off value (0–100 %)
Invert (image/invert) Negative preserveAlpha
Oil Paint, Emboss (image/oil_paint, image/emboss) Painterly brush strokes; relief radius, sigma
Edge Detect (image/edge_detect) The outlines, white on black method: canny (clean lines) or laplacian

The colour lab runs one photo — an armchair of about 1875, gilded wood upholstered in a blue-green silk with red flowers, on a grey studio background — through twelve adjustments and ten filters side by side, and a warm look stored as a HALD LUT (source-warm-look-hald.png) through Colour LUT.

Twenty-three pictures of the same armchair: the original; Auto Enhance, brighter background; Brightness & Contrast; Levels; an S-curve; Exposure +0.5, brighter; Shadows & Highlights, a lighter chair with its highlights kept; Saturation +50 and Vibrance +50, the silk more colourful; Temperature +30, a warmer background; Colour Balance, bluer shadows and warmer lights; the warm look from the LUT; Grayscale; Sepia; a navy-and-cream duotone; Colorize in teal; a soft Vignette into black; Unsharp Mask; Gaussian Blur; Oil Paint; Posterize with five levels; Edge Detect, white outlines on black; Film Grain.

What to look at:

  • Saturation against Vibrance, both at +50, measured: the muted silk goes from a saturation of 0.067 to 0.092 with Saturation and to 0.120 with Vibrance; the gold, already vivid, is pushed further by Saturation (its blue channel from 138 to 111) and barely moved by Vibrance (to 125). Pure greys stay grey with both.
  • Colour Balance with blue added to the shadows and yellow to the highlights: measured on the background, a dark grey of 88/88/88 becomes 84/89/95, cooler, and a light grey of 196/196/196 becomes 203/197/185, warmer.
  • Shadows & Highlights (+35, −25) opens the chair’s shadows without burning the background.
  • The duotone maps the picture from navy #1B2A49 to cream #F2E8CF: a brand’s two colours applied to any photo.

The run costs 0 credits.

Terminal window
node madoo-install-example.mjs lab-image-colour --api <your Madoo API URL> --key <key.json> --run --save looks
  • Every adjustment applies to the whole picture: there are no local corrections, no selections, no masks inside an adjustment — combine a correction with Apply Mask when only a part must change.
  • Colour Balance, Levels and Curves work on 8 bits per channel (Image files and formats).
  • Colour LUT reads HALD images only, not .cube files.
  • No automatic white balance: a cast is removed with Temperature & Tint or Colour Balance, set by eye or by a measured reference.

Photo: “Armchair”, Herter Brothers, about 1875, gilded wood with modern upholstery, The Metropolitan Museum of Art, New York (Open Access, public domain). The warm look LUT was made for this lab.