[object Object]

← back to Wallco Ai

drunk-animals + drunk-zoo-36: alcohol + lit joint + swinging mandatory

f73bb224e3850b1a09a1e0a5a677e865561e0f91 · 2026-05-25 20:03:01 -0700 · Steve Abrams

Steve directive 2026-05-25: every drunk-animal and drunk-zoo (rubk zoo)
design must visibly feature (a) alcohol being consumed, (b) a lit
handrolled cannabis joint with smoke trail, (c) the animal swinging
from something (vine/chandelier/rope/branch/trapeze/porch-swing).

- scripts/drunk_animal_prompts.js: new JOINTS[] + SWINGS[] arrays,
  baked into buildPrompt() (seeded + unseeded) and buildN(). Negative
  prompt now also excludes "cannabis leaf / marijuana leaf" so the
  joint stays a small prop rather than promoting to foliage.
- scripts/night-builder.js: 11 drunk-zoo-36 ZOO_VIGNETTES rewritten
  so every one explicitly contains alcohol + lit joint + mid-swing.
  Composer body reinforces "MANDATORY motifs visible in EVERY
  vignette".
- scripts/drunk_monkeys_v2_prompts.js + ..._subdued_prompts.js:
  added JOINTS[] + SWINGS[], buildOne now concatenates them after
  the alcohol action, NEGATIVE updated.

Smoke-tested all 4 generators — every output carries all 3 motifs.

Files touched

Diff

commit f73bb224e3850b1a09a1e0a5a677e865561e0f91
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon May 25 20:03:01 2026 -0700

    drunk-animals + drunk-zoo-36: alcohol + lit joint + swinging mandatory
    
    Steve directive 2026-05-25: every drunk-animal and drunk-zoo (rubk zoo)
    design must visibly feature (a) alcohol being consumed, (b) a lit
    handrolled cannabis joint with smoke trail, (c) the animal swinging
    from something (vine/chandelier/rope/branch/trapeze/porch-swing).
    
    - scripts/drunk_animal_prompts.js: new JOINTS[] + SWINGS[] arrays,
      baked into buildPrompt() (seeded + unseeded) and buildN(). Negative
      prompt now also excludes "cannabis leaf / marijuana leaf" so the
      joint stays a small prop rather than promoting to foliage.
    - scripts/night-builder.js: 11 drunk-zoo-36 ZOO_VIGNETTES rewritten
      so every one explicitly contains alcohol + lit joint + mid-swing.
      Composer body reinforces "MANDATORY motifs visible in EVERY
      vignette".
    - scripts/drunk_monkeys_v2_prompts.js + ..._subdued_prompts.js:
      added JOINTS[] + SWINGS[], buildOne now concatenates them after
      the alcohol action, NEGATIVE updated.
    
    Smoke-tested all 4 generators — every output carries all 3 motifs.
---
 scripts/drunk_animal_prompts.js                | 52 ++++++++++++++++++++++++--
 scripts/drunk_monkeys_birds_subdued_prompts.js | 34 ++++++++++++++++-
 scripts/drunk_monkeys_v2_prompts.js            | 36 ++++++++++++++++--
 scripts/night-builder.js                       | 33 ++++++++++------
 4 files changed, 133 insertions(+), 22 deletions(-)

diff --git a/scripts/drunk_animal_prompts.js b/scripts/drunk_animal_prompts.js
index d93a3e3..211feab 100644
--- a/scripts/drunk_animal_prompts.js
+++ b/scripts/drunk_animal_prompts.js
@@ -62,6 +62,40 @@ const TABLEAUX = [
   'long-neck amber beer bottle on its head like a hat, grin lopsided',
 ];
 
