← back to Wallco Ai

scripts/cherry_blossom_animal_prompts.js

198 lines

#!/usr/bin/env node
/**
 * Cherry-blossom + drunk/stoned animals prompt library — drinking animals
 * perched on horizontal flowering cherry branches, gazing UP through a canopy
 * of falling petals. Inherits the same butterfly-trellis / wisteria heritage
 * botanical aesthetic (refined, no Warhol neon).
 *
 * SAME RULES AS WISTERIA — flowers-only, no leaves, no foliage. Cherry-blossom
 * tradition (Japanese ukiyo-e, hanami) is itself a flowers-only motif so this
 * is a natural fit rather than a constraint dodge. Public-domain Japanese
 * iconography — no Hinson/Schumacher trademark exposure to worry about.
 *
 * Compositional shift vs. wisteria: cherry blossoms grow on horizontal
 * flowering branches, so the "face UP" rule manifests as "perched on a
 * blossoming branch with chin lifted to the canopy of petals above" rather
 * than "dangling from a cascading raceme."
 *
 * Used by:
 *   - scripts/generate-cherry-blossom-animals-batch.js  (when scaffolded)
 *   - direct CLI: node scripts/cherry_blossom_animal_prompts.js 100
 */

const { TONE_ON_TONE_SUFFIX } = require('./fashion_palettes');

const DRUNK_TABLEAUX = [
  'chin tipped up to the blossoms, mouth wide, mid-guzzle from a long-stemmed wine glass — burgundy sloshing down its throat',
  'face turned skyward through falling petals, draining a frosted vodka bottle held in both paws, condensation dripping onto its chest',
  'looking straight up at the cherry canopy, mid-toast with a champagne flute, golden bubbles cascading',
  'head tilted back among the blossoms, gulping from an emerald-green sake bottle, foam sliding down its chin',
  'gazing up through pink petals, sipping rosé from a coupe glass, pink liquid clinging to its lip',
  'mouth agape toward the flowering canopy, pouring a martini directly into its open jaw, two olives mid-air',
  'snout aimed at the sky beneath the cherry branches, draining a crystal whiskey tumbler, last amber drops trailing',
  'chin up beneath cascading petals, both paws gripping a sake bottle, lime wedge falling from its lips',
  'tipsy, head lolled back staring at the blossom canopy, half-empty cognac snifter dangling',
  'face skyward through the falling petals, mid-swig from a stout pint, cream head smeared across its muzzle',
];

const STONED_TABLEAUX = [
  'eyes half-closed and turned upward to the cherry blossoms, slow contented sip from a coupe glass',
  'face beatifically upturned to the petal canopy, slow-motion drink from a wine glass, dreamy smile',
  'chin lifted toward the falling petals, blissed-out, savoring a slow pour of amber whiskey down its throat',
  'eyes lidded, gazing up through the cherry blossoms, languid sip from a tall pilsner',
  'mellow, head tilted back amid swirling petals, slow guzzle from a frosted sake bottle, deeply at peace',
  'face dreamily upturned beneath the canopy, sucking on a long curly straw rooted in a magnum of champagne',
  'eyes soft and skyward, savoring a slow sip from a martini glass, cheeks rosy with petal-pink reflection',
  'tranquil, gazing up through pink blossoms, both paws hugging a bottle of rosé tipped into its mouth',
  'mouth lazily open to the blossoms, slow sip from a cognac snifter, blissful trance',
  'eyes closed, chin up beneath falling petals, contented sigh mid-sip from a champagne flute',
];

const CHERRY_COLORS = [
  'pale-pink yoshino cherry blossoms, classic hanami softness, dense five-petal clusters',
  'snow-white somei cherry blossoms streaked with faint blush at the petal base',
  'deep coral kanzan double-flowered cherry blossoms, lush and saturated',
  'pale-blush shidare weeping-cherry blossoms, drooping branches heavy with flowers',
  'rose-red kawazu cherry blossoms, early-spring vivid pink',
  'cream-and-pink okame cherry blossoms, gradient petals from ivory to soft rose',
  'almost-white ukon (yellow-green) cherry blossoms, unusual chartreuse-tinged ivory',
  'antique mauve fugenzo double cherry blossoms, mature blush tones',
  'pure ivory shogetsu cherry blossoms, refined and ceremonial',
  'sunset-coral autumn cherry blossoms (jugatsuzakura), warm and rare',
];

