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 + + + + + + + + + + + + + + + + + +
+
◐ Tonebox by CyberMax
+ Get all 60 · $9 +
+ +
+

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.

+ +
+
+
+ +
+ + OriginalTeal & Orange + +
+
+
+ + + +
+ +
+

Tip: drop a photo or a .cube file anywhere on this box.

+
+ +
+

Free looks

+
+ + + +
+
+ + Free 8 LUTs (.zip) +
+

The free zip has .cube files plus Unity, Godot, Unreal and HaldCLUT versions of all 8 looks.

+
+
+ +
+
+
+

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.

+
+
$9
one-time · instant download
+ Buy on Polar
+
+
+ +

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.html2026-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