[object Object]

← back to Wallco Ai

drunk-*: every design now shows a vice — joint/cigar/pipe/bong (was joint-only)

808384d74819935e02b7bc040538c68787881913 · 2026-05-26 15:11:35 -0700 · Steve Abrams

Steve directive: "all must show alcohol or cigars or pipes or bongs." Added
CIGARS/PIPES/BONGS prop pools to the shared module + a combined SMOKES pool;
buildMandatoryMotifs and all three array-based generators now draw the mandatory
smoke prop from SMOKES instead of JOINTS-only. Drink (alcohol) was already
mandatory. Verified: 20 sampled prompts → 0 vice-less, variety across all 4 types.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit 808384d74819935e02b7bc040538c68787881913
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue May 26 15:11:35 2026 -0700

    drunk-*: every design now shows a vice — joint/cigar/pipe/bong (was joint-only)
    
    Steve directive: "all must show alcohol or cigars or pipes or bongs." Added
    CIGARS/PIPES/BONGS prop pools to the shared module + a combined SMOKES pool;
    buildMandatoryMotifs and all three array-based generators now draw the mandatory
    smoke prop from SMOKES instead of JOINTS-only. Drink (alcohol) was already
    mandatory. Verified: 20 sampled prompts → 0 vice-less, variety across all 4 types.
    
    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
 scripts/drunk_animal_prompts.js                | 16 +++----
 scripts/drunk_monkeys_birds_subdued_prompts.js |  2 +-
 scripts/drunk_monkeys_v2_prompts.js            |  2 +-
 scripts/drunk_motif_shared.js                  | 60 +++++++++++++++++++++++---
 4 files changed, 65 insertions(+), 15 deletions(-)

