diff --git a/.gitattributes b/.gitattributes
index 3949bd89ac8b3a134ae28a8d72aadb594ce22253..e0962b43df34dc527a52dd63d09ddcb793c5c765 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -47,3 +47,7 @@ groundcover/screenshot-1.png filter=lfs diff=lfs merge=lfs -text
groundcover/screenshot-2.png filter=lfs diff=lfs merge=lfs -text
groundcover/screenshot-3.png filter=lfs diff=lfs merge=lfs -text
groundcover/screenshot-4.png filter=lfs diff=lfs merge=lfs -text
+tonebox/icon-512.png filter=lfs diff=lfs merge=lfs -text
+tonebox/og.png filter=lfs diff=lfs merge=lfs -text
+tonebox/samples/lake.jpg filter=lfs diff=lfs merge=lfs -text
+tonebox/samples/market.jpg filter=lfs diff=lfs merge=lfs -text
diff --git a/tonebox/app.js b/tonebox/app.js
new file mode 100644
index 0000000000000000000000000000000000000000..d676f7c4af9e242be971faf1b6953d04c742b8ce
--- /dev/null
+++ b/tonebox/app.js
@@ -0,0 +1,166 @@
+/* Tonebox previewer. Photos and .cube files stay in the browser. © 2026 CyberMax. All rights reserved. */
+(function () {
+ "use strict";
+ var CHECKOUT = "https://buy.polar.sh/polar_cl_MiDtlpQOhXytyuuOkWflnzvDFprMR1WRDE0LQ30bQPr"; // Polar checkout link (revenue/packs/polar/tonebox/polar.json)
+ var MAX_SIDE = 1600; // preview resolution; the download uses the full photo up to 6000 px
+ var $ = function (s) { return document.querySelector(s); };
+ var state = { looks: [], luts: {}, custom: null, current: "teal-orange", sample: "market", img: null, intensity: 1, fileName: "photo" };
+ var before = $("#before"), after = $("#after"), stage = $("#stage");
+
+ function toast(msg) { var t = $("#toast"); t.textContent = msg; t.classList.add("show"); clearTimeout(toast.t); toast.t = setTimeout(function () { t.classList.remove("show"); }, 2600); }
+ function warn(msg) { $("#warn").textContent = msg || ""; }
+ function lookById(id) { for (var i = 0; i < state.looks.length; i++) if (state.looks[i].id === id) return state.looks[i]; return null; }
+ function activeLut() { return state.current === "custom" ? state.custom : state.luts[state.current]; }
+ function activeName() { return state.current === "custom" ? (state.custom.title || "Your LUT") : (lookById(state.current) || {}).name; }
+
+ function drawScaled(img, canvas, maxSide) {
+ var s = Math.min(1, maxSide / Math.max(img.naturalWidth || img.width, img.naturalHeight || img.height));
+ canvas.width = Math.max(1, Math.round((img.naturalWidth || img.width) * s));
+ canvas.height = Math.max(1, Math.round((img.naturalHeight || img.height) * s));
+ var ctx = canvas.getContext("2d", { willReadFrequently: true });
+ ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
+ return ctx;
+ }
+
+ var base = null; // original pixels at preview size
+ function setImage(img) {
+ state.img = img;
+ var ctx = drawScaled(img, before, MAX_SIDE);
+ base = ctx.getImageData(0, 0, before.width, before.height);
+ after.width = before.width; after.height = before.height;
+ render();
+ }
+ var pending = false;
+ function render() {
+ if (!base || pending) return;
+ pending = true;
+ requestAnimationFrame(function () {
+ pending = false;
+ var lut = activeLut();
+ var out = new ImageData(new Uint8ClampedArray(base.data), base.width, base.height);
+ if (lut) ToneboxLUT.applyLut(out.data, lut, state.intensity);
+ after.getContext("2d").putImageData(out, 0, 0);
+ $("#tag-look").textContent = activeName() || "";
+ document.body.setAttribute("data-rendered", state.current + ":" + Math.round(state.intensity * 100));
+ });
+ }
+
+ function loadSample(name) {
+ state.sample = name; state.fileName = name;
+ var img = new Image();
+ img.onload = function () { setImage(img); };
+ img.src = "samples/" + name + ".jpg";
+ document.querySelectorAll("#samples .chip").forEach(function (b) { b.classList.toggle("on", b.getAttribute("data-sample") === name); });
+ document.querySelectorAll("#gallery img").forEach(function (im) { im.src = "gallery/" + name + "/" + im.getAttribute("data-id") + ".jpg"; });
+ document.querySelectorAll("#free-looks img").forEach(function (im) { im.src = "gallery/" + name + "/" + im.getAttribute("data-id") + ".jpg"; });
+ }
+
+ function openPhoto(file) {
+ if (!file || !/^image\//.test(file.type)) { warn("That file is not an image."); return; }
+ var url = URL.createObjectURL(file), img = new Image();
+ img.onload = function () { state.fileName = file.name.replace(/\.[^.]+$/, "") || "photo"; setImage(img); warn(""); document.querySelectorAll("#samples .chip").forEach(function (b) { b.classList.remove("on"); }); };
+ img.onerror = function () { warn("This browser can't open that image format. Try a JPG or PNG."); };
+ img.src = url;
+ }
+ function openCube(file) {
+ var r = new FileReader();
+ r.onload = function () {
+ try {
+ var lut = ToneboxLUT.parseCube(r.result);
+ lut.title = lut.title || file.name.replace(/\.cube$/i, "");
+ state.custom = lut; select("custom");
+ warn(""); toast("Loaded " + lut.title + " (" + lut.n + "-point)");
+ } catch (e) { warn("Couldn't read that LUT: " + e.message); }
+ };
+ r.readAsText(file);
+ }
+
+ function select(id) {
+ state.current = id;
+ document.querySelectorAll("#free-looks .look").forEach(function (b) { b.classList.toggle("on", b.getAttribute("data-id") === id); });
+ render();
+ }
+
+ function save() {
+ if (!state.img) return;
+ var c = document.createElement("canvas"), ctx = drawScaled(state.img, c, 6000);
+ var id = ctx.getImageData(0, 0, c.width, c.height), lut = activeLut();
+ if (lut) ToneboxLUT.applyLut(id.data, lut, state.intensity);
+ ctx.putImageData(id, 0, 0);
+ c.toBlob(function (blob) {
+ var a = document.createElement("a");
+ a.href = URL.createObjectURL(blob);
+ a.download = state.fileName + "-" + (activeName() || "graded").toLowerCase().replace(/[^a-z0-9]+/g, "-") + ".jpg";
+ document.body.appendChild(a); a.click(); a.remove();
+ toast("Saved " + c.width + "×" + c.height + " JPG");
+ }, "image/jpeg", 0.92);
+ }
+
+ function buildUI(meta) {
+ state.looks = meta.looks;
+ var free = $("#free-looks");
+ meta.free.forEach(function (id) {
+ var l = lookById(id), b = document.createElement("button");
+ b.className = "look" + (id === state.current ? " on" : ""); b.setAttribute("data-id", id); b.type = "button";
+ b.innerHTML = ' ';
+ b.querySelector("span").textContent = l.name;
+ b.addEventListener("click", function () { select(id); });
+ free.appendChild(b);
+ });
+ var cols = ["All"].concat(meta.looks.map(function (l) { return l.collection; }).filter(function (c, i, a) { return a.indexOf(c) === i; }));
+ var filters = $("#filters");
+ cols.forEach(function (c, i) {
+ var b = document.createElement("button"); b.className = "chip" + (i ? "" : " on"); b.type = "button"; b.textContent = c;
+ b.addEventListener("click", function () {
+ filters.querySelectorAll(".chip").forEach(function (x) { x.classList.toggle("on", x === b); });
+ document.querySelectorAll("#gallery figure").forEach(function (f) { f.hidden = !(c === "All" || f.getAttribute("data-col") === c); });
+ });
+ filters.appendChild(b);
+ });
+ var g = $("#gallery");
+ meta.looks.forEach(function (l) {
+ var f = document.createElement("figure"); f.className = "g-item"; f.setAttribute("data-col", l.collection);
+ f.innerHTML = ' ';
+ f.querySelector("img").alt = l.name + " LUT preview";
+ f.querySelector("b").textContent = (l.free ? "🔓 " : "") + l.name;
+ f.querySelector("small").textContent = l.collection + " · " + l.desc;
+ if (l.free) { f.style.cursor = "pointer"; f.addEventListener("click", function () { select(l.id); window.scrollTo({ top: 0, behavior: "smooth" }); }); }
+ g.appendChild(f);
+ });
+ }
+
+ function wire() {
+ $("#samples").addEventListener("click", function (e) { var s = e.target.getAttribute("data-sample"); if (s) loadSample(s); });
+ $("#photo").addEventListener("change", function (e) { openPhoto(e.target.files[0]); e.target.value = ""; });
+ $("#cube").addEventListener("change", function (e) { if (e.target.files[0]) openCube(e.target.files[0]); e.target.value = ""; });
+ $("#intensity").addEventListener("input", function (e) { state.intensity = e.target.value / 100; $("#int-val").textContent = e.target.value + "%"; render(); });
+ $("#split").addEventListener("input", function (e) {
+ var v = e.target.value;
+ $("#before-clip").style.clipPath = "inset(0 " + (100 - v) + "% 0 0)";
+ $("#handle").style.left = v + "%";
+ });
+ $("#btn-save").addEventListener("click", save);
+ ["dragenter", "dragover"].forEach(function (ev) { stage.addEventListener(ev, function (e) { e.preventDefault(); stage.classList.add("drag"); }); });
+ ["dragleave", "drop"].forEach(function (ev) { stage.addEventListener(ev, function (e) { e.preventDefault(); stage.classList.remove("drag"); }); });
+ stage.addEventListener("drop", function (e) {
+ var f = e.dataTransfer.files[0]; if (!f) return;
+ if (/\.cube$/i.test(f.name)) openCube(f); else openPhoto(f);
+ });
+ var buy = $("#buy");
+ if (/^https:\/\//.test(CHECKOUT)) { buy.href = CHECKOUT; $("#top-buy").href = "#pack"; }
+ else { buy.textContent = "Coming soon"; buy.removeAttribute("href"); buy.classList.add("ghost"); }
+ }
+
+ if (/[?&]thanks=1/.test(location.search)) setTimeout(function () { toast("Thanks for your order! Your download link is in the Polar receipt email."); }, 800);
+ window.toneboxApp = { state: state, select: select, openCube: openCube, save: save };
+ wire();
+ Promise.all([
+ fetch("luts/looks.json").then(function (r) { return r.json(); }),
+ fetch("luts/preview.bin").then(function (r) { return r.arrayBuffer(); }),
+ ]).then(function (res) {
+ var meta = res[0], luts = ToneboxLUT.parsePreviewBin(res[1]);
+ meta.free.forEach(function (id, i) { state.luts[id] = luts[i]; });
+ buildUI(meta);
+ loadSample("market");
+ }).catch(function (e) { warn("Couldn't load the looks: " + e.message); });
+})();
diff --git a/tonebox/gallery/lake/arctic.jpg b/tonebox/gallery/lake/arctic.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..cbf5e7a6287ee0ea9f2e8999176c6d8e896a0307
Binary files /dev/null and b/tonebox/gallery/lake/arctic.jpg differ
diff --git a/tonebox/gallery/lake/bleach-bypass.jpg b/tonebox/gallery/lake/bleach-bypass.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7feedb02d90e345bd49674b0097ba2b60cf599fd
Binary files /dev/null and b/tonebox/gallery/lake/bleach-bypass.jpg differ
diff --git a/tonebox/gallery/lake/blockbuster.jpg b/tonebox/gallery/lake/blockbuster.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5ef5622f8e517e8790c0b01db38c39069a59ddbe
Binary files /dev/null and b/tonebox/gallery/lake/blockbuster.jpg differ
diff --git a/tonebox/gallery/lake/blue-hour.jpg b/tonebox/gallery/lake/blue-hour.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ee95e3302de1be30f1f9ecbe2285f1d54e738d24
Binary files /dev/null and b/tonebox/gallery/lake/blue-hour.jpg differ
diff --git a/tonebox/gallery/lake/blue-tone.jpg b/tonebox/gallery/lake/blue-tone.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..56a069d15489360db82b31a81c2371454e4b1b26
Binary files /dev/null and b/tonebox/gallery/lake/blue-tone.jpg differ
diff --git a/tonebox/gallery/lake/bw-green-filter.jpg b/tonebox/gallery/lake/bw-green-filter.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fee8ac1f96f815f4f3a5b8a6a5f0df6e1a14ecfc
Binary files /dev/null and b/tonebox/gallery/lake/bw-green-filter.jpg differ
diff --git a/tonebox/gallery/lake/bw-high-contrast.jpg b/tonebox/gallery/lake/bw-high-contrast.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ed4ef53ea4addb5f59e69482ea6ace612105f532
Binary files /dev/null and b/tonebox/gallery/lake/bw-high-contrast.jpg differ
diff --git a/tonebox/gallery/lake/bw-neutral.jpg b/tonebox/gallery/lake/bw-neutral.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e06412d7044708e037d32631c1fa55947041dfb4
Binary files /dev/null and b/tonebox/gallery/lake/bw-neutral.jpg differ
diff --git a/tonebox/gallery/lake/bw-red-filter.jpg b/tonebox/gallery/lake/bw-red-filter.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a1b7978352cb3e604cc6197e94ce4c1cd332bb8c
Binary files /dev/null and b/tonebox/gallery/lake/bw-red-filter.jpg differ
diff --git a/tonebox/gallery/lake/bw-soft.jpg b/tonebox/gallery/lake/bw-soft.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..789b89f546a8e6dfcb9bfb453182f1d2bb74b478
Binary files /dev/null and b/tonebox/gallery/lake/bw-soft.jpg differ
diff --git a/tonebox/gallery/lake/candlelight.jpg b/tonebox/gallery/lake/candlelight.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b07327605db062f8c0742b601cc07210acb08d77
Binary files /dev/null and b/tonebox/gallery/lake/candlelight.jpg differ
diff --git a/tonebox/gallery/lake/cool-negative.jpg b/tonebox/gallery/lake/cool-negative.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1e5e9f31222741f11086eda370b001eb0a333499
Binary files /dev/null and b/tonebox/gallery/lake/cool-negative.jpg differ
diff --git a/tonebox/gallery/lake/cool-plus.jpg b/tonebox/gallery/lake/cool-plus.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7a60b39342e51a6896fbfbd092927598a962413c
Binary files /dev/null and b/tonebox/gallery/lake/cool-plus.jpg differ
diff --git a/tonebox/gallery/lake/cross-process.jpg b/tonebox/gallery/lake/cross-process.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ed9c8e096e2f08a1cbb4c3ca83b15ff8db280e8b
Binary files /dev/null and b/tonebox/gallery/lake/cross-process.jpg differ
diff --git a/tonebox/gallery/lake/crush-blacks.jpg b/tonebox/gallery/lake/crush-blacks.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0f4c586e4e45764e90dbaf6936c83092cd0426b1
Binary files /dev/null and b/tonebox/gallery/lake/crush-blacks.jpg differ
diff --git a/tonebox/gallery/lake/cyanotype.jpg b/tonebox/gallery/lake/cyanotype.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d3c305c0d29013c1ca921d34fd8b362d830fedf4
Binary files /dev/null and b/tonebox/gallery/lake/cyanotype.jpg differ
diff --git a/tonebox/gallery/lake/day-for-night.jpg b/tonebox/gallery/lake/day-for-night.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d76e6911e15269c946042c5b45ff156b7a479220
Binary files /dev/null and b/tonebox/gallery/lake/day-for-night.jpg differ
diff --git a/tonebox/gallery/lake/desert-gold.jpg b/tonebox/gallery/lake/desert-gold.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bb4655d5f4bbe3ddf61cdf0000b09950007cfe76
Binary files /dev/null and b/tonebox/gallery/lake/desert-gold.jpg differ
diff --git a/tonebox/gallery/lake/dreamy-pastel.jpg b/tonebox/gallery/lake/dreamy-pastel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3768acee3d6ce119ff9cecd90c309651c99a1c1d
Binary files /dev/null and b/tonebox/gallery/lake/dreamy-pastel.jpg differ
diff --git a/tonebox/gallery/lake/dungeon.jpg b/tonebox/gallery/lake/dungeon.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0992abcdb807288669038fcad347807cf3a330f9
Binary files /dev/null and b/tonebox/gallery/lake/dungeon.jpg differ
diff --git a/tonebox/gallery/lake/dusk.jpg b/tonebox/gallery/lake/dusk.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ce71c46410546e086b8958dbc53c4da85893f44f
Binary files /dev/null and b/tonebox/gallery/lake/dusk.jpg differ
diff --git a/tonebox/gallery/lake/expired-stock.jpg b/tonebox/gallery/lake/expired-stock.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..37cdd814fbd4a38a17b5faf79d641e9e5d638dad
Binary files /dev/null and b/tonebox/gallery/lake/expired-stock.jpg differ
diff --git a/tonebox/gallery/lake/faded-print.jpg b/tonebox/gallery/lake/faded-print.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..767dbcced56a35c9d75f2f6aee194a2f12947702
Binary files /dev/null and b/tonebox/gallery/lake/faded-print.jpg differ
diff --git a/tonebox/gallery/lake/fog.jpg b/tonebox/gallery/lake/fog.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..88836c5b99337d62da0ae866d3388abe8444fc32
Binary files /dev/null and b/tonebox/gallery/lake/fog.jpg differ
diff --git a/tonebox/gallery/lake/frozen-tundra.jpg b/tonebox/gallery/lake/frozen-tundra.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ae05300295f8335a2087f554aca3238e25a59b9a
Binary files /dev/null and b/tonebox/gallery/lake/frozen-tundra.jpg differ
diff --git a/tonebox/gallery/lake/golden-hour.jpg b/tonebox/gallery/lake/golden-hour.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6d91cff891808e4f21f8cff9e594047b38cfa74e
Binary files /dev/null and b/tonebox/gallery/lake/golden-hour.jpg differ
diff --git a/tonebox/gallery/lake/horror-green.jpg b/tonebox/gallery/lake/horror-green.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d72e27eaa9e903dc0c38b2a85148fe2fc4ae2926
Binary files /dev/null and b/tonebox/gallery/lake/horror-green.jpg differ
diff --git a/tonebox/gallery/lake/lava.jpg b/tonebox/gallery/lake/lava.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b6f369310bb94c2dab2b452134acc0d8296d13f4
Binary files /dev/null and b/tonebox/gallery/lake/lava.jpg differ
diff --git a/tonebox/gallery/lake/lift-shadows.jpg b/tonebox/gallery/lake/lift-shadows.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4cc1f6976dd34e1a8302c30945c166cd479c850a
Binary files /dev/null and b/tonebox/gallery/lake/lift-shadows.jpg differ
diff --git a/tonebox/gallery/lake/matte.jpg b/tonebox/gallery/lake/matte.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f4dab5d2b476cdb4bc7155aac65397c11e36e102
Binary files /dev/null and b/tonebox/gallery/lake/matte.jpg differ
diff --git a/tonebox/gallery/lake/midday-punch.jpg b/tonebox/gallery/lake/midday-punch.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b0dfebfc9d592407079f0c155c3bd111cb2de8fd
Binary files /dev/null and b/tonebox/gallery/lake/midday-punch.jpg differ
diff --git a/tonebox/gallery/lake/moody-forest.jpg b/tonebox/gallery/lake/moody-forest.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ba24c073cdebf7b23ca3d0cfecb4b64251d0e3e6
Binary files /dev/null and b/tonebox/gallery/lake/moody-forest.jpg differ
diff --git a/tonebox/gallery/lake/moonlight.jpg b/tonebox/gallery/lake/moonlight.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f07f066b8141377b579fbc19293f01561e8c2fe7
Binary files /dev/null and b/tonebox/gallery/lake/moonlight.jpg differ
diff --git a/tonebox/gallery/lake/muted.jpg b/tonebox/gallery/lake/muted.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c5d9dd2b9b71dc1e2de40124477509178c902318
Binary files /dev/null and b/tonebox/gallery/lake/muted.jpg differ
diff --git a/tonebox/gallery/lake/neon.jpg b/tonebox/gallery/lake/neon.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..edb391fca16bbe8bb264e24499845495c520daee
Binary files /dev/null and b/tonebox/gallery/lake/neon.jpg differ
diff --git a/tonebox/gallery/lake/night-city.jpg b/tonebox/gallery/lake/night-city.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0d72c5e995afd827130edb41344de4c98501045b
Binary files /dev/null and b/tonebox/gallery/lake/night-city.jpg differ
diff --git a/tonebox/gallery/lake/noir-blue.jpg b/tonebox/gallery/lake/noir-blue.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a7938bbd3cecc01c629b7ec02d1c7dfd8866cc7d
Binary files /dev/null and b/tonebox/gallery/lake/noir-blue.jpg differ
diff --git a/tonebox/gallery/lake/original.jpg b/tonebox/gallery/lake/original.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4abcdb665b3dee6002b9df117e608d8c9a190df9
Binary files /dev/null and b/tonebox/gallery/lake/original.jpg differ
diff --git a/tonebox/gallery/lake/overcast.jpg b/tonebox/gallery/lake/overcast.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bae258e24ef3b49e8d61da6ec2b7d83c22165f6e
Binary files /dev/null and b/tonebox/gallery/lake/overcast.jpg differ
diff --git a/tonebox/gallery/lake/pastel.jpg b/tonebox/gallery/lake/pastel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..13191d750fddcadb3368885428b4abc60344ac49
Binary files /dev/null and b/tonebox/gallery/lake/pastel.jpg differ
diff --git a/tonebox/gallery/lake/punchy.jpg b/tonebox/gallery/lake/punchy.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a61f9cc04dccba394385d02e75ae656c19abbc98
Binary files /dev/null and b/tonebox/gallery/lake/punchy.jpg differ
diff --git a/tonebox/gallery/lake/retro-8bit.jpg b/tonebox/gallery/lake/retro-8bit.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..751597157d2d4d0584e327e69ad6f6b65dcb27be
Binary files /dev/null and b/tonebox/gallery/lake/retro-8bit.jpg differ
diff --git a/tonebox/gallery/lake/scifi-clean.jpg b/tonebox/gallery/lake/scifi-clean.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ca25d74d4ad09398a7c34f5d6ad530873e951169
Binary files /dev/null and b/tonebox/gallery/lake/scifi-clean.jpg differ
diff --git a/tonebox/gallery/lake/selenium.jpg b/tonebox/gallery/lake/selenium.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..744784f717fc216ee950284d58ba4715fbb7c803
Binary files /dev/null and b/tonebox/gallery/lake/selenium.jpg differ
diff --git a/tonebox/gallery/lake/sepia-drama.jpg b/tonebox/gallery/lake/sepia-drama.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..99d204b4b821ceabb90a75c99660e6ccbc3ed811
Binary files /dev/null and b/tonebox/gallery/lake/sepia-drama.jpg differ
diff --git a/tonebox/gallery/lake/sepia.jpg b/tonebox/gallery/lake/sepia.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3ca2b44cb89c1e51e5b0300050e9f2957e55d1c0
Binary files /dev/null and b/tonebox/gallery/lake/sepia.jpg differ
diff --git a/tonebox/gallery/lake/silver-retention.jpg b/tonebox/gallery/lake/silver-retention.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5feb1dc6d041e352a29844ba2b48b6ae20eae838
Binary files /dev/null and b/tonebox/gallery/lake/silver-retention.jpg differ
diff --git a/tonebox/gallery/lake/slide-punch.jpg b/tonebox/gallery/lake/slide-punch.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..52a2e5054bccb779ce1f243ae883ff8543a8a1ec
Binary files /dev/null and b/tonebox/gallery/lake/slide-punch.jpg differ
diff --git a/tonebox/gallery/lake/split-tone.jpg b/tonebox/gallery/lake/split-tone.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ab7112966280966b7611d88c4ea42c6638c602a8
Binary files /dev/null and b/tonebox/gallery/lake/split-tone.jpg differ
diff --git a/tonebox/gallery/lake/storm.jpg b/tonebox/gallery/lake/storm.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9c31d39a877231fcd5dee075626d5fb447c35326
Binary files /dev/null and b/tonebox/gallery/lake/storm.jpg differ
diff --git a/tonebox/gallery/lake/sunny-meadow.jpg b/tonebox/gallery/lake/sunny-meadow.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4f88c60bc54436a124dc982fbfd9b3b48a2295c6
Binary files /dev/null and b/tonebox/gallery/lake/sunny-meadow.jpg differ
diff --git a/tonebox/gallery/lake/sunrise-pink.jpg b/tonebox/gallery/lake/sunrise-pink.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2de93116906ee4e4ec7012842260170553566860
Binary files /dev/null and b/tonebox/gallery/lake/sunrise-pink.jpg differ
diff --git a/tonebox/gallery/lake/teal-orange.jpg b/tonebox/gallery/lake/teal-orange.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bf3ddb981ffa3483e205edda5bb6c73a757b4e31
Binary files /dev/null and b/tonebox/gallery/lake/teal-orange.jpg differ
diff --git a/tonebox/gallery/lake/toxic.jpg b/tonebox/gallery/lake/toxic.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..15b391bf0f5e6f3c8e66b6c740ec71e51fcb5393
Binary files /dev/null and b/tonebox/gallery/lake/toxic.jpg differ
diff --git a/tonebox/gallery/lake/tungsten-film.jpg b/tonebox/gallery/lake/tungsten-film.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..74794bd42d402ed97be1743a9151c8f8eee706ad
Binary files /dev/null and b/tonebox/gallery/lake/tungsten-film.jpg differ
diff --git a/tonebox/gallery/lake/two-strip.jpg b/tonebox/gallery/lake/two-strip.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..eafaa2f0b9477477b215915ec00d5b686b780bfd
Binary files /dev/null and b/tonebox/gallery/lake/two-strip.jpg differ
diff --git a/tonebox/gallery/lake/underwater.jpg b/tonebox/gallery/lake/underwater.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d42914fd8a1101408b13b64d99a394be1fbe3b77
Binary files /dev/null and b/tonebox/gallery/lake/underwater.jpg differ
diff --git a/tonebox/gallery/lake/vintage-wash.jpg b/tonebox/gallery/lake/vintage-wash.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6188d530ceb8481af7df9dd96efce52edde9b900
Binary files /dev/null and b/tonebox/gallery/lake/vintage-wash.jpg differ
diff --git a/tonebox/gallery/lake/vivid.jpg b/tonebox/gallery/lake/vivid.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..70ebc320230612f8818e8fcd4a05a527361d8fea
Binary files /dev/null and b/tonebox/gallery/lake/vivid.jpg differ
diff --git a/tonebox/gallery/lake/warm-negative.jpg b/tonebox/gallery/lake/warm-negative.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c791cbcb1990b8ec16e49f9d64f4b00ed60c3b85
Binary files /dev/null and b/tonebox/gallery/lake/warm-negative.jpg differ
diff --git a/tonebox/gallery/lake/warm-plus.jpg b/tonebox/gallery/lake/warm-plus.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0a77e76b93a2152f6654c800a21c3cf979ffe815
Binary files /dev/null and b/tonebox/gallery/lake/warm-plus.jpg differ
diff --git a/tonebox/gallery/market/arctic.jpg b/tonebox/gallery/market/arctic.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..93cb2bdf0ea7b46630362e6cc19e619e036cd667
Binary files /dev/null and b/tonebox/gallery/market/arctic.jpg differ
diff --git a/tonebox/gallery/market/bleach-bypass.jpg b/tonebox/gallery/market/bleach-bypass.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..177e66c38f85eefa64c0654151b2be090255b81c
Binary files /dev/null and b/tonebox/gallery/market/bleach-bypass.jpg differ
diff --git a/tonebox/gallery/market/blockbuster.jpg b/tonebox/gallery/market/blockbuster.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..756003a443d37b2d85e75b46342f85717ab02a87
Binary files /dev/null and b/tonebox/gallery/market/blockbuster.jpg differ
diff --git a/tonebox/gallery/market/blue-hour.jpg b/tonebox/gallery/market/blue-hour.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..161d546d1859c010ec329ce21fb2296516ab3ef5
Binary files /dev/null and b/tonebox/gallery/market/blue-hour.jpg differ
diff --git a/tonebox/gallery/market/blue-tone.jpg b/tonebox/gallery/market/blue-tone.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3524c53324235f7cd061dddef894e48276995df3
Binary files /dev/null and b/tonebox/gallery/market/blue-tone.jpg differ
diff --git a/tonebox/gallery/market/bw-green-filter.jpg b/tonebox/gallery/market/bw-green-filter.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5191c961558d1138f21ed4ec1af5c35ae300116c
Binary files /dev/null and b/tonebox/gallery/market/bw-green-filter.jpg differ
diff --git a/tonebox/gallery/market/bw-high-contrast.jpg b/tonebox/gallery/market/bw-high-contrast.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..224c1f4b097b58c24884549ff3db874061bcef06
Binary files /dev/null and b/tonebox/gallery/market/bw-high-contrast.jpg differ
diff --git a/tonebox/gallery/market/bw-neutral.jpg b/tonebox/gallery/market/bw-neutral.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0987967a5081fdac09ef1b2c8dbcfe0435945f75
Binary files /dev/null and b/tonebox/gallery/market/bw-neutral.jpg differ
diff --git a/tonebox/gallery/market/bw-red-filter.jpg b/tonebox/gallery/market/bw-red-filter.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c5348005ab985b84360cb350313219f7407fff79
Binary files /dev/null and b/tonebox/gallery/market/bw-red-filter.jpg differ
diff --git a/tonebox/gallery/market/bw-soft.jpg b/tonebox/gallery/market/bw-soft.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9aa1a75724166beadbfdf19509618aab1fd24d0f
Binary files /dev/null and b/tonebox/gallery/market/bw-soft.jpg differ
diff --git a/tonebox/gallery/market/candlelight.jpg b/tonebox/gallery/market/candlelight.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..cef9e840f08d24062b4673db8372b1cebe296d39
Binary files /dev/null and b/tonebox/gallery/market/candlelight.jpg differ
diff --git a/tonebox/gallery/market/cool-negative.jpg b/tonebox/gallery/market/cool-negative.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..da5c8cec9b25ccd1961898ab235fcca2cc627ad1
Binary files /dev/null and b/tonebox/gallery/market/cool-negative.jpg differ
diff --git a/tonebox/gallery/market/cool-plus.jpg b/tonebox/gallery/market/cool-plus.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c53b013bcfd0daa4b1df42e9e0bc75eb89bbe88b
Binary files /dev/null and b/tonebox/gallery/market/cool-plus.jpg differ
diff --git a/tonebox/gallery/market/cross-process.jpg b/tonebox/gallery/market/cross-process.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3e3830f9b8884d362203199ae03b742f17fef7f8
Binary files /dev/null and b/tonebox/gallery/market/cross-process.jpg differ
diff --git a/tonebox/gallery/market/crush-blacks.jpg b/tonebox/gallery/market/crush-blacks.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8615a6ef4c9ba626069ed6cb0b7cc0014bfbc2e8
Binary files /dev/null and b/tonebox/gallery/market/crush-blacks.jpg differ
diff --git a/tonebox/gallery/market/cyanotype.jpg b/tonebox/gallery/market/cyanotype.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8ce7c9548a1306e96dece4f44d7242b521db3022
Binary files /dev/null and b/tonebox/gallery/market/cyanotype.jpg differ
diff --git a/tonebox/gallery/market/day-for-night.jpg b/tonebox/gallery/market/day-for-night.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f15144db2ebb6094e3fc556250f7bda4643f4de4
Binary files /dev/null and b/tonebox/gallery/market/day-for-night.jpg differ
diff --git a/tonebox/gallery/market/desert-gold.jpg b/tonebox/gallery/market/desert-gold.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..18b5b79caa08d343fabc99d56d53f64b9d5c0fad
Binary files /dev/null and b/tonebox/gallery/market/desert-gold.jpg differ
diff --git a/tonebox/gallery/market/dreamy-pastel.jpg b/tonebox/gallery/market/dreamy-pastel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b6497a6cc747257d27a3ce29cf75c6a53fb890fe
Binary files /dev/null and b/tonebox/gallery/market/dreamy-pastel.jpg differ
diff --git a/tonebox/gallery/market/dungeon.jpg b/tonebox/gallery/market/dungeon.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..490d3af8a2df60933fe5b6b633bb25452caef0ba
Binary files /dev/null and b/tonebox/gallery/market/dungeon.jpg differ
diff --git a/tonebox/gallery/market/dusk.jpg b/tonebox/gallery/market/dusk.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..17e8b0e8f06ad94680ac44441a49c974c11b9c2e
Binary files /dev/null and b/tonebox/gallery/market/dusk.jpg differ
diff --git a/tonebox/gallery/market/expired-stock.jpg b/tonebox/gallery/market/expired-stock.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3eadfd20bd2b54d5f490c79def77bbfb496c74b8
Binary files /dev/null and b/tonebox/gallery/market/expired-stock.jpg differ
diff --git a/tonebox/gallery/market/faded-print.jpg b/tonebox/gallery/market/faded-print.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..891b046e813fe16321f5b81537a2402e95fc0742
Binary files /dev/null and b/tonebox/gallery/market/faded-print.jpg differ
diff --git a/tonebox/gallery/market/fog.jpg b/tonebox/gallery/market/fog.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8bababa0ff18cba4b3ce30e19ae0b8c6423aa044
Binary files /dev/null and b/tonebox/gallery/market/fog.jpg differ
diff --git a/tonebox/gallery/market/frozen-tundra.jpg b/tonebox/gallery/market/frozen-tundra.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..89fa79f4b12e4368064d1fdba7a612705b866d70
Binary files /dev/null and b/tonebox/gallery/market/frozen-tundra.jpg differ
diff --git a/tonebox/gallery/market/golden-hour.jpg b/tonebox/gallery/market/golden-hour.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..706152db9632f9469ab4d1048d0f67c867e4bfa1
Binary files /dev/null and b/tonebox/gallery/market/golden-hour.jpg differ
diff --git a/tonebox/gallery/market/horror-green.jpg b/tonebox/gallery/market/horror-green.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..27dc4c489d52fc8340ee17ab59906b74570bc532
Binary files /dev/null and b/tonebox/gallery/market/horror-green.jpg differ
diff --git a/tonebox/gallery/market/lava.jpg b/tonebox/gallery/market/lava.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6a3ef3039c22bd24149588461165f4978dddae8f
Binary files /dev/null and b/tonebox/gallery/market/lava.jpg differ
diff --git a/tonebox/gallery/market/lift-shadows.jpg b/tonebox/gallery/market/lift-shadows.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d56d89c38dabd1df934e32ce301757a6b47b0d97
Binary files /dev/null and b/tonebox/gallery/market/lift-shadows.jpg differ
diff --git a/tonebox/gallery/market/matte.jpg b/tonebox/gallery/market/matte.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6833a8dd8b289b9ba5831908b55ff34b2617ce92
Binary files /dev/null and b/tonebox/gallery/market/matte.jpg differ
diff --git a/tonebox/gallery/market/midday-punch.jpg b/tonebox/gallery/market/midday-punch.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..abe159898db4b970d2b3addd5dd0a7e8def837d4
Binary files /dev/null and b/tonebox/gallery/market/midday-punch.jpg differ
diff --git a/tonebox/gallery/market/moody-forest.jpg b/tonebox/gallery/market/moody-forest.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7977fd3a83caa4076d8385813f87723e8b3f06dd
Binary files /dev/null and b/tonebox/gallery/market/moody-forest.jpg differ
diff --git a/tonebox/gallery/market/moonlight.jpg b/tonebox/gallery/market/moonlight.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3020207c10657c07ed5bdee9cf23366d0bd665d2
Binary files /dev/null and b/tonebox/gallery/market/moonlight.jpg differ
diff --git a/tonebox/gallery/market/muted.jpg b/tonebox/gallery/market/muted.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3b8280f77bbc505ec109ac2a887f0ce439f28767
Binary files /dev/null and b/tonebox/gallery/market/muted.jpg differ
diff --git a/tonebox/gallery/market/neon.jpg b/tonebox/gallery/market/neon.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e77cf6aaa8db2553a5ccb1d1a970f21ca51429c0
Binary files /dev/null and b/tonebox/gallery/market/neon.jpg differ
diff --git a/tonebox/gallery/market/night-city.jpg b/tonebox/gallery/market/night-city.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f916b3fa22412ded3fc4bb4c8abcdfb1537342ec
Binary files /dev/null and b/tonebox/gallery/market/night-city.jpg differ
diff --git a/tonebox/gallery/market/noir-blue.jpg b/tonebox/gallery/market/noir-blue.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8ade875be99a4d50da5020c7704602ed08df8114
Binary files /dev/null and b/tonebox/gallery/market/noir-blue.jpg differ
diff --git a/tonebox/gallery/market/original.jpg b/tonebox/gallery/market/original.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0efc6d6300f4c2dc947f50f1f5f79ba46030e2d7
Binary files /dev/null and b/tonebox/gallery/market/original.jpg differ
diff --git a/tonebox/gallery/market/overcast.jpg b/tonebox/gallery/market/overcast.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bbe634bf1799337b7d7facc94770e52bed830316
Binary files /dev/null and b/tonebox/gallery/market/overcast.jpg differ
diff --git a/tonebox/gallery/market/pastel.jpg b/tonebox/gallery/market/pastel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d1c93eca883e5db1f93cbc1d32703b966c5dad22
Binary files /dev/null and b/tonebox/gallery/market/pastel.jpg differ
diff --git a/tonebox/gallery/market/punchy.jpg b/tonebox/gallery/market/punchy.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..004eb2487a85550930cc889217505c5c2d3306e7
Binary files /dev/null and b/tonebox/gallery/market/punchy.jpg differ
diff --git a/tonebox/gallery/market/retro-8bit.jpg b/tonebox/gallery/market/retro-8bit.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..93ce7148b21e55851c99bb18f3306a6a561e3708
Binary files /dev/null and b/tonebox/gallery/market/retro-8bit.jpg differ
diff --git a/tonebox/gallery/market/scifi-clean.jpg b/tonebox/gallery/market/scifi-clean.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..976dd94c8f61c7eb8322f0351f648ef24f5750e5
Binary files /dev/null and b/tonebox/gallery/market/scifi-clean.jpg differ
diff --git a/tonebox/gallery/market/selenium.jpg b/tonebox/gallery/market/selenium.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ff5309e6e73770dfcbe33920a1295205b8ad2aa4
Binary files /dev/null and b/tonebox/gallery/market/selenium.jpg differ
diff --git a/tonebox/gallery/market/sepia-drama.jpg b/tonebox/gallery/market/sepia-drama.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e06fd7d804c0979872c89d55a69f080d16a0b872
Binary files /dev/null and b/tonebox/gallery/market/sepia-drama.jpg differ
diff --git a/tonebox/gallery/market/sepia.jpg b/tonebox/gallery/market/sepia.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a848b528a95961544bafa067d39a01313e05a082
Binary files /dev/null and b/tonebox/gallery/market/sepia.jpg differ
diff --git a/tonebox/gallery/market/silver-retention.jpg b/tonebox/gallery/market/silver-retention.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..74f2db970d56fd6d347aa84bafcdf351403ddef4
Binary files /dev/null and b/tonebox/gallery/market/silver-retention.jpg differ
diff --git a/tonebox/gallery/market/slide-punch.jpg b/tonebox/gallery/market/slide-punch.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..eda01d7b4fff86bfdcbb5fd792ae4c7275ed2fad
Binary files /dev/null and b/tonebox/gallery/market/slide-punch.jpg differ
diff --git a/tonebox/gallery/market/split-tone.jpg b/tonebox/gallery/market/split-tone.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2aaffa5dcaf01e6c63c2d56d9d84dd9a47724d80
Binary files /dev/null and b/tonebox/gallery/market/split-tone.jpg differ
diff --git a/tonebox/gallery/market/storm.jpg b/tonebox/gallery/market/storm.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..efde7d5ace52f55647d2d65d086528a03a4edbe6
Binary files /dev/null and b/tonebox/gallery/market/storm.jpg differ
diff --git a/tonebox/gallery/market/sunny-meadow.jpg b/tonebox/gallery/market/sunny-meadow.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3daf1239b889aa4873779e8c928c72f78e7ca167
Binary files /dev/null and b/tonebox/gallery/market/sunny-meadow.jpg differ
diff --git a/tonebox/gallery/market/sunrise-pink.jpg b/tonebox/gallery/market/sunrise-pink.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b22a8e96d8bde030bdaaea2e706d8c13bf5a65d4
Binary files /dev/null and b/tonebox/gallery/market/sunrise-pink.jpg differ
diff --git a/tonebox/gallery/market/teal-orange.jpg b/tonebox/gallery/market/teal-orange.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2bfc447d05c0e964ceddbc5f9333aca3f727b343
Binary files /dev/null and b/tonebox/gallery/market/teal-orange.jpg differ
diff --git a/tonebox/gallery/market/toxic.jpg b/tonebox/gallery/market/toxic.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..25ae253502d311ccf7211c1f5a77fefae92446e1
Binary files /dev/null and b/tonebox/gallery/market/toxic.jpg differ
diff --git a/tonebox/gallery/market/tungsten-film.jpg b/tonebox/gallery/market/tungsten-film.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9b497876995c9e251759ca9194590efd43332a48
Binary files /dev/null and b/tonebox/gallery/market/tungsten-film.jpg differ
diff --git a/tonebox/gallery/market/two-strip.jpg b/tonebox/gallery/market/two-strip.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fe9a05a7a21e3733094862121b39a3c30a8a3ada
Binary files /dev/null and b/tonebox/gallery/market/two-strip.jpg differ
diff --git a/tonebox/gallery/market/underwater.jpg b/tonebox/gallery/market/underwater.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..884caf811f63fde32014c5145fb9236674dba066
Binary files /dev/null and b/tonebox/gallery/market/underwater.jpg differ
diff --git a/tonebox/gallery/market/vintage-wash.jpg b/tonebox/gallery/market/vintage-wash.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6143b8c38a05a9ab4d3f5793ffb4fac4672b47cd
Binary files /dev/null and b/tonebox/gallery/market/vintage-wash.jpg differ
diff --git a/tonebox/gallery/market/vivid.jpg b/tonebox/gallery/market/vivid.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..013c192be3acdf49b3dc3f00fca33ae020bc5805
Binary files /dev/null and b/tonebox/gallery/market/vivid.jpg differ
diff --git a/tonebox/gallery/market/warm-negative.jpg b/tonebox/gallery/market/warm-negative.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..baf5e7abbc9c2e4d88193818e321256bae1ea5a2
Binary files /dev/null and b/tonebox/gallery/market/warm-negative.jpg differ
diff --git a/tonebox/gallery/market/warm-plus.jpg b/tonebox/gallery/market/warm-plus.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9157e9ad5debc023e1d454bf609d92ad9719b9d2
Binary files /dev/null and b/tonebox/gallery/market/warm-plus.jpg differ
diff --git a/tonebox/gallery/road/arctic.jpg b/tonebox/gallery/road/arctic.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..150b8bc69ef92a1deca6700646c32ca37ad5eac2
Binary files /dev/null and b/tonebox/gallery/road/arctic.jpg differ
diff --git a/tonebox/gallery/road/bleach-bypass.jpg b/tonebox/gallery/road/bleach-bypass.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f35ffe7925c39db92a0fedf253caec51fddedc42
Binary files /dev/null and b/tonebox/gallery/road/bleach-bypass.jpg differ
diff --git a/tonebox/gallery/road/blockbuster.jpg b/tonebox/gallery/road/blockbuster.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..53f328c4456dc3877806708b33537d2d11826c5d
Binary files /dev/null and b/tonebox/gallery/road/blockbuster.jpg differ
diff --git a/tonebox/gallery/road/blue-hour.jpg b/tonebox/gallery/road/blue-hour.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..77062dbc5e6fe2055e16de550fc5e4346eb303ad
Binary files /dev/null and b/tonebox/gallery/road/blue-hour.jpg differ
diff --git a/tonebox/gallery/road/blue-tone.jpg b/tonebox/gallery/road/blue-tone.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..cfb9b3e0c2fc0eeac02c4dd16f843ca3694e82ca
Binary files /dev/null and b/tonebox/gallery/road/blue-tone.jpg differ
diff --git a/tonebox/gallery/road/bw-green-filter.jpg b/tonebox/gallery/road/bw-green-filter.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..99ab3ae1eb4652f90be84923579cf2d1a422b434
Binary files /dev/null and b/tonebox/gallery/road/bw-green-filter.jpg differ
diff --git a/tonebox/gallery/road/bw-high-contrast.jpg b/tonebox/gallery/road/bw-high-contrast.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1ea14505cd0401dc79f32ab9c749c71732c60ab3
Binary files /dev/null and b/tonebox/gallery/road/bw-high-contrast.jpg differ
diff --git a/tonebox/gallery/road/bw-neutral.jpg b/tonebox/gallery/road/bw-neutral.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ecd5490f866b8dfddb07660a9df8a16ffc60e0ba
Binary files /dev/null and b/tonebox/gallery/road/bw-neutral.jpg differ
diff --git a/tonebox/gallery/road/bw-red-filter.jpg b/tonebox/gallery/road/bw-red-filter.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9a89d59675f1208c4405d2aad96c40b8b3d5ced7
Binary files /dev/null and b/tonebox/gallery/road/bw-red-filter.jpg differ
diff --git a/tonebox/gallery/road/bw-soft.jpg b/tonebox/gallery/road/bw-soft.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..aef69efa2a4ebe7784515402d692b4c68e6e8668
Binary files /dev/null and b/tonebox/gallery/road/bw-soft.jpg differ
diff --git a/tonebox/gallery/road/candlelight.jpg b/tonebox/gallery/road/candlelight.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..446e8127737e0a69113c8a9868defda7e02cd233
Binary files /dev/null and b/tonebox/gallery/road/candlelight.jpg differ
diff --git a/tonebox/gallery/road/cool-negative.jpg b/tonebox/gallery/road/cool-negative.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f379deca3e9a0f0eb2c0d8afa19de5cdc0d5d301
Binary files /dev/null and b/tonebox/gallery/road/cool-negative.jpg differ
diff --git a/tonebox/gallery/road/cool-plus.jpg b/tonebox/gallery/road/cool-plus.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b62174a1de0f80f3d24831821fdd20fb4d23fa57
Binary files /dev/null and b/tonebox/gallery/road/cool-plus.jpg differ
diff --git a/tonebox/gallery/road/cross-process.jpg b/tonebox/gallery/road/cross-process.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fe63e1323ca36d5a8b4227b00b65ef04abfa5d33
Binary files /dev/null and b/tonebox/gallery/road/cross-process.jpg differ
diff --git a/tonebox/gallery/road/crush-blacks.jpg b/tonebox/gallery/road/crush-blacks.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bdf7efd4161c46c4972a292a53819388e067b6b5
Binary files /dev/null and b/tonebox/gallery/road/crush-blacks.jpg differ
diff --git a/tonebox/gallery/road/cyanotype.jpg b/tonebox/gallery/road/cyanotype.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..461a50ed59af5178023cf6ad42c25e2f9a6e6ec5
Binary files /dev/null and b/tonebox/gallery/road/cyanotype.jpg differ
diff --git a/tonebox/gallery/road/day-for-night.jpg b/tonebox/gallery/road/day-for-night.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f1961c327e8c69c105c4769981cfd064ca6f7321
Binary files /dev/null and b/tonebox/gallery/road/day-for-night.jpg differ
diff --git a/tonebox/gallery/road/desert-gold.jpg b/tonebox/gallery/road/desert-gold.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fe2cc474db8c24d93d5991e133a24d05b6fd6cb6
Binary files /dev/null and b/tonebox/gallery/road/desert-gold.jpg differ
diff --git a/tonebox/gallery/road/dreamy-pastel.jpg b/tonebox/gallery/road/dreamy-pastel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e4f23f904f5059436a0a83256f0f2df819c568a7
Binary files /dev/null and b/tonebox/gallery/road/dreamy-pastel.jpg differ
diff --git a/tonebox/gallery/road/dungeon.jpg b/tonebox/gallery/road/dungeon.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8863e624137313f172f0f7b6e9bbe39f8bde196a
Binary files /dev/null and b/tonebox/gallery/road/dungeon.jpg differ
diff --git a/tonebox/gallery/road/dusk.jpg b/tonebox/gallery/road/dusk.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1c2bff6616eab4b472596e911c145df3a9723e88
Binary files /dev/null and b/tonebox/gallery/road/dusk.jpg differ
diff --git a/tonebox/gallery/road/expired-stock.jpg b/tonebox/gallery/road/expired-stock.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..31afebad205508ba316dbcf89a354b7367d60f64
Binary files /dev/null and b/tonebox/gallery/road/expired-stock.jpg differ
diff --git a/tonebox/gallery/road/faded-print.jpg b/tonebox/gallery/road/faded-print.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..23be52958b8f5cdcc77778d2fbf1e82d3b75b1d4
Binary files /dev/null and b/tonebox/gallery/road/faded-print.jpg differ
diff --git a/tonebox/gallery/road/fog.jpg b/tonebox/gallery/road/fog.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8028ebb0c8dbfb6084701f54731224035e458096
Binary files /dev/null and b/tonebox/gallery/road/fog.jpg differ
diff --git a/tonebox/gallery/road/frozen-tundra.jpg b/tonebox/gallery/road/frozen-tundra.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fc4f54ea0e5cbc14f68235690deb91ef4e04ae34
Binary files /dev/null and b/tonebox/gallery/road/frozen-tundra.jpg differ
diff --git a/tonebox/gallery/road/golden-hour.jpg b/tonebox/gallery/road/golden-hour.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0051b17788cdce9525f0fa82f132880a923e4808
Binary files /dev/null and b/tonebox/gallery/road/golden-hour.jpg differ
diff --git a/tonebox/gallery/road/horror-green.jpg b/tonebox/gallery/road/horror-green.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..50dd511b3abe0ac317f8d674a30087f1ec1dd48c
Binary files /dev/null and b/tonebox/gallery/road/horror-green.jpg differ
diff --git a/tonebox/gallery/road/lava.jpg b/tonebox/gallery/road/lava.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..093308fc3457784c21f71e8f1d98b23b6252dbb5
Binary files /dev/null and b/tonebox/gallery/road/lava.jpg differ
diff --git a/tonebox/gallery/road/lift-shadows.jpg b/tonebox/gallery/road/lift-shadows.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9c4c453552c91545c0cad2b1054ea21e7ab4f7e6
Binary files /dev/null and b/tonebox/gallery/road/lift-shadows.jpg differ
diff --git a/tonebox/gallery/road/matte.jpg b/tonebox/gallery/road/matte.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..07ca697bf86847f1473d92d3068bc48e05638df5
Binary files /dev/null and b/tonebox/gallery/road/matte.jpg differ
diff --git a/tonebox/gallery/road/midday-punch.jpg b/tonebox/gallery/road/midday-punch.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5c8ec83f07c32674a3ca1d1aa4687d620e32805c
Binary files /dev/null and b/tonebox/gallery/road/midday-punch.jpg differ
diff --git a/tonebox/gallery/road/moody-forest.jpg b/tonebox/gallery/road/moody-forest.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..676f579547600c9001311d2f31a87697d5b99624
Binary files /dev/null and b/tonebox/gallery/road/moody-forest.jpg differ
diff --git a/tonebox/gallery/road/moonlight.jpg b/tonebox/gallery/road/moonlight.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1b42ebcdf84768e4e9117e8f916d7b301ce67b33
Binary files /dev/null and b/tonebox/gallery/road/moonlight.jpg differ
diff --git a/tonebox/gallery/road/muted.jpg b/tonebox/gallery/road/muted.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8a601fe1539b4e088144f6412b7d79e4789c94e7
Binary files /dev/null and b/tonebox/gallery/road/muted.jpg differ
diff --git a/tonebox/gallery/road/neon.jpg b/tonebox/gallery/road/neon.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f95003fa8434246467fcd15687a577669a468a39
Binary files /dev/null and b/tonebox/gallery/road/neon.jpg differ
diff --git a/tonebox/gallery/road/night-city.jpg b/tonebox/gallery/road/night-city.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..51438b4c4a6bb95d3020947d5d329fdb8b0801a1
Binary files /dev/null and b/tonebox/gallery/road/night-city.jpg differ
diff --git a/tonebox/gallery/road/noir-blue.jpg b/tonebox/gallery/road/noir-blue.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c4dcbe65ded6213c4dea4689747673f85c730784
Binary files /dev/null and b/tonebox/gallery/road/noir-blue.jpg differ
diff --git a/tonebox/gallery/road/original.jpg b/tonebox/gallery/road/original.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..096bfc316319a67b5079dd4a5bf08216d6b55127
Binary files /dev/null and b/tonebox/gallery/road/original.jpg differ
diff --git a/tonebox/gallery/road/overcast.jpg b/tonebox/gallery/road/overcast.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6c69da9fb3138e9cd21495b28c487b90c3782816
Binary files /dev/null and b/tonebox/gallery/road/overcast.jpg differ
diff --git a/tonebox/gallery/road/pastel.jpg b/tonebox/gallery/road/pastel.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..127a02851e9bff5f2995ff5270b6f82cb346b283
Binary files /dev/null and b/tonebox/gallery/road/pastel.jpg differ
diff --git a/tonebox/gallery/road/punchy.jpg b/tonebox/gallery/road/punchy.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d924fb6c768fa7412ca4eb003ec869b992393cd8
Binary files /dev/null and b/tonebox/gallery/road/punchy.jpg differ
diff --git a/tonebox/gallery/road/retro-8bit.jpg b/tonebox/gallery/road/retro-8bit.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..24ffb9f1fad33928c3028faab2288d3d0f19869f
Binary files /dev/null and b/tonebox/gallery/road/retro-8bit.jpg differ
diff --git a/tonebox/gallery/road/scifi-clean.jpg b/tonebox/gallery/road/scifi-clean.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..470c929f197299e6adf29c67a773aad33e435124
Binary files /dev/null and b/tonebox/gallery/road/scifi-clean.jpg differ
diff --git a/tonebox/gallery/road/selenium.jpg b/tonebox/gallery/road/selenium.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b7b08168ebbe12bda97b9dbebfb0f3d16be0097b
Binary files /dev/null and b/tonebox/gallery/road/selenium.jpg differ
diff --git a/tonebox/gallery/road/sepia-drama.jpg b/tonebox/gallery/road/sepia-drama.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b0f473513cac8bf88a29813f651eb29e383d2054
Binary files /dev/null and b/tonebox/gallery/road/sepia-drama.jpg differ
diff --git a/tonebox/gallery/road/sepia.jpg b/tonebox/gallery/road/sepia.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0ed22e794733abec30e4b334a812edfe0a23925a
Binary files /dev/null and b/tonebox/gallery/road/sepia.jpg differ
diff --git a/tonebox/gallery/road/silver-retention.jpg b/tonebox/gallery/road/silver-retention.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2fb41f5bf7eed08ffcc6543faf41fbb21a072062
Binary files /dev/null and b/tonebox/gallery/road/silver-retention.jpg differ
diff --git a/tonebox/gallery/road/slide-punch.jpg b/tonebox/gallery/road/slide-punch.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..979d502323d7607f139756eac43c118041a3d2a5
Binary files /dev/null and b/tonebox/gallery/road/slide-punch.jpg differ
diff --git a/tonebox/gallery/road/split-tone.jpg b/tonebox/gallery/road/split-tone.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..cc7422b89639b5fcaa3a9910a893bf5e73c75ad9
Binary files /dev/null and b/tonebox/gallery/road/split-tone.jpg differ
diff --git a/tonebox/gallery/road/storm.jpg b/tonebox/gallery/road/storm.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e0be81e4dbf72239f2cd9294c205d72865dacb1c
Binary files /dev/null and b/tonebox/gallery/road/storm.jpg differ
diff --git a/tonebox/gallery/road/sunny-meadow.jpg b/tonebox/gallery/road/sunny-meadow.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..c7b6539b8489b0a19dcf66bedd36d4cad5e68a19
Binary files /dev/null and b/tonebox/gallery/road/sunny-meadow.jpg differ
diff --git a/tonebox/gallery/road/sunrise-pink.jpg b/tonebox/gallery/road/sunrise-pink.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..eb952a8ca631adce12d2306295b717e61dfacfba
Binary files /dev/null and b/tonebox/gallery/road/sunrise-pink.jpg differ
diff --git a/tonebox/gallery/road/teal-orange.jpg b/tonebox/gallery/road/teal-orange.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8b9c8c414126c1a084b05839edd9edcdaa55b300
Binary files /dev/null and b/tonebox/gallery/road/teal-orange.jpg differ
diff --git a/tonebox/gallery/road/toxic.jpg b/tonebox/gallery/road/toxic.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e111d3518de96d1fe3eb8fabb05e08a53d08a722
Binary files /dev/null and b/tonebox/gallery/road/toxic.jpg differ
diff --git a/tonebox/gallery/road/tungsten-film.jpg b/tonebox/gallery/road/tungsten-film.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..31ced8b390c8c44de70e4b4fa0e8381e57bed535
Binary files /dev/null and b/tonebox/gallery/road/tungsten-film.jpg differ
diff --git a/tonebox/gallery/road/two-strip.jpg b/tonebox/gallery/road/two-strip.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..16e2386d2a368fd4b1f7f2d6fec5e1ae0566f4d7
Binary files /dev/null and b/tonebox/gallery/road/two-strip.jpg differ
diff --git a/tonebox/gallery/road/underwater.jpg b/tonebox/gallery/road/underwater.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4634fb63dafe1152bc1d5d3a101a2c8f995d2e73
Binary files /dev/null and b/tonebox/gallery/road/underwater.jpg differ
diff --git a/tonebox/gallery/road/vintage-wash.jpg b/tonebox/gallery/road/vintage-wash.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..44e7c8a6aa348a5759f66269ebca4bbea017ac51
Binary files /dev/null and b/tonebox/gallery/road/vintage-wash.jpg differ
diff --git a/tonebox/gallery/road/vivid.jpg b/tonebox/gallery/road/vivid.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3a781baa832de92003e84452628cfcae67e981aa
Binary files /dev/null and b/tonebox/gallery/road/vivid.jpg differ
diff --git a/tonebox/gallery/road/warm-negative.jpg b/tonebox/gallery/road/warm-negative.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..83f7d7259e45f5b7d9cd3c0a7ee055c2792bbf90
Binary files /dev/null and b/tonebox/gallery/road/warm-negative.jpg differ
diff --git a/tonebox/gallery/road/warm-plus.jpg b/tonebox/gallery/road/warm-plus.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5add4fc260eea69905efc45ad02c0a1f32bc99f9
Binary files /dev/null and b/tonebox/gallery/road/warm-plus.jpg differ
diff --git a/tonebox/icon-192.png b/tonebox/icon-192.png
new file mode 100644
index 0000000000000000000000000000000000000000..e6ca8f94a041b17aaa49a4da50a80a32cfcf867e
Binary files /dev/null and b/tonebox/icon-192.png differ
diff --git a/tonebox/icon-512.png b/tonebox/icon-512.png
new file mode 100644
index 0000000000000000000000000000000000000000..654f1d7e21e4181e69ebcc38163d7ae8f649261a
--- /dev/null
+++ b/tonebox/icon-512.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1a82a2a1d87ece479ee5f3b2f827576d7c879b7cd4691613fe7d68f79cca1687
+size 103493
diff --git a/tonebox/icon.svg b/tonebox/icon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7a7d07d2aae0777ce1e907e0d285fc962ed0ef42
--- /dev/null
+++ b/tonebox/icon.svg
@@ -0,0 +1 @@
+
diff --git a/tonebox/index.html b/tonebox/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..8a497dcd261a59829c7fef1030b53b95058adc07
--- /dev/null
+++ b/tonebox/index.html
@@ -0,0 +1,129 @@
+
+
+
+
+
+Tonebox — Free LUT Previewer & 60 Colour Grading LUTs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Free LUT previewer: try colour grades on your own photo
+ Open a photo, click a look, drag the slider to compare. Load any .cube LUT you already have, or use the 8 free Tonebox looks. Everything runs in your browser; your photo is never uploaded.
+
+
+
+
+
+
+
⇆
+
Original Teal & Orange
+
+
+
+
+ Market
+ Lake
+ Road
+
+
Open your photo
+
+ Tip: drop a photo or a .cube file anywhere on this box.
+
+
+
+
+
+
+
+
+
The full pack: 60 looks, 5 formats
+
Film · Cinematic · Game Moods · Time of Day · Black & White · Essentials. Every look as a 33-point .cube , a Unity 1024×32 strip, a Godot 4 Texture3D strip, an Unreal 256×16 strip and a HaldCLUT . Commercial use included.
+
+
+
+
+
+ Previews show each look on the sample photo selected above. 🔓 = in the free set; you can try those on your own photo right now.
+
+
+
+ How to use the LUTs
+
+
DaVinci Resolve Project Settings → Color Management → Open LUT Folder, copy the cube folder in, click Update Lists. Right-click a node → LUT → Tonebox.
+
Premiere Pro · Final Cut Premiere: Lumetri Color → Creative → Look → Browse. Final Cut: Effects → Color → Custom LUT → Choose Custom LUT.
+
Photoshop · OBS · CapCut Photoshop: Color Lookup adjustment layer → Load 3D LUT. OBS: source Filters → Apply LUT. CapCut desktop: Adjustment → LUT → Import.
+
Unity (URP / HDRP) Import the unity/ PNG with sRGB off, no compression, no mipmaps, clamp. Add a Volume → Color Lookup and drop it in.
+
Godot 4 Import the godot/ PNG as Texture3D , 32 horizontal slices × 1 vertical. Environment → Adjustments → Color Correction.
+
Unreal Engine Import the unreal/ 256×16 PNG, Texture Group ColorLookupTable, no mipmaps. Post Process Volume → Color Grading LUT.
+
+ FAQ
+ What is a LUT?
+ A LUT (look-up table) maps every input colour to an output colour. A 3D LUT in .cube format stores that mapping on a 33×33×33 grid, and your software blends between the points. One small file recreates a whole grade.
+ Is my photo uploaded?
+ No. The previewer runs entirely in your browser; photos and .cube files you open never leave your device.
+ Which footage do the looks expect?
+ Normal display-referred colour (Rec.709 / sRGB), after your basic correction or your engine's tonemapping. For log footage, convert to Rec.709 first, then add a Tonebox look. Most looks work well at 50–80% intensity.
+ Can I use them commercially?
+ Yes: unlimited personal and client projects, and games may ship the engine strips inside the build. You can't resell or share the LUT files themselves.
+ Sample photos: CC0 from StockSnap (market by Pavan Trikutam, lake by Bonnie Moreland, road by Jordan Whitt).
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tonebox/lut.js b/tonebox/lut.js
new file mode 100644
index 0000000000000000000000000000000000000000..7bcbcdba1e24fa0d559c701755f7e2eb129997db
--- /dev/null
+++ b/tonebox/lut.js
@@ -0,0 +1,83 @@
+/* Tonebox LUT engine: parse .cube files and apply 3D LUTs to image pixels (trilinear). Runs in the browser and in tests.
+ © 2026 CyberMax. All rights reserved. */
+(function (root) {
+ "use strict";
+
+ // Parse a .cube file (Resolve/Adobe style). Returns {n, data: Float32Array(n^3*3), title, min, max}.
+ function parseCube(text) {
+ let n = 0, title = "";
+ let min = [0, 0, 0], max = [1, 1, 1];
+ const vals = [];
+ const lines = String(text).split(/\r?\n/);
+ for (let i = 0; i < lines.length; i++) {
+ const line = lines[i].trim();
+ if (!line || line[0] === "#") continue;
+ if (/^TITLE/i.test(line)) { title = line.replace(/^TITLE\s*/i, "").replace(/^"|"$/g, ""); continue; }
+ if (/^LUT_3D_SIZE/i.test(line)) { n = parseInt(line.split(/\s+/)[1], 10); continue; }
+ if (/^LUT_1D_SIZE/i.test(line)) throw new Error("1D LUTs are not supported; use a 3D .cube file.");
+ if (/^DOMAIN_MIN/i.test(line)) { min = line.split(/\s+/).slice(1).map(Number); continue; }
+ if (/^DOMAIN_MAX/i.test(line)) { max = line.split(/\s+/).slice(1).map(Number); continue; }
+ if (/^[A-Za-z_]/.test(line)) continue;
+ const p = line.split(/\s+/);
+ if (p.length >= 3) vals.push(+p[0], +p[1], +p[2]);
+ }
+ if (!n || n < 2 || n > 256) throw new Error("Missing or invalid LUT_3D_SIZE.");
+ if (vals.length !== n * n * n * 3) throw new Error("Expected " + n * n * n + " entries, found " + vals.length / 3 + ".");
+ for (let i = 0; i < vals.length; i++) if (!isFinite(vals[i])) throw new Error("The file contains a value that is not a number.");
+ return { n: n, data: Float32Array.from(vals), title: title, min: min, max: max };
+ }
+
+ // Tonebox preview bundle: "TBX1", n, count, then count grids of uint16 RGB.
+ function parsePreviewBin(buf) {
+ const dv = new DataView(buf);
+ const magic = String.fromCharCode(dv.getUint8(0), dv.getUint8(1), dv.getUint8(2), dv.getUint8(3));
+ if (magic !== "TBX1") throw new Error("bad preview bundle");
+ const n = dv.getUint32(4, true), count = dv.getUint32(8, true), size = n * n * n * 3, out = [];
+ for (let k = 0; k < count; k++) {
+ const data = new Float32Array(size);
+ for (let i = 0; i < size; i++) data[i] = dv.getUint16(12 + (k * size + i) * 2, true) / 65535;
+ out.push({ n: n, data: data, min: [0, 0, 0], max: [1, 1, 1] });
+ }
+ return out;
+ }
+
+ // Apply lut to RGBA pixels (a Uint8ClampedArray) in place. intensity 0..1 blends with the original.
+ // Builds a 256-entry index table per channel so the inner loop is only lookups and lerps.
+ function applyLut(px, lut, intensity) {
+ const n = lut.n, d = lut.data, t = intensity == null ? 1 : intensity, n1 = n - 1;
+ const idx = [], frac = [];
+ for (let c = 0; c < 3; c++) {
+ const lo = lut.min[c], span = (lut.max[c] - lo) || 1;
+ const I = new Int32Array(256), F = new Float32Array(256);
+ for (let v = 0; v < 256; v++) {
+ let x = ((v / 255 - lo) / span) * n1;
+ if (x < 0) x = 0; if (x > n1) x = n1;
+ let i0 = Math.floor(x); if (i0 >= n1) i0 = n1 - 1;
+ I[v] = i0; F[v] = x - i0;
+ }
+ idx.push(I); frac.push(F);
+ }
+ const [IR, IG, IB] = idx, [FR, FG, FB] = frac, sG = n * 3, sB = n * n * 3;
+ for (let p = 0; p < px.length; p += 4) {
+ const r = px[p], g = px[p + 1], b = px[p + 2];
+ const fr = FR[r], fg = FG[g], fb = FB[b];
+ const base = IB[b] * sB + IG[g] * sG + IR[r] * 3;
+ for (let c = 0; c < 3; c++) {
+ const o = base + c;
+ const c00 = d[o] + (d[o + 3] - d[o]) * fr;
+ const c10 = d[o + sG] + (d[o + sG + 3] - d[o + sG]) * fr;
+ const c01 = d[o + sB] + (d[o + sB + 3] - d[o + sB]) * fr;
+ const c11 = d[o + sB + sG] + (d[o + sB + sG + 3] - d[o + sB + sG]) * fr;
+ const c0 = c00 + (c10 - c00) * fg, c1 = c01 + (c11 - c01) * fg;
+ let v = (c0 + (c1 - c0) * fb) * 255;
+ v = px[p + c] + (v - px[p + c]) * t;
+ px[p + c] = v; // Uint8ClampedArray (canvas ImageData) clamps and rounds
+ }
+ }
+ return px;
+ }
+
+ const api = { parseCube: parseCube, parsePreviewBin: parsePreviewBin, applyLut: applyLut };
+ if (typeof module !== "undefined" && module.exports) module.exports = api;
+ else root.ToneboxLUT = api;
+})(typeof self !== "undefined" ? self : this);
diff --git a/tonebox/luts/looks.json b/tonebox/luts/looks.json
new file mode 100644
index 0000000000000000000000000000000000000000..84a6b551c0af5f65987958ebbbc1e00407f673db
--- /dev/null
+++ b/tonebox/luts/looks.json
@@ -0,0 +1,435 @@
+{
+ "version": "1.0.0",
+ "free": [
+ "teal-orange",
+ "golden-hour",
+ "faded-print",
+ "horror-green",
+ "bw-high-contrast",
+ "day-for-night",
+ "matte",
+ "cool-negative"
+ ],
+ "looks": [
+ {
+ "id": "warm-negative",
+ "name": "Warm Negative",
+ "collection": "Film",
+ "desc": "Soft warm print with gentle contrast and creamy skin tones.",
+ "free": false
+ },
+ {
+ "id": "cool-negative",
+ "name": "Cool Negative",
+ "collection": "Film",
+ "desc": "Clean, slightly cool negative look with green-cyan shadows.",
+ "free": true
+ },
+ {
+ "id": "faded-print",
+ "name": "Faded Print",
+ "collection": "Film",
+ "desc": "Matte blacks, lowered whites and muted colour, like an old photo print.",
+ "free": true
+ },
+ {
+ "id": "bleach-bypass",
+ "name": "Bleach Bypass",
+ "collection": "Film",
+ "desc": "High contrast, low saturation, silvery highlights.",
+ "free": false
+ },
+ {
+ "id": "cross-process",
+ "name": "Cross Process",
+ "collection": "Film",
+ "desc": "Yellow-green highlights, blue shadows and punchy colour.",
+ "free": false
+ },
+ {
+ "id": "slide-punch",
+ "name": "Slide Punch",
+ "collection": "Film",
+ "desc": "Saturated transparency-film look with deep blacks.",
+ "free": false
+ },
+ {
+ "id": "tungsten-film",
+ "name": "Tungsten Film",
+ "collection": "Film",
+ "desc": "Cool tungsten-balanced stock shot in daylight: blue cast, soft highlights.",
+ "free": false
+ },
+ {
+ "id": "expired-stock",
+ "name": "Expired Stock",
+ "collection": "Film",
+ "desc": "Magenta-shifted, lifted shadows and faded colour of expired film.",
+ "free": false
+ },
+ {
+ "id": "silver-retention",
+ "name": "Silver Retention",
+ "collection": "Film",
+ "desc": "Dense blacks and desaturated midtones, a harder cousin of bleach bypass.",
+ "free": false
+ },
+ {
+ "id": "two-strip",
+ "name": "Two-Strip",
+ "collection": "Film",
+ "desc": "Early two-colour process: red-orange and cyan-green only.",
+ "free": false
+ },
+ {
+ "id": "teal-orange",
+ "name": "Teal & Orange",
+ "collection": "Cinematic",
+ "desc": "Classic blockbuster grade: warm skin, teal shadows.",
+ "free": true
+ },
+ {
+ "id": "blockbuster",
+ "name": "Blockbuster",
+ "collection": "Cinematic",
+ "desc": "Heavier teal-orange with crushed blacks and bright highlights.",
+ "free": false
+ },
+ {
+ "id": "noir-blue",
+ "name": "Noir Blue",
+ "collection": "Cinematic",
+ "desc": "Night-time thriller: desaturated with steel-blue shadows.",
+ "free": false
+ },
+ {
+ "id": "desert-gold",
+ "name": "Desert Gold",
+ "collection": "Cinematic",
+ "desc": "Hot, sun-bleached yellow-orange for arid scenes.",
+ "free": false
+ },
+ {
+ "id": "night-city",
+ "name": "Night City",
+ "collection": "Cinematic",
+ "desc": "Cyan-magenta neon streets with deep contrast.",
+ "free": false
+ },
+ {
+ "id": "arctic",
+ "name": "Arctic",
+ "collection": "Cinematic",
+ "desc": "Icy, clean blues and near-white highlights.",
+ "free": false
+ },
+ {
+ "id": "moody-forest",
+ "name": "Moody Forest",
+ "collection": "Cinematic",
+ "desc": "Deep greens, cool shadows, subdued highlights.",
+ "free": false
+ },
+ {
+ "id": "dusk",
+ "name": "Dusk",
+ "collection": "Cinematic",
+ "desc": "Purple-pink evening sky with warm highlights.",
+ "free": false
+ },
+ {
+ "id": "neon",
+ "name": "Neon",
+ "collection": "Cinematic",
+ "desc": "Boosted magentas and cyans, everything else muted.",
+ "free": false
+ },
+ {
+ "id": "sepia-drama",
+ "name": "Sepia Drama",
+ "collection": "Cinematic",
+ "desc": "Warm brown period-drama tone with partial colour.",
+ "free": false
+ },
+ {
+ "id": "horror-green",
+ "name": "Horror Green",
+ "collection": "Game Moods",
+ "desc": "Sickly green cast, crushed shadows, low saturation.",
+ "free": true
+ },
+ {
+ "id": "dungeon",
+ "name": "Dungeon",
+ "collection": "Game Moods",
+ "desc": "Torch-lit warm pools against cold dark stone.",
+ "free": false
+ },
+ {
+ "id": "sunny-meadow",
+ "name": "Sunny Meadow",
+ "collection": "Game Moods",
+ "desc": "Bright, saturated, cheerful greens and blues.",
+ "free": false
+ },
+ {
+ "id": "toxic",
+ "name": "Toxic",
+ "collection": "Game Moods",
+ "desc": "Acid yellow-green wasteland.",
+ "free": false
+ },
+ {
+ "id": "underwater",
+ "name": "Underwater",
+ "collection": "Game Moods",
+ "desc": "Blue-green depth: reds absorbed, soft contrast.",
+ "free": false
+ },
+ {
+ "id": "frozen-tundra",
+ "name": "Frozen Tundra",
+ "collection": "Game Moods",
+ "desc": "Pale cyan snowfields and cold, low-saturation light.",
+ "free": false
+ },
+ {
+ "id": "lava",
+ "name": "Lava",
+ "collection": "Game Moods",
+ "desc": "Glowing reds and oranges, deep ember shadows.",
+ "free": false
+ },
+ {
+ "id": "dreamy-pastel",
+ "name": "Dreamy Pastel",
+ "collection": "Game Moods",
+ "desc": "Soft, airy pastel palette for cozy games.",
+ "free": false
+ },
+ {
+ "id": "retro-8bit",
+ "name": "Retro 8-bit",
+ "collection": "Game Moods",
+ "desc": "Posterised colour, 6 levels per channel, for pixel-art moods.",
+ "free": false
+ },
+ {
+ "id": "scifi-clean",
+ "name": "Sci-Fi Clean",
+ "collection": "Game Moods",
+ "desc": "Cool, clinical whites and teal accents.",
+ "free": false
+ },
+ {
+ "id": "golden-hour",
+ "name": "Golden Hour",
+ "collection": "Time of Day",
+ "desc": "Low warm sun, glowing highlights, soft shadows.",
+ "free": true
+ },
+ {
+ "id": "blue-hour",
+ "name": "Blue Hour",
+ "collection": "Time of Day",
+ "desc": "Deep twilight blue with a hint of warm light.",
+ "free": false
+ },
+ {
+ "id": "midday-punch",
+ "name": "Midday Punch",
+ "collection": "Time of Day",
+ "desc": "Hard noon light: strong contrast and clean colour.",
+ "free": false
+ },
+ {
+ "id": "overcast",
+ "name": "Overcast",
+ "collection": "Time of Day",
+ "desc": "Flat, soft grey-day light with muted colour.",
+ "free": false
+ },
+ {
+ "id": "moonlight",
+ "name": "Moonlight",
+ "collection": "Time of Day",
+ "desc": "Cold, dim, desaturated blue night.",
+ "free": false
+ },
+ {
+ "id": "day-for-night",
+ "name": "Day for Night",
+ "collection": "Time of Day",
+ "desc": "Turns daylight footage into a convincing night scene.",
+ "free": true
+ },
+ {
+ "id": "sunrise-pink",
+ "name": "Sunrise Pink",
+ "collection": "Time of Day",
+ "desc": "Rose-tinted dawn light with gentle contrast.",
+ "free": false
+ },
+ {
+ "id": "storm",
+ "name": "Storm",
+ "collection": "Time of Day",
+ "desc": "Dark slate skies, green-grey cast, heavy mood.",
+ "free": false
+ },
+ {
+ "id": "fog",
+ "name": "Fog",
+ "collection": "Time of Day",
+ "desc": "Hazy, low-contrast, bright milky shadows.",
+ "free": false
+ },
+ {
+ "id": "candlelight",
+ "name": "Candlelight",
+ "collection": "Time of Day",
+ "desc": "Warm, dim interior glow with amber highlights.",
+ "free": false
+ },
+ {
+ "id": "bw-neutral",
+ "name": "Neutral B&W",
+ "collection": "Black & White",
+ "desc": "Balanced black and white with natural tones.",
+ "free": false
+ },
+ {
+ "id": "bw-high-contrast",
+ "name": "High-Contrast B&W",
+ "collection": "Black & White",
+ "desc": "Graphic, hard black and white.",
+ "free": true
+ },
+ {
+ "id": "bw-soft",
+ "name": "Soft B&W",
+ "collection": "Black & White",
+ "desc": "Low-contrast, matte black and white.",
+ "free": false
+ },
+ {
+ "id": "bw-red-filter",
+ "name": "Red Filter B&W",
+ "collection": "Black & White",
+ "desc": "Dark skies and bright skin, like a red lens filter.",
+ "free": false
+ },
+ {
+ "id": "bw-green-filter",
+ "name": "Green Filter B&W",
+ "collection": "Black & White",
+ "desc": "Bright foliage, deeper skin tones.",
+ "free": false
+ },
+ {
+ "id": "blue-tone",
+ "name": "Blue Tone",
+ "collection": "Black & White",
+ "desc": "Monochrome with a cool blue tint.",
+ "free": false
+ },
+ {
+ "id": "selenium",
+ "name": "Selenium",
+ "collection": "Black & White",
+ "desc": "Cool purple-brown shadows of selenium-toned prints.",
+ "free": false
+ },
+ {
+ "id": "sepia",
+ "name": "Sepia",
+ "collection": "Black & White",
+ "desc": "Classic warm brown toned print.",
+ "free": false
+ },
+ {
+ "id": "cyanotype",
+ "name": "Cyanotype",
+ "collection": "Black & White",
+ "desc": "Prussian-blue photogram print.",
+ "free": false
+ },
+ {
+ "id": "split-tone",
+ "name": "Split Tone",
+ "collection": "Black & White",
+ "desc": "Monochrome with cool shadows and warm highlights.",
+ "free": false
+ },
+ {
+ "id": "warm-plus",
+ "name": "Warm +",
+ "collection": "Essentials",
+ "desc": "Clean warm white balance shift, nothing else.",
+ "free": false
+ },
+ {
+ "id": "cool-plus",
+ "name": "Cool +",
+ "collection": "Essentials",
+ "desc": "Clean cool white balance shift, nothing else.",
+ "free": false
+ },
+ {
+ "id": "vivid",
+ "name": "Vivid",
+ "collection": "Essentials",
+ "desc": "More saturation and a touch of contrast.",
+ "free": false
+ },
+ {
+ "id": "muted",
+ "name": "Muted",
+ "collection": "Essentials",
+ "desc": "Calm, desaturated colour.",
+ "free": false
+ },
+ {
+ "id": "matte",
+ "name": "Matte",
+ "collection": "Essentials",
+ "desc": "Lifted blacks for a modern matte finish.",
+ "free": true
+ },
+ {
+ "id": "lift-shadows",
+ "name": "Lift Shadows",
+ "collection": "Essentials",
+ "desc": "Opens up dark areas without touching highlights.",
+ "free": false
+ },
+ {
+ "id": "crush-blacks",
+ "name": "Crush Blacks",
+ "collection": "Essentials",
+ "desc": "Deeper, richer blacks.",
+ "free": false
+ },
+ {
+ "id": "pastel",
+ "name": "Pastel",
+ "collection": "Essentials",
+ "desc": "Light, soft colour with bright shadows.",
+ "free": false
+ },
+ {
+ "id": "vintage-wash",
+ "name": "Vintage Wash",
+ "collection": "Essentials",
+ "desc": "Warm, washed-out 70s colour.",
+ "free": false
+ },
+ {
+ "id": "punchy",
+ "name": "Punchy Contrast",
+ "collection": "Essentials",
+ "desc": "Strong S-curve with saturation held in check.",
+ "free": false
+ }
+ ]
+}
diff --git a/tonebox/luts/preview.bin b/tonebox/luts/preview.bin
new file mode 100644
index 0000000000000000000000000000000000000000..de40c35e2cc745a220229057f96eaaa927afb12c
--- /dev/null
+++ b/tonebox/luts/preview.bin
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6ede4e846c3a54a90c8c50d64866873bdb0615f99937ecadf1b6a34883904439
+size 235836
diff --git a/tonebox/manifest.webmanifest b/tonebox/manifest.webmanifest
new file mode 100644
index 0000000000000000000000000000000000000000..0d4c79bf0dc392c01a6077b4d54d8527c4e4808b
--- /dev/null
+++ b/tonebox/manifest.webmanifest
@@ -0,0 +1,15 @@
+{
+ "name": "Tonebox LUT Previewer by CyberMax",
+ "short_name": "Tonebox",
+ "description": "Try colour-grading LUTs on your own photo, in your browser.",
+ "start_url": "index.html",
+ "scope": "./",
+ "display": "standalone",
+ "background_color": "#f6f7fb",
+ "theme_color": "#3056d3",
+ "icons": [
+ {"src": "icon-192.png", "sizes": "192x192", "type": "image/png"},
+ {"src": "icon-512.png", "sizes": "512x512", "type": "image/png"},
+ {"src": "icon.svg", "sizes": "any", "type": "image/svg+xml"}
+ ]
+}
diff --git a/tonebox/og.png b/tonebox/og.png
new file mode 100644
index 0000000000000000000000000000000000000000..4ab96e52433bb378e0afececf2efe99c9d60b9a6
--- /dev/null
+++ b/tonebox/og.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:57649cbd6d80df4a708a51cd4e7c36a08061b2e3de9d8dc5328661e3c5c41272
+size 635495
diff --git a/tonebox/robots.txt b/tonebox/robots.txt
new file mode 100644
index 0000000000000000000000000000000000000000..39d2aa3ed5de7b1f65d3f644b6335935617594a0
--- /dev/null
+++ b/tonebox/robots.txt
@@ -0,0 +1,3 @@
+User-agent: *
+Allow: /
+Sitemap: https://cybermax-tools-cybermax.static.hf.space/tonebox/sitemap.xml
diff --git a/tonebox/samples/lake.jpg b/tonebox/samples/lake.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9a202a191f26f90460b0f7193d500a2b02b44cee
--- /dev/null
+++ b/tonebox/samples/lake.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c1312bc01f941d66cdddeb6c6a0465c8fb0dc023617d710ee0f22f44d374fd3f
+size 464387
diff --git a/tonebox/samples/market.jpg b/tonebox/samples/market.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b3f8cfb43fae1e68d57615e3456ae85216a36cb9
--- /dev/null
+++ b/tonebox/samples/market.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bfded1ac7f19f5c7511ad48da77b1b2323eafd5f43b672d5a064ad85626c6ca7
+size 119008
diff --git a/tonebox/samples/road.jpg b/tonebox/samples/road.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..66d3651ceca1e61670bb9bea27413954d02503dd
Binary files /dev/null and b/tonebox/samples/road.jpg differ
diff --git a/tonebox/sitemap.xml b/tonebox/sitemap.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1e8caab5c1da6092f200f91823aa852f85ec0417
--- /dev/null
+++ b/tonebox/sitemap.xml
@@ -0,0 +1,2 @@
+
+https://cybermax-tools-cybermax.static.hf.space/tonebox/index.html 2026-09-25
diff --git a/tonebox/style.css b/tonebox/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..f5337cd347d9f609b7eb2beb165b0233d4e3633c
--- /dev/null
+++ b/tonebox/style.css
@@ -0,0 +1,119 @@
+/* Tonebox styles (CyberMax web app base). © 2026 CyberMax. All rights reserved. */
+:root{
+ --bg:#f6f7fb;--surface:#fff;--ink:#1d2433;--muted:#5d6678;--line:#e1e5ee;--accent:#3056d3;--accent-ink:#fff;
+ --accent-soft:#e8edfc;--good:#1f8a4c;--warn:#b25e00;--warn-soft:#fff3e0;--code:#f0f2f7;color-scheme:light;
+}
+@media (prefers-color-scheme:dark){
+ :root{--bg:#12151c;--surface:#1b2029;--ink:#e8ecf4;--muted:#9aa4b6;--line:#2d3440;--accent:#7c9cff;--accent-ink:#0d1220;
+ --accent-soft:#232c45;--good:#5ccf8b;--warn:#ffb25c;--warn-soft:#3a2b18;--code:#232833;color-scheme:dark}
+}
+*{box-sizing:border-box}
+html,body{margin:0}
+body{background:var(--bg);color:var(--ink);font:15px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
+a{color:var(--accent)}
+button,input,select,textarea{font:inherit;color:inherit}
+.wrap{max-width:1040px;margin:0 auto;padding:0 16px}
+.top{background:var(--surface);border-bottom:1px solid var(--line)}
+.top .wrap{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:12px;padding-bottom:12px}
+.brand{font-weight:800;font-size:18px;display:flex;align-items:center;gap:8px}
+.brand .dot{width:26px;height:26px;border-radius:8px;background:var(--accent);color:var(--accent-ink);display:inline-flex;align-items:center;justify-content:center;font-size:14px}
+.brand small{font-weight:600;color:var(--muted);font-size:13px}
+h1{font-size:clamp(24px,4.5vw,34px);line-height:1.15;margin:22px 0 6px}
+.lede{color:var(--muted);margin:0 0 16px;max-width:720px}
+.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto}
+.tab{border:0;background:none;padding:10px 14px;font-weight:700;color:var(--muted);border-bottom:3px solid transparent;cursor:pointer;white-space:nowrap}
+.tab[aria-selected="true"]{color:var(--accent);border-bottom-color:var(--accent)}
+.panel[hidden]{display:none}
+.grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px}
+.card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px}
+.card h2{font-size:16px;margin:0 0 12px}
+label{display:block;font-size:13px;font-weight:700;margin:10px 0 4px}
+label .opt{font-weight:500;color:var(--muted)}
+.hint{font-size:12px;color:var(--muted);margin-top:3px}
+input[type=text],input[type=url],input[type=number],select,textarea{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--bg);outline:none;min-width:0}
+input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
+textarea{min-height:110px;resize:vertical;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}
+.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
+.row3{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
+.chips{display:flex;flex-wrap:wrap;gap:6px}
+.chip{border:1px solid var(--line);background:var(--bg);border-radius:999px;padding:5px 11px;font-size:13px;font-weight:600;cursor:pointer}
+.chip.on,.chip:hover{border-color:var(--accent);color:var(--accent)}
+.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;border-radius:10px;background:var(--accent);color:var(--accent-ink);font-weight:700;padding:10px 16px;cursor:pointer;text-decoration:none}
+.btn.ghost{background:var(--surface);color:var(--ink);border:1px solid var(--line)}
+.btn:disabled{opacity:.5;cursor:default}
+.btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
+.out{background:var(--code);border-radius:10px;padding:12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;word-break:break-all;min-height:46px}
+.warn{background:var(--warn-soft);color:var(--warn);border-radius:10px;padding:8px 12px;font-size:13px;margin-top:10px}
+.warn:empty{display:none}
+.check{display:flex;align-items:center;gap:8px;font-weight:600;font-size:13px;margin:8px 0}
+.check input{width:18px;height:18px}
+table{width:100%;border-collapse:collapse;font-size:13px}
+th,td{text-align:left;padding:7px 8px;border-bottom:1px solid var(--line);vertical-align:top}
+th{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
+td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
+.table-wrap{overflow-x:auto}
+.big{font-size:clamp(26px,5vw,38px);font-weight:800;font-variant-numeric:tabular-nums;line-height:1.1}
+.stat{background:var(--bg);border-radius:12px;padding:12px}
+.stat .k{font-size:12px;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.5px}
+.stat .v{font-size:22px;font-weight:800;font-variant-numeric:tabular-nums}
+.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}
+.related{border:1px dashed var(--accent);background:var(--accent-soft);border-radius:14px;padding:14px 16px;margin:18px 0}
+.related h2{font-size:15px;margin:0 0 6px}
+.related p{margin:4px 0;font-size:14px}
+.seo{color:var(--muted);font-size:14px;margin-top:10px}
+.seo h2{color:var(--ink);font-size:18px;margin:22px 0 6px}
+.seo h3{color:var(--ink);font-size:15px;margin:14px 0 4px}
+.more{border-top:1px solid var(--line);margin-top:28px;padding:18px 0 22px;text-align:center;font-size:14px}
+.more-title{font-weight:700;margin-bottom:8px}
+.more-links{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
+.more-links a{color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:6px 12px;text-decoration:none}
+.more-links a:hover{border-color:var(--accent)}
+.copy{margin-top:12px;color:var(--muted);font-size:12px}
+.toast{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:10px;font-weight:600;opacity:0;pointer-events:none;transition:opacity .2s;z-index:20}
+.toast.show{opacity:1}
+@media (max-width:760px){.grid,.row3{grid-template-columns:minmax(0,1fr)}}
+@media (max-width:420px){.row2{grid-template-columns:minmax(0,1fr)}}
+/* Tonebox */
+code{background:var(--code);padding:1px 5px;border-radius:5px;font-size:13px}
+.studio{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:16px;align-items:start}
+.viewer{padding:10px}
+.stage{position:relative;border-radius:10px;overflow:hidden;background:#0b0d12;line-height:0;touch-action:pan-y;user-select:none}
+.stage canvas{display:block;width:100%;height:auto}
+.before-clip{position:absolute;inset:0;overflow:hidden;clip-path:inset(0 50% 0 0)}
+.before-clip canvas{position:absolute;left:0;top:0;width:100%;height:100%}
+.handle{position:absolute;top:0;bottom:0;left:50%;width:2px;background:#fff;box-shadow:0 0 6px rgba(0,0,0,.5);pointer-events:none}
+.handle span{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:34px;height:34px;border-radius:50%;background:#fff;color:#1d2433;display:flex;align-items:center;justify-content:center;font-size:16px;line-height:1;font-weight:800}
+.tag{position:absolute;top:10px;background:rgba(0,0,0,.6);color:#fff;font-size:12px;font-weight:700;padding:4px 8px;border-radius:7px;line-height:1.3;pointer-events:none}
+.tag-l{left:10px}.tag-r{right:10px}
+#split{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:ew-resize;margin:0}
+.bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between;margin-top:10px}
+.file{position:relative;overflow:hidden}
+.file input{position:absolute;inset:0;opacity:0;cursor:pointer}
+.wide{width:100%;margin-top:12px}
+.stage.drag{outline:3px dashed var(--accent);outline-offset:-3px}
+.looks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
+.look{border:2px solid var(--line);background:var(--bg);border-radius:10px;padding:0;cursor:pointer;overflow:hidden;text-align:left}
+.look img{display:block;width:100%;aspect-ratio:3/2;object-fit:cover}
+.look span{display:block;padding:5px 8px;font-size:13px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
+.look.on{border-color:var(--accent)}
+input[type=range]{width:100%;accent-color:var(--accent)}
+.pack{margin-top:18px}
+.pack-head{display:flex;gap:16px;justify-content:space-between;align-items:flex-start;flex-wrap:wrap}
+.pack-head>div:first-child{flex:1 1 420px;min-width:0}
+.pack-head h2{font-size:20px;margin:0 0 6px}
+.pack-head p{margin:0;color:var(--muted)}
+.price{text-align:center;min-width:160px}
+.buy{margin-top:8px;width:100%;font-size:16px}
+.filters{margin:14px 0 10px}
+.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
+.g-item{margin:0;background:var(--bg);border:1px solid var(--line);border-radius:10px;overflow:hidden}
+.g-item img{display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;background:var(--code)}
+.g-item figcaption{padding:5px 8px 7px;font-size:12px;line-height:1.35}
+.g-item b{display:block;font-size:13px}
+.g-item small{color:var(--muted)}
+.how{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:4px 18px}
+.how p{margin:0 0 6px}
+@media (max-width:860px){.studio{grid-template-columns:minmax(0,1fr)}.looks{grid-template-columns:repeat(4,minmax(0,1fr))}}
+@media (max-width:520px){.looks{grid-template-columns:repeat(2,minmax(0,1fr))}.gallery{grid-template-columns:repeat(2,minmax(0,1fr))}.price{width:100%}}
+.top .btn{white-space:nowrap}
+@media (max-width:520px){.brand small{display:none}.top .btn{padding:8px 12px;font-size:14px}.bar .file{width:100%}}
diff --git a/tonebox/tonebox-free-8-luts-1.0.0.zip b/tonebox/tonebox-free-8-luts-1.0.0.zip
new file mode 100644
index 0000000000000000000000000000000000000000..edb59748095e34aba2476d0d4674bcb4c1352c46
--- /dev/null
+++ b/tonebox/tonebox-free-8-luts-1.0.0.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6f67c22be69e25049f740471d017997ce390778d2bf261574887b9bd9e5cae50
+size 3777038