← back to Wallco Ai
reconcile generator suffix → empirical professional palette (23,817 real vendor products)
9abdaaa1fff911892473e3e34114892dd6e1a811 · 2026-05-19 23:39:32 -0700 · SteveStudio2
Files touched
M scripts/cherry_blossom_animal_prompts.jsM scripts/drunk_animal_prompts.jsM scripts/fashion_palettes.jsM scripts/generate_designs.js
Diff
commit 9abdaaa1fff911892473e3e34114892dd6e1a811
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date: Tue May 19 23:39:32 2026 -0700
reconcile generator suffix → empirical professional palette (23,817 real vendor products)
---
scripts/cherry_blossom_animal_prompts.js | 6 ++++--
scripts/drunk_animal_prompts.js | 10 ++++++----
scripts/fashion_palettes.js | 19 ++++++++++++++++---
scripts/generate_designs.js | 19 +++++++++++++++----
4 files changed, 41 insertions(+), 13 deletions(-)
diff --git a/scripts/cherry_blossom_animal_prompts.js b/scripts/cherry_blossom_animal_prompts.js
index e0e5597..0f2ece1 100644
--- a/scripts/cherry_blossom_animal_prompts.js
+++ b/scripts/cherry_blossom_animal_prompts.js
@@ -20,6 +20,8 @@
* - direct CLI: node scripts/cherry_blossom_animal_prompts.js 100
*/
+const { TONE_ON_TONE_SUFFIX } = require('./fashion_palettes');
+
const DRUNK_TABLEAUX = [
'chin tipped up to the blossoms, mouth wide, mid-guzzle from a long-stemmed wine glass — burgundy sloshing down its throat',
'face turned skyward through falling petals, draining a frosted vodka bottle held in both paws, condensation dripping onto its chest',
@@ -150,8 +152,8 @@ function buildPrompt({ state = null, seed = null } = {}) {
pick(COMPOSITIONS),
'CRITICAL: every animal MUST be facing UP toward the cherry blossoms above — chin lifted, eyes/snout skyward, no animals looking down or sideways',
'seamless wallpaper repeat, archival quality, refined heritage botanical aesthetic, no neon, no text, no watermark',
- // Aesthetic gate — Steve 2026-05-19: tone-on-tone, no neon, ≤ 4 hues
- 'Tone-on-tone monochromatic palette, ≤ 3 hues from a single hue family, muted high-fashion neutrals only — ivory, taupe, sand, ecru, mushroom, slate, charcoal, midnight navy, oxblood, sage, olive, camel, tobacco. No saturated colors. No neon. No fluorescent. No rainbow. No more than 4 distinct hues. Editorial Vogue-cover restraint.',
+ // Aesthetic gate — Steve 2026-05-19: empirical professional palette from dw_unified
+ TONE_ON_TONE_SUFFIX,
].join(', ');
}
diff --git a/scripts/drunk_animal_prompts.js b/scripts/drunk_animal_prompts.js
index 8dd57d7..d93a3e3 100644
--- a/scripts/drunk_animal_prompts.js
+++ b/scripts/drunk_animal_prompts.js
@@ -15,6 +15,8 @@
* - bin/drunk_animals_tick.js — single design per 4-min cron firing
*/
+const { TONE_ON_TONE_SUFFIX } = require('./fashion_palettes');
+
const ANIMALS = [
'wide-eyed Amazonian tree frog',
'pink-cheeked drunken bullfrog',
@@ -201,8 +203,8 @@ function buildPrompt(seed = null) {
pick(STYLES),
pick(COMPOSITIONS),
'seamless wallpaper repeat, archival quality, FLOWERS ONLY, NO leaves, NO foliage, NO monstera, NO palm, NO banana, NO tropical, NO jungle, no text or watermark',
- // Aesthetic gate — Steve 2026-05-19: tone-on-tone, no neon, ≤ 4 hues
- 'Tone-on-tone monochromatic palette, ≤ 3 hues from a single hue family, muted high-fashion neutrals only — ivory, taupe, sand, ecru, mushroom, slate, charcoal, midnight navy, oxblood, sage, olive, camel, tobacco. No saturated colors. No neon. No fluorescent. No rainbow. No more than 4 distinct hues. Editorial Vogue-cover restraint.'
+ // Aesthetic gate — Steve 2026-05-19: empirical professional palette from dw_unified
+ TONE_ON_TONE_SUFFIX
].join(', ');
}
return [
@@ -233,8 +235,8 @@ function buildN(n) {
style,
pickRand(COMPOSITIONS),
'seamless wallpaper repeat, archival quality, FLOWERS ONLY, NO leaves, NO foliage, NO monstera, NO palm, NO banana, NO tropical, NO jungle, no text or watermark',
- // Aesthetic gate — Steve 2026-05-19: tone-on-tone, no neon, ≤ 4 hues
- 'Tone-on-tone monochromatic palette, ≤ 3 hues from a single hue family, muted high-fashion neutrals only — ivory, taupe, sand, ecru, mushroom, slate, charcoal, midnight navy, oxblood, sage, olive, camel, tobacco. No saturated colors. No neon. No fluorescent. No rainbow. No more than 4 distinct hues. Editorial Vogue-cover restraint.'
+ // Aesthetic gate — Steve 2026-05-19: empirical professional palette from dw_unified
+ TONE_ON_TONE_SUFFIX
];
out.push(parts.join(', '));
}
diff --git a/scripts/fashion_palettes.js b/scripts/fashion_palettes.js
index 43623e4..15d166d 100644
--- a/scripts/fashion_palettes.js
+++ b/scripts/fashion_palettes.js
@@ -11,6 +11,8 @@
* pickFashionPalette() -> a random brand palette object.
* paletteString(p) -> prompt-ready string: "Bottega Veneta palette — #.. (signature)".
*/
+const fs = require('fs');
+const path = require('path');
const FASHION_PALETTES = [
{ brand: 'Hermès', hex: ['#FF4F00', '#1a1410', '#FFFEFA', '#E5DDD0'], signature: 'burnt-orange accent, saddle-stitch warmth, generous ground' },
@@ -44,8 +46,19 @@ function paletteString(p) {
// ── Aesthetic gate (Steve 2026-05-19) ──────────────────────────────────────
// Re-exported so prompt builders can append a uniform tone-on-tone directive
-// without duplicating the wording.
-const TONE_ON_TONE_SUFFIX = "Tone-on-tone monochromatic palette, ≤ 3 hues from a single hue family, muted high-fashion neutrals only — ivory, taupe, sand, ecru, mushroom, slate, charcoal, midnight navy, oxblood, sage, olive, camel, tobacco. No saturated colors. No neon. No fluorescent. No rainbow. No more than 4 distinct hues. Editorial Vogue-cover restraint.";
-const NEGATIVE_PROMPT_ADDON = "neon, fluorescent, electric, saturated, rainbow, more than 4 colors, multicolor, vivid, day-glo, highlighter colors";
+// without duplicating the wording. The suffix is sourced from the EMPIRICAL
+// professional-palette reference learned from 23,817 real high-end vendor
+// products in dw_unified.shopify_color_enrichment. Refresh by re-running
+// scripts/build_professional_palette_reference.js.
+let TONE_ON_TONE_SUFFIX;
+try {
+ TONE_ON_TONE_SUFFIX = fs.readFileSync(
+ path.join(__dirname, '..', 'data', 'professional-palette-suffix.txt'),
+ 'utf8'
+ ).trim();
+} catch (e) {
+ TONE_ON_TONE_SUFFIX = "Professional designer-wallpaper palette grounded in real-world high-end vendor catalogs (Schumacher, Maya Romanoff, Thibaut, Arte International, Cole & Son, Brunschwig & Fils, Scalamandre, Phillip Jeffries, Koroseal, Romo, Pierre Frey, Designers Guild, Osborne & Little — 23,817 real products analyzed). Use ONLY colors from this learned palette: #FFFFFF (ivory), #6B382C (cocoa), #D3D3D3 (oyster), #F5F5DC (cream), #F5F5F5 (off-white), #C0C0C0 (dove), #D2B48C (fawn), #000000 (noir), #F2F2F2 (off-white), #F0F0F0 (cream), #4A4A4A (umber), #F5F3EE (off-white), #6B3827 (cocoa), #F0E68C (butter), #F5F0E1 (cream), #F5F5F0 (off-white), #333333 (charcoal), #A9A9A9 (stone), #363636 (charcoal), #F5F3ED (off-white), #F2E8D9 (pearl), #36454F (charcoal), #6B3A2A (cocoa), #808080 (slate), #008080 (malachite). Saturation distribution observed in real professional wallpaper: S<20% = 36.7% of all color usage, S 20–40% = 28.4%, S>60% = 11.1%. Most professional wallpapers use a low-saturation, tone-on-tone or 2–3 color story. Median distinct hues per design = 2; 90th percentile = 4. Keep total distinct hues per design ≤ 5. Never use neon, fluorescent, rainbow, primary-saturated red/yellow/blue, hot pink, or electric green. Prefer aged, slightly-grayed, archival pigments over pure chromatic colors.";
+}
+const NEGATIVE_PROMPT_ADDON = "neon, fluorescent, electric, saturated, rainbow, more than 4 colors, multicolor, vivid, day-glo, highlighter colors, hot pink, primary red, primary yellow, primary blue, electric green";
module.exports = { FASHION_PALETTES, pickFashionPalette, paletteString, TONE_ON_TONE_SUFFIX, NEGATIVE_PROMPT_ADDON };
diff --git a/scripts/generate_designs.js b/scripts/generate_designs.js
index 58b575c..d5d1968 100644
--- a/scripts/generate_designs.js
+++ b/scripts/generate_designs.js
@@ -31,10 +31,21 @@ const BACKEND = process.env.GEN_BACKEND || 'stub';
// ── Aesthetic direction (Steve 2026-05-19) ─────────────────────────────────
// Tone-on-tone, high-fashion. Bright neon and >4-distinct-hue palettes are
// purged at the catalog level (scripts/purge-neon-and-multicolor.js) AND
-// must not be re-generated. We append this suffix to every prompt at pick
-// time and pass NEGATIVE_PROMPT_ADDON to the diffusion backend.
-const TONE_ON_TONE_SUFFIX = "Tone-on-tone monochromatic palette, ≤ 3 hues from a single hue family, muted high-fashion neutrals only — ivory, taupe, sand, ecru, mushroom, slate, charcoal, midnight navy, oxblood, sage, olive, camel, tobacco. No saturated colors. No neon. No fluorescent. No rainbow. No more than 4 distinct hues. Editorial Vogue-cover restraint.";
-const NEGATIVE_PROMPT_ADDON = "neon, fluorescent, electric, saturated, rainbow, more than 4 colors, multicolor, vivid, day-glo, highlighter colors";
+// must not be re-generated. The suffix is sourced from the EMPIRICAL
+// professional-palette reference learned from 23,817 real high-end vendor
+// products in dw_unified.shopify_color_enrichment (build_professional_palette_reference.js).
+// Rerun that script to refresh the suffix when the catalog changes.
+let TONE_ON_TONE_SUFFIX;
+try {
+ TONE_ON_TONE_SUFFIX = fs.readFileSync(
+ path.join(ROOT, 'data', 'professional-palette-suffix.txt'),
+ 'utf8'
+ ).trim();
+} catch (e) {
+ // Inlined empirical fallback (matches the file as of commit 3804d0f).
+ TONE_ON_TONE_SUFFIX = "Professional designer-wallpaper palette grounded in real-world high-end vendor catalogs (Schumacher, Maya Romanoff, Thibaut, Arte International, Cole & Son, Brunschwig & Fils, Scalamandre, Phillip Jeffries, Koroseal, Romo, Pierre Frey, Designers Guild, Osborne & Little — 23,817 real products analyzed). Use ONLY colors from this learned palette: #FFFFFF (ivory), #6B382C (cocoa), #D3D3D3 (oyster), #F5F5DC (cream), #F5F5F5 (off-white), #C0C0C0 (dove), #D2B48C (fawn), #000000 (noir), #F2F2F2 (off-white), #F0F0F0 (cream), #4A4A4A (umber), #F5F3EE (off-white), #6B3827 (cocoa), #F0E68C (butter), #F5F0E1 (cream), #F5F5F0 (off-white), #333333 (charcoal), #A9A9A9 (stone), #363636 (charcoal), #F5F3ED (off-white), #F2E8D9 (pearl), #36454F (charcoal), #6B3A2A (cocoa), #808080 (slate), #008080 (malachite). Saturation distribution observed in real professional wallpaper: S<20% = 36.7% of all color usage, S 20–40% = 28.4%, S>60% = 11.1%. Most professional wallpapers use a low-saturation, tone-on-tone or 2–3 color story. Median distinct hues per design = 2; 90th percentile = 4. Keep total distinct hues per design ≤ 5. Never use neon, fluorescent, rainbow, primary-saturated red/yellow/blue, hot pink, or electric green. Prefer aged, slightly-grayed, archival pigments over pure chromatic colors.";
+}
+const NEGATIVE_PROMPT_ADDON = "neon, fluorescent, electric, saturated, rainbow, more than 4 colors, multicolor, vivid, day-glo, highlighter colors, hot pink, primary red, primary yellow, primary blue, electric green";
// Distribution of generation widths when --width is not explicitly passed.
// Override via env: GENERATE_WIDTH_POOL="24,24,36,36,52" (entries weight pick frequency).
← c1c8a89 server: passesAestheticGate runtime filter in loadDesigns (n
·
back to Wallco Ai
·
add /library surface data — materialize 57,629 real designer 6e30ae3 →