# Apply a .cube LUT to a Photo > Grade a photo with a 1D or 3D .cube LUT, tetrahedral or trilinear, at any strength. Applies an Adobe/Resolve .cube LUT (1D, 3D or a 1D shaper plus 3D table, DOMAIN_MIN/MAX and LUT_*_INPUT_RANGE) to a PNG, JPEG or WebP image with tetrahedral or trilinear interpolation, mixed at the strength you choose. Reports the LUT type, size and how much the image changed. Part of usefulweb.app (https://usefulweb.app/). Part of [Lumina](https://lumina.usefulweb.app/) (ownerApp: lumina). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://luminalutapply.usefulweb.app/ (interactive tool at https://luminalutapply.usefulweb.app/tool) - JSON API: POST https://luminalutapply.usefulweb.app/api/v1/calculate with a JSON object of inputs (schema: https://luminalutapply.usefulweb.app/api/v1/tool) - OpenAPI: https://luminalutapply.usefulweb.app/openapi.json - MCP (Streamable HTTP): https://luminalutapply.usefulweb.app/mcp - tool `lumina_lut_apply` ## Inputs - image (file, required): Photo (PNG, JPEG or WebP, up to 2 megapixels) - lut (file): .cube LUT file - cubeText (textarea): Or paste the .cube text - interpolation (select): Interpolation - strength (number): Strength - space (select): The LUT expects - format (select): Output format - quality (integer): JPEG/WebP quality ## Method - The .cube file is parsed per the Adobe Cube LUT Specification 1.0 (TITLE, LUT_1D_SIZE, LUT_3D_SIZE, DOMAIN_MIN/MAX, red index fastest); Resolve’s LUT_1D_INPUT_RANGE/LUT_3D_INPUT_RANGE are read too, and a file with both tables applies the 1D shaper first. - Each pixel is un-premultiplied, encoded as sRGB (or kept linear), normalised to the LUT domain and looked up with tetrahedral interpolation (six tetrahedra per cube cell; exact on the grey axis) or trilinear interpolation, then mixed with the original by the strength. - An identity LUT reproduces the image exactly; outside the domain values are clamped. This is the same engine as the LUT node in Lumina’s Compositor.