← back to Nova Recolor
initial scaffold (gitify-all 2026-05-06)
315a148ef2b2b67c9e2b484138761291e5b7bbec · 2026-05-06 10:25:44 -0700 · Steve Abrams
Files touched
A .gitignoreA batch_recolor.pyA batch_recolor_v2.pyA draperies/acorn.jpgA draperies/adobe.jpgA draperies/african-violet.jpgA draperies/apricot.jpgA draperies/arrow-wood.jpgA draperies/aubergine.jpgA draperies/baltic.jpgA draperies/beige.jpgA draperies/biscuit.jpgA draperies/bluestone.jpgA draperies/blush-pink.jpgA draperies/bone.jpgA draperies/buff.jpgA draperies/buttercup.jpgA draperies/cane.jpgA draperies/carbon.jpgA draperies/cashew.jpgA draperies/cashmere.jpgA draperies/celadon.jpgA draperies/celery.jpgA draperies/champagne.jpgA draperies/china-blue.jpgA draperies/chrome-grey.jpgA draperies/cinder.jpgA draperies/cloud.jpgA draperies/cocoa.jpgA draperies/coral.jpgA draperies/cottage-grey.jpgA draperies/cream.jpgA draperies/dark-sand.jpgA draperies/dew.jpgA draperies/dove.jpgA draperies/dune.jpgA draperies/dusty-rose.jpgA draperies/ecru.jpgA draperies/fawn.jpgA draperies/french-blue.jpgA draperies/gainsborough.jpgA draperies/garnet.jpgA draperies/gelato.jpgA draperies/goldstone.jpgA draperies/granite.jpgA draperies/grape.jpgA draperies/green-marble.jpgA draperies/greystone.jpgA draperies/harvest.jpgA draperies/honey.jpgA draperies/hyacinth.jpgA draperies/iceberg.jpgA draperies/index.htmlA draperies/ivory.jpgA draperies/java.jpgA draperies/lavender.jpgA draperies/light-amethyst.jpgA draperies/light-grey.jpgA draperies/linen.jpgA draperies/madison-grey.jpgA draperies/maize.jpgA draperies/manifest.jsonA draperies/maroon.jpgA draperies/meadow.jpgA draperies/melon.jpgA draperies/milk.jpgA draperies/mint-julip.jpgA draperies/misty-dew.jpgA draperies/mocha.jpgA draperies/moss.jpgA draperies/mushroom.jpgA draperies/nutmeg.jpgA draperies/ocean.jpgA draperies/olive.jpgA draperies/oyster.jpgA draperies/pale-green.jpgA draperies/passion-blue.jpgA draperies/peach.jpgA draperies/pebble.jpgA draperies/peppermint.jpgA draperies/peridot.jpgA draperies/periwinkle.jpgA draperies/plum-pleasure.jpgA draperies/porcelain.jpgA draperies/powder-grey.jpgA draperies/prairie.jpgA draperies/putty.jpgA draperies/raffia.jpgA draperies/royal-purple.jpgA draperies/ruby.jpgA draperies/sable.jpgA draperies/safari.jpgA draperies/saffron.jpgA draperies/sage.jpgA draperies/salt.jpgA draperies/sand.jpgA draperies/sandalwood.jpgA draperies/scarlet-wine.jpgA draperies/sea-blue.jpgA draperies/sea-breeze.jpgA draperies/sea-grass.jpgA draperies/seafoam.jpgA draperies/sienna.jpgA draperies/silver.jpgA draperies/sky-blue.jpgA draperies/smoke.jpgA draperies/soft-clay.jpgA draperies/solar-yellow.jpgA draperies/steel.jpgA draperies/stone-grey.jpgA draperies/stone-taupe.jpgA draperies/straw.jpgA draperies/strong-white.jpgA draperies/sugar-plum.jpgA draperies/sweet-lilac.jpgA draperies/tan.jpgA draperies/tarragon.jpgA draperies/taupe.jpgA draperies/thyme.jpgA draperies/trench.jpgA draperies/vanilla.jpgA draperies/white.jpgA novasuede-ruby.jpgA sku_image_map.json
Diff
commit 315a148ef2b2b67c9e2b484138761291e5b7bbec
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed May 6 10:25:44 2026 -0700
initial scaffold (gitify-all 2026-05-06)
---
.gitignore | 12 +
batch_recolor.py | 60 +++++
batch_recolor_v2.py | 65 +++++
draperies/acorn.jpg | Bin 0 -> 203627 bytes
draperies/adobe.jpg | Bin 0 -> 133034 bytes
draperies/african-violet.jpg | Bin 0 -> 209786 bytes
draperies/apricot.jpg | Bin 0 -> 255742 bytes
draperies/arrow-wood.jpg | Bin 0 -> 407227 bytes
draperies/aubergine.jpg | Bin 0 -> 211314 bytes
draperies/baltic.jpg | Bin 0 -> 199007 bytes
draperies/beige.jpg | Bin 0 -> 178059 bytes
draperies/biscuit.jpg | Bin 0 -> 179559 bytes
draperies/bluestone.jpg | Bin 0 -> 299723 bytes
draperies/blush-pink.jpg | Bin 0 -> 392276 bytes
draperies/bone.jpg | Bin 0 -> 428040 bytes
draperies/buff.jpg | Bin 0 -> 179993 bytes
draperies/buttercup.jpg | Bin 0 -> 225283 bytes
draperies/cane.jpg | Bin 0 -> 270248 bytes
draperies/carbon.jpg | Bin 0 -> 217379 bytes
draperies/cashew.jpg | Bin 0 -> 264208 bytes
draperies/cashmere.jpg | Bin 0 -> 378261 bytes
draperies/celadon.jpg | Bin 0 -> 271950 bytes
draperies/celery.jpg | Bin 0 -> 277221 bytes
draperies/champagne.jpg | Bin 0 -> 160449 bytes
draperies/china-blue.jpg | Bin 0 -> 256462 bytes
draperies/chrome-grey.jpg | Bin 0 -> 310710 bytes
draperies/cinder.jpg | Bin 0 -> 252075 bytes
draperies/cloud.jpg | Bin 0 -> 207583 bytes
draperies/cocoa.jpg | Bin 0 -> 247597 bytes
draperies/coral.jpg | Bin 0 -> 268319 bytes
draperies/cottage-grey.jpg | Bin 0 -> 385236 bytes
draperies/cream.jpg | Bin 0 -> 206284 bytes
draperies/dark-sand.jpg | Bin 0 -> 419971 bytes
draperies/dew.jpg | Bin 0 -> 284080 bytes
draperies/dove.jpg | Bin 0 -> 316675 bytes
draperies/dune.jpg | Bin 0 -> 182797 bytes
draperies/dusty-rose.jpg | Bin 0 -> 292195 bytes
draperies/ecru.jpg | Bin 0 -> 194341 bytes
draperies/fawn.jpg | Bin 0 -> 238173 bytes
draperies/french-blue.jpg | Bin 0 -> 315326 bytes
draperies/gainsborough.jpg | Bin 0 -> 227663 bytes
draperies/garnet.jpg | Bin 0 -> 219906 bytes
draperies/gelato.jpg | Bin 0 -> 208799 bytes
draperies/goldstone.jpg | Bin 0 -> 264424 bytes
draperies/granite.jpg | Bin 0 -> 348261 bytes
draperies/grape.jpg | Bin 0 -> 231793 bytes
draperies/green-marble.jpg | Bin 0 -> 311112 bytes
draperies/greystone.jpg | Bin 0 -> 437557 bytes
draperies/harvest.jpg | Bin 0 -> 396762 bytes
draperies/honey.jpg | Bin 0 -> 238973 bytes
draperies/hyacinth.jpg | Bin 0 -> 263434 bytes
draperies/iceberg.jpg | Bin 0 -> 347536 bytes
draperies/index.html | 143 +++++++++++
draperies/ivory.jpg | Bin 0 -> 188711 bytes
draperies/java.jpg | Bin 0 -> 247597 bytes
draperies/lavender.jpg | Bin 0 -> 352430 bytes
draperies/light-amethyst.jpg | Bin 0 -> 421455 bytes
draperies/light-grey.jpg | Bin 0 -> 463423 bytes
draperies/linen.jpg | Bin 0 -> 170651 bytes
draperies/madison-grey.jpg | Bin 0 -> 261630 bytes
draperies/maize.jpg | Bin 0 -> 186035 bytes
draperies/manifest.json | 587 +++++++++++++++++++++++++++++++++++++++++++
draperies/maroon.jpg | Bin 0 -> 190770 bytes
draperies/meadow.jpg | Bin 0 -> 291848 bytes
draperies/melon.jpg | Bin 0 -> 248581 bytes
draperies/milk.jpg | Bin 0 -> 180540 bytes
draperies/mint-julip.jpg | Bin 0 -> 298177 bytes
draperies/misty-dew.jpg | Bin 0 -> 322641 bytes
draperies/mocha.jpg | Bin 0 -> 247597 bytes
draperies/moss.jpg | Bin 0 -> 276902 bytes
draperies/mushroom.jpg | Bin 0 -> 298908 bytes
draperies/nutmeg.jpg | Bin 0 -> 425775 bytes
draperies/ocean.jpg | Bin 0 -> 293826 bytes
draperies/olive.jpg | Bin 0 -> 179346 bytes
draperies/oyster.jpg | Bin 0 -> 394217 bytes
draperies/pale-green.jpg | Bin 0 -> 200422 bytes
draperies/passion-blue.jpg | Bin 0 -> 332308 bytes
draperies/peach.jpg | Bin 0 -> 190701 bytes
draperies/pebble.jpg | Bin 0 -> 238156 bytes
draperies/peppermint.jpg | Bin 0 -> 193200 bytes
draperies/peridot.jpg | Bin 0 -> 207898 bytes
draperies/periwinkle.jpg | Bin 0 -> 333505 bytes
draperies/plum-pleasure.jpg | Bin 0 -> 192143 bytes
draperies/porcelain.jpg | Bin 0 -> 148823 bytes
draperies/powder-grey.jpg | Bin 0 -> 251840 bytes
draperies/prairie.jpg | Bin 0 -> 408409 bytes
draperies/putty.jpg | Bin 0 -> 235752 bytes
draperies/raffia.jpg | Bin 0 -> 294738 bytes
draperies/royal-purple.jpg | Bin 0 -> 162872 bytes
draperies/ruby.jpg | Bin 0 -> 215853 bytes
draperies/sable.jpg | Bin 0 -> 239368 bytes
draperies/safari.jpg | Bin 0 -> 216962 bytes
draperies/saffron.jpg | Bin 0 -> 253905 bytes
draperies/sage.jpg | Bin 0 -> 271359 bytes
draperies/salt.jpg | Bin 0 -> 203613 bytes
draperies/sand.jpg | Bin 0 -> 290672 bytes
draperies/sandalwood.jpg | Bin 0 -> 270221 bytes
draperies/scarlet-wine.jpg | Bin 0 -> 211281 bytes
draperies/sea-blue.jpg | Bin 0 -> 281742 bytes
draperies/sea-breeze.jpg | Bin 0 -> 248050 bytes
draperies/sea-grass.jpg | Bin 0 -> 456926 bytes
draperies/seafoam.jpg | Bin 0 -> 310071 bytes
draperies/sienna.jpg | Bin 0 -> 388442 bytes
draperies/silver.jpg | Bin 0 -> 380030 bytes
draperies/sky-blue.jpg | Bin 0 -> 270004 bytes
draperies/smoke.jpg | Bin 0 -> 242720 bytes
draperies/soft-clay.jpg | Bin 0 -> 268677 bytes
draperies/solar-yellow.jpg | Bin 0 -> 245637 bytes
draperies/steel.jpg | Bin 0 -> 380030 bytes
draperies/stone-grey.jpg | Bin 0 -> 364037 bytes
draperies/stone-taupe.jpg | Bin 0 -> 271042 bytes
draperies/straw.jpg | Bin 0 -> 184188 bytes
draperies/strong-white.jpg | Bin 0 -> 160077 bytes
draperies/sugar-plum.jpg | Bin 0 -> 250335 bytes
draperies/sweet-lilac.jpg | Bin 0 -> 259779 bytes
draperies/tan.jpg | Bin 0 -> 213191 bytes
draperies/tarragon.jpg | Bin 0 -> 489617 bytes
draperies/taupe.jpg | Bin 0 -> 251282 bytes
draperies/thyme.jpg | Bin 0 -> 265061 bytes
draperies/trench.jpg | Bin 0 -> 291439 bytes
draperies/vanilla.jpg | Bin 0 -> 169908 bytes
draperies/white.jpg | Bin 0 -> 165713 bytes
novasuede-ruby.jpg | Bin 0 -> 1150303 bytes
sku_image_map.json | 40 +++
124 files changed, 907 insertions(+)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7e6a9c3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,12 @@
+node_modules/
+.env
+.env.local
+.env.*.local
+.env.*
+tmp/
+*.log
+.DS_Store
+dist/
+build/
+.next/
+*.bak
diff --git a/batch_recolor.py b/batch_recolor.py
new file mode 100644
index 0000000..775756d
--- /dev/null
+++ b/batch_recolor.py
@@ -0,0 +1,60 @@
+import os, re, glob, sys
+import numpy as np
+import cv2
+
+SRC = '/Users/stevestudio2/Pictures/novasuede-ruby.jpg'
+PICS = '/Users/stevestudio2/Pictures'
+
+def slugify(fname):
+ stem = os.path.splitext(fname)[0].rstrip('. ')
+ stem = re.sub(r'^Novasuede-\.?', '', stem, flags=re.I)
+ parts = re.split(r'[-\s]*T3[A-Z0-9]+W', stem, maxsplit=1, flags=re.I)
+ color = parts[0]
+ color = re.sub(r'[\s.]+', '-', color.strip())
+ color = re.sub(r'[^\w-]+', '', color)
+ color = re.sub(r'-+', '-', color).strip('-').lower()
+ return color
+
+def center_crop(img, frac=0.7):
+ h, w = img.shape[:2]
+ ch, cw = int(h*frac), int(w*frac)
+ y0, x0 = (h-ch)//2, (w-cw)//2
+ return img[y0:y0+ch, x0:x0+cw]
+
+def lab_reinhard(src_bgr, tgt_bgr):
+ src_lab = cv2.cvtColor(src_bgr, cv2.COLOR_BGR2LAB).astype(np.float32)
+ tgt_lab = cv2.cvtColor(tgt_bgr, cv2.COLOR_BGR2LAB).astype(np.float32)
+ s = src_lab.reshape(-1, 3)
+ t = tgt_lab.reshape(-1, 3)
+ s_mean, s_std = s.mean(0), s.std(0)
+ t_mean, t_std = t.mean(0), t.std(0)
+ out = (src_lab - s_mean) * (t_std / (s_std + 1e-8)) + t_mean
+ out = np.clip(out, 0, 255).astype(np.uint8)
+ return cv2.cvtColor(out, cv2.COLOR_LAB2BGR)
+
+src = cv2.imread(SRC, cv2.IMREAD_COLOR)
+assert src is not None, f"could not read {SRC}"
+
+targets = sorted(glob.glob(os.path.join(PICS, 'Novasuede*.jpg')))
+print(f"found {len(targets)} targets")
+
+results = []
+for t_path in targets:
+ fname = os.path.basename(t_path)
+ color = slugify(fname)
+ if not color:
+ print(f"SKIP (no color): {fname}")
+ continue
+ tgt = cv2.imread(t_path, cv2.IMREAD_COLOR)
+ if tgt is None:
+ print(f"SKIP (unreadable): {fname}")
+ continue
+ tgt_c = center_crop(tgt, 0.7)
+ out = lab_reinhard(src, tgt_c)
+ out_path = os.path.join(PICS, f'novasuede-{color}.jpg')
+ cv2.imwrite(out_path, out, [cv2.IMWRITE_JPEG_QUALITY, 92])
+ tgt_lab_mean = cv2.cvtColor(tgt_c, cv2.COLOR_BGR2LAB).astype(np.float32).reshape(-1,3).mean(0)
+ results.append((color, fname, tgt_lab_mean))
+ print(f"OK {fname:55s} -> novasuede-{color}.jpg tgt LAB mean [{tgt_lab_mean[0]:5.1f} {tgt_lab_mean[1]:5.1f} {tgt_lab_mean[2]:5.1f}]")
+
+print(f"\ndone: {len(results)} recolored")
diff --git a/batch_recolor_v2.py b/batch_recolor_v2.py
new file mode 100644
index 0000000..9603ced
--- /dev/null
+++ b/batch_recolor_v2.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python3
+"""Reinhard color-transfer batch: ruby drapery → every Novasuede color.
+
+Source drapery: /Users/stevestudio2/Projects/nova-recolor/novasuede-ruby.jpg
+Color samples: /tmp/novasuede_sources/*.jpg (downloaded from Shopify CDN)
+Output: /tmp/novasuede_drapery/{slug}.jpg
+
+Reinhard 2001 color transfer: matches mean+std of source LAB to target LAB.
+"""
+import os, glob, json, sys, time
+import numpy as np
+import cv2
+
+DRAPERY_SRC = '/Users/stevestudio2/Projects/nova-recolor/novasuede-ruby.jpg'
+SAMPLES_DIR = '/tmp/novasuede_sources'
+OUT_DIR = '/tmp/novasuede_drapery'
+
+os.makedirs(OUT_DIR, exist_ok=True)
+
+def center_crop(img, frac=0.7):
+ h, w = img.shape[:2]
+ ch, cw = int(h*frac), int(w*frac)
+ y0, x0 = (h-ch)//2, (w-cw)//2
+ return img[y0:y0+ch, x0:x0+cw]
+
+def lab_reinhard(src_bgr, tgt_bgr):
+ """Reinhard 2001 color transfer in LAB space."""
+ src_lab = cv2.cvtColor(src_bgr, cv2.COLOR_BGR2LAB).astype(np.float32)
+ tgt_lab = cv2.cvtColor(tgt_bgr, cv2.COLOR_BGR2LAB).astype(np.float32)
+ s = src_lab.reshape(-1, 3)
+ t = tgt_lab.reshape(-1, 3)
+ s_mean, s_std = s.mean(0), s.std(0)
+ t_mean, t_std = t.mean(0), t.std(0)
+ out = (src_lab - s_mean) * (t_std / (s_std + 1e-8)) + t_mean
+ out = np.clip(out, 0, 255).astype(np.uint8)
+ return cv2.cvtColor(out, cv2.COLOR_LAB2BGR)
+
+src = cv2.imread(DRAPERY_SRC, cv2.IMREAD_COLOR)
+assert src is not None, f"could not read {DRAPERY_SRC}"
+
+samples = sorted(glob.glob(os.path.join(SAMPLES_DIR, '*.jpg')))
+print(f"found {len(samples)} color samples")
+
+manifest = []
+t0 = time.time()
+for s_path in samples:
+ slug = os.path.splitext(os.path.basename(s_path))[0]
+ out_path = os.path.join(OUT_DIR, f'{slug}.jpg')
+ tgt = cv2.imread(s_path, cv2.IMREAD_COLOR)
+ if tgt is None:
+ print(f"SKIP unreadable: {s_path}")
+ continue
+ tgt_c = center_crop(tgt, 0.7)
+ out = lab_reinhard(src, tgt_c)
+ cv2.imwrite(out_path, out, [cv2.IMWRITE_JPEG_QUALITY, 88])
+ # Also extract a single hex color from the swatch center for the chip
+ cx, cy = tgt_c.shape[1]//2, tgt_c.shape[0]//2
+ bgr = tgt_c[cy, cx]
+ hex_color = '#{:02x}{:02x}{:02x}'.format(bgr[2], bgr[1], bgr[0])
+ manifest.append({'slug': slug, 'hex': hex_color, 'drapery': f'{slug}.jpg'})
+ print(f"OK {slug:30s} hex={hex_color}")
+
+with open(os.path.join(OUT_DIR, 'manifest.json'), 'w') as f:
+ json.dump(manifest, f, indent=2)
+print(f"\ndone in {time.time()-t0:.1f}s — {len(manifest)} draperies + manifest.json")
diff --git a/draperies/acorn.jpg b/draperies/acorn.jpg
new file mode 100644
index 0000000..ef8fe2a
Binary files /dev/null and b/draperies/acorn.jpg differ
diff --git a/draperies/adobe.jpg b/draperies/adobe.jpg
new file mode 100644
index 0000000..b5740c6
Binary files /dev/null and b/draperies/adobe.jpg differ
diff --git a/draperies/african-violet.jpg b/draperies/african-violet.jpg
new file mode 100644
index 0000000..64cbf5d
Binary files /dev/null and b/draperies/african-violet.jpg differ
diff --git a/draperies/apricot.jpg b/draperies/apricot.jpg
new file mode 100644
index 0000000..070e6d8
Binary files /dev/null and b/draperies/apricot.jpg differ
diff --git a/draperies/arrow-wood.jpg b/draperies/arrow-wood.jpg
new file mode 100644
index 0000000..4a37673
Binary files /dev/null and b/draperies/arrow-wood.jpg differ
diff --git a/draperies/aubergine.jpg b/draperies/aubergine.jpg
new file mode 100644
index 0000000..01d2b8a
Binary files /dev/null and b/draperies/aubergine.jpg differ
diff --git a/draperies/baltic.jpg b/draperies/baltic.jpg
new file mode 100644
index 0000000..e156864
Binary files /dev/null and b/draperies/baltic.jpg differ
diff --git a/draperies/beige.jpg b/draperies/beige.jpg
new file mode 100644
index 0000000..90d4aae
Binary files /dev/null and b/draperies/beige.jpg differ
diff --git a/draperies/biscuit.jpg b/draperies/biscuit.jpg
new file mode 100644
index 0000000..d3bc27c
Binary files /dev/null and b/draperies/biscuit.jpg differ
diff --git a/draperies/bluestone.jpg b/draperies/bluestone.jpg
new file mode 100644
index 0000000..bc2771a
Binary files /dev/null and b/draperies/bluestone.jpg differ
diff --git a/draperies/blush-pink.jpg b/draperies/blush-pink.jpg
new file mode 100644
index 0000000..49a1f2f
Binary files /dev/null and b/draperies/blush-pink.jpg differ
diff --git a/draperies/bone.jpg b/draperies/bone.jpg
new file mode 100644
index 0000000..7dc2e80
Binary files /dev/null and b/draperies/bone.jpg differ
diff --git a/draperies/buff.jpg b/draperies/buff.jpg
new file mode 100644
index 0000000..f0d4030
Binary files /dev/null and b/draperies/buff.jpg differ
diff --git a/draperies/buttercup.jpg b/draperies/buttercup.jpg
new file mode 100644
index 0000000..461c219
Binary files /dev/null and b/draperies/buttercup.jpg differ
diff --git a/draperies/cane.jpg b/draperies/cane.jpg
new file mode 100644
index 0000000..fec45c7
Binary files /dev/null and b/draperies/cane.jpg differ
diff --git a/draperies/carbon.jpg b/draperies/carbon.jpg
new file mode 100644
index 0000000..4de6976
Binary files /dev/null and b/draperies/carbon.jpg differ
diff --git a/draperies/cashew.jpg b/draperies/cashew.jpg
new file mode 100644
index 0000000..178d2fe
Binary files /dev/null and b/draperies/cashew.jpg differ
diff --git a/draperies/cashmere.jpg b/draperies/cashmere.jpg
new file mode 100644
index 0000000..c01abb8
Binary files /dev/null and b/draperies/cashmere.jpg differ
diff --git a/draperies/celadon.jpg b/draperies/celadon.jpg
new file mode 100644
index 0000000..745c54c
Binary files /dev/null and b/draperies/celadon.jpg differ
diff --git a/draperies/celery.jpg b/draperies/celery.jpg
new file mode 100644
index 0000000..dc3671a
Binary files /dev/null and b/draperies/celery.jpg differ
diff --git a/draperies/champagne.jpg b/draperies/champagne.jpg
new file mode 100644
index 0000000..8a7af13
Binary files /dev/null and b/draperies/champagne.jpg differ
diff --git a/draperies/china-blue.jpg b/draperies/china-blue.jpg
new file mode 100644
index 0000000..ddab229
Binary files /dev/null and b/draperies/china-blue.jpg differ
diff --git a/draperies/chrome-grey.jpg b/draperies/chrome-grey.jpg
new file mode 100644
index 0000000..a2d2aeb
Binary files /dev/null and b/draperies/chrome-grey.jpg differ
diff --git a/draperies/cinder.jpg b/draperies/cinder.jpg
new file mode 100644
index 0000000..e9f977a
Binary files /dev/null and b/draperies/cinder.jpg differ
diff --git a/draperies/cloud.jpg b/draperies/cloud.jpg
new file mode 100644
index 0000000..f1605d7
Binary files /dev/null and b/draperies/cloud.jpg differ
diff --git a/draperies/cocoa.jpg b/draperies/cocoa.jpg
new file mode 100644
index 0000000..68b5a49
Binary files /dev/null and b/draperies/cocoa.jpg differ
diff --git a/draperies/coral.jpg b/draperies/coral.jpg
new file mode 100644
index 0000000..ddc7c5b
Binary files /dev/null and b/draperies/coral.jpg differ
diff --git a/draperies/cottage-grey.jpg b/draperies/cottage-grey.jpg
new file mode 100644
index 0000000..0d14d30
Binary files /dev/null and b/draperies/cottage-grey.jpg differ
diff --git a/draperies/cream.jpg b/draperies/cream.jpg
new file mode 100644
index 0000000..b0fed57
Binary files /dev/null and b/draperies/cream.jpg differ
diff --git a/draperies/dark-sand.jpg b/draperies/dark-sand.jpg
new file mode 100644
index 0000000..d0fbe38
Binary files /dev/null and b/draperies/dark-sand.jpg differ
diff --git a/draperies/dew.jpg b/draperies/dew.jpg
new file mode 100644
index 0000000..0bf7ef7
Binary files /dev/null and b/draperies/dew.jpg differ
diff --git a/draperies/dove.jpg b/draperies/dove.jpg
new file mode 100644
index 0000000..417b56c
Binary files /dev/null and b/draperies/dove.jpg differ
diff --git a/draperies/dune.jpg b/draperies/dune.jpg
new file mode 100644
index 0000000..223861a
Binary files /dev/null and b/draperies/dune.jpg differ
diff --git a/draperies/dusty-rose.jpg b/draperies/dusty-rose.jpg
new file mode 100644
index 0000000..7c16870
Binary files /dev/null and b/draperies/dusty-rose.jpg differ
diff --git a/draperies/ecru.jpg b/draperies/ecru.jpg
new file mode 100644
index 0000000..24cbec0
Binary files /dev/null and b/draperies/ecru.jpg differ
diff --git a/draperies/fawn.jpg b/draperies/fawn.jpg
new file mode 100644
index 0000000..821523e
Binary files /dev/null and b/draperies/fawn.jpg differ
diff --git a/draperies/french-blue.jpg b/draperies/french-blue.jpg
new file mode 100644
index 0000000..7cfd787
Binary files /dev/null and b/draperies/french-blue.jpg differ
diff --git a/draperies/gainsborough.jpg b/draperies/gainsborough.jpg
new file mode 100644
index 0000000..b11e3f1
Binary files /dev/null and b/draperies/gainsborough.jpg differ
diff --git a/draperies/garnet.jpg b/draperies/garnet.jpg
new file mode 100644
index 0000000..586669d
Binary files /dev/null and b/draperies/garnet.jpg differ
diff --git a/draperies/gelato.jpg b/draperies/gelato.jpg
new file mode 100644
index 0000000..56fc4d2
Binary files /dev/null and b/draperies/gelato.jpg differ
diff --git a/draperies/goldstone.jpg b/draperies/goldstone.jpg
new file mode 100644
index 0000000..ceb48ff
Binary files /dev/null and b/draperies/goldstone.jpg differ
diff --git a/draperies/granite.jpg b/draperies/granite.jpg
new file mode 100644
index 0000000..11eb8f1
Binary files /dev/null and b/draperies/granite.jpg differ
diff --git a/draperies/grape.jpg b/draperies/grape.jpg
new file mode 100644
index 0000000..bc18bad
Binary files /dev/null and b/draperies/grape.jpg differ
diff --git a/draperies/green-marble.jpg b/draperies/green-marble.jpg
new file mode 100644
index 0000000..6be0f0a
Binary files /dev/null and b/draperies/green-marble.jpg differ
diff --git a/draperies/greystone.jpg b/draperies/greystone.jpg
new file mode 100644
index 0000000..843b10b
Binary files /dev/null and b/draperies/greystone.jpg differ
diff --git a/draperies/harvest.jpg b/draperies/harvest.jpg
new file mode 100644
index 0000000..2320eea
Binary files /dev/null and b/draperies/harvest.jpg differ
diff --git a/draperies/honey.jpg b/draperies/honey.jpg
new file mode 100644
index 0000000..f4f7e3d
Binary files /dev/null and b/draperies/honey.jpg differ
diff --git a/draperies/hyacinth.jpg b/draperies/hyacinth.jpg
new file mode 100644
index 0000000..78b3b99
Binary files /dev/null and b/draperies/hyacinth.jpg differ
diff --git a/draperies/iceberg.jpg b/draperies/iceberg.jpg
new file mode 100644
index 0000000..f0345a5
Binary files /dev/null and b/draperies/iceberg.jpg differ
diff --git a/draperies/index.html b/draperies/index.html
new file mode 100644
index 0000000..a02c562
--- /dev/null
+++ b/draperies/index.html
@@ -0,0 +1,143 @@
+<!doctype html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>Novasuede — Drapery Color Library (Reinhard)</title>
+ <style>
+ *{margin:0;padding:0;box-sizing:border-box}
+ body{
+ font-family:-apple-system,BlinkMacSystemFont,sans-serif;
+ color:#fff;
+ min-height:100vh;
+ background:#1a1a1a;
+ transition:background-image .3s ease;
+ background-size:cover;
+ background-position:center;
+ background-repeat:no-repeat;
+ background-attachment:fixed;
+ }
+ body.has-bg::before{
+ content:"";
+ position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:-1;pointer-events:none;
+ }
+ header{padding:24px 28px 12px;background:rgba(0,0,0,.55);backdrop-filter:blur(8px);position:sticky;top:0;z-index:10;border-bottom:1px solid rgba(255,255,255,.08)}
+ h1{font-size:22px;font-weight:600;letter-spacing:-.01em}
+ .sub{font-size:13px;opacity:.75;margin-top:4px}
+ .toolbar{display:flex;gap:12px;align-items:center;margin-top:14px;flex-wrap:wrap}
+ .toolbar input{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);color:#fff;padding:8px 12px;border-radius:8px;font:inherit;min-width:240px;outline:none}
+ .toolbar input::placeholder{color:rgba(255,255,255,.5)}
+ .toolbar button{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);color:#fff;padding:8px 14px;border-radius:8px;font:inherit;cursor:pointer}
+ .toolbar button:hover{background:rgba(255,255,255,.22)}
+ .grid{
+ display:grid;
+ grid-template-columns:repeat(auto-fill,minmax(110px,1fr));
+ gap:8px;
+ padding:18px;
+ }
+ .chip{
+ aspect-ratio:1.4/1;
+ border-radius:10px;
+ cursor:pointer;
+ border:2px solid rgba(255,255,255,.22);
+ transition:transform .12s, border-color .12s, box-shadow .15s;
+ position:relative;
+ overflow:hidden;
+ box-shadow:0 1px 4px rgba(0,0,0,.4);
+ }
+ .chip:hover{transform:translateY(-2px);border-color:rgba(255,255,255,.6);box-shadow:0 6px 18px rgba(0,0,0,.5)}
+ .chip.active{border-color:#fff;box-shadow:0 0 0 3px rgba(255,255,255,.55), 0 6px 18px rgba(0,0,0,.6)}
+ .chip .label{
+ position:absolute;left:0;right:0;bottom:0;padding:6px 8px;
+ background:linear-gradient(transparent, rgba(0,0,0,.78));
+ font-size:11px;font-weight:600;letter-spacing:.01em;
+ text-shadow:0 1px 2px rgba(0,0,0,.7);text-transform:capitalize;
+ }
+ .status{position:fixed;left:18px;bottom:18px;padding:10px 14px;border-radius:10px;background:rgba(0,0,0,.7);backdrop-filter:blur(6px);font-size:13px;font-weight:600;letter-spacing:.01em;border:1px solid rgba(255,255,255,.18);min-width:180px}
+ .status .name{font-size:15px;text-transform:capitalize;margin-bottom:2px}
+ .status .meta{font-size:11px;opacity:.65;font-weight:400}
+ .reset{position:fixed;right:18px;bottom:18px;padding:10px 16px;border-radius:10px;background:rgba(0,0,0,.7);backdrop-filter:blur(6px);font-size:13px;font-weight:600;border:1px solid rgba(255,255,255,.18);cursor:pointer;color:#fff}
+ .reset:hover{background:rgba(0,0,0,.85)}
+ </style>
+</head>
+<body>
+ <header>
+ <h1>Novasuede™ — Drapery Color Library</h1>
+ <div class="sub">Click any color to set the full-bleed drapery as the page background. Reinhard color transfer applied to a single ruby drapery base across <span id="cnt">117</span> Novasuede colors.</div>
+ <div class="toolbar">
+ <input id="filter" type="search" placeholder="Filter colors…">
+ <button id="random">Random</button>
+ </div>
+ </header>
+
+ <div class="grid" id="grid"></div>
+
+ <div class="status" id="status" style="display:none">
+ <div class="name" id="status-name">—</div>
+ <div class="meta" id="status-meta"></div>
+ </div>
+
+ <button class="reset" onclick="reset()">Reset</button>
+
+ <script>
+ let manifest = [];
+ const grid = document.getElementById('grid');
+ const status = document.getElementById('status');
+ const statusName = document.getElementById('status-name');
+ const statusMeta = document.getElementById('status-meta');
+
+ fetch('manifest.json').then(r => r.json()).then(m => {
+ manifest = m;
+ document.getElementById('cnt').textContent = m.length;
+ render(m);
+ });
+
+ function render(items){
+ grid.innerHTML = '';
+ items.forEach(it => {
+ const chip = document.createElement('div');
+ chip.className = 'chip';
+ chip.style.background = it.hex;
+ chip.dataset.slug = it.slug;
+ chip.dataset.hex = it.hex;
+ chip.dataset.drapery = it.drapery;
+ chip.title = it.slug + ' · ' + it.hex;
+ const label = document.createElement('div');
+ label.className = 'label';
+ label.textContent = it.slug.replace(/-/g, ' ');
+ chip.appendChild(label);
+ chip.addEventListener('click', () => activate(chip));
+ grid.appendChild(chip);
+ });
+ }
+
+ function activate(chip){
+ document.querySelectorAll('.chip.active').forEach(c => c.classList.remove('active'));
+ chip.classList.add('active');
+ const url = chip.dataset.drapery;
+ document.body.classList.add('has-bg');
+ document.body.style.backgroundImage = 'url("' + url + '")';
+ statusName.textContent = chip.dataset.slug.replace(/-/g, ' ');
+ statusMeta.textContent = chip.dataset.hex + ' · ' + url;
+ status.style.display = 'block';
+ }
+
+ function reset(){
+ document.querySelectorAll('.chip.active').forEach(c => c.classList.remove('active'));
+ document.body.classList.remove('has-bg');
+ document.body.style.backgroundImage = '';
+ status.style.display = 'none';
+ }
+
+ document.getElementById('filter').addEventListener('input', e => {
+ const q = e.target.value.trim().toLowerCase();
+ const filtered = !q ? manifest : manifest.filter(m => m.slug.includes(q));
+ render(filtered);
+ });
+
+ document.getElementById('random').addEventListener('click', () => {
+ const chips = document.querySelectorAll('.chip');
+ if (chips.length) activate(chips[Math.floor(Math.random()*chips.length)]);
+ });
+ </script>
+</body>
+</html>
diff --git a/draperies/ivory.jpg b/draperies/ivory.jpg
new file mode 100644
index 0000000..6ff12fc
Binary files /dev/null and b/draperies/ivory.jpg differ
diff --git a/draperies/java.jpg b/draperies/java.jpg
new file mode 100644
index 0000000..68b5a49
Binary files /dev/null and b/draperies/java.jpg differ
diff --git a/draperies/lavender.jpg b/draperies/lavender.jpg
new file mode 100644
index 0000000..e09b5d1
Binary files /dev/null and b/draperies/lavender.jpg differ
diff --git a/draperies/light-amethyst.jpg b/draperies/light-amethyst.jpg
new file mode 100644
index 0000000..48b6187
Binary files /dev/null and b/draperies/light-amethyst.jpg differ
diff --git a/draperies/light-grey.jpg b/draperies/light-grey.jpg
new file mode 100644
index 0000000..53e579b
Binary files /dev/null and b/draperies/light-grey.jpg differ
diff --git a/draperies/linen.jpg b/draperies/linen.jpg
new file mode 100644
index 0000000..3e6824c
Binary files /dev/null and b/draperies/linen.jpg differ
diff --git a/draperies/madison-grey.jpg b/draperies/madison-grey.jpg
new file mode 100644
index 0000000..eadd6ee
Binary files /dev/null and b/draperies/madison-grey.jpg differ
diff --git a/draperies/maize.jpg b/draperies/maize.jpg
new file mode 100644
index 0000000..d95d0cb
Binary files /dev/null and b/draperies/maize.jpg differ
diff --git a/draperies/manifest.json b/draperies/manifest.json
new file mode 100644
index 0000000..981629f
--- /dev/null
+++ b/draperies/manifest.json
@@ -0,0 +1,587 @@
+[
+ {
+ "slug": "acorn",
+ "hex": "#73350c",
+ "drapery": "acorn.jpg"
+ },
+ {
+ "slug": "adobe",
+ "hex": "#f2dcc4",
+ "drapery": "adobe.jpg"
+ },
+ {
+ "slug": "african-violet",
+ "hex": "#302142",
+ "drapery": "african-violet.jpg"
+ },
+ {
+ "slug": "apricot",
+ "hex": "#d65d30",
+ "drapery": "apricot.jpg"
+ },
+ {
+ "slug": "arrow-wood",
+ "hex": "#6d5b45",
+ "drapery": "arrow-wood.jpg"
+ },
+ {
+ "slug": "aubergine",
+ "hex": "#341729",
+ "drapery": "aubergine.jpg"
+ },
+ {
+ "slug": "baltic",
+ "hex": "#b6bab9",
+ "drapery": "baltic.jpg"
+ },
+ {
+ "slug": "beige",
+ "hex": "#dac4af",
+ "drapery": "beige.jpg"
+ },
+ {
+ "slug": "biscuit",
+ "hex": "#d9c7b3",
+ "drapery": "biscuit.jpg"
+ },
+ {
+ "slug": "bluestone",
+ "hex": "#817782",
+ "drapery": "bluestone.jpg"
+ },
+ {
+ "slug": "blush-pink",
+ "hex": "#b94e44",
+ "drapery": "blush-pink.jpg"
+ },
+ {
+ "slug": "bone",
+ "hex": "#bdb084",
+ "drapery": "bone.jpg"
+ },
+ {
+ "slug": "buff",
+ "hex": "#ead2ba",
+ "drapery": "buff.jpg"
+ },
+ {
+ "slug": "buttercup",
+ "hex": "#e4aa7a",
+ "drapery": "buttercup.jpg"
+ },
+ {
+ "slug": "cane",
+ "hex": "#c37e3d",
+ "drapery": "cane.jpg"
+ },
+ {
+ "slug": "carbon",
+ "hex": "#0b0e0d",
+ "drapery": "carbon.jpg"
+ },
+ {
+ "slug": "cashew",
+ "hex": "#9a5126",
+ "drapery": "cashew.jpg"
+ },
+ {
+ "slug": "cashmere",
+ "hex": "#65591f",
+ "drapery": "cashmere.jpg"
+ },
+ {
+ "slug": "celadon",
+ "hex": "#a29177",
+ "drapery": "celadon.jpg"
+ },
+ {
+ "slug": "celery",
+ "hex": "#8f8d54",
+ "drapery": "celery.jpg"
+ },
+ {
+ "slug": "champagne",
+ "hex": "#f2ddcc",
+ "drapery": "champagne.jpg"
+ },
+ {
+ "slug": "china-blue",
+ "hex": "#045982",
+ "drapery": "china-blue.jpg"
+ },
+ {
+ "slug": "chrome-grey",
+ "hex": "#384349",
+ "drapery": "chrome-grey.jpg"
+ },
+ {
+ "slug": "cinder",
+ "hex": "#110b0d",
+ "drapery": "cinder.jpg"
+ },
+ {
+ "slug": "cloud",
+ "hex": "#c7c7bf",
+ "drapery": "cloud.jpg"
+ },
+ {
+ "slug": "cocoa",
+ "hex": "#6e4d2c",
+ "drapery": "cocoa.jpg"
+ },
+ {
+ "slug": "coral",
+ "hex": "#e39274",
+ "drapery": "coral.jpg"
+ },
+ {
+ "slug": "cottage-grey",
+ "hex": "#a29f8c",
+ "drapery": "cottage-grey.jpg"
+ },
+ {
+ "slug": "cream",
+ "hex": "#d8c2ab",
+ "drapery": "cream.jpg"
+ },
+ {
+ "slug": "dark-sand",
+ "hex": "#af833c",
+ "drapery": "dark-sand.jpg"
+ },
+ {
+ "slug": "dew",
+ "hex": "#d9ad88",
+ "drapery": "dew.jpg"
+ },
+ {
+ "slug": "dove",
+ "hex": "#c2c4bf",
+ "drapery": "dove.jpg"
+ },
+ {
+ "slug": "dune",
+ "hex": "#e7cfb7",
+ "drapery": "dune.jpg"
+ },
+ {
+ "slug": "dusty-rose",
+ "hex": "#ca9293",
+ "drapery": "dusty-rose.jpg"
+ },
+ {
+ "slug": "ecru",
+ "hex": "#e7d6bc",
+ "drapery": "ecru.jpg"
+ },
+ {
+ "slug": "fawn",
+ "hex": "#d1bba6",
+ "drapery": "fawn.jpg"
+ },
+ {
+ "slug": "french-blue",
+ "hex": "#81a3be",
+ "drapery": "french-blue.jpg"
+ },
+ {
+ "slug": "gainsborough",
+ "hex": "#d3c4bd",
+ "drapery": "gainsborough.jpg"
+ },
+ {
+ "slug": "garnet",
+ "hex": "#b32726",
+ "drapery": "garnet.jpg"
+ },
+ {
+ "slug": "gelato",
+ "hex": "#e4d3cb",
+ "drapery": "gelato.jpg"
+ },
+ {
+ "slug": "goldstone",
+ "hex": "#c96600",
+ "drapery": "goldstone.jpg"
+ },
+ {
+ "slug": "granite",
+ "hex": "#b6a881",
+ "drapery": "granite.jpg"
+ },
+ {
+ "slug": "grape",
+ "hex": "#412a3a",
+ "drapery": "grape.jpg"
+ },
+ {
+ "slug": "green-marble",
+ "hex": "#668681",
+ "drapery": "green-marble.jpg"
+ },
+ {
+ "slug": "greystone",
+ "hex": "#414045",
+ "drapery": "greystone.jpg"
+ },
+ {
+ "slug": "harvest",
+ "hex": "#b79f73",
+ "drapery": "harvest.jpg"
+ },
+ {
+ "slug": "honey",
+ "hex": "#e4af7d",
+ "drapery": "honey.jpg"
+ },
+ {
+ "slug": "hyacinth",
+ "hex": "#8e7281",
+ "drapery": "hyacinth.jpg"
+ },
+ {
+ "slug": "iceberg",
+ "hex": "#b3a888",
+ "drapery": "iceberg.jpg"
+ },
+ {
+ "slug": "ivory",
+ "hex": "#eaddd4",
+ "drapery": "ivory.jpg"
+ },
+ {
+ "slug": "java",
+ "hex": "#6e4d2c",
+ "drapery": "java.jpg"
+ },
+ {
+ "slug": "lavender",
+ "hex": "#8a5b7b",
+ "drapery": "lavender.jpg"
+ },
+ {
+ "slug": "light-amethyst",
+ "hex": "#bfbbcc",
+ "drapery": "light-amethyst.jpg"
+ },
+ {
+ "slug": "light-grey",
+ "hex": "#aea89a",
+ "drapery": "light-grey.jpg"
+ },
+ {
+ "slug": "linen",
+ "hex": "#ddd2cc",
+ "drapery": "linen.jpg"
+ },
+ {
+ "slug": "madison-grey",
+ "hex": "#524a47",
+ "drapery": "madison-grey.jpg"
+ },
+ {
+ "slug": "maize",
+ "hex": "#e4c292",
+ "drapery": "maize.jpg"
+ },
+ {
+ "slug": "maroon",
+ "hex": "#6d2123",
+ "drapery": "maroon.jpg"
+ },
+ {
+ "slug": "meadow",
+ "hex": "#949341",
+ "drapery": "meadow.jpg"
+ },
+ {
+ "slug": "melon",
+ "hex": "#ec8042",
+ "drapery": "melon.jpg"
+ },
+ {
+ "slug": "milk",
+ "hex": "#eddfd2",
+ "drapery": "milk.jpg"
+ },
+ {
+ "slug": "mint-julip",
+ "hex": "#98af9b",
+ "drapery": "mint-julip.jpg"
+ },
+ {
+ "slug": "misty-dew",
+ "hex": "#cdc7ad",
+ "drapery": "misty-dew.jpg"
+ },
+ {
+ "slug": "mocha",
+ "hex": "#6e4d2c",
+ "drapery": "mocha.jpg"
+ },
+ {
+ "slug": "moss",
+ "hex": "#524636",
+ "drapery": "moss.jpg"
+ },
+ {
+ "slug": "mushroom",
+ "hex": "#91603f",
+ "drapery": "mushroom.jpg"
+ },
+ {
+ "slug": "nutmeg",
+ "hex": "#846f44",
+ "drapery": "nutmeg.jpg"
+ },
+ {
+ "slug": "ocean",
+ "hex": "#466659",
+ "drapery": "ocean.jpg"
+ },
+ {
+ "slug": "olive",
+ "hex": "#312c18",
+ "drapery": "olive.jpg"
+ },
+ {
+ "slug": "oyster",
+ "hex": "#b3a582",
+ "drapery": "oyster.jpg"
+ },
+ {
+ "slug": "pale-green",
+ "hex": "#b0c9c3",
+ "drapery": "pale-green.jpg"
+ },
+ {
+ "slug": "passion-blue",
+ "hex": "#0053bd",
+ "drapery": "passion-blue.jpg"
+ },
+ {
+ "slug": "peach",
+ "hex": "#e1b7a7",
+ "drapery": "peach.jpg"
+ },
+ {
+ "slug": "pebble",
+ "hex": "#e3c9b8",
+ "drapery": "pebble.jpg"
+ },
+ {
+ "slug": "peppermint",
+ "hex": "#d3b8af",
+ "drapery": "peppermint.jpg"
+ },
+ {
+ "slug": "peridot",
+ "hex": "#31270c",
+ "drapery": "peridot.jpg"
+ },
+ {
+ "slug": "periwinkle",
+ "hex": "#8c97b5",
+ "drapery": "periwinkle.jpg"
+ },
+ {
+ "slug": "plum-pleasure",
+ "hex": "#470c22",
+ "drapery": "plum-pleasure.jpg"
+ },
+ {
+ "slug": "porcelain",
+ "hex": "#e7d3c5",
+ "drapery": "porcelain.jpg"
+ },
+ {
+ "slug": "powder-grey",
+ "hex": "#c0b7b2",
+ "drapery": "powder-grey.jpg"
+ },
+ {
+ "slug": "prairie",
+ "hex": "#9a875f",
+ "drapery": "prairie.jpg"
+ },
+ {
+ "slug": "putty",
+ "hex": "#c49b6d",
+ "drapery": "putty.jpg"
+ },
+ {
+ "slug": "raffia",
+ "hex": "#b09063",
+ "drapery": "raffia.jpg"
+ },
+ {
+ "slug": "royal-purple",
+ "hex": "#180f20",
+ "drapery": "royal-purple.jpg"
+ },
+ {
+ "slug": "ruby",
+ "hex": "#83271c",
+ "drapery": "ruby.jpg"
+ },
+ {
+ "slug": "sable",
+ "hex": "#190507",
+ "drapery": "sable.jpg"
+ },
+ {
+ "slug": "safari",
+ "hex": "#d1ac89",
+ "drapery": "safari.jpg"
+ },
+ {
+ "slug": "saffron",
+ "hex": "#f4bf79",
+ "drapery": "saffron.jpg"
+ },
+ {
+ "slug": "sage",
+ "hex": "#939087",
+ "drapery": "sage.jpg"
+ },
+ {
+ "slug": "salt",
+ "hex": "#cfcbc2",
+ "drapery": "salt.jpg"
+ },
+ {
+ "slug": "sand",
+ "hex": "#c8c8c0",
+ "drapery": "sand.jpg"
+ },
+ {
+ "slug": "sandalwood",
+ "hex": "#d69873",
+ "drapery": "sandalwood.jpg"
+ },
+ {
+ "slug": "scarlet-wine",
+ "hex": "#3f0615",
+ "drapery": "scarlet-wine.jpg"
+ },
+ {
+ "slug": "sea-blue",
+ "hex": "#505f80",
+ "drapery": "sea-blue.jpg"
+ },
+ {
+ "slug": "sea-breeze",
+ "hex": "#9db2a3",
+ "drapery": "sea-breeze.jpg"
+ },
+ {
+ "slug": "sea-grass",
+ "hex": "#7b7e4f",
+ "drapery": "sea-grass.jpg"
+ },
+ {
+ "slug": "seafoam",
+ "hex": "#6b5d42",
+ "drapery": "seafoam.jpg"
+ },
+ {
+ "slug": "sienna",
+ "hex": "#916536",
+ "drapery": "sienna.jpg"
+ },
+ {
+ "slug": "silver",
+ "hex": "#7d7457",
+ "drapery": "silver.jpg"
+ },
+ {
+ "slug": "sky-blue",
+ "hex": "#85adc6",
+ "drapery": "sky-blue.jpg"
+ },
+ {
+ "slug": "smoke",
+ "hex": "#42352d",
+ "drapery": "smoke.jpg"
+ },
+ {
+ "slug": "soft-clay",
+ "hex": "#c6745c",
+ "drapery": "soft-clay.jpg"
+ },
+ {
+ "slug": "solar-yellow",
+ "hex": "#fbbb59",
+ "drapery": "solar-yellow.jpg"
+ },
+ {
+ "slug": "steel",
+ "hex": "#7d7457",
+ "drapery": "steel.jpg"
+ },
+ {
+ "slug": "stone-grey",
+ "hex": "#7a6258",
+ "drapery": "stone-grey.jpg"
+ },
+ {
+ "slug": "stone-taupe",
+ "hex": "#b1886c",
+ "drapery": "stone-taupe.jpg"
+ },
+ {
+ "slug": "straw",
+ "hex": "#e2aa75",
+ "drapery": "straw.jpg"
+ },
+ {
+ "slug": "strong-white",
+ "hex": "#e3ded8",
+ "drapery": "strong-white.jpg"
+ },
+ {
+ "slug": "sugar-plum",
+ "hex": "#c6799b",
+ "drapery": "sugar-plum.jpg"
+ },
+ {
+ "slug": "sweet-lilac",
+ "hex": "#947c9e",
+ "drapery": "sweet-lilac.jpg"
+ },
+ {
+ "slug": "tan",
+ "hex": "#d1a580",
+ "drapery": "tan.jpg"
+ },
+ {
+ "slug": "tarragon",
+ "hex": "#6a6d26",
+ "drapery": "tarragon.jpg"
+ },
+ {
+ "slug": "taupe",
+ "hex": "#ecdbc9",
+ "drapery": "taupe.jpg"
+ },
+ {
+ "slug": "thyme",
+ "hex": "#393d24",
+ "drapery": "thyme.jpg"
+ },
+ {
+ "slug": "trench",
+ "hex": "#6c5e51",
+ "drapery": "trench.jpg"
+ },
+ {
+ "slug": "vanilla",
+ "hex": "#dbc9b1",
+ "drapery": "vanilla.jpg"
+ },
+ {
+ "slug": "white",
+ "hex": "#e2ddd7",
+ "drapery": "white.jpg"
+ }
+]
\ No newline at end of file
diff --git a/draperies/maroon.jpg b/draperies/maroon.jpg
new file mode 100644
index 0000000..96f2a84
Binary files /dev/null and b/draperies/maroon.jpg differ
diff --git a/draperies/meadow.jpg b/draperies/meadow.jpg
new file mode 100644
index 0000000..f8cf05b
Binary files /dev/null and b/draperies/meadow.jpg differ
diff --git a/draperies/melon.jpg b/draperies/melon.jpg
new file mode 100644
index 0000000..c1679f6
Binary files /dev/null and b/draperies/melon.jpg differ
diff --git a/draperies/milk.jpg b/draperies/milk.jpg
new file mode 100644
index 0000000..d8443f1
Binary files /dev/null and b/draperies/milk.jpg differ
diff --git a/draperies/mint-julip.jpg b/draperies/mint-julip.jpg
new file mode 100644
index 0000000..6c01557
Binary files /dev/null and b/draperies/mint-julip.jpg differ
diff --git a/draperies/misty-dew.jpg b/draperies/misty-dew.jpg
new file mode 100644
index 0000000..c512fe1
Binary files /dev/null and b/draperies/misty-dew.jpg differ
diff --git a/draperies/mocha.jpg b/draperies/mocha.jpg
new file mode 100644
index 0000000..68b5a49
Binary files /dev/null and b/draperies/mocha.jpg differ
diff --git a/draperies/moss.jpg b/draperies/moss.jpg
new file mode 100644
index 0000000..3c96f1a
Binary files /dev/null and b/draperies/moss.jpg differ
diff --git a/draperies/mushroom.jpg b/draperies/mushroom.jpg
new file mode 100644
index 0000000..a1431cc
Binary files /dev/null and b/draperies/mushroom.jpg differ
diff --git a/draperies/nutmeg.jpg b/draperies/nutmeg.jpg
new file mode 100644
index 0000000..ee51c48
Binary files /dev/null and b/draperies/nutmeg.jpg differ
diff --git a/draperies/ocean.jpg b/draperies/ocean.jpg
new file mode 100644
index 0000000..3c72ba4
Binary files /dev/null and b/draperies/ocean.jpg differ
diff --git a/draperies/olive.jpg b/draperies/olive.jpg
new file mode 100644
index 0000000..062e7a6
Binary files /dev/null and b/draperies/olive.jpg differ
diff --git a/draperies/oyster.jpg b/draperies/oyster.jpg
new file mode 100644
index 0000000..c8101b0
Binary files /dev/null and b/draperies/oyster.jpg differ
diff --git a/draperies/pale-green.jpg b/draperies/pale-green.jpg
new file mode 100644
index 0000000..9323faf
Binary files /dev/null and b/draperies/pale-green.jpg differ
diff --git a/draperies/passion-blue.jpg b/draperies/passion-blue.jpg
new file mode 100644
index 0000000..001a1df
Binary files /dev/null and b/draperies/passion-blue.jpg differ
diff --git a/draperies/peach.jpg b/draperies/peach.jpg
new file mode 100644
index 0000000..32b5d2a
Binary files /dev/null and b/draperies/peach.jpg differ
diff --git a/draperies/pebble.jpg b/draperies/pebble.jpg
new file mode 100644
index 0000000..0adac70
Binary files /dev/null and b/draperies/pebble.jpg differ
diff --git a/draperies/peppermint.jpg b/draperies/peppermint.jpg
new file mode 100644
index 0000000..1c695bf
Binary files /dev/null and b/draperies/peppermint.jpg differ
diff --git a/draperies/peridot.jpg b/draperies/peridot.jpg
new file mode 100644
index 0000000..e4cbbdf
Binary files /dev/null and b/draperies/peridot.jpg differ
diff --git a/draperies/periwinkle.jpg b/draperies/periwinkle.jpg
new file mode 100644
index 0000000..4e6da60
Binary files /dev/null and b/draperies/periwinkle.jpg differ
diff --git a/draperies/plum-pleasure.jpg b/draperies/plum-pleasure.jpg
new file mode 100644
index 0000000..2bd2700
Binary files /dev/null and b/draperies/plum-pleasure.jpg differ
diff --git a/draperies/porcelain.jpg b/draperies/porcelain.jpg
new file mode 100644
index 0000000..a4f2cad
Binary files /dev/null and b/draperies/porcelain.jpg differ
diff --git a/draperies/powder-grey.jpg b/draperies/powder-grey.jpg
new file mode 100644
index 0000000..4f422c5
Binary files /dev/null and b/draperies/powder-grey.jpg differ
diff --git a/draperies/prairie.jpg b/draperies/prairie.jpg
new file mode 100644
index 0000000..0324ac2
Binary files /dev/null and b/draperies/prairie.jpg differ
diff --git a/draperies/putty.jpg b/draperies/putty.jpg
new file mode 100644
index 0000000..61c87b2
Binary files /dev/null and b/draperies/putty.jpg differ
diff --git a/draperies/raffia.jpg b/draperies/raffia.jpg
new file mode 100644
index 0000000..8547494
Binary files /dev/null and b/draperies/raffia.jpg differ
diff --git a/draperies/royal-purple.jpg b/draperies/royal-purple.jpg
new file mode 100644
index 0000000..ce93583
Binary files /dev/null and b/draperies/royal-purple.jpg differ
diff --git a/draperies/ruby.jpg b/draperies/ruby.jpg
new file mode 100644
index 0000000..0d42cf0
Binary files /dev/null and b/draperies/ruby.jpg differ
diff --git a/draperies/sable.jpg b/draperies/sable.jpg
new file mode 100644
index 0000000..075b63f
Binary files /dev/null and b/draperies/sable.jpg differ
diff --git a/draperies/safari.jpg b/draperies/safari.jpg
new file mode 100644
index 0000000..bb545b1
Binary files /dev/null and b/draperies/safari.jpg differ
diff --git a/draperies/saffron.jpg b/draperies/saffron.jpg
new file mode 100644
index 0000000..082e8b7
Binary files /dev/null and b/draperies/saffron.jpg differ
diff --git a/draperies/sage.jpg b/draperies/sage.jpg
new file mode 100644
index 0000000..86fbeba
Binary files /dev/null and b/draperies/sage.jpg differ
diff --git a/draperies/salt.jpg b/draperies/salt.jpg
new file mode 100644
index 0000000..4ff345f
Binary files /dev/null and b/draperies/salt.jpg differ
diff --git a/draperies/sand.jpg b/draperies/sand.jpg
new file mode 100644
index 0000000..21b6f64
Binary files /dev/null and b/draperies/sand.jpg differ
diff --git a/draperies/sandalwood.jpg b/draperies/sandalwood.jpg
new file mode 100644
index 0000000..b07b170
Binary files /dev/null and b/draperies/sandalwood.jpg differ
diff --git a/draperies/scarlet-wine.jpg b/draperies/scarlet-wine.jpg
new file mode 100644
index 0000000..904503c
Binary files /dev/null and b/draperies/scarlet-wine.jpg differ
diff --git a/draperies/sea-blue.jpg b/draperies/sea-blue.jpg
new file mode 100644
index 0000000..2cb7458
Binary files /dev/null and b/draperies/sea-blue.jpg differ
diff --git a/draperies/sea-breeze.jpg b/draperies/sea-breeze.jpg
new file mode 100644
index 0000000..37e079e
Binary files /dev/null and b/draperies/sea-breeze.jpg differ
diff --git a/draperies/sea-grass.jpg b/draperies/sea-grass.jpg
new file mode 100644
index 0000000..dc8cc22
Binary files /dev/null and b/draperies/sea-grass.jpg differ
diff --git a/draperies/seafoam.jpg b/draperies/seafoam.jpg
new file mode 100644
index 0000000..d3e5bf5
Binary files /dev/null and b/draperies/seafoam.jpg differ
diff --git a/draperies/sienna.jpg b/draperies/sienna.jpg
new file mode 100644
index 0000000..ba5e775
Binary files /dev/null and b/draperies/sienna.jpg differ
diff --git a/draperies/silver.jpg b/draperies/silver.jpg
new file mode 100644
index 0000000..a978abc
Binary files /dev/null and b/draperies/silver.jpg differ
diff --git a/draperies/sky-blue.jpg b/draperies/sky-blue.jpg
new file mode 100644
index 0000000..9c1c2da
Binary files /dev/null and b/draperies/sky-blue.jpg differ
diff --git a/draperies/smoke.jpg b/draperies/smoke.jpg
new file mode 100644
index 0000000..8014812
Binary files /dev/null and b/draperies/smoke.jpg differ
diff --git a/draperies/soft-clay.jpg b/draperies/soft-clay.jpg
new file mode 100644
index 0000000..e096b69
Binary files /dev/null and b/draperies/soft-clay.jpg differ
diff --git a/draperies/solar-yellow.jpg b/draperies/solar-yellow.jpg
new file mode 100644
index 0000000..cf885dc
Binary files /dev/null and b/draperies/solar-yellow.jpg differ
diff --git a/draperies/steel.jpg b/draperies/steel.jpg
new file mode 100644
index 0000000..a978abc
Binary files /dev/null and b/draperies/steel.jpg differ
diff --git a/draperies/stone-grey.jpg b/draperies/stone-grey.jpg
new file mode 100644
index 0000000..dbb1905
Binary files /dev/null and b/draperies/stone-grey.jpg differ
diff --git a/draperies/stone-taupe.jpg b/draperies/stone-taupe.jpg
new file mode 100644
index 0000000..137f5b8
Binary files /dev/null and b/draperies/stone-taupe.jpg differ
diff --git a/draperies/straw.jpg b/draperies/straw.jpg
new file mode 100644
index 0000000..8ba8438
Binary files /dev/null and b/draperies/straw.jpg differ
diff --git a/draperies/strong-white.jpg b/draperies/strong-white.jpg
new file mode 100644
index 0000000..96b06ec
Binary files /dev/null and b/draperies/strong-white.jpg differ
diff --git a/draperies/sugar-plum.jpg b/draperies/sugar-plum.jpg
new file mode 100644
index 0000000..2ab6afa
Binary files /dev/null and b/draperies/sugar-plum.jpg differ
diff --git a/draperies/sweet-lilac.jpg b/draperies/sweet-lilac.jpg
new file mode 100644
index 0000000..d2e521c
Binary files /dev/null and b/draperies/sweet-lilac.jpg differ
diff --git a/draperies/tan.jpg b/draperies/tan.jpg
new file mode 100644
index 0000000..b9678a8
Binary files /dev/null and b/draperies/tan.jpg differ
diff --git a/draperies/tarragon.jpg b/draperies/tarragon.jpg
new file mode 100644
index 0000000..c642909
Binary files /dev/null and b/draperies/tarragon.jpg differ
diff --git a/draperies/taupe.jpg b/draperies/taupe.jpg
new file mode 100644
index 0000000..f87c94c
Binary files /dev/null and b/draperies/taupe.jpg differ
diff --git a/draperies/thyme.jpg b/draperies/thyme.jpg
new file mode 100644
index 0000000..7198b04
Binary files /dev/null and b/draperies/thyme.jpg differ
diff --git a/draperies/trench.jpg b/draperies/trench.jpg
new file mode 100644
index 0000000..4522fb1
Binary files /dev/null and b/draperies/trench.jpg differ
diff --git a/draperies/vanilla.jpg b/draperies/vanilla.jpg
new file mode 100644
index 0000000..b366173
Binary files /dev/null and b/draperies/vanilla.jpg differ
diff --git a/draperies/white.jpg b/draperies/white.jpg
new file mode 100644
index 0000000..3738fac
Binary files /dev/null and b/draperies/white.jpg differ
diff --git a/novasuede-ruby.jpg b/novasuede-ruby.jpg
new file mode 100644
index 0000000..d4af1f9
Binary files /dev/null and b/novasuede-ruby.jpg differ
diff --git a/sku_image_map.json b/sku_image_map.json
new file mode 100644
index 0000000..60ff46b
--- /dev/null
+++ b/sku_image_map.json
@@ -0,0 +1,40 @@
+{
+ "DWCC-112000": null,
+ "DWCC-109200": "novasuede-pistachio.jpg",
+ "DWCC-110800": "novasuede-rosewater.jpg",
+ "DWCC-112030": "novasuede-bliss.jpg",
+ "DWCC-112040": "novasuede-blank-slate.jpg",
+ "DWCC-112050": "novasuede-amber.jpg",
+ "DWCC-112060": "novasuede-blush-rose.jpg",
+ "DWCC-112070": "novasuede-cement.jpg",
+ "DWCC-112080": "novasuede-colonial-blue.jpg",
+ "DWCC-112090": "novasuede-dusty-ranch.jpg",
+ "DWCC-112100": "novasuede-dusty-teal.jpg",
+ "DWCC-112110": "novasuede-fire-red.jpg",
+ "DWCC-112120": "novasuede-flagstone.jpg",
+ "DWCC-112130": "novasuede-henna.jpg",
+ "DWCC-112140": "novasuede-kiva.jpg",
+ "DWCC-112150": "novasuede-lipstick-red.jpg",
+ "DWCC-112160": "novasuede-noir-black.jpg",
+ "DWCC-112170": "novasuede-opal.jpg",
+ "DWCC-112180": "novasuede-pastel-blue.jpg",
+ "DWCC-112190": "novasuede-pastel-pink.jpg",
+ "DWCC-112200": "novasuede-persimmon.jpg",
+ "DWCC-112210": "novasuede-port-blue.jpg",
+ "DWCC-112220": "novasuede-pink-lace.jpg",
+ "DWCC-112230": "novasuede-royal-blue.jpg",
+ "DWCC-112240": "novasuede-raisin.jpg",
+ "DWCC-112270": "novasuede-sedona.jpg",
+ "DWCC-112280": "novasuede-shale.jpg",
+ "DWCC-112290": "novasuede-spruce.jpg",
+ "DWCC-112310": "novasuede-terracotta.jpg",
+ "DWCC-112320": "novasuede-thistle.jpg",
+ "DWCC-112330": "novasuede-tusk.jpg",
+ "DWCC-112340": "novasuede-umber.jpg",
+ "DWCC-112350": "novasuede-verdigris.jpg",
+ "DWCC-112360": "novasuede-vermillion-red.jpg",
+ "DWCC-112370": "novasuede-wheat.jpg",
+ "DWCC-112380": "novasuede-winter-white.jpg",
+ "DWCC-112390": "novasuede-woodland.jpg",
+ "DWCC-112400": "novasuede-snow.jpg"
+}
(oldest)
·
back to Nova Recolor
·
chore: macstudio3 migration — reconcile from mac2 + repoint 7e22c66 →