[object Object]

← back to Wallco Ai

wallco: generate-lips.js — 10 designer lipstick-brand colorways

1e6fc9a9b069b840ef4ef0f17894f4a2c2a62f2d · 2026-05-20 02:29:40 -0700 · Steve Abrams

Steve directive 2026-05-20: 'we need actual lip wallpaper' (after bleed sweep dropped /designs visible count below threshold).

Colorways: Chanel Rouge, Dior Noir, NARS Jungle Red, MAC Russian Red, YSL Rouge Pur, Tom Ford Cherry, Hermès Orange, Givenchy Rose, Estée Lauder Plum, Guerlain Kiss. Single-ink flat lip silhouettes, generous spacing, anti-ghost prompts baked in to clear bleed_guard.

Files touched

Diff

commit 1e6fc9a9b069b840ef4ef0f17894f4a2c2a62f2d
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed May 20 02:29:40 2026 -0700

    wallco: generate-lips.js — 10 designer lipstick-brand colorways
    
    Steve directive 2026-05-20: 'we need actual lip wallpaper' (after bleed sweep dropped /designs visible count below threshold).
    
    Colorways: Chanel Rouge, Dior Noir, NARS Jungle Red, MAC Russian Red, YSL Rouge Pur, Tom Ford Cherry, Hermès Orange, Givenchy Rose, Estée Lauder Plum, Guerlain Kiss. Single-ink flat lip silhouettes, generous spacing, anti-ghost prompts baked in to clear bleed_guard.
---
 scripts/generate-lips.js | 94 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 94 insertions(+)

