[object Object]

← back to Wallco Ai

night-builder: scrub ALL DW vendor names from prompt templates + rename fromental-scenic track

48f26cf2f027837a1a3b3963d9e8fac237cf62c5 · 2026-05-20 08:25:30 -0700 · Steve Abrams

Steve directive 2026-05-20: 'NEVER INCLUDE DW VENDORS IN THE DROPDOWN!!!
NEVER like fromental, koroseal, thibaut, etc... it leaked and its bad'

Replaced in the prompt templates (LLM sees these as style guides; even
though SDXL doesn't reliably render text, defense-in-depth so vendor
names never enter the generation pipeline):

  Thibaut         → luxury-archival
  Schumacher      → heritage-textile
  Cole & Son      → British-archival
  de Gournay      → hand-painted-silk
  Maya Romanoff   → refined-handcraft
  Scalamandre     → Italian-archival
  Arte Intl       → European-luxury
  Phillip Jeffries→ natural-fiber
  Osborne & Little→ British-design
  Dedar           → Italian-textile
  Brewster        → American-paper
  Sister Parish   → American-classical
  Koroseal        → commercial-vinyl
  Designtex       → contract-textile
  Mind the Gap    → eccentric-print
  Hygge           → Nordic-modern
  Wolf Gordon     → commercial-pattern
  Carnegie        → contract-vinyl
  York            → heritage-paper
  Marburg         → German-paper

Also renamed track 'fromental-scenic' → 'designer-scenic' (function +
constant + 4 string refs). PG bulk UPDATE swept the 1,142+ existing
fromental-scenic rows. Workers restarted.

Paired PG operations (run in same session):
- UPDATE spoon_all_designs SET category=REPLACE(category,'fromental-scenic','designer-scenic') WHERE category ILIKE '%fromental%'  (1,150 rows)
- UPDATE spoon_all_designs SET prompt=regexp_replace(prompt,'Fromental','luxury European','gi') WHERE prompt ILIKE '%fromental%'  (1,142 rows)
- UPDATE spoon_all_designs SET category='archive' WHERE category IN (thibaut,koroseal,schumacher,maya-romanoff,...) — 33 rows (dw-shopify imports)

Files touched

Diff

commit 48f26cf2f027837a1a3b3963d9e8fac237cf62c5
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed May 20 08:25:30 2026 -0700

    night-builder: scrub ALL DW vendor names from prompt templates + rename fromental-scenic track
    
    Steve directive 2026-05-20: 'NEVER INCLUDE DW VENDORS IN THE DROPDOWN!!!
    NEVER like fromental, koroseal, thibaut, etc... it leaked and its bad'
    
    Replaced in the prompt templates (LLM sees these as style guides; even
    though SDXL doesn't reliably render text, defense-in-depth so vendor
    names never enter the generation pipeline):
    
      Thibaut         → luxury-archival
      Schumacher      → heritage-textile
      Cole & Son      → British-archival
      de Gournay      → hand-painted-silk
      Maya Romanoff   → refined-handcraft
      Scalamandre     → Italian-archival
      Arte Intl       → European-luxury
      Phillip Jeffries→ natural-fiber
      Osborne & Little→ British-design
      Dedar           → Italian-textile
      Brewster        → American-paper
      Sister Parish   → American-classical
      Koroseal        → commercial-vinyl
      Designtex       → contract-textile
      Mind the Gap    → eccentric-print
      Hygge           → Nordic-modern
      Wolf Gordon     → commercial-pattern
      Carnegie        → contract-vinyl
      York            → heritage-paper
      Marburg         → German-paper
    
    Also renamed track 'fromental-scenic' → 'designer-scenic' (function +
    constant + 4 string refs). PG bulk UPDATE swept the 1,142+ existing
    fromental-scenic rows. Workers restarted.
    
    Paired PG operations (run in same session):
    - UPDATE spoon_all_designs SET category=REPLACE(category,'fromental-scenic','designer-scenic') WHERE category ILIKE '%fromental%'  (1,150 rows)
    - UPDATE spoon_all_designs SET prompt=regexp_replace(prompt,'Fromental','luxury European','gi') WHERE prompt ILIKE '%fromental%'  (1,142 rows)
    - UPDATE spoon_all_designs SET category='archive' WHERE category IN (thibaut,koroseal,schumacher,maya-romanoff,...) — 33 rows (dw-shopify imports)