diff --git a/scripts/drunk_animal_prompts.js b/scripts/drunk_animal_prompts.js
index 4ae7af0..2d38552 100644
--- a/scripts/drunk_animal_prompts.js
+++ b/scripts/drunk_animal_prompts.js
@@ -305,8 +305,8 @@ function buildPrompt(seed = null) {
     const pick = arr => arr[Math.floor(rng() * arr.length)];
     return [
       pick(ANIMALS), pick(TABLEAUX),
-      // Mandatory motifs — Steve 2026-05-25
-      pick(JOINTS),
+      // Mandatory motifs — Steve 2026-05-25; smoke prop = joint/cigar/pipe/bong (2026-05-26)
+      pick(SHARED.SMOKES),
       pick(SWINGS),
       pick(BOTTLE_BACKDROPS),
       pick(SHARED.TEXTURE_GROUNDS).voice,
@@ -325,8 +325,8 @@ function buildPrompt(seed = null) {
   const refClause = SHARED.pickReferenceClause('drunk-animals');
   return [
     pickRand(ANIMALS), pickRand(TABLEAUX),
-    // Mandatory motifs — Steve 2026-05-25
-    pickRand(JOINTS),
+    // Mandatory motifs — Steve 2026-05-25; smoke prop = joint/cigar/pipe/bong (2026-05-26)
+    pickRand(SHARED.SMOKES),
     pickRand(SWINGS),
     pickRand(BOTTLE_BACKDROPS),
     pickTextureGroundVoice(),
@@ -354,10 +354,10 @@ function buildN(n) {
       animal,
       pickRand(TABLEAUX),
       // Mandatory motifs — Steve 2026-05-25 — every drunk-animal must show
-      // alcohol-in-hand + lit joint + swinging + wild-bottle backdrop +
-      // rendered on a natural-fiber texture ground (grasscloth/sisal/raffia/
-      // Madagascar etc.) + Met PD + prior wallco design reference clause.
-      pickRand(JOINTS),
+      // alcohol-in-hand + a smoke prop (joint/cigar/pipe/bong, Steve 2026-05-26)
+      // + swinging + wild-bottle backdrop + rendered on a natural-fiber texture
+      // ground (grasscloth/sisal/raffia/Madagascar etc.) + Met PD + prior ref.
+      pickRand(SHARED.SMOKES),
       pickRand(SWINGS),
       pickRand(BOTTLE_BACKDROPS),
       pickTextureGroundVoice(),
diff --git a/scripts/drunk_monkeys_birds_subdued_prompts.js b/scripts/drunk_monkeys_birds_subdued_prompts.js
index 937956c..524c57c 100644
--- a/scripts/drunk_monkeys_birds_subdued_prompts.js
+++ b/scripts/drunk_monkeys_birds_subdued_prompts.js
@@ -161,7 +161,7 @@ function buildOne(i) {
   // 60% SHARED tiki/cognac/champagne tableaux, 40% local subdued — gives
   // every design rich drink vocabulary while preserving the subdued voice.
   const tableau = Math.random() < 0.6 ? pick(SHARED.TABLEAUX) : pick(TABLEAUX);
-  const joint = pick(SHARED.JOINTS);
+  const joint = pick(SHARED.SMOKES);  // joint/cigar/pipe/bong (Steve 2026-05-26)
   const swing = pick(SHARED.SWINGS);
   const bottleBackdrop = pick(SHARED.BOTTLE_BACKDROPS);
   const texture = pick(SHARED.TEXTURE_GROUNDS);
diff --git a/scripts/drunk_monkeys_v2_prompts.js b/scripts/drunk_monkeys_v2_prompts.js
index 53e864b..e43853b 100644
--- a/scripts/drunk_monkeys_v2_prompts.js
+++ b/scripts/drunk_monkeys_v2_prompts.js
@@ -145,7 +145,7 @@ function buildOne(i) {
   // Mix local short-form ACTIONS with SHARED's rich tiki/cognac/champagne
   // TABLEAUX — 60% chance to use SHARED for variety.
   const action = Math.random() < 0.6 ? pick(SHARED.TABLEAUX) : pick(ACTIONS);
-  const joint = pick(SHARED.JOINTS);
+  const joint = pick(SHARED.SMOKES);  // joint/cigar/pipe/bong (Steve 2026-05-26)
   const swing = pick(SHARED.SWINGS);
   const bottleBackdrop = pick(SHARED.BOTTLE_BACKDROPS);
   const texture = pick(SHARED.TEXTURE_GROUNDS);
diff --git a/scripts/drunk_motif_shared.js b/scripts/drunk_motif_shared.js
index c70fe89..05cf986 100644
--- a/scripts/drunk_motif_shared.js
+++ b/scripts/drunk_motif_shared.js
@@ -57,6 +57,49 @@ const JOINTS = [
   'a stubby roach pinched in a tiny silver clip, ember glowing, single thread of smoke',
 ];
 
+// ── CIGARS — lit cigars w/ smoke (Steve 2026-05-26: vice set expanded) ──
+const CIGARS = [
+  'a fat lit cigar clenched in its teeth, a thick curl of blue-grey smoke rising',
+  'a long Churchill cigar held between two fingers/claws, ember glowing, a lazy smoke ribbon',
+  'a stubby cigar balanced on the rim of the glass, ash long and curling, smoke drifting up',
+  'a cigar tucked in the corner of its grin, a fat smoke ring blown overhead',
+  'a freshly clipped celebratory cigar held aloft like a trophy, ember bright, single smoke curl',
+  'a cigar mid-puff, cheeks puffed, an expanding cloud of smoke around its head',
+  'a half-smoked cigar resting in a tiny crystal ashtray balanced on its knee, smoke trailing',
+  'an oversized cigar gripped in one paw, gold band on the wrapper, thick smoke plume rising',
+];
+
+// ── PIPES — tobacco pipes w/ smoke ──────────────────────────────────────
+const PIPES = [
+  'a curved briar tobacco pipe clenched in its teeth, a slow wisp of smoke curling from the bowl',
+  'a long churchwarden pipe held elegantly, ember glowing in the bowl, a thin smoke thread',
+  'a meerschaum pipe carved like a tiny face, puffing contentedly, a smoke ring overhead',
+  'a bent-stem pipe balanced in one paw, the other tamping the bowl, a lazy smoke curl',
+  'a corncob pipe gripped in its grin, two little puffs of smoke escaping the corner',
+  'a calabash gourd pipe (Sherlock-style) held aloft, a dramatic smoke plume, one eye squinted',
+  'a sleek modern pipe mid-puff, a fat smoke ring expanding around its head',
+  'a pipe resting on the cocktail-glass rim, the bowl still smoldering, a ribbon of smoke rising',
+];
+
+// ── BONGS — water bongs / hookahs w/ smoke ──────────────────────────────
+const BONGS = [
+  'leaning over an ornate glass water-bong mid-pull, bubbles churning, a cloud of smoke building in the chamber',
+  'a tall colorful glass bong clutched in both paws, water frothing, cheeks puffed mid-hit',
+  'an elaborate hand-blown bong shaped like a tiki idol, smoke swirling in the chamber, crossed eyes',
+  'a small percolator bong balanced on its belly, milky smoke filling the tube, a blissful grin',
+  'a vintage hookah with a long coiled hose, puffing a fat exotic smoke cloud, lounging',
+  'a multi-chamber glass bong taller than the animal, smoke cascading through the levels, wide-eyed',
+  'a compact spiral-glass bong held aloft, smoke spiraling up the helix, a lopsided smile',
+  'a brass-and-glass hookah shared via a curling hose, a slow smoke plume, reclined pose',
+];
+
+// ── SMOKES — combined mandatory smoke-prop pool (Steve 2026-05-26) ──────
+// "all must show alcohol or cigars or pipes or bongs." Every drunk design
+// already gets a mandatory drink (TABLEAUX = alcohol); the smoke slot now
+// draws from the full vice set — joints + cigars + pipes + bongs — so the
+// implement varies instead of always being a cannabis joint.
+const SMOKES = [...JOINTS, ...CIGARS, ...PIPES, ...BONGS];
+
 // ── SWINGS — animal mid-swing OR mid-fall from something ────────────────
 // Steve 2026-05-25 followup: "animals falling off of trees grasping on
 // with one hand.. drunk". So both attached-swinging AND one-hand-grasp-
@@ -286,9 +329,16 @@ function pickRand(arr, exclude) {
 // One-line mandatory motif block — drop-in for any prompt generator that
 // wants the guaranteed alcohol+joint+swing+bottle-backdrop+texture clause.
 function buildMandatoryMotifs(category) {
+  // Mandatory vice: every design shows a drink (alcohol) AND a smoke implement
+  // drawn from the full set — joint / cigar / pipe / bong (Steve 2026-05-26
+  // "all must show alcohol or cigars or pipes or bongs"). `joint` kept as an
+  // alias of `smoke` so existing prompt builders that reference m.joint still
+  // emit the varied prop without a code change.
+  const smoke = pickRand(SMOKES);
   return {
     drink:           pickRand(TABLEAUX),
-    joint:           pickRand(JOINTS),
+    smoke,
+    joint:           smoke,
     swing:           pickRand(SWINGS),
     bottleBackdrop:  pickRand(BOTTLE_BACKDROPS),
     texture:         pickRand(TEXTURE_GROUNDS),
@@ -304,12 +354,12 @@ function buildMandatoryMotifs(category) {
 const DRUNK_NEGATIVE_SUFFIX =
   'whimsical playful joyful mischievous tone (NEVER grim, NEVER dark). ' +
   'Lean toward BOTANICALS (flowers, fruit, blossoms) over leaves/foliage. ' +
-  'NO cannabis leaf, NO marijuana leaf (the joint must read as a small rolled-paper prop, never as plant material). ' +
+  'NO cannabis leaf, NO marijuana leaf (any joint must read as a small rolled-paper prop, never as plant material; cigars/pipes/bongs read as small glassware/tobacco props). ' +
   'NO monstera, NO palm fronds, NO banana leaves, NO tropical jungle. ' +
   'NO real-brand-name labels, NO logos, NO text on bottles, no watermark.';
 
 module.exports = {
-  JOINTS, SWINGS, TABLEAUX, BOTTLE_BACKDROPS, TEXTURE_GROUNDS,
+  JOINTS, CIGARS, PIPES, BONGS, SMOKES, SWINGS, TABLEAUX, BOTTLE_BACKDROPS, TEXTURE_GROUNDS,
   FASHION_PALETTES, TONE_ON_TONE_DEEP_PALETTES, DEFAULT_PALETTES,
   pickRand, pickReferenceClause, buildMandatoryMotifs,
   DRUNK_NEGATIVE_SUFFIX,
@@ -319,7 +369,7 @@ if (require.main === module) {
   const m = buildMandatoryMotifs();
   console.log('Sample mandatory motifs:');
   console.log('  drink:           ' + m.drink);
-  console.log('  joint:           ' + m.joint);
+  console.log('  smoke:           ' + m.smoke);
   console.log('  swing:           ' + m.swing);
   console.log('  bottle-backdrop: ' + m.bottleBackdrop);
   console.log('  texture:         ' + m.texture.slug + ' — ' + m.texture.voice);
@@ -329,6 +379,6 @@ if (require.main === module) {
   console.log('Texture grounds:                   ' + TEXTURE_GROUNDS.length);
   console.log('Drink tableaux:                    ' + TABLEAUX.length);
   console.log('Bottle backdrops:                  ' + BOTTLE_BACKDROPS.length);
-  console.log('Joints:                            ' + JOINTS.length);
+  console.log('Smokes (joint+cigar+pipe+bong):    ' + SMOKES.length + ` (J${JOINTS.length}/C${CIGARS.length}/P${PIPES.length}/B${BONGS.length})`);
   console.log('Swings:                            ' + SWINGS.length);
 }

← 41574f3 Add Replicate-only chinoiserie sample generator (YOLO task #  ·  back to Wallco Ai  ·  docs: correct CLAUDE.md — designs.json IS deployed, not excl bb2d819 →