lutgen-rs

crate license ci publish

A blazingly fast interpolated LUT generator using gaussian distribution for arbitrary and popular color palettes.


Usage

CLI

bash cargo install lutgen

```text Usage: lutgen [OPTIONS] [CUSTOM_COLORS]...

Arguments: [CUSTOM_COLORS]... List of custom colors to add to the palette. If -p is not used to specify a base palette, at least 1 color is required

Options: -p Add colors from a predefined base palette. Use lutgen -p to view all options -a Algorithm to generate the LUT with [default: v1] [possible values: v1, v0] -o, --output Path to write the generated file to. Defaults to the current dir with some parameters (ex: ./hald_clut_v1_4_20_512.png) -l, --level HaldCLUT color depth. 8 bit = 512x512 image [default: 8] -m, --mean Mean for the gaussian distribution [default: 4] -s, --std-dev Standard deviation for the gaussian distribution [default: 20] -i, --iterations Number of iterations to average together [default: 512] -h, --help Print help (see more with '--help') -V, --version Print version ```

Library

By default, the bin feature and dependencies are enabled. When used as a library, it's recommended to use default-features = false to minimalize the dependency tree and build time.

Simple usage:

```rust use exoquant::{ Color, SimpleColorSpace, }; use lutgen::{ interpolatedremap::{ GaussianV0Params, GaussianV0Remapper, GaussianV1Params, GaussianV1Remapper }, generatelut, };

// Setup the palette and colorspace for nearest neighbor lookups. let palette = vec![ Color::new(255, 0, 0, 255), Color::new(0, 255, 0, 255), Color::new(0, 0, 255, 255), ]; let colorspace = SimpleColorSpace::default();

// Generate a lut using the slower v0 algorithm let params = GaussianV0Params { mean: 4.0, stddev: 20.0, iterations: 512, seed: 80085, colorspace: SimpleColorSpace::default(), }; let output = generatelut::>(8, &palette, params); // output.save("v0hald8.png").unwrap();

// Generate a lut using the faster v1 algorithm let params = GaussianV1Params { mean: 4.0, stddev: 20.0, iterations: 512, seed: 80085, colorspace: SimpleColorSpace::default(), }; let output = generatelut::>(8, &palette, params); // output.save("v1hald8.png").unwrap(); ```

Advanced usage:

```rust use exoquant::{ Color, SimpleColorSpace, }; use lutgen::{ generatelut, interpolatedremap::{GaussianV1Params, GaussianV1Remapper, InterpolatedRemapper}, };

// Generate the base identity let mut identity = lutgen::identity::generate(8);

// Setup the palette let palette = vec![ Color::new(255, 0, 0, 255), Color::new(0, 255, 0, 255), Color::new(0, 0, 255, 255), ];

// Setup the interpolated remapper let params = GaussianV1Params { mean: 4.0, std_dev: 20.0, iterations: 512, seed: 80085, colorspace: SimpleColorSpace::default(), }; let remapper = GaussianV1Remapper::new(&palette, params);

// Remap the identity remapper.remap_image(&mut identity);

// Save the output // identity.save("v1hald8.png").unwrap(); ```