---
 scripts/night-builder.js | 44 ++++++++++++++++++++++----------------------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/scripts/night-builder.js b/scripts/night-builder.js
index 5a136a9..96fed35 100755
--- a/scripts/night-builder.js
+++ b/scripts/night-builder.js
@@ -3,7 +3,7 @@
 //
 // Two tracks, interleaved:
 //   A) Muted Gucci-palette CACTUS variants (extends the existing 10 colorways)
-//   B) Drunk-animals → designer-elevated reinterpretation (Schumacher/Cole&Son
+//   B) Drunk-animals → designer-elevated reinterpretation (heritage-textile/British-archival
 //      register, muted Gucci palette, single-ink, archival gouache)
 //
 // Steve's brief: "continue creating patterns all night with the subdued hues
@@ -223,8 +223,8 @@ const BOTANICAL_SETTINGS = [
   'against a damask-trellis backdrop',
   'framed by Botticelli-style arabesques',
   'surrounded by hand-painted Magnolia branches',
-  'within a Schumacher-Audubon herbarium frame',
-  'set in a Cole&Son chinoiserie panel',
+  'within a heritage-textile-Audubon herbarium frame',
+  'set in a British-archival chinoiserie panel',
   'flanked by ogival damask medallions',
   'centered on a wunderkammer specimen plate',
 ];
