[object Object]

← back to Wallco Ai

Pattern generation always anchors on a REAL natural wallcovering texture: add mica + abaca/seagrass/jute/hemp/arrowroot/paperweave/bamboo/reed to gen-luxe pickTextureBrief pool; codify the real-texture-ground rule in CLAUDE.md

ebf027d8ee08c4124dd3d6842e289a02b9561b49 · 2026-05-31 18:36:00 -0700 · Steve

Files touched

Diff

commit ebf027d8ee08c4124dd3d6842e289a02b9561b49
Author: Steve <steve@designerwallcoverings.com>
Date:   Sun May 31 18:36:00 2026 -0700

    Pattern generation always anchors on a REAL natural wallcovering texture: add mica + abaca/seagrass/jute/hemp/arrowroot/paperweave/bamboo/reed to gen-luxe pickTextureBrief pool; codify the real-texture-ground rule in CLAUDE.md
---
 CLAUDE.md           |  1 +
 scripts/gen-luxe.js | 14 +++++++++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/CLAUDE.md b/CLAUDE.md
index ce374c6..77eb990 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -51,6 +51,7 @@ Critical excludes (already in `.deploy.conf`) — these files ARE genuinely PROD
 
 - **Round-1 outputs are sacred.** Generators emit one shot per prompt. Don't retry-until-clean — feed defects through `scripts/fix-design.js` / `fix-seam.py` / `fix-frame-overlay.js` to preserve composition. Re-rolling discards the artist intent. See `~/.claude/skills/fix-design/` for the fixer playbook.
 - **Solid screen-print colors only.** No gradients, no transparency, no ghost layers unless the prompt explicitly asks for them. Anti-prompt enforcement in `scripts/generate_designs.js` plus a Gemini vision pre-publish gate.
+- **Always paint on a REAL natural wallcovering texture.** When generating a pattern, the ground MUST be anchored to an actual DW natural-material SKU — **grasscloth, cork, raffia, mica, real linen, silk, sisal, abaca, seagrass, jute, hemp, arrowroot, paperweave, bamboo, reed** — never a flat/hallucinated "ivory paper" ground. The motif is painted *on top of the real textile* so the weave/slubs/flecks show through. Mechanism: `scripts/gen-luxe.js` `pickTextureBrief()` pulls a random real SKU from `shopify_products` (matched by material regex) and injects `Ground: <family> <material> (matched DW SKU <name>, dominant #hex)` into the prompt; the snapshot namer then reads that ground hex for the colorway (`refresh_designs_snapshot.py` `ground_hex()`). DW has real SKUs for all of these (mica 292, cork 384, raffia 381, grasscloth 1978, linen 1857, silk 1478, +2862 other-natural). If you add a new generator, copy this real-texture-anchor pattern — a flat paper ground is a regression.
 - **Settlement gate before publish.** `~/.claude/skills/settlement/` orchestrates 5 detectors (a1 directional leaves, a2 open space, a3 multiple colors, b prohibited elements, acceptable elements) + verdict combinator. Never set `is_published=true` without the gate returning `OK`.
 - **TIFs are full-size archives.** Every design has a `tif_path` (150 dpi, up to 36000 × 19800 px, ~2 GB). The publish gate refuses NULL `tif_path`. Thumbs online, real file must exist.
 - **No vendor names in public UI.** 30-vendor denylist enforced in PG bulk rename + server.js dropdown filter. `wallco.ai/library` is admin-only.
diff --git a/scripts/gen-luxe.js b/scripts/gen-luxe.js
index 6a492bf..0ecd5c8 100644
--- a/scripts/gen-luxe.js
+++ b/scripts/gen-luxe.js
@@ -118,7 +118,10 @@ function pickTextureBrief(category) {
   const cat = (category || '').toLowerCase();
   const where = cat
     ? `AND p.title ~* '\\m(${cat})\\M'`
-    : `AND p.title ~* '\\m(grasscloth|linen|silk|cork|raffia|madagascar|sisal)\\M'`;
+    // Steve 2026-06-01: always anchor on a REAL natural wallcovering texture.
+    // Added mica + other natural substrates DW actually sells (abaca, seagrass,
+    // jute, hemp, arrowroot, paperweave, bamboo, reed) alongside the originals.
+    : `AND p.title ~* '\\m(grasscloth|linen|silk|cork|raffia|mica|madagascar|sisal|abaca|seagrass|jute|hemp|arrowroot|paperweave|paper-weave|bamboo|reed)\\M'`;
   const sql = `
     SELECT
       regexp_replace(split_part(p.title, '|', 1), '\\s+(Wallpaper|Wallcoverings?|Vinyl|-\\s*Sample)\\s*$', '', 'gi') AS name,
@@ -130,8 +133,17 @@ function pickTextureBrief(category) {
         WHEN p.title ~* '\\msilk\\M'       THEN 'silk'
         WHEN p.title ~* '\\mcork\\M'       THEN 'cork'
         WHEN p.title ~* '\\mraffia\\M'     THEN 'raffia'
+        WHEN p.title ~* '\\mmica\\M'       THEN 'mica'
         WHEN p.title ~* '\\mmadagascar\\M' THEN 'madagascar'
         WHEN p.title ~* '\\msisal\\M'      THEN 'sisal'
+        WHEN p.title ~* '\\mabaca\\M'      THEN 'abaca'
+        WHEN p.title ~* '\\mseagrass\\M'   THEN 'seagrass'
+        WHEN p.title ~* '\\mjute\\M'       THEN 'jute'
+        WHEN p.title ~* '\\mhemp\\M'       THEN 'hemp'
+        WHEN p.title ~* '\\marrowroot\\M'  THEN 'arrowroot'
+        WHEN p.title ~* '\\m(paperweave|paper-weave)\\M' THEN 'paperweave'
+        WHEN p.title ~* '\\mbamboo\\M'     THEN 'bamboo'
+        WHEN p.title ~* '\\mreed\\M'       THEN 'reed'
         ELSE 'natural textile'
       END AS material
     FROM shopify_products p

← 0425501 designer-studio compose: auto-retry up to 3× on seamless-QA  ·  back to Wallco Ai  ·  admin: draggable+popout modal kit (all 19 pages) + windowed ef32cc7 →