+// Lit-cannabis-joint clauses — Steve directive 2026-05-25: every drunk-animal
+// design must explicitly show a lit joint of cannabis (handrolled paper +
+// smoke trail). NOT a cannabis leaf (avoid the foliage-rule conflict + keep
+// the motif a small prop, not a plant). Pick one per prompt — guaranteed,
+// never omitted.
+const JOINTS = [
+  'a lit handrolled cannabis joint pinched between the other paw\'s fingers, white smoke trailing in a soft curl above',
+  'a smoldering joint dangling from its lips, a thin wisp of smoke rising in a backwards-S curl',
+  'a fat handrolled joint held aloft like a cigar, glowing red at the tip with a single curl of smoke',
+  'a half-smoked joint balanced on the rim of the cocktail glass, ribbon of smoke drifting upward',
+  'a freshly lit joint tucked behind one ear with a thin trail of smoke coming off the tip',
+  'a thick joint clenched in its teeth, two slow puffs of smoke escaping the nostrils',
+  'a glowing joint cradled between its claws, ember bright, smoke curling into a question mark',
+  'a hand-rolled joint mid-puff, smoke ring expanding around its head',
+  'a long elegant joint held between two pinched fingers, ash about to fall, smoke trail vertical',
+  'a stubby roach pinched in a tiny silver clip, ember glowing, single thread of smoke',
+];
+
+// Swinging-action clauses — Steve directive 2026-05-25: every drunk-animal
+// design must show the animal SWINGING from something — vine, chandelier,
+// rope, branch, swing, trapeze. Mandatory per-prompt, not optional.
+const SWINGS = [
+  'mid-swing from a thick hanging garden vine, one paw gripping the vine, body arcing through the air',
+  'swinging from a crystal chandelier with the chain creaking, the other paw waving',
+  'gripping a knotted rope swing, mid-arc, hair/fur blown back by the motion',
+  'hanging upside-down from a curving tree branch, tail looped around for balance, mid-pendulum',
+  'mid-swing on a circus trapeze bar, legs kicked out, glass and joint somehow still in hand',
+  'one paw hooked around a hanging brass chandelier arm, body swinging in a wide pendulum',
+  'swinging from a flowering wisteria vine that bows under its weight, petals shaking loose',
+  'swinging from a porch-style wooden seat swing with rope sides, kicking its feet out',
+  'mid-swing from a thick braided tassel rope hanging from the ceiling, body angled like a pendulum',
+  'gripping a curved tree limb with both hands, swinging side-to-side, ground far below',
+];
+
 // FLOWER-ONLY botanicals. No leaves, no foliage, no jungle/tropical-coded
 // plants. Mix of iconic garden-show flowers + rare / hard-to-find species
 // pulled from US native-plant references (USDA PLANTS, Lady Bird Johnson
@@ -198,22 +232,28 @@ 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),
+      pick(SWINGS),
       `set among ${pick(BOTANICALS)}`,
       `palette: ${pick(pickPaletteSource())}`,
       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',
+      'seamless wallpaper repeat, archival quality, FLOWERS ONLY, NO leaves, NO foliage, NO monstera, NO palm, NO banana, NO tropical, NO jungle, no cannabis leaf, no marijuana leaf, no text or watermark',
       // Aesthetic gate — Steve 2026-05-19: empirical professional palette from dw_unified
       TONE_ON_TONE_SUFFIX
     ].join(', ');
   }
   return [
     pickRand(ANIMALS), pickRand(TABLEAUX),
+    // Mandatory motifs — Steve 2026-05-25
+    pickRand(JOINTS),
+    pickRand(SWINGS),
     `set among ${pickRand(BOTANICALS)}`,
     `palette: ${pickRand(pickPaletteSource())}`,
     pickRand(STYLES),
     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'
+    'seamless wallpaper repeat, archival quality, FLOWERS ONLY, NO leaves, NO foliage, NO monstera, NO palm, NO banana, NO tropical, NO jungle, no cannabis leaf, no marijuana leaf, no text or watermark'
   ].join(', ');
 }
 