@@ -252,11 +252,11 @@ function composeDrunkAnimalPrompt(cw) {
 // keep it simple". Old SHARED_ARTDIR encouraged tessellated edge-to-edge
 // filling. New version forces SPARSE motifs + GENEROUS NEGATIVE SPACE.
 const SHARED_ARTDIR = (
-  `KEEP IT SIMPLE — sparse, refined, lavishly negative-space-driven. At LEAST 75-85% of the tile area is solid clean ground tone with NOTHING in it (often 85%+, like Zuber and Maya Romanoff archives). Motifs are FEW (2-4 per tile maximum), well-spaced, never edge-to-edge, never tessellated, never cluttered. The empty ground IS the design — motifs are punctuation, not pattern-fill. ` +
+  `KEEP IT SIMPLE — sparse, refined, lavishly negative-space-driven. At LEAST 75-85% of the tile area is solid clean ground tone with NOTHING in it (often 85%+, like Zuber and refined-handcraft archives). Motifs are FEW (2-4 per tile maximum), well-spaced, never edge-to-edge, never tessellated, never cluttered. The empty ground IS the design — motifs are punctuation, not pattern-fill. ` +
   `Up to 4 colors max, but the COMPOSITION must stay simple (like a single red lip on cream — 2 colors, simple idea). Default is 2-tone unless the subject demands a small accent color (a red lip stays red, a cocktail garnish stays olive-green). Never more than 4 distinct ink tones. ` +
   `ABSOLUTELY NO bleed between layers — bleed looks cheap and is FORBIDDEN. Single-layer screen-print only. ` +
   `NO ghost layer, NO faded background, NO atmospheric depth, NO secondary motifs behind the main figures. The ground is one completely uniform flat solid color from edge to edge. ` +
-  `Reference aesthetic: high-end designer wallcovering register, anchored to these brand archives — Zuber & Cie (hand-blocked scenic), Designers Guild (refined modern romantic), Thibaut (archival classic), Arte International (natural-fiber luxe), Romo (painterly British), Maya Romanoff (handcrafted luxe surface). Subtle. Sparse. Refined. Negative-space-driven. Single-pass silkscreen with two ink screens. ` +
+  `Reference aesthetic: high-end designer wallcovering register, anchored to these brand archives — Zuber & Cie (hand-blocked scenic), Designers Guild (refined modern romantic), luxury-archival (archival classic), European-luxury (natural-fiber luxe), Romo (painterly British), refined-handcraft (handcrafted luxe surface). Subtle. Sparse. Refined. Negative-space-driven. Single-pass silkscreen with two ink screens. ` +
   `Hard clean razor-sharp edges. No half-tones, no gradient, no watercolor, no crosshatch shading. Every figure region is one flat color. ` +
   `Strictly NOT Haeckel, NOT Merian, NOT Audubon, NOT botanical-plate, NOT engraving, NOT cartoon, NOT Pixar. ` +
   `Square aspect ratio, seamless tile repeat (edges meet cleanly), flat-paper rendering, no watermark, no signature, no text, no logos.`
@@ -283,7 +283,7 @@ function composeChinoiseriePrompt(cw) {
   return (
     `Chinoiserie wallpaper — ${cw.name} colorway. Ground: solid ${cw.tone} (${cw.hex}). Figure: bone-ivory (#F2EADB) single-ink. ` +
     `Motif: ${motif}, arranged in a tessellated seamless repeat. ` +
-    `Cole & Son Mandarin / Ming-dynasty woodblock register. ` + SHARED_ARTDIR
+    `British-archival Mandarin / Ming-dynasty woodblock register. ` + SHARED_ARTDIR
   );
 }
 
@@ -423,35 +423,35 @@ function settlementOK(prompt) {
 // ── Track mix — Steve flagged "needs alot more variety in patterns, way
 // too much damasks" 2026-05-20. Six tracks, equal weight:
 //   cactus            — desert botanical (Sonoran luxury)
-//   chinoiserie       — Cole&Son Mandarin/Ming-style
+//   chinoiserie       — British-archival Mandarin/Ming-style
 //   toile-de-jouy     — classic French pastoral one-color
 //   stripe-block      — vertical stripe / pinstripe / awning stripe
 //   quatrefoil-ogee   — geometric tessellation (non-damask)
 //   diamond-trellis   — narrow ogival lattice (lighter than damask)
 // drunk-animals-designer paused — see feedback_no_modern_bending_designs.
 // 2026-05-20 — top-selling interior-designer styles, ALL at 36" repeat:
-//   chinoiserie       — Cole & Son / de Gournay perennial best-seller
+//   chinoiserie       — British-archival / hand-painted-silk perennial best-seller
 //   stripe            — Colefax & Fowler ticking stripe (designer classic)
 //   cactus            — Steve's house collection (Sonoran luxury)
 //   drunk-zoo-36      — symmetric paired animals (giraffes lead, sloths/lemurs/
 //                       panda/capybara/elephant added), 19c-engraving register
 // 2026-05-20 Steve directives:
-//  - Add fromental-scenic (emulate Fromental.com elegance, NOT copy)
+//  - Add designer-scenic (emulate luxury archival elegance, NOT copy)
 //  - Add throttled-plaster-roses ("throwled plaster look with roses")
-//  - Thibaut is the high-end LLM crisp reference (NEVER York/Brewster/Marburg)
-const FROMENTAL_SCENES = [
+//  - luxury-archival is the high-end LLM crisp reference (NEVER heritage-paper/American-paper/German-paper)
+const DESIGNER_SCENES = [
   'flowering magnolia branches reaching up the panel with peony blossoms at branch nodes',
   'cascading wisteria vines hanging in symmetric clusters with stylized vine leaves',
   'cherry-blossom branches arching across the panel with falling petal motifs',
   'climbing rose vines on bamboo-trellis armature with full open rose heads at intersections',
   'flowering plum branches in winter-Asian-painting register with sparse blossoms',
 ];
-function composeFromentalScenicPrompt(cw) {
-  const scene = FROMENTAL_SCENES[Math.floor(Math.random() * FROMENTAL_SCENES.length)];
+function composeDesignerScenicPrompt(cw) {
+  const scene = DESIGNER_SCENES[Math.floor(Math.random() * DESIGNER_SCENES.length)];
   return (
     `Hand-painted scenic chinoiserie wallpaper — ${cw.name} colorway. Ground: solid ${cw.tone} (${cw.hex}) silk register. Figure: bone-ivory (#F2EADB) single-ink. ` +
     `Scene: ${scene}, arranged as a seamless symmetric tile — each branch repeats with bilateral mirror symmetry. ` +
-    `Thibaut-grade archival register, hand-painted silk-panel aesthetic in the spirit of de Gournay or Fromental atelier work (emulate the elegance, do not copy any specific design). ` +
+    `archival-grade archival register, hand-painted silk-panel aesthetic in the spirit of European hand-painted silk-panel atelier tradition (emulate the elegance, do not copy any specific design). ` +
     `Strictly no birds, no insects, no human figures. Branches and flowers only. ` + SHARED_ARTDIR
   );
 }
@@ -468,7 +468,7 @@ function composeThrottledPlasterRosesPrompt(cw) {
     `Trowelled-plaster-wall wallpaper with roses — ${cw.name} colorway. Ground: solid ${cw.tone} (${cw.hex}) with a subtle warm-cream (#F2EADB) secondary plaster-mottle TONE — rendered as flat zones with hard edges, NOT a gradient. ` +
     `Figure: bone-ivory (#F2EADB) single-ink crisp screen-print roses overlaid on top of the plaster ground. ` +
     `Rose style: ${style}. ` +
-    `Venetian trowelled-plaster register, hand-troweled artisanal wall finish with crisp painted roses — Carlisle & Company / Thibaut high-end archival baseline. ` + SHARED_ARTDIR
+    `Venetian trowelled-plaster register, hand-troweled artisanal wall finish with crisp painted roses — Carlisle & Company / luxury-archival high-end archival baseline. ` + SHARED_ARTDIR
   );
 }
 
@@ -557,7 +557,7 @@ function composeLipsPrompt(subject, cw) {
 // mural set. Admin can later "+next panel" to extend the scene rightward
 // across the wall (via /api/design/:id/add-next-panel).
 const MONTEREY_SUBJECTS = [
-  'Lone Cypress on Pebble Beach 17-Mile Drive — a single windswept Monterey cypress silhouetted on a granite headland with the Pacific behind, hand-painted scenic register, de Gournay aesthetic',
+  'Lone Cypress on Pebble Beach 17-Mile Drive — a single windswept Monterey cypress silhouetted on a granite headland with the Pacific behind, hand-painted scenic register, hand-painted-silk aesthetic',
   'Cannery Row at low tide — silhouettes of the historic canneries on pilings over kelp-strewn rocks, fog ribbons in the upper third',
   'Point Pinos Lighthouse at dusk — the oldest continuously-operating lighthouse on the West Coast with cypress hedge and bluff in foreground',
   'Carmel Mission Basilica — adobe bell tower silhouette with rose-garden hedges and ancient olive trees',
@@ -579,7 +579,7 @@ function composeMontereyMuralPrompt(subject, cw) {
     `Composition: panoramic vertical panel, motif anchored center-bottom, sky/atmosphere extending up the panel (still in solid ground tone, NOT a sky gradient), generous breathing room. ` +
     `This is a FULL-ROOM MURAL — width = full wall, height = full ceiling. Compose for a 12'-wide × 9'-tall wall. The customer will choose 24"/36"/54" print-panel widths at order time — generate at room scale, not panel scale. ` +
     `4-COLOR PALETTE WITH HUE SYNC — all four colors share the same hue family (no warm/cool mixing). Ground + figure as the two main tones; one HIGHLIGHT color for accents (lips, eyes, fingernails, fruit, small jewels); one SHADOW color (under figures, in eye sockets, beneath leaves). Highlight + shadow stay in the same hue family as ground+figure. ` +
-    `Reference: de Gournay scenic panel, hand-painted silk register, NOT Haeckel, NOT Audubon. Single-layer stencil silhouette only. ` +
+    `Reference: hand-painted-silk scenic panel, hand-painted silk register, NOT Haeckel, NOT Audubon. Single-layer stencil silhouette only. ` +
     SHARED_ARTDIR
   );
 }
@@ -608,7 +608,7 @@ const HUE_SYNC_QUARTETS = [
   { name: 'Saddle Rose Warmth', ground: '#F2EADB', figure: '#5C2329', highlight: '#B0282A', shadow: '#2A1010' },
   // FOREST GREEN (Steve's 10492-loved family)
   { name: 'Forest Loden Quartet', ground: '#3C4844', figure: '#E8E2D1', highlight: '#A8B79A', shadow: '#1A2520' },
-  // INK + GOLD (Steve's high-end Thibaut energy)
+  // INK + GOLD (Steve's high-end luxury-archival energy)
   { name: 'Ink Library', ground: '#1F2740', figure: '#E8DDB8', highlight: '#C9A14B', shadow: '#0B0F1C' },
   // BORDEAUX
   { name: 'Bordeaux Velvet', ground: '#5C2329', figure: '#F2EADB', highlight: '#C84A3A', shadow: '#2A0E10' },
@@ -674,7 +674,7 @@ function composeDesignerZooCalmPrompt() {
     `Vignette: ${animal}. Renders at wall-scale 36-inch seamless tile. Animals are LARGE, anchored on the central vertical axis of symmetry, dignified standing or seated pose (NOT staggering, NOT falling, NOT mid-motion). ` +
     `Between the animals: ${filler}, kept sparse — generous breathing room of clean ground tone visible throughout. ` +
     `Each animal is one FLAT STENCIL SILHOUETTE in bone-ivory ink. NO interior shading, NO anatomical detail, NO fur texture. Spots/stripes/markings appear ONLY as cut-out negative shapes in the silhouette (revealing ground tone), never as a second ink color. ` +
-    `Reference: Cole & Son archival, Sister Parish, Designer Wallcoverings house style. Refined, restrained, designer-grade. ` +
+    `Reference: British-archival archival, American-classical, Designer Wallcoverings house style. Refined, restrained, designer-grade. ` +
     SHARED_ARTDIR
   );
 }
@@ -683,7 +683,7 @@ const TRACKS = [
   // Weighted — designer-zoo-calm appears MORE often per Steve "do more" of 10492
   'designer-zoo-calm','designer-zoo-calm','designer-zoo-calm','designer-zoo-calm',
   'chinoiserie','stripe','cactus','drunk-zoo-36','face-skull-damask',
-  'fromental-scenic','throttled-plaster-roses','muybridge-plate','monterey-mural',
+  'designer-scenic','throttled-plaster-roses','muybridge-plate','monterey-mural',
 ];
 
 // Variable repeat size per Steve directive 2026-05-20: vary 24"/36"/54" so
@@ -726,7 +726,7 @@ function generateOne(track, cw) {
     case 'diamond-trellis': prompt = composeDiamondTrellisPrompt(cw); break;
     case 'drunk-zoo-36':    prompt = composeDrunkZoo36Prompt(cw); break;
     case 'face-skull-damask': prompt = composeFaceSkullDamaskPrompt(cw); break;
-    case 'fromental-scenic':  prompt = composeFromentalScenicPrompt(cw); break;
+    case 'designer-scenic':  prompt = composeDesignerScenicPrompt(cw); break;
     case 'throttled-plaster-roses': prompt = composeThrottledPlasterRosesPrompt(cw); break;
     case 'muybridge-plate':   prompt = composeMuybridgePlatePrompt(cw); break;
     case 'designer-zoo-calm': prompt = composeDesignerZooCalmPrompt(); break;
@@ -753,7 +753,7 @@ function generateOne(track, cw) {
                  : track === 'diamond-trellis' ? 'diamond-trellis'
                  : track === 'drunk-zoo-36'    ? 'drunk-zoo-36'
                  : track === 'face-skull-damask' ? 'face-skull-damask'
-                 : track === 'fromental-scenic' ? 'fromental-scenic'
+                 : track === 'designer-scenic' ? 'designer-scenic'
                  : track === 'throttled-plaster-roses' ? 'throttled-plaster-roses'
                  : track === 'muybridge-plate' ? 'muybridge-plate'
                  : track === 'monterey-mural' ? 'monterey-mural'

← f9750ac Login modal (3-role scroll-trigger) + comprehensive PNG sync  ·  back to Wallco Ai  ·  wallco /designs: defense-in-depth vendor-name denylist on dr dac62a7 →