const NO_LEAVES =
  'NO leaves, NO foliage, NO bamboo, NO ferns, NO palm fronds, NO banana, NO tropical, NO jungle, NO drooping greenery — cherry blossoms are the ONLY botanical element, branches show flowers only (per ukiyo-e tradition), and any incidental greenery must point UPWARD, never downward or sideways';

const PALETTES = [
  'emerald and bone-ivory background, gold-leaf accents, archival watercolor',
  'sage green and cream, blush-pink highlights, soft dusty rose accents',
  'deep navy ink on bone white, monochromatic indigo gradient',
  'champagne on midnight navy, subtle metallic shimmer',
  'forest green with iridescent jewel-tone accents — sapphire, amethyst, emerald, ruby',
  'soft watercolor pastels — peach, lavender, mint, sky blue — on warm cream',
  'antique gold and matte black, ivory background',
  'powder blue and parchment, faded sepia accents',
  'oxblood and cream, dark olive accents',
  'pale-celadon green on bone-white, faded coral accents, vintage botanical',
  'sumi-e ink wash on rice-paper cream, pale-pink accents only',
  'edo-era woodblock palette — indigo, vermillion, ochre, ivory',
];

const COMPOSITIONS = [
  'allover seamless repeat, animals scattered along horizontal flowering cherry branches, ALL faces tipped UP toward the petal canopy above',
  'half-drop repeat, animals nested in blossom clusters, ALL chins lifted upward through falling petals',
  'tight 24-inch tile repeat, dense scatter of upward-gazing animals among drifting cherry petals',
  'mirrored axis repeat, animals in pairs facing skyward beneath an arching blossom canopy',
  'horizontal branch repeat, branches traversing the wall left-to-right, animals climbing and looking up',
  'tossed-bouquet repeat, animals interspersed with cut cherry sprays, all faces lifted to the petals',
  'large-scale mural repeat, hero animal centered face-up under a hero blossom branch, petals radiating',
  'striped column repeat, animals in vertical bands gazing upward through layered blossom canopies',
  'diagonal flow repeat, blossom branches guiding the eye upward, animals turned to follow',
  'allover botanical repeat with breathing space, every animal’s gaze tilted toward the cherry petals above',
  'ukiyo-e-inspired asymmetric repeat, a single arching branch dominates each tile, animals perched and looking up',
  'falling-petal repeat — drifting petals fill the negative space, animals anchor among the flowering branches, all eyes skyward',
];

const STYLES = [
  'fine archival watercolor in the style of a 19th-century botanical plate',
  'gouache illustration with crisp ink linework, gallery-quality',
  'hand-pulled silkscreen wallpaper, soft layered tones, refined repeat',
  'chinoiserie-inspired brushwork on aged silk, mineral pigment',
  'block-printed wallpaper feel, hand-carved edges, archival paper grain',
  'pen-and-watercolor garden journal aesthetic, refined and personal',
  'mid-century botanical lithograph, slight halftone, archival print',
  'modern fine-art illustration with luminous color washes, no neon',
  'painterly gouache with confident brushwork, fabric-pattern feel',
  'antique decorator wallpaper, bone-paper texture, slightly faded',
  'ukiyo-e woodblock print, flat color planes, confident black outline',
  'sumi-e brushwork, monochrome ink with single accent color, breathing rice-paper feel',
];

const ANIMALS_FACE_UP = [
  'long-armed Bornean orangutan perched on a flowering cherry branch, chin tipped UP through the petals',
  'small gibbon balancing on a blossoming bough, face skyward beneath the canopy',
  'fluffy red panda curled on a horizontal cherry branch, gazing up through pink petals',
  'spider monkey looped by its prehensile tail around a flowering branch, mouth open to the sky',
  'capuchin monkey perched on a cherry branch, head tilted back to the blossoms above',
  'sloth hugging a cherry bough, slow blink upward at the falling petals',
  'lemur with ringed tail wrapped around a flowering stem, ears forward, looking up through the cherry canopy',
  'small lar gibbon swinging from a blossoming branch, face turned to the petal sky',
  'colobus monkey draped over a cherry bough, gaze tipped upward through the flowers',
  'wide-eyed tarsier clinging to a flowering branch, neck craned skyward beneath the blossoms',
  'koala wedged into a fork of cherry branches, face turned up to the petal canopy',
  'tipsy raccoon balancing on a blossoming branch, snout up, eyes on the falling petals',
  'shiba inu standing on a low cherry branch, face lifted to the canopy, tail curled (Edo-era nod)',
  'fox cub crouched on a flowering bough, eyes upturned to the drifting petals',
  'snow monkey (Japanese macaque) seated on a cherry branch, gaze beatifically skyward through the blossoms',
];