diff --git a/scripts/generate-lips.js b/scripts/generate-lips.js
new file mode 100755
index 0000000..317088a
--- /dev/null
+++ b/scripts/generate-lips.js
@@ -0,0 +1,94 @@
+#!/usr/bin/env node
+// Generate 10 lips wallcovering designs — designer-grade, single-ink lip silhouettes
+// inspired by editorial-fashion / lipstick-brand colorways.
+//
+// Steve directive 2026-05-20: "we need actual lip wallpaper" (after bleed
+// sweep dropped /designs to 128). "Actual" = recognizable lips, not bleed
+// abstractions; designer colorways grounded in real lipstick brand palettes
+// (Chanel rouge, Dior crimson, NARS jungle red, MAC Russian red, etc.).
+//
+// Settlement-safe by construction:
+//   - Single ink color figure layer on a single tone ground
+//   - Uniform horizontal lip orientation, no rotation
+//   - Edge-to-edge tessellation, no Part B motifs (no bananas/grapes/birds/butterflies)
+//   - Explicit anti-ghost-layer prompt language so bleed_guard passes them.
+
+const { spawnSync } = require('child_process');
+const path = require('path');
+
+const ROOT = path.join(__dirname, '..');
+
+const COLORWAYS = [
+  { slug: 'chanel-rouge',       name: 'Chanel Rouge',       ground_hex: '#FFFEF8', ground_name: 'ivory-couture cream',     figure_hex: '#A6182E', figure_name: 'classic Chanel rouge' },
+  { slug: 'dior-noir',          name: 'Dior Noir',          ground_hex: '#0E0E10', ground_name: 'midnight Dior noir',      figure_hex: '#C9A14B', figure_name: 'antique-gold leaf' },
+  { slug: 'nars-jungle-red',    name: 'NARS Jungle Red',    ground_hex: '#1F1B17', ground_name: 'fume noir',               figure_hex: '#9C1F1F', figure_name: 'NARS jungle red' },
+  { slug: 'mac-russian-red',    name: 'MAC Russian Red',    ground_hex: '#F5F0E8', ground_name: 'Russian cream',           figure_hex: '#7C0A1E', figure_name: 'MAC Russian red' },
+  { slug: 'ysl-rouge-pur',      name: 'YSL Rouge Pur',      ground_hex: '#101010', ground_name: 'YSL black couture',       figure_hex: '#D6253D', figure_name: 'YSL Rouge Pur Couture' },
+  { slug: 'tom-ford-cherry',    name: 'Tom Ford Cherry',    ground_hex: '#2A1414', ground_name: 'oxblood velvet',          figure_hex: '#E5C76A', figure_name: 'Tom Ford champagne-gold' },
+  { slug: 'hermes-orange',      name: 'Hermès Orange',      ground_hex: '#F7E9C9', ground_name: 'saddle-stitch cream',     figure_hex: '#F37121', figure_name: 'Hermès orange' },
+  { slug: 'givenchy-rose',      name: 'Givenchy Rose',      ground_hex: '#F2E8E3', ground_name: 'Givenchy bisque rose',    figure_hex: '#B14254', figure_name: 'Givenchy rose-mauve' },
+  { slug: 'estee-lauder-plum',  name: 'Estée Lauder Plum',  ground_hex: '#F7F3EC', ground_name: 'champagne pearl ground',  figure_hex: '#5A1F3E', figure_name: 'Estée Lauder plum noir' },
+  { slug: 'guerlain-kiss',      name: 'Guerlain Kiss',      ground_hex: '#FDF6EE', ground_name: 'Guerlain ivory-blush',    figure_hex: '#E47A8F', figure_name: 'Guerlain blush-pink' },
+];
+
+const COMPOSITION =
+  'Hand-painted gouache silhouettes of soft full lips — closed, parted slightly to show a hint of teeth, ' +
+  'reading as an editorial fashion-magazine kiss mark. All lips are oriented horizontally (no rotation, ' +
+  'no tossing, no diagonals). Every lip silhouette is rendered in the EXACT same single ink color with ' +
+  'NO interior shading, NO highlight gradient, NO outline detail — flat couture stencil only. ' +
+  'Tessellated seamless wallpaper repeat with even, generous spacing between lips so each motif reads ' +
+  'cleanly against the ground (NOT crowded edge-to-edge). Designer-grade, archival illustration quality, ' +
+  'reads as a Tom Ford / YSL flagship-boutique wallcovering. NO ghost layer behind the lips. ' +
+  'NO faded duplicate of the lip motif. NO halftone, NO ben-day dots, NO atmospheric haze behind the motif. ' +
+  'The ground is a single flat solid color, the lip silhouettes are a single flat solid color — TWO COLORS TOTAL.';
+
+const ANTI_PROMPT =
+  'No ghost layer, no ghosted duplicate, no faded copy behind the lips, no atmospheric haze, no airbrush, ' +
+  'no soft edges, no halftone, no ben-day dots, no dot screen, no crosshatching, no interior shading inside ' +
+  'the lip silhouette, no highlight gradient, no shine, no lipstick texture, no teeth detail, no tongue, ' +
+  'no faces, no eyes, no nose, no people. ' +
+  'No banana, no monstera, no palm, no foliage, no flowers, no birds, no butterflies, no grapes. ' +
+  'No multi-color rainbow lips, no fluorescent neon colors, no day-glo, no chromatic gradient, no more than ' +
+  'two colors. No watermark, no signature, no text, no logos. Square aspect ratio, seamless tile repeat, ' +
+  'no edge artifacts, flat-paper rendering (no room mockup, no perspective, no 3D, no shadow on the wall).';
+
+console.log('Generating ' + COLORWAYS.length + ' lip designs (designer lipstick-brand colorways)');
+console.log('Backend: ' + (process.env.GEN_BACKEND || 'replicate') + ' | Category: lips\n');
+
+let success = 0, fail = 0;
+const ids = [];
+const startedAt = Date.now();
+
+for (let i = 0; i < COLORWAYS.length; i++) {
+  const cw = COLORWAYS[i];
+  const prompt =
+    `Lips Repeat — ${cw.name} colorway. ` +
+    `Ground: solid ${cw.ground_name} (${cw.ground_hex}). ` +
+    `Figure: single-ink ${cw.figure_name} (${cw.figure_hex}) — ALL lip silhouettes in this exact tone. ` +
+    COMPOSITION + ' ' +
+    ANTI_PROMPT;
+
+  console.log('[' + (i+1) + '/' + COLORWAYS.length + '] ' + cw.name + ' (' + cw.ground_hex + ' × ' + cw.figure_hex + ')');
+
+  const r = spawnSync('node', [
+    path.join(__dirname, 'generate_designs.js'),
+    '--n', '1',
+    '--kind', 'seamless_tile',
+    '--category', 'lips',
+    '--prompts', prompt,
+  ], { cwd: ROOT, encoding: 'utf8', env: process.env });
+
+  if (r.status === 0) {
+    success++;
+    const idMatch = (r.stdout || '').match(/design[_ ]id[:= ]?(\d+)/i);
+    if (idMatch) ids.push(parseInt(idMatch[1], 10));
+    process.stdout.write('  ✓\n');
+  } else {
+    fail++;
+    process.stdout.write('  ✗ ' + (r.stderr || r.stdout || '').slice(-300) + '\n');
+  }
+}
+
+const dur = ((Date.now() - startedAt) / 1000).toFixed(1);
+console.log('\nDone: ' + success + ' ok, ' + fail + ' fail in ' + dur + 's');
+console.log('IDs: ' + (ids.length ? ids.join(', ') : '(none parsed)'));

← a607c8b wallco: admin spacing slider on /designs + bleed_guard.js gh  ·  back to Wallco Ai  ·  night-builder: fix PLACEHOLDER image_url bug in colorway INS f67ea3a →