Grade Image
lab_gradeApply a deterministic colour grade to an image already in the project gallery — no re-generation, no provider, no credits. The look is computed pixel-exact (exposure, saturation, hue, lightness, contrast, film grain) and lands as a new gallery image the sequencer and export pick up. For full control the recipe fields are open too: levels and curves per channel (rgb, r, g, b — values 0..255), a gradient map (luminance → colour ramp), exposure offset/gamma and grain seed/colour. Fixed order, like a node stack: exposure → levels → curves → hue/saturation → look (LUT) → gradient map → grain. The same recipe on the same image always yields the same result (grain is fixed-seed), so a look is reproducible across every still. Set from_colorist to start from the project's colorist crew brief (look, contrast, grain) and tune with the sliders on top. At least one adjustment OR from_colorist is required. Synchronous — the graded image_url comes straight back, no polling.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| hue | No | Hue rotation in degrees; zero neutral | |
| look | No | Named look from the bundle catalogue (e.g. filmlab-neutral, filmlab-warm, filmlab-cool, filmlab-soft, filmlab-punch) — a hand-authored LUT, applied on top of the sliders. The server resolves the name; a path is never accepted. | |
| grain | No | Film grain amount; zero is none, monochrome | |
| curves | No | Curves per channel as [x, y] points 0..255, x strictly increasing (smooth monotone curve through them). Example warm highlights: {"r": [[0,0],[192,205],[255,255]], "b": [[0,0],[192,180],[255,255]]}. Not together with contrast on the rgb channel | |
| levels | No | Levels per channel (rgb = all three, r/g/b single), values 0..255: input black/white point, gamma (above 1 brightens midtones), output black/white. Example: {"rgb": {"black": 12, "white": 240, "gamma": 1.1}} | |
| contrast | No | Contrast curve: high is an S-curve, low flattens it | |
| exposure | No | Exposure in stops; positive brightens, zero is neutral | |
| image_id | Yes | Id of the source image in the project gallery (from lab_list_assets / lab_generate) | |
| lightness | No | Lightness; negative darkens, zero neutral | |
| grain_mono | No | Grain in black and white (default true); false gives colour grain | |
| grain_seed | No | Seed of the grain pattern (default 0) — same seed, same grain | |
| project_id | Yes | Project id (from lab_list_projects) | |
| saturation | No | Colour saturation; minimum is greyscale, zero neutral | |
| gradient_map | No | Gradient map: luminance 0..1 → colour ramp, blended with opacity (default 1). Example teal-orange: {"stops": [[0, "#0b2a33"], [0.5, "#7a7a72"], [1, "#ffd9a8"]], "opacity": 0.3} | |
| look_opacity | No | Blend of the named look, 0..1 (default 1) | |
| from_colorist | No | Start from the project's colorist crew brief (look/contrast/grain), then apply the sliders on top | |
| exposure_gamma | No | Exposure gamma; 1 neutral, above 1 brightens midtones | |
| exposure_offset | No | Exposure offset added after the stops (lifts or crushes blacks); zero neutral |