← back to Wallco Ai
drunk-animals: tiki/cognac/champagne/smoking-bubble + textures + deep tones
9228ce801ef3f36809ef1a79f802e8bd368c276e · 2026-05-25 20:25:43 -0700 · Steve Abrams
Steve directives 2026-05-25 (rapid-fire):
- Every drunk-animal/drunk-zoo design MUST show a glass/bottle (audit pending)
- Rich drink vocabulary — classics + tiki/Trader Vic / Hawaiian umbrella /
scorpion bowl / mai tai / piña colada / cognac snifter / brandy / smoking
dry-ice / bubbling absinthe / champagne popping / sabering / magnums
- Whimsical/wild bottle silhouette backdrops in negative space
- Render every design on a natural-fiber substrate (grasscloth, sisal,
raffia, Madagascar cloth, jute, abaca, arrowroot, linen, cork, mica) —
17 grounds, library at public/textures/library
- Default palette = deep tone-on-tone (browns/greens/reds/golds, 28 entries)
with Gucci + Hermès anchors. Fashion-house palettes pull live from the
style-guide agent at ~/Projects/fashion-style-guides/data/brands.json
(all 20 houses)
- Whimsical/joyful tone; lean toward BOTANICALS (flowers, fruit), not
leaves/foliage
- Joint stays a small rolled-paper prop, never a cannabis leaf
New shared module scripts/drunk_motif_shared.js — 37 drink tableaux,
10 joints, 10 swings, 14 bottle backdrops, 17 texture grounds, 28
deep tone-on-tone palettes, 20 live fashion-house palettes.
Refactored generators to import SHARED:
- scripts/drunk_animal_prompts.js — pickPaletteSource() now defaults to
SHARED.DEFAULT_PALETTES (deep tone-on-tone). pickTextureGroundVoice()
injects natural-fiber ground. Buildpath emits TEXTURE_GROUNDS clause
alongside drink/joint/swing/bottle-backdrop.
- scripts/drunk_monkeys_v2_prompts.js — 60% SHARED tiki/cognac TABLEAUX,
full motif chain in every prompt.
- scripts/drunk_monkeys_birds_subdued_prompts.js — same treatment, 70%
deep tone-on-tone palette, 60% SHARED rich-drink TABLEAUX.
- scripts/night-builder.js — drunk-zoo-36 ZOO_VIGNETTES expanded from 11
to 27 (added tiki/champagne/cognac/smoking/wild-bottle pairs).
composeDrunkZoo36Prompt now layers SHARED texture substrate UNDER
the colorway tint and emits SHARED bottle-backdrop in negative space.
Files touched
M scripts/drunk_animal_prompts.jsM scripts/drunk_monkeys_birds_subdued_prompts.jsM scripts/drunk_monkeys_v2_prompts.jsA scripts/drunk_motif_shared.jsM scripts/night-builder.js
Diff
commit 9228ce801ef3f36809ef1a79f802e8bd368c276e
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon May 25 20:25:43 2026 -0700
drunk-animals: tiki/cognac/champagne/smoking-bubble + textures + deep tones
Steve directives 2026-05-25 (rapid-fire):
- Every drunk-animal/drunk-zoo design MUST show a glass/bottle (audit pending)
- Rich drink vocabulary — classics + tiki/Trader Vic / Hawaiian umbrella /
scorpion bowl / mai tai / piña colada / cognac snifter / brandy / smoking
dry-ice / bubbling absinthe / champagne popping / sabering / magnums
- Whimsical/wild bottle silhouette backdrops in negative space
- Render every design on a natural-fiber substrate (grasscloth, sisal,
raffia, Madagascar cloth, jute, abaca, arrowroot, linen, cork, mica) —
17 grounds, library at public/textures/library
- Default palette = deep tone-on-tone (browns/greens/reds/golds, 28 entries)
with Gucci + Hermès anchors. Fashion-house palettes pull live from the
style-guide agent at ~/Projects/fashion-style-guides/data/brands.json
(all 20 houses)
- Whimsical/joyful tone; lean toward BOTANICALS (flowers, fruit), not
leaves/foliage
- Joint stays a small rolled-paper prop, never a cannabis leaf
New shared module scripts/drunk_motif_shared.js — 37 drink tableaux,
10 joints, 10 swings, 14 bottle backdrops, 17 texture grounds, 28
deep tone-on-tone palettes, 20 live fashion-house palettes.
Refactored generators to import SHARED:
- scripts/drunk_animal_prompts.js — pickPaletteSource() now defaults to
SHARED.DEFAULT_PALETTES (deep tone-on-tone). pickTextureGroundVoice()
injects natural-fiber ground. Buildpath emits TEXTURE_GROUNDS clause
alongside drink/joint/swing/bottle-backdrop.
- scripts/drunk_monkeys_v2_prompts.js — 60% SHARED tiki/cognac TABLEAUX,
full motif chain in every prompt.
- scripts/drunk_monkeys_birds_subdued_prompts.js — same treatment, 70%
deep tone-on-tone palette, 60% SHARED rich-drink TABLEAUX.
- scripts/night-builder.js — drunk-zoo-36 ZOO_VIGNETTES expanded from 11
to 27 (added tiki/champagne/cognac/smoking/wild-bottle pairs).
composeDrunkZoo36Prompt now layers SHARED texture substrate UNDER
the colorway tint and emits SHARED bottle-backdrop in negative space.
---
scripts/drunk_animal_prompts.js | 109 +++++++--
scripts/drunk_monkeys_birds_subdued_prompts.js | 28 ++-
scripts/drunk_monkeys_v2_prompts.js | 34 ++-
scripts/drunk_motif_shared.js | 300 +++++++++++++++++++++++++
scripts/night-builder.js | 38 +++-
5 files changed, 478 insertions(+), 31 deletions(-)
diff --git a/scripts/drunk_animal_prompts.js b/scripts/drunk_animal_prompts.js
index 211feab..a22b249 100644
--- a/scripts/drunk_animal_prompts.js
+++ b/scripts/drunk_animal_prompts.js
@@ -16,6 +16,10 @@
*/
const { TONE_ON_TONE_SUFFIX } = require('./fashion_palettes');
+const SHARED = require('./drunk_motif_shared');
+// Re-export so external callers (tick scripts) still see ANIMALS/TABLEAUX etc.
+// Local arrays below mirror SHARED for backwards compat; SHARED is canonical
+// going forward.
const ANIMALS = [
'wide-eyed Amazonian tree frog',
@@ -39,12 +43,16 @@ const ANIMALS = [
// cues without using brand names (cobalt-blue vodka bottle, emerald-green
// beer bottle, jet-black stout glass, deep purple velvet whiskey decanter,
// frosted clear vodka, gold-labeled cognac).
+// 2026-05-25 Steve directive — heavy on classic drinks, tiki/Hawaiian-umbrella
+// drinks, Trader Vic's-style mai tai / zombie / scorpion bowls, cognac
+// snifters, smoking dry-ice / bubbling cocktails, champagne bottles
+// (popping corks, magnums), and whimsical/wild bottles in the background.
const TABLEAUX = [
+ // ── classic glassware ────────────────────────────────────────────────
'clutching a long-stemmed red wine glass, deep burgundy sloshing over the rim',
'cradling an emerald-green beer bottle, foam crowning the lip, content sigh',
'holding a frosted clear vodka bottle aloft, condensation beads, cheeks flushed',
'mid-pour from a cobalt-blue vodka bottle into a shot glass, eyes crossed',
- 'mid-toast with a champagne flute, golden bubbles spilling, head tilted',
'one paw around a jet-black stout pint, cream head, eyelids drooping',
'gripping a pale-gold pilsner glass in one paw, amber bottle in the other',
'holding a crystal whiskey tumbler, two melting ice cubes, deep amber whiskey',
@@ -54,12 +62,57 @@ const TABLEAUX = [
'tequila shot in one paw, lime wedge in the other, salt rim on the glass',
'clear pale lager bottle with a lime wedge stuffed in its neck',
'mug of pilsner the size of its head, foam dripping down its chin',
- 'gold-labeled cognac snifter cradled in both paws, swirling deliberately',
'red-star amber-lager bottle gripped tight, head tipped back mid-swig',
'frosted vodka decanter etched with silhouettes, cradled to its chest',
'two paws on a hand-blown wine bottle, burgundy splashing onto a flower',
- 'champagne magnum bottle wedged under one arm, flute in the other paw',
'long-neck amber beer bottle on its head like a hat, grin lopsided',
+ // ── cognac / brandy snifter ──────────────────────────────────────────
+ 'gold-labeled cognac snifter cradled in both paws, swirling deliberately, deep amber liquor coating the inside of the bowl',
+ 'oversized brandy snifter held in both arms, the animal nose-deep in the bouquet, eyes closed in bliss',
+ 'wide-bowl cognac snifter resting on its belly, swirling pool of amber catching the light, lazy smile',
+ // ── tiki / Hawaiian-umbrella / Trader Vic\'s ──────────────────────────
+ 'oversized ceramic tiki mug carved like a moai head, paper-parasol umbrella sticking out, pineapple wedge on the rim, sipping with crossed eyes',
+ 'classic mai tai in a hurricane glass — coral-orange liquid, hibiscus blossom + paper Hawaiian umbrella + lime-wedge skewer, the animal sipping through a striped paper straw',
+ 'zombie cocktail in a tall chimney glass — three-color sunset gradient, two paper umbrellas crossed at the top, cherries and mint, frothy crown',
+ 'scorpion bowl shared from the center — giant ceramic tiki bowl, two long bendy straws, the animal leaning in with both paws gripping the rim, multiple paper umbrellas',
+ 'piña colada in a coconut shell — striped straw, paper parasol, the animal cradling the coconut against its chest',
+ 'tiki ceramic mug shaped like a hula dancer, the animal pretending to dance along, parasol garnish bouncing',
+ 'singapore sling in a tall pilsner-style flute, pink liquid, cherry-and-pineapple skewer, paper umbrella tucked behind one ear',
+ 'painkiller cocktail in a wide rocks glass with grated nutmeg dusting on top, the animal sneezing from the spice, drink mid-spill',
+ // ── smoking / bubbling / molecular ───────────────────────────────────
+ 'smoking dry-ice cocktail in a crystal coupe — dense white smoke pouring over the rim and cascading down the stem like a slow waterfall, the animal peering in wide-eyed',
+ 'bubbling absinthe fountain dripping into a slotted-spoon-and-sugar-cube setup over a tulip glass, the green liquor going milky-jade, the animal entranced',
+ 'molecular cocktail in a flat-bottom rocks glass with floating caviar spheres of bitters and a single dry-ice cube hissing smoke off the surface, the animal poking at the bubbles with a swizzle stick',
+ 'champagne flute with an effervescent sugar cube dropped in — bubbling violently over the rim, the animal recoiling with a goofy grin',
+ 'gin fizz in a tall collins glass with a thick foamy head dome rising two inches above the rim, the animal carefully not touching it',
+ 'flaming-rum tiki bowl with a real flame leaping out of a hollowed lime in the center, ribbons of smoke rolling off, the animal\'s eyebrows singed off in surprise',
+ // ── champagne bottles / popping corks ────────────────────────────────
+ 'champagne bottle popping mid-celebration — cork shooting toward the corner of the panel, golden fizz erupting in a wide arc, the animal holding the bottle aloft like a trophy',
+ 'magnum of champagne wedged under one arm, foil torn off, wire cage dangling, the animal mid-pour into a coupe in its other paw',
+ 'jeroboam champagne bottle taller than the animal itself, the animal hugging the bottle like a friend, gold-foil neck label catching the light',
+ 'champagne saber poised — vintage cavalry-style sabre about to slice the bottle neck off, the animal in dramatic stance with one eye squinted',
+ 'pyramid-tower of stacked champagne coupes, the animal pouring from a magnum on top, golden fountain cascading down through the tower',
+ 'spraying champagne bottle held above the head like a Formula-1 podium, the animal soaked but grinning, foam everywhere',
+];
+
+// Wild bottle backdrops — Steve 2026-05-25 followup: "wild bottles backdrops".
+// Whimsical, exotic, decorative bottle shapes arranged in the background
+// behind the animal — apothecary, etched crystal, ceramic tiki, hourglass,
+// skull, hand-blown art-glass. Always solid-ink silhouettes (no labels with
+// real brand names). One picked per prompt — mandatory.
+const BOTTLE_BACKDROPS = [
+ 'a whimsical backdrop of mismatched apothecary bottles in tall and squat silhouettes, lined up like a curio shelf, each with a hand-drawn cork',
+ 'a wild backdrop of etched-crystal decanters in five different silhouettes — hexagonal, hourglass, teardrop, square-cut, footed — all sketched in line and washed flat',
+ 'a backdrop row of ceramic tiki bottles carved as moai heads, hula dancers, and pufferfish, each with a tiny cork',
+ 'a whimsical bar shelf backdrop crammed with hand-blown art-glass bottles in twisted, helical, and spiral forms, each catching a tiny highlight',
+ 'a backdrop of vintage champagne bottles in graduated sizes (split, demi, standard, magnum, jeroboam, methuselah) lined up like russian dolls',
+ 'a backdrop of skull-shaped vodka bottles in different sizes peering out at the viewer, each with a cork hat',
+ 'a stacked-pyramid backdrop of cognac bottles, some on their sides, others upright, casting long flat shadows on the ground tone',
+ 'a whimsical backdrop of weird-bottle silhouettes — a fish, a boot, a violin, a teapot, a hourglass — all functioning as liquor bottles, arrayed across the back of the panel',
+ 'a backdrop of carved Murano-style art-glass bottles with twisted necks and bulbous bodies, in graduated sizes across the back',
+ 'a backdrop of antique smuggler bottles half-buried in the ground, corks sticking up like little hats',
+ 'a backdrop of saloon-style bottle rows on a back-bar shelf, mirrored back behind them, the animal reflected partially in the mirror',
+ 'a backdrop of hot-air-balloon-shaped novelty bottles floating gently behind the animal, each with a tiny ribbon-tied label',
];
// Lit-cannabis-joint clauses — Steve directive 2026-05-25: every drunk-animal
@@ -164,7 +217,10 @@ const FASHION_PALETTES = [
];
// Combined pool — fashion palettes mix into the regular rotation by default.
-const ALL_PALETTES = [...PALETTES, ...FASHION_PALETTES];
+// 2026-05-25 Steve directive — DEFAULT mode is now SHARED tone-on-tone deep
+// palettes (browns/greens/reds/golds, Gucci + Hermès anchored). Warhol-pop
+// + local fashion arrays are kept for backwards-compat env overrides.
+const ALL_PALETTES = [...PALETTES, ...FASHION_PALETTES, ...SHARED.TONE_ON_TONE_DEEP_PALETTES, ...SHARED.FASHION_PALETTES];
const STYLES = [
'classic Andy Warhol silkscreen, 4-panel color-swap repeat, registration offset, halftone grain',
@@ -194,9 +250,13 @@ const COMPOSITIONS = [
];
// Source-pool picker — honors DRUNK_PALETTE env var:
-// 'fashion' → fashion-only
-// 'warhol' → original pop-only
-// anything else (default) → mixed pool
+// (default) → SHARED.DEFAULT_PALETTES (tone-on-tone deep — browns/greens/
+// reds/golds, Gucci + Hermès anchored). Steve directive
+// 2026-05-25.
+// 'fashion' → SHARED.FASHION_PALETTES (20 fashion houses live from the
+// style-guide agent at fashion-style-guides/data/brands.json)
+// 'warhol' → original Warhol pop palettes (kept for backwards compat)
+// 'mixed' → everything combined
//
// DRUNK_PALETTE_INDEX (0-based int) pins to a single specific palette within
// whichever pool DRUNK_PALETTE selects. Useful for "give me 50 designs in the
@@ -204,9 +264,10 @@ const COMPOSITIONS = [
function pickPaletteSource() {
const mode = (process.env.DRUNK_PALETTE || '').toLowerCase();
let pool;
- if (mode === 'fashion') pool = FASHION_PALETTES;
+ if (mode === 'fashion') pool = SHARED.FASHION_PALETTES;
else if (mode === 'warhol' || mode === 'pop') pool = PALETTES;
- else pool = ALL_PALETTES;
+ else if (mode === 'mixed') pool = ALL_PALETTES;
+ else pool = SHARED.DEFAULT_PALETTES; // tone-on-tone deep
const pinIdx = parseInt(process.env.DRUNK_PALETTE_INDEX, 10);
if (Number.isInteger(pinIdx) && pinIdx >= 0 && pinIdx < pool.length) {
return [pool[pinIdx]]; // single-element array → pickRand always returns it
@@ -214,6 +275,18 @@ function pickPaletteSource() {
return pool;
}
+// Pick a TEXTURE_GROUND voice — natural-fiber wallcovering ground description.
+// Honors DRUNK_TEXTURE env var to pin to a specific slug.
+function pickTextureGroundVoice() {
+ const pin = (process.env.DRUNK_TEXTURE || '').toLowerCase();
+ const list = SHARED.TEXTURE_GROUNDS;
+ if (pin) {
+ const hit = list.find(t => t.slug === pin);
+ if (hit) return hit.voice;
+ }
+ return list[Math.floor(Math.random() * list.length)].voice;
+}
+
function pickRand(arr, exclude = new Set()) {
for (let tries = 0; tries < 50; tries++) {
const v = arr[Math.floor(Math.random() * arr.length)];
@@ -235,11 +308,13 @@ function buildPrompt(seed = null) {
// Mandatory motifs — Steve 2026-05-25
pick(JOINTS),
pick(SWINGS),
+ pick(BOTTLE_BACKDROPS),
+ pick(SHARED.TEXTURE_GROUNDS).voice,
`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 cannabis leaf, no marijuana leaf, no text or watermark',
+ SHARED.DRUNK_NEGATIVE_SUFFIX,
// Aesthetic gate — Steve 2026-05-19: empirical professional palette from dw_unified
TONE_ON_TONE_SUFFIX
].join(', ');
@@ -249,11 +324,13 @@ function buildPrompt(seed = null) {
// Mandatory motifs — Steve 2026-05-25
pickRand(JOINTS),
pickRand(SWINGS),
+ pickRand(BOTTLE_BACKDROPS),
+ pickTextureGroundVoice(),
`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 cannabis leaf, no marijuana leaf, no text or watermark'
+ SHARED.DRUNK_NEGATIVE_SUFFIX
].join(', ');
}
@@ -271,14 +348,18 @@ function buildN(n) {
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.
+ // alcohol-in-hand + lit joint + swinging + wild-bottle backdrop +
+ // rendered on a natural-fiber texture ground (grasscloth/sisal/raffia/
+ // Madagascar etc.).
pickRand(JOINTS),
pickRand(SWINGS),
+ pickRand(BOTTLE_BACKDROPS),
+ pickTextureGroundVoice(),
`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 cannabis leaf, no marijuana leaf, no text or watermark',
+ SHARED.DRUNK_NEGATIVE_SUFFIX,
// Aesthetic gate — Steve 2026-05-19: empirical professional palette from dw_unified
TONE_ON_TONE_SUFFIX
];
@@ -287,7 +368,7 @@ function buildN(n) {
return out;
}
-module.exports = { buildPrompt, buildN, ANIMALS, TABLEAUX, JOINTS, SWINGS, BOTANICALS, PALETTES, FASHION_PALETTES, ALL_PALETTES, STYLES, COMPOSITIONS };
+module.exports = { buildPrompt, buildN, ANIMALS, TABLEAUX, JOINTS, SWINGS, BOTTLE_BACKDROPS, 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 53fc84d..21450b3 100644
--- a/scripts/drunk_monkeys_birds_subdued_prompts.js
+++ b/scripts/drunk_monkeys_birds_subdued_prompts.js
@@ -19,6 +19,7 @@
*/
const { TONE_ON_TONE_SUFFIX } = require('./fashion_palettes');
+const SHARED = require('./drunk_motif_shared');
const MONKEYS = [
'wide-eyed capuchin monkey',
@@ -157,25 +158,38 @@ function buildOne(i) {
else if (r < 0.90) animal = pick(BIRDS);
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);
+ // 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 swing = pick(SHARED.SWINGS);
+ const bottleBackdrop = pick(SHARED.BOTTLE_BACKDROPS);
+ const texture = pick(SHARED.TEXTURE_GROUNDS);
const botanical = pick(BOTANICALS);
const composition = pick(COMPOSITIONS);
- const palette = pick(PALETTES);
+ // Default = SHARED deep tone-on-tone palettes (Gucci/Hermès anchored,
+ // browns/greens/reds/golds). Local hex-tagged palettes kept as 30% backup.
+ const useDeep = Math.random() < 0.7;
+ const palette = useDeep
+ ? { name: 'deep-tone-on-tone', voice: pick(SHARED.DEFAULT_PALETTES), hex: [] }
+ : 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.
+ // Steve 2026-05-25 — mandatory drink + joint + swinging + bottle-backdrop
+ // + natural-fiber texture in every prompt.
const positive =
`Editorial wallpaper design — ${animal}, ${tableau}, also holding ${joint}, ${swing}, ` +
+ `${bottleBackdrop}, ` +
+ `${texture.voice}, ` +
`set on a subdued botanical ground of ${botanical}. ` +
`Composition: ${composition}. ` +
- `Palette: ${palette.voice}; palette hex anchors: ${palette.hex.join(', ')}. ` +
+ `Palette: ${palette.voice}${palette.hex && palette.hex.length ? '; 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. ` +
+ `MANDATORY visible in every design: alcohol drink in hand/beak, lit handrolled cannabis joint with smoke curl, animal swinging from something, wild-bottle backdrop, and the natural-fiber texture ground. ` +
+ `${SHARED.DRUNK_NEGATIVE_SUFFIX} ` +
TONE_ON_TONE_SUFFIX;
return {
diff --git a/scripts/drunk_monkeys_v2_prompts.js b/scripts/drunk_monkeys_v2_prompts.js
index baa5319..bb6214e 100644
--- a/scripts/drunk_monkeys_v2_prompts.js
+++ b/scripts/drunk_monkeys_v2_prompts.js
@@ -129,6 +129,11 @@ const PALETTES = [
function pick(arr) { return arr[Math.floor(Math.random() * arr.length)]; }
+// Shared motif library — Steve 2026-05-25 — every drunk-animal must show
+// alcohol+joint+swing+wild-bottle backdrop on a natural-fiber texture.
+// Uses tone-on-tone deep palettes (browns/greens/reds/golds, Gucci+Hermès).
+const SHARED = require('./drunk_motif_shared');
+
function buildOne(i) {
// 60% monkey-led, 30% bird-led, 10% pair (monkey + bird)
let subject;
@@ -137,21 +142,34 @@ function buildOne(i) {
else if (r < 0.90) subject = pick(BIRDS);
else subject = `${pick(MONKEYS)} and a ${pick(BIRDS)} together`;
- const action = pick(ACTIONS);
- const joint = pick(JOINTS);
- const swing = pick(SWINGS);
+ // 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 swing = pick(SHARED.SWINGS);
+ const bottleBackdrop = pick(SHARED.BOTTLE_BACKDROPS);
+ const texture = pick(SHARED.TEXTURE_GROUNDS);
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.
+ // Default palette = deep tone-on-tone (Steve 2026-05-25); local short-name
+ // palettes kept as a 25% backup for backwards-compat.
+ const useDeep = Math.random() < 0.75;
+ const palette = useDeep
+ ? { name: 'deep-tone-on-tone', voice: pick(SHARED.DEFAULT_PALETTES) }
+ : pick(PALETTES);
+
+ // SUBJECT FIRST — that's the key v2 fix. ~250 char prompt total.
+ // Steve 2026-05-25 — mandatory joint + swinging + bottle-backdrop +
+ // natural-fiber texture in every prompt.
const positive =
`${subject}, ${action}, also ${joint}, ${swing}. ` +
+ `${bottleBackdrop}. ` +
+ `${texture.voice}. ` +
`${backdrop}. ` +
`Hand-painted gouache wallpaper illustration, ${composition}, ${palette.voice}, ` +
`restrained tone-on-tone, museum-archival print quality. ` +
- `Make sure the animal, its drinking glass/bottle, its lit cannabis joint with smoke, and the swinging element are ALL clearly visible and prominent.`;
+ `${SHARED.DRUNK_NEGATIVE_SUFFIX} ` +
+ `Make sure the animal, its drinking glass/bottle, its lit cannabis joint with smoke, the swinging element, the wild-bottle backdrop, and the natural-fiber texture ground are ALL clearly visible and prominent.`;
return {
prompt: positive,
diff --git a/scripts/drunk_motif_shared.js b/scripts/drunk_motif_shared.js
new file mode 100644
index 0000000..7d5672e
--- /dev/null
+++ b/scripts/drunk_motif_shared.js
@@ -0,0 +1,300 @@
+/**
+ * Shared motif library for ALL drunk-animal + drunk-zoo prompt generators.
+ *
+ * Steve directives 2026-05-25:
+ * - every drunk-animal/drunk-zoo design MUST visibly show alcohol-in-hand
+ * + lit handrolled cannabis joint w/ smoke + swinging from something
+ * - rich drink vocabulary: classics + tiki/Trader Vic + cognac snifters +
+ * smoking dry-ice / bubbling drinks + champagne bottles popping
+ * - whimsical/wild bottles in the backdrop
+ * - rendered on a natural-fiber texture ground (grasscloth, sisal, raffia,
+ * Madagascar, jute, etc.) — use the texture library
+ * - lean toward botanicals (flowers, fruits), NOT leaves/foliage
+ * - palettes pulled from the fashion-style-guides agent
+ * (~/Projects/fashion-style-guides/data/brands.json) — top 20 houses
+ *
+ * Used by:
+ * - scripts/drunk_animal_prompts.js
+ * - scripts/drunk_monkeys_v2_prompts.js
+ * - scripts/drunk_monkeys_birds_subdued_prompts.js
+ * - scripts/night-builder.js (drunk-zoo-36 composer)
+ */
+
+const path = require('path');
+const fs = require('fs');
+
+// ── JOINTS — lit handrolled cannabis joints w/ smoke trail ─────────────
+// Small silhouette prop, NEVER a cannabis leaf. The negative prompt
+// explicitly bans "cannabis leaf / marijuana leaf" so the joint stays
+// a tiny rolled-paper cylinder + smoke wisp, not a plant motif.
+const JOINTS = [
+ 'a lit handrolled cannabis joint pinched between fingers/claws, a thin white smoke curl rising',
+ 'a smoldering joint dangling from its lips/beak, a wisp of smoke rising in a backwards-S curl',
+ 'a fat handrolled joint held aloft like a cigar, glowing red at the 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 thick joint clenched in its teeth, two slow puffs of smoke escaping',
+ 'a glowing joint cradled between claws, ember bright, smoke curling in a question mark',
+ 'a hand-rolled joint mid-puff, expanding smoke ring around its head',
+ 'a long elegant joint pinched between two fingers, ash about to fall, smoke trail vertical',
+ 'a stubby roach pinched in a tiny silver clip, ember glowing, single thread of smoke',
+];
+
+// ── SWINGS — animal is mid-swing from something ────────────────────────
+const SWINGS = [
+ 'mid-swing from a thick hanging garden vine, one paw gripping, body arcing through the air',
+ 'swinging from a crystal chandelier, chain creaking, other paw waving',
+ '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',
+ 'one paw hooked around a hanging brass chandelier arm, body swinging in a wide pendulum',
+ 'swinging from a flowering wisteria raceme 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',
+];
+
+// ── TABLEAUX — drink in hand / glassware / bottles ─────────────────────
+// HEAVY rotation of classic + tiki/Trader Vic + cognac + smoking/bubbling
+// + champagne. One per prompt — every drunk-animal MUST have a drink.
+const TABLEAUX = [
+ // ── classic glassware ──
+ 'clutching a long-stemmed red wine glass, deep burgundy sloshing over the rim',
+ 'cradling an emerald-green beer bottle, foam crowning the lip, content sigh',
+ 'holding a frosted clear vodka bottle aloft, condensation beads on the neck',
+ 'mid-pour from a cobalt-blue vodka bottle into a shot glass, eyes crossed',
+ 'one paw around a jet-black stout pint, cream head, eyelids drooping',
+ 'gripping a pale-gold pilsner glass in one paw, amber bottle in the other',
+ 'holding a crystal whiskey tumbler, two melting ice cubes, deep amber whiskey',
+ 'cradling a deep-purple velvet-bag whiskey decanter, label edge peeking',
+ 'sipping from a coupe glass of rosé, eyes half-closed, pink liquid sloshing',
+ 'martini glass in mid-spin, two olives skewered, vodka splashing',
+ 'tequila shot in one paw, lime wedge in the other, salt rim on the glass',
+ 'mug of pilsner the size of its head, foam dripping down its chin',
+ // ── cognac / brandy snifter ──
+ 'gold-labeled cognac snifter cradled in both paws, swirling deliberately, deep amber liquor coating the bowl',
+ 'oversized brandy snifter held in both arms, nose-deep in the bouquet, eyes closed in bliss',
+ 'wide-bowl cognac snifter resting on its belly, swirling pool of amber catching the light, lazy smile',
+ // ── tiki / Hawaiian-umbrella / Trader Vic\'s ──
+ 'oversized ceramic tiki mug carved like a moai head, paper-parasol umbrella sticking out, pineapple wedge on the rim, sipping with crossed eyes',
+ 'classic mai tai in a hurricane glass — coral-orange liquid, hibiscus blossom + paper Hawaiian umbrella + lime-wedge skewer, sipping through a striped paper straw',
+ 'zombie cocktail in a tall chimney glass — three-color sunset gradient, two paper umbrellas crossed at the top, cherries and mint, frothy crown',
+ 'scorpion bowl shared from the center — giant ceramic tiki bowl, two long bendy straws, leaning in with both paws gripping the rim, multiple paper umbrellas',
+ 'piña colada in a coconut shell — striped straw, paper parasol, cradling the coconut against its chest',
+ 'tiki ceramic mug shaped like a hula dancer, pretending to dance along, parasol garnish bouncing',
+ 'singapore sling in a tall pilsner-style flute, pink liquid, cherry-and-pineapple skewer, paper umbrella tucked behind one ear',
+ 'painkiller cocktail in a wide rocks glass with grated nutmeg dusting on top, mid-sneeze from the spice',
+ 'mai tai in a stemmed hurricane glass with a fresh orchid blossom garnish, sipping with a tiny grin',
+ 'planters punch in a tall collins glass, tropical-fruit skewer plus paper umbrella, mid-toast',
+ // ── smoking / bubbling / molecular ──
+ 'smoking dry-ice cocktail in a crystal coupe — dense white smoke pouring over the rim and cascading down the stem like a slow waterfall, peering in wide-eyed',
+ 'bubbling absinthe fountain dripping into a slotted-spoon-and-sugar-cube setup over a tulip glass, the green liquor going milky-jade, entranced',
+ 'molecular cocktail in a flat-bottom rocks glass with floating caviar spheres of bitters and a dry-ice cube hissing smoke off the surface, poking at the bubbles with a swizzle stick',
+ 'champagne flute with an effervescent sugar cube dropped in — bubbling violently over the rim, recoiling with a goofy grin',
+ 'gin fizz in a tall collins glass with a thick foamy head dome rising two inches above the rim, carefully not touching it',
+ 'flaming-rum tiki bowl with a real flame leaping out of a hollowed lime in the center, ribbons of smoke rolling off, eyebrows singed off in surprise',
+ // ── champagne bottles / popping corks ──
+ 'champagne bottle popping mid-celebration — cork shooting toward the corner of the panel, golden fizz erupting in a wide arc, bottle held aloft like a trophy',
+ 'magnum of champagne wedged under one arm, foil torn off, wire cage dangling, mid-pour into a coupe in the other paw',
+ 'jeroboam champagne bottle taller than the animal itself, hugging the bottle like a friend, gold-foil neck label catching the light',
+ 'champagne saber poised — vintage cavalry-style sabre about to slice the bottle neck off, dramatic stance with one eye squinted',
+ 'pyramid-tower of stacked champagne coupes, pouring from a magnum on top, golden fountain cascading down through the tower',
+ 'spraying champagne bottle held above the head like a Formula-1 podium, soaked but grinning, foam everywhere',
+];
+
+// ── BOTTLE_BACKDROPS — whimsical/wild bottle arrays in the back ────────
+const BOTTLE_BACKDROPS = [
+ 'a whimsical backdrop of mismatched apothecary bottles in tall and squat silhouettes, lined up like a curio shelf, each with a hand-drawn cork',
+ 'a wild backdrop of etched-crystal decanters in five different silhouettes — hexagonal, hourglass, teardrop, square-cut, footed — all sketched in line and washed flat',
+ 'a backdrop row of ceramic tiki bottles carved as moai heads, hula dancers, and pufferfish, each with a tiny cork',
+ 'a whimsical bar shelf backdrop crammed with hand-blown art-glass bottles in twisted, helical, and spiral forms',
+ 'a backdrop of vintage champagne bottles in graduated sizes (split, demi, standard, magnum, jeroboam, methuselah) lined up like russian dolls',
+ 'a backdrop of skull-shaped vodka bottles in different sizes peering out at the viewer, each with a cork hat',
+ 'a stacked-pyramid backdrop of cognac bottles, some on their sides, others upright, casting long flat shadows on the ground tone',
+ 'a whimsical backdrop of weird-bottle silhouettes — a fish, a boot, a violin, a teapot, an hourglass — all functioning as liquor bottles, arrayed across the back',
+ 'a backdrop of carved Murano-style art-glass bottles with twisted necks and bulbous bodies, in graduated sizes',
+ 'a backdrop of antique smuggler bottles half-buried in the ground, corks sticking up like little hats',
+ 'a backdrop of saloon-style bottle rows on a back-bar shelf, mirrored back behind them, the animal reflected partially in the mirror',
+ 'a backdrop of hot-air-balloon-shaped novelty bottles floating gently behind the animal, each with a tiny ribbon-tied label',
+ 'a backdrop of stacked oak-cognac casks with carved wooden bungs, the animal\'s reflection on a copper still in the distance',
+ 'a backdrop of crystal cocktail-shaker silhouettes arrayed in graduated sizes, each beaded with condensation droplets',
+];
+
+// ── TEXTURE_GROUNDS — natural-fiber wallcovering grounds ───────────────
+// Steve 2026-05-25: render every design AS-IF on real grasscloth / sisal /
+// raffia / Madagascar / jute. Texture library lives at
+// ~/Projects/wallco-ai/public/textures/library/ (grasscloth + sisal real
+// vendor scans + 6 synthetic). Raffia + Madagascar + other classics added
+// here as prompt-level texture descriptions — when compositing pipeline is
+// wired, will map slug → real PNG.
+const TEXTURE_GROUNDS = [
+ { slug: 'grasscloth-natural-flax', voice: 'rendered on a natural-flax grasscloth weave — visible warp-and-weft horizontal grass fibers, knot variations, the slight tonal mottle of real plant fiber' },
+ { slug: 'grasscloth-oatmeal', voice: 'rendered on an oatmeal-toned grasscloth — warm pale beige with visible horizontal grass-fiber striations, irregular knots' },
+ { slug: 'grasscloth-espresso', voice: 'rendered on a deep-espresso grasscloth ground — dark coffee-brown horizontal fibers, knots catching the light' },
+ { slug: 'grasscloth-pearl', voice: 'rendered on a pearl-white grasscloth — pale luminous ground with subtle horizontal grass-fiber texture' },
+ { slug: 'grasscloth-smoke-grey', voice: 'rendered on a smoke-grey grasscloth — silvery grey ground, horizontal grass fiber visible, knot variations' },
+ { slug: 'sisal-tan', voice: 'rendered on a tan sisal weave — dense over-under sisal-fiber crosshatch, warm honey ground, more textured than grasscloth' },
+ { slug: 'sisal-chestnut', voice: 'rendered on a chestnut sisal — deep warm-brown sisal-fiber crosshatch ground, slight irregularity in the weave' },
+ { slug: 'raffia-natural', voice: 'rendered on natural-raffia wallcovering — broad pale-tan raffia palm-fiber ribbons woven flat, irregular silhouettes, slight lift along edges' },
+ { slug: 'raffia-bronze', voice: 'rendered on bronze-stained raffia — pale-bronze flat raffia ribbons in irregular over-and-under weave, hand-finished feel' },
+ { slug: 'madagascar-cloth-natural', voice: 'rendered on Madagascar cloth — fine paper-backed cloth ground with subtle horizontal cross-thread texture in a soft natural tone, more refined than grasscloth' },
+ { slug: 'madagascar-cloth-bone', voice: 'rendered on bone Madagascar cloth — pale-bone ground with fine cross-thread texture, the most refined of the natural-fiber grounds' },
+ { slug: 'jute-natural', voice: 'rendered on natural jute — coarser than sisal, broad open weave of pale-tan jute fiber, visible knots' },
+ { slug: 'arrowroot-honey', voice: 'rendered on arrowroot wallcovering — honey-tone fibrous ground with a fine horizontal grain' },
+ { slug: 'abaca-natural', voice: 'rendered on abaca (banana-stalk fiber) wallcovering — long pale ribbons of abaca fiber in flat parallel runs, NOT banana leaves' },
+ { slug: 'linen-cream', voice: 'rendered on cream linen — fine balanced plain-weave linen ground, subtle natural slubbing' },
+ { slug: 'cork-walnut', voice: 'rendered on walnut-toned cork — natural cork grain mottle in walnut tones, irregular pores' },
+ { slug: 'mica-bronze', voice: 'rendered on bronze mica — laminated mica flakes catching light in a soft bronze pattern, subtle metallic shimmer' },
+];
+
+// ── Fashion-house palettes — pulled live from the style guide agent ────
+// Composes 4-color combos by sampling from each brand's palette.
+// Falls back to a hardcoded 12-entry table if the JSON is missing.
+const BRANDS_JSON = path.join(
+ process.env.HOME || '/Users/stevestudio2',
+ 'Projects', 'fashion-style-guides', 'data', 'brands.json'
+);
+
+function loadFashionPalettes() {
+ // Hardcoded fallback (12 hand-composed combos, matches drunk_animal_prompts
+ // legacy FASHION_PALETTES).
+ const FALLBACK = [
+ 'deep forest emerald #0e5c2f + heritage red #9b1b1f + antique gold #b58a2a + warm ivory #f2ece1',
+ 'saddle-leather orange #ff6900 + warm chocolate brown #6b4423 + gold leaf #c8a44a + french cream #f6efe2',
+ 'pure jet black #000000 + crisp white #ffffff + warm beige #e6d6b8 + camellia red #b00020',
+ 'tiffany robin\'s-egg blue #0abab5 + champagne gold #caa84a + bright white #ffffff + ink black #0a0a0a',
+ 'baroque jet black + medusa antique gold #d4af37 + imperial red #b40000 + royal purple #4b1c5e',
+ 'dark gallery green #22443a + ink black #0a0a0a + powder beige #d7c8a8 + lipstick red #c8102e',
+ 'old-money ink black + champagne gold #c8a96a + oxblood maroon #5a1818 + warm bronze #8a6a3a',
+ 'equestrian navy blue #0a2548 + polo red #bf2c2c + saddle tan #a8794a + crisp ivory #f5efe2',
+ 'parakeet kelly green #5cb338 + dark chocolate brown #5b3a1d + caramel tan #c38a4d + warm ivory #f4ede0',
+ 'heritage camel #c8a47a + check black #000000 + check red #b22234 + check white #ffffff',
+ 'vintage powder pink #f3c7c4 + retro mint #b6dcc7 + powder blue #c8d8e6 + buttery cream #f4ecd8',
+ 'rosso red #bc0030 + roman black #0a0a0a + warm ivory #f5efdf + pale rose pink #f7d6d0',
+ ];
+ try {
+ if (!fs.existsSync(BRANDS_JSON)) return FALLBACK;
+ const brands = JSON.parse(fs.readFileSync(BRANDS_JSON, 'utf8')).brands || [];
+ // For each brand build a 3-4 color voice line from its palette entries.
+ const out = brands.map(b => {
+ const colors = (b.palette || []).slice(0, 4).map(c => {
+ const name = (c.name || '').toLowerCase();
+ return `${name} ${c.hex}`;
+ });
+ return colors.length ? `${b.name.toLowerCase()} house palette — ${colors.join(' + ')}` : null;
+ }).filter(Boolean);
+ return out.length ? out : FALLBACK;
+ } catch {
+ return FALLBACK;
+ }
+}
+
+const FASHION_PALETTES = loadFashionPalettes();
+
+// ── DEEP TONE-ON-TONE PALETTES (Steve 2026-05-25 directive) ───────────
+// Heritage interior-designer wallcovering palettes — single hue family,
+// deep ground, lighter figure-tone, restrained accent. Browns, greens,
+// reds, golds + Gucci + Hermès as anchor houses. This is the DEFAULT
+// palette mode for drunk-animal designs going forward (override via
+// DRUNK_PALETTE=warhol or =fashion or =mixed).
+const TONE_ON_TONE_DEEP_PALETTES = [
+ // ── Gucci anchors ──
+ 'gucci-emerald tone-on-tone: deep emerald #0e5c2f ground + forest-pine #1a3d24 motif + heritage red #9b1b1f single small accent + warm ivory #f2ece1 highlight',
+ 'gucci-red tone-on-tone: heritage red #9b1b1f ground + oxblood #5a1818 motif + antique gold #b58a2a single accent + ivory #f2ece1 highlight',
+ 'gucci-gold tone-on-tone: antique gold #b58a2a ground + bronze #8a6a3a motif + gucci-emerald #0e5c2f single small accent + warm ivory #f2ece1 highlight',
+ // ── Hermès anchors ──
+ 'hermes-orange tone-on-tone: hermès orange #ff6900 ground + burnt sienna #c44a14 motif + saddle brown #6b4423 deep accent + french cream #f6efe2 highlight',
+ 'hermes-saddle tone-on-tone: saddle brown #6b4423 ground + chocolate #3e2a1a motif + warm orange #cc5500 single accent + cream #f6efe2 highlight',
+ 'hermes-chocolate tone-on-tone: deep chocolate #3e2a1a ground + warm walnut #5a3a22 motif + hermes orange #ff6900 single small accent + warm ivory #f6efe2 highlight',
+ // ── Deep BROWN family ──
+ 'deep-walnut tone-on-tone: walnut #5a3a22 ground + cocoa #6b3827 figure + warm tan #a8794a accent + cream #f5efe2 highlight',
+ 'chestnut tone-on-tone: chestnut #6b2e1a ground + chocolate #3e2a1a motif + caramel #c38a4d accent + ivory #f5efdf highlight',
+ 'mocha tone-on-tone: deep mocha #4a3023 ground + russet #6b3827 motif + warm tan #c89a6a accent + bone #f5efe2 highlight',
+ 'umber tone-on-tone: burnt umber #5a3825 ground + saddle #6b4423 motif + antique brass #a8794a accent + warm ivory #f5efe2 highlight',
+ // ── Deep GREEN family ──
+ 'forest-loden tone-on-tone: forest green #1f4030 ground + loden #2c5240 motif + antique gold #b58a2a single accent + warm cream #f2ece1 highlight',
+ 'malachite tone-on-tone: malachite green #1c5048 ground + emerald shadow #0e5c2f motif + warm gold #c8a44a accent + ivory #f2ece1 highlight',
+ 'olive tone-on-tone: dark olive #3a4423 ground + sage olive #6b7b4a motif + antique gold #b58a2a accent + cream #f2ece1 highlight',
+ 'gallery-green tone-on-tone: gallery green #22443a ground + ink-green shadow #0e2818 motif + burnished gold #c8a96a accent + warm bone #f2ece1 highlight',
+ 'eucalyptus-deep tone-on-tone: deep eucalyptus #2e4a3c ground + pine shadow #1a3528 motif + warm bronze #8a6a3a accent + cream #f2ece1 highlight',
+ // ── Deep RED family ──
+ 'oxblood tone-on-tone: oxblood #5a1818 ground + crimson shadow #3a0f0f motif + antique gold #b58a2a single accent + warm ivory #f2ece1 highlight',
+ 'burgundy tone-on-tone: deep burgundy #5a1c2c ground + claret #3a1018 motif + champagne gold #caa84a accent + cream #f2ece1 highlight',
+ 'cinnabar tone-on-tone: cinnabar red #9b1b1f ground + dark rust #5a1818 motif + antique gold #b58a2a accent + warm cream #f6efe2 highlight',
+ 'rosso tone-on-tone: rosso red #bc0030 ground + dark rosso #6a001a motif + antique gold #b58a2a accent + roman black #0a0a0a deep punctuation',
+ 'crimson-velvet tone-on-tone: crimson velvet #7a1e2c ground + claret shadow #4a0e1a motif + burnished gold #c8a96a accent + warm ivory #f6efe2 highlight',
+ // ── Deep GOLD / antique-metal family ──
+ 'antique-gold tone-on-tone: antique gold #b58a2a ground + bronze shadow #8a6a3a motif + heritage red #9b1b1f single small accent + warm cream #f2ece1 highlight',
+ 'champagne-gold tone-on-tone: champagne gold #caa84a ground + warm gold #b58a2a motif + dark walnut #5a3a22 deep accent + cream #f2ece1 highlight',
+ 'burnished-brass tone-on-tone: burnished brass #a8794a ground + bronze shadow #6b4423 motif + forest green #1f4030 single small accent + warm ivory #f5efe2 highlight',
+ 'medusa-gold tone-on-tone: medusa gold #d4af37 ground + antique-gold shadow #b58a2a motif + imperial red #b40000 single small accent + cream #f5efdf highlight',
+ // ── Mixed deep-heritage (browns/greens/reds together, very Gucci) ──
+ 'gucci-heritage trio tone-on-tone: deep emerald #0e5c2f ground + heritage red #9b1b1f mid-motif + antique gold #b58a2a accent + warm ivory #f2ece1 highlight, all three deep tones reading as a unified low-saturation family',
+ 'hermes-heritage trio tone-on-tone: hermès orange #ff6900 deep mid + saddle brown #6b4423 ground + chocolate shadow #3e2a1a + french cream #f6efe2 highlight, unified warm-leather family',
+ 'equestrian-club tone-on-tone: polo navy #0a2548 ground + polo red #bf2c2c mid + saddle tan #a8794a accent + crisp ivory #f5efe2 highlight, unified deep heritage tones',
+ 'apothecary tone-on-tone: deep umber #5a3825 ground + apothecary green #1f4030 mid + amber medicine-glass #b58a2a accent + bone #f5efe2 highlight',
+];
+
+// Default palette source for drunk-animal designs — Steve directive 2026-05-25:
+// "tone on tone variety of deep tones of browns, greens, red, gold". So the
+// default is now TONE_ON_TONE_DEEP_PALETTES. Override via DRUNK_PALETTE env.
+const DEFAULT_PALETTES = TONE_ON_TONE_DEEP_PALETTES;
+
+// ── Pick helpers ──
+function pickRand(arr, exclude) {
+ exclude = exclude || new Set();
+ for (let tries = 0; tries < 50; tries++) {
+ const v = arr[Math.floor(Math.random() * arr.length)];
+ if (!exclude.has(v)) return v;
+ }
+ return arr[Math.floor(Math.random() * arr.length)];
+}
+
+// One-line mandatory motif block — drop-in for any prompt generator that
+// wants the guaranteed alcohol+joint+swing+bottle-backdrop+texture clause.
+function buildMandatoryMotifs() {
+ return {
+ drink: pickRand(TABLEAUX),
+ joint: pickRand(JOINTS),
+ swing: pickRand(SWINGS),
+ bottleBackdrop: pickRand(BOTTLE_BACKDROPS),
+ texture: pickRand(TEXTURE_GROUNDS),
+ palette: pickRand(DEFAULT_PALETTES),
+ };
+}
+
+// Standard negative-prompt suffix for drunk-animal designs — bans cannabis
+// leaves (so the joint stays a prop), tropical foliage (settlement), real
+// brand-name labels, watermarks. "Botanicals" allowed but "leaves" banned
+// per Steve 2026-05-25 — lean toward flowers/fruits, not foliage.
+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 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,
+ FASHION_PALETTES, TONE_ON_TONE_DEEP_PALETTES, DEFAULT_PALETTES,
+ pickRand, buildMandatoryMotifs,
+ DRUNK_NEGATIVE_SUFFIX,
+};
+
+if (require.main === module) {
+ const m = buildMandatoryMotifs();
+ console.log('Sample mandatory motifs:');
+ console.log(' drink: ' + m.drink);
+ console.log(' joint: ' + m.joint);
+ console.log(' swing: ' + m.swing);
+ console.log(' bottle-backdrop: ' + m.bottleBackdrop);
+ console.log(' texture: ' + m.texture.slug + ' — ' + m.texture.voice);
+ console.log(' palette: ' + m.palette);
+ console.log('\nFashion palettes loaded: ' + FASHION_PALETTES.length);
+ console.log('Tone-on-tone deep palettes loaded: ' + TONE_ON_TONE_DEEP_PALETTES.length);
+ 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('Swings: ' + SWINGS.length);
+}
diff --git a/scripts/night-builder.js b/scripts/night-builder.js
index 4121cd8..2633d47 100755
--- a/scripts/night-builder.js
+++ b/scripts/night-builder.js
@@ -27,6 +27,7 @@ const { spawnSync } = require('child_process');
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
+const SHARED = require('./drunk_motif_shared');
const ROOT = path.join(__dirname, '..');
const HALT_FLAG = '/tmp/halt-night-builder.flag';
@@ -360,7 +361,8 @@ function composeDiamondTrellisPrompt(cw) {
// 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, 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',
+ // ── classic glassware pairs ──
+ '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 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',
@@ -371,14 +373,46 @@ const ZOO_VIGNETTES = [
'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',
+ // ── tiki / Trader Vic\'s ──
+ 'pair of giraffes flanking a central oversized ceramic tiki bowl that they share via two long bendy straws, each giraffe also holding a lit joint with smoke curling, both hanging by their forelegs from a thick swag of garden vine across the top of the panel, paper-parasol garnishes sticking out of the bowl',
+ 'pair of orangutans facing each other across a giant carved-moai tiki mug, each sipping through a striped paper straw, each also gripping a lit joint with smoke trail, both hanging by one arm from a curved hanging vine, the central mug glowing as if lit from within',
+ 'two sloths hanging mirror-image from a central palm-leaf-shaped wicker chandelier (NOT palm-frond foliage, the chandelier itself), each clutching a coconut-shell piña colada with paper parasol + striped straw, each with a lit joint, smoke spirals rising slowly',
+ 'pair of red pandas perched on opposite ends of a tiki-bar bamboo swing (NOT a leaf — the swing is hanging from rope), each with a hurricane glass of mai tai (hibiscus garnish + paper umbrella + lime skewer), each with a lit joint, smoke ribbons in the center',
+ 'pair of capybaras lounging in symmetric scorpion-bowl pose — sharing a giant ceramic tiki bowl from the center with two long bendy straws, each also holding a lit joint, the entire scene hanging from a knotted rope swing, paper umbrellas everywhere',
+ // ── champagne / sabering / popping corks ──
+ 'pair of giraffes mid-sabering champagne — each holding a cavalry-style sabre poised above a magnum bottle of champagne, dramatic stance, each with a lit joint clenched in the off-hoof, both hanging from a crystal chandelier whose chain creaks under their weight',
+ 'two orangutans mid-champagne-spray celebration — each shaking a freshly-popped magnum, golden foam erupting in symmetric arcs that meet at the panel center, each with a lit joint, both swinging from a thick rope hanging from the ceiling',
+ 'pair of mirror-image lemurs flanking a pyramid-tower of stacked champagne coupes, each pouring from a magnum at the top of the tower (golden fountain cascading down through the coupes), each with a lit joint pinched in the off-hand, both hanging from opposite ends of a horizontal swing-bar',
+ 'pair of macaws perched symmetrically on a giant jeroboam champagne bottle laid horizontally, each picking the cork out with talons, each with a lit joint, the bottle itself acting as the swing-bar suspended by hanging ropes',
+ // ── cognac / brandy snifters ──
+ 'pair of giraffes flanking a central oversized cognac snifter, both bowed forward nose-deep in the bouquet, each with a lit joint clenched in their mouth, smoke curling in symmetric spirals, both hanging by their forelegs from a swag of vine',
+ 'two orangutans symmetric on either side of a giant brandy snifter that they cradle together with all four arms, each with a lit joint, both swinging from a hanging knotted rope, the cognac swirling in lazy circles inside the bowl',
+ // ── smoking / bubbling / molecular ──
+ 'pair of giraffes mirror-image flanking a smoking dry-ice cocktail in a giant crystal coupe — dense smoke pouring over the rim in symmetric waterfalls cascading down both sides, each giraffe with a lit joint, both swinging from a hanging vine that arcs over the smoke cloud',
+ 'two sloths hanging upside-down from a central hanging vine, each holding a bubbling absinthe-fountain setup with slotted spoon and sugar cube over a tulip glass, each with a lit joint, the absinthe going milky-jade as it drips',
+ 'pair of capybaras flanking a giant flaming-rum tiki bowl with a real flame leaping out of a hollowed lime in the center, each holding a lit joint with smoke meeting the flame\'s smoke ribbons, both hanging from a porch swing',
+ // ── wild-bottle backdrop pairs ──
+ 'pair of giraffes mid-toast with cognac snifters, central giant champagne bottle popping with cork mid-air, behind them a wild backdrop of mismatched apothecary bottles like a curio shelf, each giraffe with a lit joint, both hanging from a vine',
+ 'two orangutans symmetric, each holding a hurricane glass of mai tai with paper parasol, behind them a backdrop of skull-shaped vodka bottles peering out, each with a lit joint, both swinging from a chandelier',
];
function composeDrunkZoo36Prompt(cw) {
const vig = ZOO_VIGNETTES[Math.floor(Math.random() * ZOO_VIGNETTES.length)];
+ // Steve 2026-05-25 — natural-fiber texture substrate UNDER the colorway
+ // tint (real grasscloth/sisal/raffia/Madagascar shows through the dyed
+ // ground). Bottle backdrop is a SECONDARY detail set in the corners /
+ // negative space, in the same bone-ivory ink as the main silhouettes.
+ const tex = SHARED.TEXTURE_GROUNDS[Math.floor(Math.random() * SHARED.TEXTURE_GROUNDS.length)];
+ const bottleBackdrop = SHARED.BOTTLE_BACKDROPS[Math.floor(Math.random() * SHARED.BOTTLE_BACKDROPS.length)];
return (
- `Drunk Zoo 36" repeat wallpaper — ${cw.name} colorway. Ground: solid ${cw.tone} (${cw.hex}). Figure: bone-ivory (#F2EADB) single-ink. ` +
+ `Drunk Zoo 36" repeat wallpaper — ${cw.name} colorway. ` +
+ `Substrate: real ${tex.slug} (${tex.voice.replace(/^rendered on /, '')}). ` +
+ `Ground: solid ${cw.tone} (${cw.hex}) tinted over the natural-fiber substrate so the texture grain still reads through. ` +
+ `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. ` +
+ `Secondary detail in negative space: ${bottleBackdrop} (rendered as a tiny bone-ivory ink silhouette at the very back, smaller scale than the main pair, not competing). ` +
`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. ` +
+ `Whimsical playful joyful mischievous tone (NEVER grim). Lean toward BOTANICALS (flowers, fruit) over leaves. ` +
SHARED_ARTDIR
);
}
← 7fc7f07 yolo-queue: DP-5 ✓ hamburger media query for mobile
·
back to Wallco Ai
·
yolo-queue: SG-1..SG-4 ✓ attorney narrowings (moth/bird/scat 26ab5d3 →