function pickRand(arr, 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)];
}

function buildPrompt({ state = null, seed = null } = {}) {
  const rng = (seed != null)
    ? (() => { let s = seed >>> 0; return () => { s = (s * 1664525 + 1013904223) >>> 0; return s / 2 ** 32; }; })()
    : Math.random;
  const pick = arr => arr[Math.floor(rng() * arr.length)];
  const s = state || (rng() < 0.5 ? 'drunk' : 'stoned');
  const tableau = s === 'drunk' ? pick(DRUNK_TABLEAUX) : pick(STONED_TABLEAUX);
  return [
    pick(ANIMALS_FACE_UP),
    tableau,
    `beneath ${pick(CHERRY_COLORS)}`,
    NO_LEAVES,
    `palette: ${pick(PALETTES)}`,
    pick(STYLES),
    pick(COMPOSITIONS),
    'CRITICAL: every animal MUST be facing UP toward the cherry blossoms above — chin lifted, eyes/snout skyward, no animals looking down or sideways',
    'seamless wallpaper repeat, archival quality, refined heritage botanical aesthetic, no neon, no text, no watermark',
    // Aesthetic gate — Steve 2026-05-19: empirical professional palette from dw_unified
    TONE_ON_TONE_SUFFIX,
  ].join(', ');
}

function buildN(n, opts = {}) {
  const out = [];
  const usedAnimals = new Set();
  const usedCherry = new Set();
  for (let i = 0; i < n; i++) {
    if (usedAnimals.size >= ANIMALS_FACE_UP.length - 1) usedAnimals.clear();
    if (usedCherry.size >= CHERRY_COLORS.length - 1) usedCherry.clear();
    const animal = pickRand(ANIMALS_FACE_UP, usedAnimals);   usedAnimals.add(animal);
    const cherry = pickRand(CHERRY_COLORS, usedCherry);      usedCherry.add(cherry);
    const state = opts.state || (Math.random() < 0.5 ? 'drunk' : 'stoned');
    const tableau = state === 'drunk' ? pickRand(DRUNK_TABLEAUX) : pickRand(STONED_TABLEAUX);
    out.push([
      animal, tableau,
      `beneath ${cherry}`,
      NO_LEAVES,
      `palette: ${pickRand(PALETTES)}`,
      pickRand(STYLES),
      pickRand(COMPOSITIONS),
      'CRITICAL: every animal MUST be facing UP toward the cherry blossoms above — chin lifted, eyes/snout skyward',
      'seamless wallpaper repeat, archival quality, refined heritage botanical, no neon, no text, no watermark',
      // Aesthetic gate — Steve 2026-05-19: tone-on-tone, no neon, ≤ 4 hues
      'Tone-on-tone monochromatic palette, ≤ 3 hues from a single hue family, muted high-fashion neutrals only — ivory, taupe, sand, ecru, mushroom, slate, charcoal, midnight navy, oxblood, sage, olive, camel, tobacco. No saturated colors. No neon. No fluorescent. No rainbow. No more than 4 distinct hues. Editorial Vogue-cover restraint.',
    ].join(', '));
  }
  return out;
}

module.exports = {
  buildPrompt, buildN,
  DRUNK_TABLEAUX, STONED_TABLEAUX, CHERRY_COLORS, NO_LEAVES,
  PALETTES, STYLES, COMPOSITIONS, ANIMALS_FACE_UP,
};

if (require.main === module) {
  const n = parseInt(process.argv[2] || '100', 10);
  const prompts = buildN(n);
  for (const p of prompts) console.log('---\n' + p + '\n');
}