@@ -230,11 +270,15 @@ function buildN(n) {
     const parts = [
       animal,
       pickRand(TABLEAUX),
+      // Mandatory motifs — Steve 2026-05-25 — every drunk-animal must show
+      // a lit joint + swinging-from-something action in addition to alcohol.
+      pickRand(JOINTS),
+      pickRand(SWINGS),
       `set among ${pickRand(BOTANICALS)}`,
       `palette: ${pickRand(pickPaletteSource())}`,
       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',
+      'seamless wallpaper repeat, archival quality, FLOWERS ONLY, NO leaves, NO foliage, NO monstera, NO palm, NO banana, NO tropical, NO jungle, no cannabis leaf, no marijuana leaf, no text or watermark',
       // Aesthetic gate — Steve 2026-05-19: empirical professional palette from dw_unified
       TONE_ON_TONE_SUFFIX
     ];
@@ -243,7 +287,7 @@ function buildN(n) {
   return out;
 }
 
-module.exports = { buildPrompt, buildN, ANIMALS, TABLEAUX, BOTANICALS, PALETTES, FASHION_PALETTES, ALL_PALETTES, STYLES, COMPOSITIONS };
+module.exports = { buildPrompt, buildN, ANIMALS, TABLEAUX, JOINTS, SWINGS, BOTANICALS, PALETTES, FASHION_PALETTES, ALL_PALETTES, STYLES, COMPOSITIONS };
 
 if (require.main === module) {
   const n = parseInt(process.argv[2] || '5', 10);
diff --git a/scripts/drunk_monkeys_birds_subdued_prompts.js b/scripts/drunk_monkeys_birds_subdued_prompts.js
index 22591d4..53fc84d 100644
--- a/scripts/drunk_monkeys_birds_subdued_prompts.js
+++ b/scripts/drunk_monkeys_birds_subdued_prompts.js
@@ -74,6 +74,31 @@ const TABLEAUX = [
   'asleep curled around a bottle, mouth open, contented',
 ];
 
+// Lit-joint clauses — Steve 2026-05-25: every drunk-animal must show a lit
+// handrolled cannabis joint with smoke trail (small prop, not foliage).
+const JOINTS = [
+  'a lit handrolled cannabis joint pinched between its other paw\'s fingers, a thin curl of smoke rising in a soft S',
+  'a smoldering joint dangling from its lips/beak, smoke trail rising in a backwards-S curl',
+  'a fat handrolled joint held aloft like a cigar, glowing tip, single curl of smoke',
+  'a half-smoked joint balanced on the rim of the cocktail glass, ribbon of smoke drifting up',
+  'a freshly lit joint tucked behind one ear, thin smoke trail off the tip',
+  'a glowing joint cradled in two claws, ember bright, smoke curling',
+  'a long elegant joint pinched between two fingers, ash about to fall, smoke vertical',
+];
+
+// Swinging-action clauses — Steve 2026-05-25: every drunk-animal must be
+// swinging from something (vine / chandelier / rope / branch / trapeze).
+const SWINGS = [
+  'mid-swing from a hanging garden vine, one paw gripping the vine, body arcing',
+  'swinging from a crystal chandelier, chain swaying, other paw raised',
+  'gripping a knotted rope swing, mid-arc, fur/feathers blown back by motion',
+  'hanging upside-down from a curving tree branch, tail looped for balance, mid-pendulum',
+  'mid-swing on a circus trapeze bar, legs kicked out',
+  'hooked around a hanging brass chandelier arm, body swinging wide',
+  'swinging from a flowering wisteria racemes that bows under its weight',
+  'perched on a wooden porch swing-seat with rope sides, kicking out',
+];
+
 // SUBDUED botanical-subjects. Soft, heritage, controlled — no directional
 // variation, no jungle-tropical, no banana/palm/butterfly. Mix of native
 // US wildflowers + heritage English garden.
@@ -133,19 +158,24 @@ function buildOne(i) {
   else animal = `${pick(MONKEYS)} sharing a drink with a ${pick(BIRDS).replace(/^tipsy |^sloshed |^drunken |^plastered |^woozy |^inebriated |^wobbly |^glassy-eyed |^drunk /, '')}`;
 
   const tableau = pick(TABLEAUX);
+  const joint = pick(JOINTS);
+  const swing = pick(SWINGS);
   const botanical = pick(BOTANICALS);
   const composition = pick(COMPOSITIONS);
   const palette = pick(PALETTES);
 
   // Build the prompt — clearly SUBDUED, clearly REPEAT-FRIENDLY, clearly
   // settlement-safe (no directional/tropical foliage, controlled multicolor).
+  // Steve 2026-05-25 — mandatory joint + swinging in every prompt.
   const positive =
-    `Editorial wallpaper design — ${animal}, ${tableau}, set on a subdued botanical ground of ${botanical}. ` +
+    `Editorial wallpaper design — ${animal}, ${tableau}, also holding ${joint}, ${swing}, ` +
+    `set on a subdued botanical ground of ${botanical}. ` +
     `Composition: ${composition}. ` +
     `Palette: ${palette.voice}; palette hex anchors: ${palette.hex.join(', ')}. ` +
     `Style: hand-painted gouache illustration on heritage textured paper, ` +
     `restrained luxury wallcovering, museum-archival quality, fine brushwork, ` +
     `tone-on-tone restraint, no neon, no electric saturation, no rainbow. ` +
+    `MANDATORY visible in every design: alcohol drink in hand/beak, lit handrolled cannabis joint with smoke curl, and the animal swinging from something. No cannabis leaf, no marijuana leaf. ` +
     TONE_ON_TONE_SUFFIX;
 
   return {
@@ -162,7 +192,7 @@ function buildN(n) {
   return out;
 }
 
-module.exports = { buildN, buildOne, MONKEYS, BIRDS, BOTANICALS, PALETTES };
+module.exports = { buildN, buildOne, MONKEYS, BIRDS, BOTANICALS, JOINTS, SWINGS, PALETTES };
 
 if (require.main === module) {
   const n = parseInt(process.argv[2] || '5', 10);
diff --git a/scripts/drunk_monkeys_v2_prompts.js b/scripts/drunk_monkeys_v2_prompts.js
index 63cb6eb..baa5319 100644
--- a/scripts/drunk_monkeys_v2_prompts.js
+++ b/scripts/drunk_monkeys_v2_prompts.js
@@ -83,6 +83,31 @@ const BACKDROPS = [
   'sage-on-cream tone-on-tone botanical wash behind the figure',
 ];
 
+// Lit-joint clauses — Steve 2026-05-25: every drunk-animal must show a lit
+// handrolled cannabis joint with smoke trail (small prop, not foliage).
+const JOINTS = [
+  'a lit handrolled cannabis joint pinched in its other paw, a thin curl of smoke rising',
+  'a smoldering joint dangling from its lips, smoke trail rising in a backwards-S curl',
+  'a fat joint held aloft like a cigar, ember bright, single curl of smoke',
+  'a half-smoked joint balanced on the rim of the glass, ribbon of smoke drifting up',
+  'a freshly lit joint tucked behind one ear, thin smoke trail off the tip',
+  'a glowing joint cradled between its claws, ember bright, smoke curling',
+  'a long elegant joint pinched between two fingers, ash about to fall, smoke vertical',
+];
+
+// Swinging-action clauses — Steve 2026-05-25: every drunk-animal must be
+// swinging from something (vine / chandelier / rope / branch / trapeze).
+const SWINGS = [
+  'mid-swing from a hanging garden vine, one paw gripping the vine, body arcing',
+  'swinging from a crystal chandelier, chain creaking, other paw waving',
+  'gripping a knotted rope swing, mid-arc, fur blown back by motion',
+  'hanging upside-down from a curving tree branch, tail looped for balance, mid-pendulum',
+  'mid-swing on a circus trapeze bar, legs kicked out',
+  'hooked around a hanging brass chandelier arm, body swinging in a wide pendulum',
+  'swinging from a flowering wisteria vine that bows under its weight',
+  'swinging from a wooden porch seat-swing with rope sides, kicking its feet out',
+];
+
 const COMPOSITIONS = [
   'half-drop repeat pattern',
   'block repeat pattern',
@@ -113,17 +138,20 @@ function buildOne(i) {
   else subject = `${pick(MONKEYS)} and a ${pick(BIRDS)} together`;
 
   const action = pick(ACTIONS);
+  const joint = pick(JOINTS);
+  const swing = pick(SWINGS);
   const backdrop = pick(BACKDROPS);
   const composition = pick(COMPOSITIONS);
   const palette = pick(PALETTES);
 
   // SUBJECT FIRST — that's the key v2 fix. ~150-200 char prompt total.
+  // Steve 2026-05-25 — mandatory joint + swinging in every prompt.
   const positive =
-    `${subject}, ${action}. ` +
+    `${subject}, ${action}, also ${joint}, ${swing}. ` +
     `${backdrop}. ` +
     `Hand-painted gouache wallpaper illustration, ${composition}, ${palette.voice}, ` +
     `restrained tone-on-tone, museum-archival print quality. ` +
-    `Make sure the animal AND its drinking glass/bottle are clearly visible and prominent.`;
+    `Make sure the animal, its drinking glass/bottle, its lit cannabis joint with smoke, and the swinging element are ALL clearly visible and prominent.`;
 
   return {
     prompt: positive,
@@ -139,9 +167,9 @@ function buildN(n) {
   return out;
 }
 
-const NEGATIVE = 'no animal, animal missing, only flowers, only botanical, only birds in a field, generic wallpaper pattern, generic floral, abstract, no drink, no glass, no bottle, monstera, palm leaves, banana leaves, jungle, butterflies, grapes, bananas, neon, fluorescent, vivid saturated, rainbow, electric pink, photoreal photograph, low quality, blurry, smudgy face, deformed limbs';
+const NEGATIVE = 'no animal, animal missing, only flowers, only botanical, only birds in a field, generic wallpaper pattern, generic floral, abstract, no drink, no glass, no bottle, no joint, no smoke, animal not swinging, animal standing still on ground, monstera, palm leaves, banana leaves, cannabis leaf, marijuana leaf, jungle, butterflies, grapes, bananas, neon, fluorescent, vivid saturated, rainbow, electric pink, photoreal photograph, low quality, blurry, smudgy face, deformed limbs';
 
-module.exports = { buildN, buildOne, MONKEYS, BIRDS, ACTIONS, PALETTES, NEGATIVE };
+module.exports = { buildN, buildOne, MONKEYS, BIRDS, ACTIONS, JOINTS, SWINGS, PALETTES, NEGATIVE };
 
 if (require.main === module) {
   const n = parseInt(process.argv[2] || '5', 10);
diff --git a/scripts/night-builder.js b/scripts/night-builder.js
index f3e62dc..4121cd8 100755
--- a/scripts/night-builder.js
+++ b/scripts/night-builder.js
@@ -351,25 +351,34 @@ function composeDiamondTrellisPrompt(cw) {
 // Replaces the giraffe-only track with a broader symmetric-zoo track.
 // 36" repeat — wall-scale large pattern. Each design = one symmetric
 // paired-animal vignette in 19c-engraving aesthetic.
+//
+// 2026-05-25 Steve directive: EVERY drunk-zoo-36 design must show
+//   (a) alcohol being consumed (drink in hand/mouth),
+//   (b) a lit handrolled joint of cannabis with smoke trail (NOT a cannabis
+//       leaf — keep it a small prop),
+//   (c) the pair swinging from something (vine / chandelier / rope / branch).
+// All three are baked into each vignette below so the diffusion model can't
+// drop one. Reinforced in the prompt body.
 const ZOO_VIGNETTES = [
-  'two reticulated giraffes facing each other in symmetric profile, necks crossing in a heart-shape, both sipping champagne coupes',
-  'pair of mirror-image giraffes flanking a central acacia tree, both holding cocktail glasses',
-  'mother-and-calf giraffe pair, mother arching over the calf, both with bottles',
-  'pair of orangutans in symmetric profile facing each other across a magnum bottle of champagne, hand-engraved',
-  'two sloths hanging in mirror-image from a central acacia branch, each with a cocktail glass',
-  'pair of red pandas in symmetric grooming pose, central bottle between them',
-  'two lemurs in symmetric profile leaping toward each other over a central palm-frond-free fern',
-  'pair of capybaras in symmetric resting pose, central mint julep glass between them',
-  'two African elephant calves in symmetric trunk-raised pose, central wine glass',
-  'pair of macaws in symmetric perched pose (no flight), central long-stemmed coupe between them',
-  'two tipsy frogs in symmetric leaping pose mirrored, central decanter',
+  'two reticulated giraffes facing each other in symmetric profile, necks crossing in a heart-shape, both sipping champagne coupes, each giraffe also clenching a lit handrolled joint in its mouth with a wisp of smoke curling up, both pairs hanging by their forelegs from a thick garden vine that swags across the top of the panel',
+  'pair of mirror-image giraffes flanking a central acacia branch, both holding cocktail glasses raised in toast, each also pinching a lit joint between its lips with smoke trailing, both swinging from the central acacia branch like a trapeze, hooves kicked outward',
+  'mother-and-calf giraffe pair, mother arching over the calf, mother with a champagne bottle and a lit joint in the same hoof (smoke curling), calf with a coupe glass and a smaller joint, both swinging together from a crystal chandelier whose chain sways',
+  'pair of orangutans in symmetric profile facing each other across a magnum bottle of champagne, each orangutan also gripping a lit handrolled joint with a curl of smoke, both hanging by one long arm from a hanging vine that bows under their weight, hand-engraved',
+  'two sloths hanging in mirror-image from a central acacia branch, each holding a cocktail glass in one paw and a lit joint in the other, slow smoke spirals rising from each joint, the central branch acting as the swing they hang from',
+  'pair of red pandas in symmetric pose, central bottle between them, each panda also holding a smoldering joint with a thin smoke trail, both swinging from a knotted rope that arcs across the top of the panel',
+  'two lemurs in symmetric profile leaping toward each other from opposite hanging vines (each clutching its own vine mid-swing), each lemur with a cocktail glass in one paw and a lit joint in the other, smoke ribbons crossing in the center',
+  'pair of capybaras in symmetric pose, central mint julep glass between them, each capybara with a fat handrolled joint in its mouth, smoke curling up, both swinging together on a wooden porch swing suspended by two ropes',
+  'two African elephant calves in symmetric trunk-raised pose, trunks wrapped around a central wine glass that they tip into each other, each trunk also holding a lit joint with a wisp of smoke, both calves swinging from a thick hanging garland that arcs above them',
+  'pair of macaws in symmetric perched pose, central long-stemmed coupe between them, each macaw also clutching a lit handrolled joint in its talon with smoke trailing, both perched on a hanging vine swing that pendulums across the panel',
+  'two tipsy frogs in symmetric leaping pose mirrored, central decanter, each frog with a martini glass in one webbed hand and a lit joint in the other (smoke curling), both leaping FROM hanging vines they\'ve just released, mid-swing arcs visible',
 ];
 function composeDrunkZoo36Prompt(cw) {
   const vig = ZOO_VIGNETTES[Math.floor(Math.random() * ZOO_VIGNETTES.length)];
   return (
     `Drunk Zoo 36" repeat wallpaper — ${cw.name} colorway. Ground: solid ${cw.tone} (${cw.hex}). Figure: bone-ivory (#F2EADB) single-ink. ` +
     `Vignette: ${vig}. Renders at wall-scale 36-inch seamless tile — motifs are LARGE, anchored on the central vertical axis of symmetry, generous breathing room of clean ground around each motif. ` +
-    `Each animal is one FLAT STENCIL SILHOUETTE in bone-ivory ink — no interior shading, no anatomical line-detail, no spots, no stripes, no fur texture. Spots/stripes appear ONLY as cut-out negative shapes in the silhouette (revealing ground tone), never as a second ink color. ` +
+    `MANDATORY motifs visible in EVERY vignette: (1) alcohol being consumed (drink glass or bottle held to mouth/in paw), (2) a lit handrolled cannabis joint with a visible curl of smoke, (3) the animal(s) swinging from something — vine, branch, chandelier, rope, or porch swing — mid-swing arc visible. ` +
+    `Each animal is one FLAT STENCIL SILHOUETTE in bone-ivory ink — no interior shading, no anatomical line-detail, no spots, no stripes, no fur texture. Spots/stripes appear ONLY as cut-out negative shapes in the silhouette (revealing ground tone), never as a second ink color. The joint and smoke wisp are tiny silhouette props inside the bone-ivory ink layer (joint = small rolled-paper cylinder with a glowing tip; smoke = a thin curling line). NO cannabis leaf, NO marijuana leaf, NO foliage of any kind. ` +
     SHARED_ARTDIR
   );
 }

← 0e7d69c yolo-queue: DP-1 ✓ drawer movers verified clean  ·  back to Wallco Ai  ·  yolo-queue: DP-2 ✓ static 96x96 thumbs + stash + click-swap e0bff67 →