diff --git a/lut/apply.sh b/lut/apply.sh new file mode 100755 index 0000000..b391553 --- /dev/null +++ b/lut/apply.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +set -e +# ensure src is where the script is located, even if symlinked +src="$( cd -- "$( dirname -- "$(readlink -f "${BASH_SOURCE[0]}" || ${BASH_SOURCE[0]})" )" &> /dev/null && pwd )/src" + +print_usage() { + name=`basename $0` + cat < ... [args] + -i image : Image to apply LUT to, can be repeated + -f flavor : Flavor to apply, can be repeated. Defaults to all + -n noise : LUT Noise level (0-4). Defaults to 2 +EOF +} + +noise="2" +images="" +flavors="" + +while getopts ':f:i:n:' flag; do + case "$flag" in + n) + if [[ $OPTARG -gt 4 ]]; then + echo "Invalid noise level (0-4)" + exit 1 + else + noise=$OPTARG + fi + ;; + f) flavors="$flavors $OPTARG" ;; + i) images="$images `realpath $OPTARG`" ;; + *) print_usage + exit 1 ;; + esac +done + +if [[ "$images" == "" ]]; then + print_usage +fi + +if [[ "$flavors" == "" ]]; then + flavors="Oled Mocha Macchiato Frappe Latte" +fi + +for file in $images; do + echo "Performing magick on `basename $file` (noise: $noise)" + for flavor in $flavors; do + printf "$flavor ..." + out="${file%%.*}-${flavor}.png" + magick $file "$src/noise_$noise/Catppuccin ${flavor}.png" -hald-clut "$out" + printf "\r$flavor ✓ ($out)\n" + done +done + diff --git a/lut/example/preview.png b/lut/example/preview.png new file mode 100644 index 0000000..4c37199 Binary files /dev/null and b/lut/example/preview.png differ diff --git a/lut/example/simon-berger-unsplash-Frappe.png b/lut/example/simon-berger-unsplash-Frappe.png new file mode 100644 index 0000000..7bbccc2 Binary files /dev/null and b/lut/example/simon-berger-unsplash-Frappe.png differ diff --git a/lut/example/simon-berger-unsplash-Latte.png b/lut/example/simon-berger-unsplash-Latte.png new file mode 100644 index 0000000..bfcea10 Binary files /dev/null and b/lut/example/simon-berger-unsplash-Latte.png differ diff --git a/lut/example/simon-berger-unsplash-Macchiato.png b/lut/example/simon-berger-unsplash-Macchiato.png new file mode 100644 index 0000000..b702ff1 Binary files /dev/null and b/lut/example/simon-berger-unsplash-Macchiato.png differ diff --git a/lut/example/simon-berger-unsplash-Mocha.png b/lut/example/simon-berger-unsplash-Mocha.png new file mode 100644 index 0000000..3d23022 Binary files /dev/null and b/lut/example/simon-berger-unsplash-Mocha.png differ diff --git a/lut/example/simon-berger-unsplash-Oled.png b/lut/example/simon-berger-unsplash-Oled.png new file mode 100644 index 0000000..f477ab9 Binary files /dev/null and b/lut/example/simon-berger-unsplash-Oled.png differ diff --git a/lut/example/simon-berger-unsplash.jpg b/lut/example/simon-berger-unsplash.jpg new file mode 100644 index 0000000..48003a3 Binary files /dev/null and b/lut/example/simon-berger-unsplash.jpg differ diff --git a/lut/src/noise_0/Catppuccin Frappe.png b/lut/src/noise_0/Catppuccin Frappe.png new file mode 100644 index 0000000..67066ab Binary files /dev/null and b/lut/src/noise_0/Catppuccin Frappe.png differ diff --git a/lut/src/noise_0/Catppuccin Latte.png b/lut/src/noise_0/Catppuccin Latte.png new file mode 100644 index 0000000..246c35b Binary files /dev/null and b/lut/src/noise_0/Catppuccin Latte.png differ diff --git a/lut/src/noise_0/Catppuccin Macchiato.png b/lut/src/noise_0/Catppuccin Macchiato.png new file mode 100644 index 0000000..eea0854 Binary files /dev/null and b/lut/src/noise_0/Catppuccin Macchiato.png differ diff --git a/lut/src/noise_0/Catppuccin Mocha.png b/lut/src/noise_0/Catppuccin Mocha.png new file mode 100644 index 0000000..50a23fd Binary files /dev/null and b/lut/src/noise_0/Catppuccin Mocha.png differ diff --git a/lut/src/noise_0/Catppuccin Oled.png b/lut/src/noise_0/Catppuccin Oled.png new file mode 100644 index 0000000..0c388c0 Binary files /dev/null and b/lut/src/noise_0/Catppuccin Oled.png differ diff --git a/lut/src/noise_1/Catppuccin Frappe.png b/lut/src/noise_1/Catppuccin Frappe.png new file mode 100644 index 0000000..64a550f Binary files /dev/null and b/lut/src/noise_1/Catppuccin Frappe.png differ diff --git a/lut/src/noise_1/Catppuccin Latte.png b/lut/src/noise_1/Catppuccin Latte.png new file mode 100644 index 0000000..1fc5305 Binary files /dev/null and b/lut/src/noise_1/Catppuccin Latte.png differ diff --git a/lut/src/noise_1/Catppuccin Macchiato.png b/lut/src/noise_1/Catppuccin Macchiato.png new file mode 100644 index 0000000..dced256 Binary files /dev/null and b/lut/src/noise_1/Catppuccin Macchiato.png differ diff --git a/lut/src/noise_1/Catppuccin Mocha.png b/lut/src/noise_1/Catppuccin Mocha.png new file mode 100644 index 0000000..d709b80 Binary files /dev/null and b/lut/src/noise_1/Catppuccin Mocha.png differ diff --git a/lut/src/noise_1/Catppuccin Oled.png b/lut/src/noise_1/Catppuccin Oled.png new file mode 100644 index 0000000..6530c1b Binary files /dev/null and b/lut/src/noise_1/Catppuccin Oled.png differ diff --git a/lut/src/noise_2/Catppuccin Frappe.png b/lut/src/noise_2/Catppuccin Frappe.png new file mode 100644 index 0000000..fb1cf0e Binary files /dev/null and b/lut/src/noise_2/Catppuccin Frappe.png differ diff --git a/lut/src/noise_2/Catppuccin Latte.png b/lut/src/noise_2/Catppuccin Latte.png new file mode 100644 index 0000000..152f727 Binary files /dev/null and b/lut/src/noise_2/Catppuccin Latte.png differ diff --git a/lut/src/noise_2/Catppuccin Macchiato.png b/lut/src/noise_2/Catppuccin Macchiato.png new file mode 100644 index 0000000..11cdddf Binary files /dev/null and b/lut/src/noise_2/Catppuccin Macchiato.png differ diff --git a/lut/src/noise_2/Catppuccin Mocha.png b/lut/src/noise_2/Catppuccin Mocha.png new file mode 100644 index 0000000..9cb2e5d Binary files /dev/null and b/lut/src/noise_2/Catppuccin Mocha.png differ diff --git a/lut/src/noise_2/Catppuccin Oled.png b/lut/src/noise_2/Catppuccin Oled.png new file mode 100644 index 0000000..59919d4 Binary files /dev/null and b/lut/src/noise_2/Catppuccin Oled.png differ diff --git a/lut/src/noise_3/Catppuccin Frappe.png b/lut/src/noise_3/Catppuccin Frappe.png new file mode 100644 index 0000000..9c43641 Binary files /dev/null and b/lut/src/noise_3/Catppuccin Frappe.png differ diff --git a/lut/src/noise_3/Catppuccin Latte.png b/lut/src/noise_3/Catppuccin Latte.png new file mode 100644 index 0000000..8054793 Binary files /dev/null and b/lut/src/noise_3/Catppuccin Latte.png differ diff --git a/lut/src/noise_3/Catppuccin Macchiato.png b/lut/src/noise_3/Catppuccin Macchiato.png new file mode 100644 index 0000000..d93123c Binary files /dev/null and b/lut/src/noise_3/Catppuccin Macchiato.png differ diff --git a/lut/src/noise_3/Catppuccin Mocha.png b/lut/src/noise_3/Catppuccin Mocha.png new file mode 100644 index 0000000..da03cf1 Binary files /dev/null and b/lut/src/noise_3/Catppuccin Mocha.png differ diff --git a/lut/src/noise_3/Catppuccin Oled.png b/lut/src/noise_3/Catppuccin Oled.png new file mode 100644 index 0000000..68d8031 Binary files /dev/null and b/lut/src/noise_3/Catppuccin Oled.png differ diff --git a/lut/src/noise_4/Catppuccin Frappe.png b/lut/src/noise_4/Catppuccin Frappe.png new file mode 100644 index 0000000..06c7100 Binary files /dev/null and b/lut/src/noise_4/Catppuccin Frappe.png differ diff --git a/lut/src/noise_4/Catppuccin Latte.png b/lut/src/noise_4/Catppuccin Latte.png new file mode 100644 index 0000000..b532a6b Binary files /dev/null and b/lut/src/noise_4/Catppuccin Latte.png differ diff --git a/lut/src/noise_4/Catppuccin Macchiato.png b/lut/src/noise_4/Catppuccin Macchiato.png new file mode 100644 index 0000000..cf25b9d Binary files /dev/null and b/lut/src/noise_4/Catppuccin Macchiato.png differ diff --git a/lut/src/noise_4/Catppuccin Mocha.png b/lut/src/noise_4/Catppuccin Mocha.png new file mode 100644 index 0000000..8a02d14 Binary files /dev/null and b/lut/src/noise_4/Catppuccin Mocha.png differ diff --git a/lut/src/noise_4/Catppuccin Oled.png b/lut/src/noise_4/Catppuccin Oled.png new file mode 100644 index 0000000..b493c03 Binary files /dev/null and b/lut/src/noise_4/Catppuccin Oled.png differ diff --git a/src/scripts/build_luts.mjs b/src/scripts/build_luts.mjs new file mode 100644 index 0000000..5368886 --- /dev/null +++ b/src/scripts/build_luts.mjs @@ -0,0 +1,42 @@ +import { exec } from "child_process"; +import url from "url"; +import path from "path"; +import fs from "fs"; +import util from "util"; +import { variants } from "@catppuccin/palette"; + +const root = path.resolve( + url.fileURLToPath(new URL(".", import.meta.url)), + "..", + "..", + "dist" +); + +const generateLut = async (name, out) => { + for (let i = 0; i <= 4; i++) { + fs.mkdirSync(path.join(root, `lut/noise_${i}`), { recursive: true }); + process.stdout.clearLine(0); + process.stdout.cursorTo(0); + process.stdout.write(`${name}: [${i + 1}/5]`); + + const cmd = `convert HALD:8 -duplicate 512 -attenuate ${i} +noise Gaussian -quantize LAB +dither -remap "${root}/png/${name}.png" -evaluate-sequence Mean "${root}/../lut/noise_${i}/${name}.png"`; + + await util.promisify(exec)(cmd); + } + + process.stdout.clearLine(0); + process.stdout.cursorTo(0); + console.log(`${name}: done`); +}; + + +console.log("Generating Hald CLUTs...") +const flavors = Object.keys(variants); +for (let i = 0; i < flavors.length; i++) { + const name = flavors[i]; + // formatted "pretty" name, Catppuccin + const pname = `Catppuccin ${name.charAt(0).toUpperCase() + name.slice(1)}`; + + await generateLut(pname); +} +