NichesTools

Custom LUT Generator – Instant .cube Creation

The tool computes the color‑grading mapping that a .cube file would contain. For each pixel value it applies exposure, contrast and gamma in a linear pipeline: raw input → normalize to [0,1] within the user‑supplied domain → linear contrast around 0.5 → exposure scaling by 2^stops → gamma exponentiation. The sample output shows the result for the middle LUT entry.

Positive values increase brightness, negative decrease. The tool converts stops into a linear multiplier 2^stops.
Range [-1, 1]. -1 pulls all tones toward mid‑tone; +1 pushes the extremes to full black/white. The formula uses a linear scaling around 0.5.
Typical values between 0.1 and 5. Values <1 brighten, >1 darken tones after exposure and contrast adjustments.
Number of levels per channel in the generated .cube file. Common sizes are 33, 64, or 128.
Lowest input value mapped by the LUT. Specify a fraction between 0 and 1, e.g., 0.2.
Highest input value mapped by the LUT. Must be greater than domain‑minimum. Specify a fraction between 0 and 1, e.g., 0.9.

What it is

A LUT, or lookup table, is a compressed representation of a complex color‑grading transformation that maps every possible input pixel value to an output value. The Custom LUT Generator lets videographers create such files instantly in the browser by specifying high‑level grading parameters—exposure, contrast and gamma—alongside the input domain and desired LUT size.

Internally it normalises each raw pixel value to a [0‑1] range tailored to the chosen domain. Using a simple linear stretch for contrast around the mid‑tone (0.5) it then scales brightness by converting exposure stops into a multiplicative factor of 2^stops. Finally it applies a gamma exponent, allowing subtle non‑linear tone curves without hand‑editing a massive table.

The resulting .cube file can be dropped straight into editing suites such as DaVinci Resolve, Adobe Premiere or the free Blackmagic Fusion, ensuring color consistency across all projects with minimal effort.

How to use it

First pick your desired LUT size – 33 for efficient files, 64 or 128 for more precision. Set domain‑minimum and ‑maximum to match the light range you want affected by the grading (0–1 covers full linear). Then adjust exposure in stop units; a value of +1 doubles brightness, –1 halves it.

Use contrast from –1 (soft) to +1 (harsh); negative pushes tones toward grey while positive drives blacks darker and whites brighter. Gamma <1 slightly lights the mid‑tones, gamma >1 deepens shadows. After entering all fields, the tool instantly shows the centre LUT value; clicking “Download” spawns a .cube blob that can be imported into your editor.

Because the page runs entirely client–side, no data exits your machine and no subscription is required, making it ideal for quick iteration or batch‑grading workflows.

worked_example:{"inputs":{"exposure":0,"contrast":0,"gamma":1,"lut-size":33,"domain-min":0,"domain-max":1},"expected":{"center-value":0.5},"narrative":"We choose a LUT size of 33, so the indices range from 0 to 32. The centre index is floor((32)/2)=16.

Raw value for this index: raw = 16/32 = 0.50000.

Map into domain; with domain‑min = 0 and domain‑max = 1, normalized r stays 0.50000.

Contrast factor cf = 2×0 + 1 = 1. Applying contrast: ((0.5 – 0.5) × 1) + 0.5 = 0.50000. Exposure multiplier expMul = 2^0 = 1, so r remains 0.50000. Gamma exponent of 1 gives the final value r^1 = 0.50000. Hence the centre‑value output is 0.500, matching the test case expectation."} ,"faq":[{"q":"Can I batch generate multiple LUTs with different settings?","a":"While each page load generates one LUT, you can simply copy the URL, modify query parameters for exposure/contrast/gamma, and reload to create a new cube without re‑ingesting files. No server side state is kept."},{"q":"Is the generated file compatible with all editors?","a":"The output follows the standard '.cube' format: a header followed by X^3 RGB triplets. Editors like DaVinci Resolve, Premiere Pro, After Effects and Fusion all accept it without extra conversion steps."},{"q":"Will the tool work on my mobile phone?","a":"Yes; because everything runs client‑side in JavaScript, any modern touch‑enabled browser can generate small LUTs quickly even while editing on the go. Large sizes (128) may be less efficient on low‑power devices."}]} }

Worked example

We choose a LUT size of 33, so the indices range from 0 to 32. The centre index is floor((32)/2)=16.

Raw value for this index: raw = 16/32 = 0.50000.

Map into domain; with domain‑min = 0 and domain‑max = 1, normalized r stays 0.50000.

Contrast factor cf = 2×0 + 1 = 1. Applying contrast: ((0.5 – 0.5) × 1) + 0.5 = 0.50000. Exposure multiplier expMul = 2^0 = 1, so r remains 0.50000. Gamma exponent of 1 gives the final value r^1 = 0.50000. Hence the centre‑value output is 0.500, matching the test case expectation.

Inputs

  • Exposure (stops): 0
  • Contrast: 0
  • Gamma: 1
  • LUT size: 33
  • Domain minimum: 0
  • Domain maximum: 1

Result

  • Center value after adjustments: 0.5

Frequently asked questions

Can I batch generate multiple LUTs with different settings?

While each page load generates one LUT, you can simply copy the URL, modify query parameters for exposure/contrast/gamma, and reload to create a new cube without re‑ingesting files. No server side state is kept.

Is the generated file compatible with all editors?

The output follows the standard '.cube' format: a header followed by X^3 RGB triplets. Editors like DaVinci Resolve, Premiere Pro, After Effects and Fusion all accept it without extra conversion steps.

Will the tool work on my mobile phone?

Yes; because everything runs client‑side in JavaScript, any modern touch‑enabled browser can generate small LUTs quickly even while editing on the go. Large sizes (128) may be less efficient on low‑power devices.