[object Object]

← back to Wallco Ai

mural-animals: Iksel/de Gournay/Mural Sources refined collection (100 designs)

9b791a3cfabe40b406214a2516e82f6e6d2b108a · 2026-05-13 10:18:17 -0700 · SteveStudio2

Steve called the drunk+stoned aesthetic 'juvenile'. New collection
borrows the vocabulary of bespoke mural houses — Iksel chinoiserie,
de Gournay hand-painted panels, Mural Sources scenic-paper tradition,
Brunschwig & Fils heirloom toiles, Zuber et Cie panoramic scenic
paper, Qing-era silk mounting, hand-applied silver leaf.

Aesthetic constraints baked into the prompt:
  - 20 refined animals: peacock w/ fanned tail, red-crowned cranes,
    sika deer, snow leopard, hummingbird, quetzal, mandarin ducks,
    gazelle, Bengal tiger, golden pheasants, bull elephant, sleeping
    kit fox, cardinals, painted bunting, heraldic stag, fawns, macaw
  - 15 tableaux — peonies + plum blossoms + willow, chinoiserie
    moonlit gardens, foxglove meadows, cottage gardens with
    delphiniums, bamboo groves, panoramic country landscapes
  - 12 antiqued grounds — ivory linen, burnished silver-leaf,
    tea-stained paper, faded silk celadon, hand-applied gilt,
    parchment with foxing, oyster-grey hemp w/ sumi-e ink
  - 15 STRICTLY 5-color palettes per Steve's spec — every line lists
    exactly 5 muted/antique hues (e.g. 'ivory, dusty rose, sage green,
    antique gold, soft charcoal')
  - 11 styles — in the manner of bespoke Iksel / de Gournay /
    Brunschwig & Fils, Qing-era chinoiserie, 18th-century European
    mural revival, panoramic Zuber et Cie, watercolour botanical
    illustration
  - 10 compositions — panoramic 36-inch, vertical panel cascades,
    asymmetric, columnar, 52-inch gallery-grade
  - HARD-NO clause: NO cartoon / pop-art / Warhol / neon / Day-Glo /
    halftone / comic outlines / silkscreen / cocktail / drinks /
    joints / smoking / 4-panel / bright primaries / juvenile.

Artifacts:
  - scripts/mural_animal_prompts.js (vocab + buildPrompt + buildN)
  - scripts/mural_animals_batch.js (fire N, default 100)
  - server.js titler 'mural-animals' pool: Mural/Panel/Pavillon/
    Atelier/Hand-Painted/Vignette/Chinoiserie/Heirloom/Salon/Reverie
  - /mural-animals friendly URL
  - Hero block — ivory + tan gradient, italic Playfair Display
    'The Mural Menagerie', 'Atelier edition · Hand-painted ·
    Five-color' lead label.
  - scripts/refresh_designs_snapshot.py mirrored

Batch of 100 fired in background.

Files touched

Diff

commit 9b791a3cfabe40b406214a2516e82f6e6d2b108a
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Wed May 13 10:18:17 2026 -0700

    mural-animals: Iksel/de Gournay/Mural Sources refined collection (100 designs)
    
    Steve called the drunk+stoned aesthetic 'juvenile'. New collection
    borrows the vocabulary of bespoke mural houses — Iksel chinoiserie,
    de Gournay hand-painted panels, Mural Sources scenic-paper tradition,
    Brunschwig & Fils heirloom toiles, Zuber et Cie panoramic scenic
    paper, Qing-era silk mounting, hand-applied silver leaf.
    
    Aesthetic constraints baked into the prompt:
      - 20 refined animals: peacock w/ fanned tail, red-crowned cranes,
        sika deer, snow leopard, hummingbird, quetzal, mandarin ducks,
        gazelle, Bengal tiger, golden pheasants, bull elephant, sleeping
        kit fox, cardinals, painted bunting, heraldic stag, fawns, macaw
      - 15 tableaux — peonies + plum blossoms + willow, chinoiserie
        moonlit gardens, foxglove meadows, cottage gardens with
        delphiniums, bamboo groves, panoramic country landscapes
      - 12 antiqued grounds — ivory linen, burnished silver-leaf,
        tea-stained paper, faded silk celadon, hand-applied gilt,
        parchment with foxing, oyster-grey hemp w/ sumi-e ink
      - 15 STRICTLY 5-color palettes per Steve's spec — every line lists
        exactly 5 muted/antique hues (e.g. 'ivory, dusty rose, sage green,
        antique gold, soft charcoal')
      - 11 styles — in the manner of bespoke Iksel / de Gournay /
        Brunschwig & Fils, Qing-era chinoiserie, 18th-century European
        mural revival, panoramic Zuber et Cie, watercolour botanical
        illustration
      - 10 compositions — panoramic 36-inch, vertical panel cascades,
        asymmetric, columnar, 52-inch gallery-grade
      - HARD-NO clause: NO cartoon / pop-art / Warhol / neon / Day-Glo /
        halftone / comic outlines / silkscreen / cocktail / drinks /
        joints / smoking / 4-panel / bright primaries / juvenile.
    
    Artifacts:
      - scripts/mural_animal_prompts.js (vocab + buildPrompt + buildN)
      - scripts/mural_animals_batch.js (fire N, default 100)
      - server.js titler 'mural-animals' pool: Mural/Panel/Pavillon/
        Atelier/Hand-Painted/Vignette/Chinoiserie/Heirloom/Salon/Reverie
      - /mural-animals friendly URL
      - Hero block — ivory + tan gradient, italic Playfair Display
        'The Mural Menagerie', 'Atelier edition · Hand-painted ·
        Five-color' lead label.
      - scripts/refresh_designs_snapshot.py mirrored
    
    Batch of 100 fired in background.
---
 scripts/mural_animal_prompts.js     | 173 ++++++++++++++++++++++++++++++++++++
 scripts/mural_animals_batch.js      |  41 +++++++++
 scripts/refresh_designs_snapshot.py |   4 +-
 server.js                           |  20 ++++-
 4 files changed, 236 insertions(+), 2 deletions(-)

diff --git a/scripts/mural_animal_prompts.js b/scripts/mural_animal_prompts.js
new file mode 100644
index 0000000..5faf10e
--- /dev/null
+++ b/scripts/mural_animal_prompts.js
@@ -0,0 +1,173 @@
+#!/usr/bin/env node
+/**
+ * Mural-luxe animal prompt library — Iksel / de Gournay / Mural Sources
+ * aesthetic. Hand-painted watercolor + gouache, antiqued grounds (ivory
+ * linen, silver-leaf, faded silk, tea-stained paper), refined chinoiserie
+ * and European mural traditions. Strictly 5-color limited palettes.
+ *
+ * Replaces the Warhol-pop language of the drunk/stoned prompts with the
+ * vocabulary of bespoke mural houses: "hand-painted watercolour wash",
+ * "burnished silver leaf ground", "Qing-era chinoiserie", "Brunschwig &
+ * Fils heirloom toile", etc.
+ *
+ * Category written to spoon_all_designs.category = 'mural-animals'.
+ */
+
+const ANIMALS = [
+  'regal peacock with fully fanned tail, eyes downcast',
+  'pair of red-crowned cranes, neck-extended courtship pose',
+  'sika deer with antlers raised, alert stance',
+  'snow leopard reclining on a stone, tail curled',
+  'iridescent hummingbird mid-hover, wings blurred',
+  'long-tailed quetzal perched on a flowering branch',
+  'pair of mandarin ducks gliding across still water',
+  'spotted gazelle leaping over a flowering hedge',
+  'Bengal tiger walking through tall grass, head turned',
+  'pair of golden pheasants courting beside peonies',
+  'lone bull elephant in a clearing, trunk lifted to a blossom',
+  'silver-fox with bushy tail amongst foxgloves',
+  'great blue heron stalking the shallows',
+  'pair of capuchin monkeys swinging between flowering branches',
+  'sleeping kit fox curled in a bed of wildflowers',
+  'pair of cardinals perched on a bough of dogwood',
+  'painted bunting on a wisteria vine',
+  'lone stag in heraldic profile, ears alert',
+  'pair of fawns hidden in tall grasses',
+  'tropical macaw perched on a magnolia branch',
+];
+
+const TABLEAUX = [
+  'amongst peonies, plum blossoms, and weeping willow, in a soft mist',
+  'in a moonlit chinoiserie garden, peonies and crepe myrtle',
+  'beside a winding stream with iris and water lilies',
+  'beneath a flowering plum tree with falling petals',
+  'in a meadow of foxgloves, lupines, and queen anne\'s lace',
+  'in a walled cottage garden with delphiniums, hollyhocks, and roses',
+  'on a moss-covered bough heavy with wisteria',
+  'beneath a tea-stained sky with calligraphic clouds',
+  'amongst hand-painted peonies and a single drifting butterfly',
+  'in a panoramic country landscape with a faint distant temple',
+  'beside a stone lantern with chrysanthemums in bloom',
+  'in a misty bamboo grove with peony underplanting',
+  'amongst flowering quince and hand-rendered grasses',
+  'beneath a canopy of cherry blossoms in early spring',
+  'in a watercolour landscape with rolling hills and a single pagoda',
+];
+
+// Grounds reference the luxe substrates of Iksel/de Gournay/Mural Sources.
+const GROUNDS = [
+  'aged ivory linen ground, hand-painted',
+  'burnished silver-leaf ground, lightly oxidised',
+  'tea-stained antique paper ground, watercolour bleed at the edges',
+  'faded silk ground in the palest celadon, gentle craquelure',
+  'hand-applied gilt ground with palest ivory wash',
+  'dusty rose linen ground, hand-rubbed patina',
+  'pale buttermilk silk ground, soft pencil under-drawing visible',
+  'antique parchment ground with deckle edges and foxing',
+  'pale champagne metallic ground, lightly tarnished',
+  'oyster-grey hemp ground, hand-painted with sumi-e ink',
+  'soft mushroom-taupe linen ground, hand-stitched seams visible',
+  'pale celadon silk with hand-painted bamboo gridding underdrawing',
+];
+
+// 5-color limited palettes. Each line lists EXACTLY 5 colors. The
+// generator forces "5 color palette only" into the negative-prompt clause
+// so SDXL stays disciplined.
+const PALETTES = [
+  '5-color palette only: ivory, dusty rose, sage green, antique gold, soft charcoal',
+  '5-color palette only: alabaster, celadon, dusty blue, faded ochre, deep aubergine',
+  '5-color palette only: tea-stained cream, blush, willow green, slate, peach',
+  '5-color palette only: silver-leaf white, smoke grey, oxblood, moss, parchment',
+  '5-color palette only: bone white, soft indigo, weathered terracotta, sage, charcoal',
+  '5-color palette only: faded mint, blush, deep teal, butter cream, soft umber',
+  '5-color palette only: powder blue, dove grey, dusty plum, soft gold, ivory',
+  '5-color palette only: champagne, sage, lichen green, cocoa, antique rose',
+  '5-color palette only: pale celadon, butter, faded coral, cocoa, deep slate',
+  '5-color palette only: parchment, faded crimson, slate blue, willow, ochre',
+  '5-color palette only: pale celadon, dusty mauve, butter, soft sage, charcoal',
+  '5-color palette only: tea rose, alabaster, willow, ink black, antique gold',
+  '5-color palette only: rust, smoke, ivory, fern, soft gold',
+  '5-color palette only: dusty cornflower, parchment, willow, mauve, deep umber',
+  '5-color palette only: dove grey, blush, cocoa, faded lemon, charcoal',
+];
+
+const STYLES = [
+  'hand-painted watercolour and gouache, chinoiserie tradition, soft bleeds, fine sumi-e line work',
+  'in the manner of a bespoke Iksel hand-painted mural panel, refined linework, restrained color',
+  'in the manner of a hand-painted de Gournay panel, layered watercolour washes, antique patina',
+  'in the manner of a Brunschwig & Fils heirloom toile, fine line illustration, gentle wash',
+  'hand-painted gouache on antique paper, watercolour halo around motifs, no harsh outlines',
+  'silk-mounted Qing-era chinoiserie, refined hand-painting, restrained palette',
+  'hand-applied silver leaf with gouache motifs, lightly oxidised',
+  '18th-century European mural revival, hand-painted naturalism, age-softened',
+  'panoramic scenic-paper tradition (think Zuber et Cie), continuous landscape, watercolour',
+  'wallpaper from a great country house — hand-painted, gently aged, soft brushwork',
+  'fine art watercolour by a botanical illustrator, restrained, archival, no cartoon',
+];
+
+const COMPOSITIONS = [
+  'panoramic continuous repeat, 36-inch tall, motifs spaced for breathing room',
+  'tall vertical panel composition, motifs cascading top to bottom',
+  'mural-style continuous scene, no obvious tile repeat',
+  'large-scale focal repeat, hero motif centered with botanical periphery',
+  'half-drop repeat with generous negative ground, 24-inch repeat',
+  'allover scatter with gentle diagonal flow, plenty of unpainted ground',
+  'asymmetric composition with hero animal off-center, blossoms cascading',
+  'columnar composition, hand-painted vertical stems framing the animal',
+  'panoramic horizontal flow, motifs in a continuous parade',
+  'large 52-inch repeat with restrained motif density, gallery-grade',
+];
+
+// Hard-no clause — keep SDXL from defaulting to cartoony Warhol territory.
+const NEGATIVE = 'NO cartoon, NO pop-art, NO Warhol, NO neon, NO Day-Glo, NO halftone dots, NO comic outlines, NO silkscreen, NO cocktail, NO drinks, NO joints, NO smoking, NO 4-panel, NO bright primary colors, NO juvenile illustration. Refined, restrained, antiqued.';
+
+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() {
+  return [
+    pickRand(ANIMALS),
+    pickRand(TABLEAUX),
+    pickRand(GROUNDS),
+    pickRand(PALETTES),
+    pickRand(STYLES),
+    pickRand(COMPOSITIONS),
+    'seamless wallpaper repeat, archival quality, museum-grade hand-painting',
+    NEGATIVE,
+  ].join(', ');
+}
+
+function buildN(n) {
+  const usedAnimals = new Set();
+  const usedPalettes = new Set();
+  const out = [];
+  for (let i = 0; i < n; i++) {
+    if (usedAnimals.size >= ANIMALS.length - 1) usedAnimals.clear();
+    if (usedPalettes.size >= PALETTES.length - 1) usedPalettes.clear();
+    const animal = pickRand(ANIMALS, usedAnimals); usedAnimals.add(animal);
+    const palette = pickRand(PALETTES, usedPalettes); usedPalettes.add(palette);
+    out.push([
+      animal,
+      pickRand(TABLEAUX),
+      pickRand(GROUNDS),
+      palette,
+      pickRand(STYLES),
+      pickRand(COMPOSITIONS),
+      'seamless wallpaper repeat, archival quality, museum-grade hand-painting',
+      NEGATIVE,
+    ].join(', '));
+  }
+  return out;
+}
+
+module.exports = { buildPrompt, buildN, ANIMALS, TABLEAUX, GROUNDS, PALETTES, STYLES, COMPOSITIONS };
+
+if (require.main === module) {
+  const n = parseInt(process.argv[2] || '3', 10);
+  for (const p of buildN(n)) console.log(p + '\n');
+}
diff --git a/scripts/mural_animals_batch.js b/scripts/mural_animals_batch.js
new file mode 100644
index 0000000..38d2850
--- /dev/null
+++ b/scripts/mural_animals_batch.js
@@ -0,0 +1,41 @@
+#!/usr/bin/env node
+/**
+ * Fire a batch of N mural-luxe animal designs (Iksel / de Gournay / Mural
+ * Sources aesthetic, 5-color limited palettes, hand-painted watercolor +
+ * gouache, refined NOT cartoony) through scripts/generate_designs.js.
+ *
+ * Usage:  node scripts/mural_animals_batch.js [N]   (default 100)
+ */
+const { spawnSync } = require('child_process');
+const path = require('path');
+const { buildN } = require('./mural_animal_prompts');
+
+const N = parseInt(process.argv[2] || '100', 10);
+const ROOT = path.join(__dirname, '..');
+
+console.log(`\n=== Mural-luxe animal batch: firing ${N} designs ===\n`);
+
+const prompts = buildN(N);
+let ok = 0, fail = 0;
+
+for (let i = 0; i < prompts.length; i++) {
+  const p = prompts[i];
+  console.log(`\n--- [${i+1}/${N}] ${p.slice(0, 100)}…`);
+  const r = spawnSync('node', [
+    path.join(ROOT, 'scripts', 'generate_designs.js'),
+    '--n', '1',
+    '--kind', 'seamless_tile',
+    '--category', 'mural-animals',
+    '--prompts', p,
+  ], { stdio: 'inherit', cwd: ROOT });
+  if (r.status === 0) ok++; else fail++;
+}
+
+console.log(`\n=== Batch done: ${ok} ok, ${fail} failed ===`);
+
+spawnSync('python3', [path.join(ROOT, 'scripts', 'refresh_designs_snapshot.py')],
+          { stdio: 'inherit', cwd: ROOT, timeout: 180_000 });
+spawnSync('curl', ['-sf', '-m', '5', '-X', 'POST', 'http://127.0.0.1:9792/admin/reload-designs'],
+          { stdio: 'inherit', cwd: ROOT, timeout: 10_000 });
+
+process.exit(fail === 0 ? 0 : 1);
diff --git a/scripts/refresh_designs_snapshot.py b/scripts/refresh_designs_snapshot.py
index fd95a2b..f6859ee 100644
--- a/scripts/refresh_designs_snapshot.py
+++ b/scripts/refresh_designs_snapshot.py
@@ -58,7 +58,9 @@ NOUNS = {
     'drunk-animals': ['Hiccup', 'Tipple', 'Tableau', 'Reverie', 'Soirée',
                       'Vignette', 'Carouse', 'Caprice', 'Saunter', 'Folly'],
     'stoned-animals': ['Stealie', 'Trip', 'Stardust', 'Daydream', 'Vespers',
-                       'Hazefield', 'Sundrift', 'Spore', 'Lullaby', 'Halcyon']
+                       'Hazefield', 'Sundrift', 'Spore', 'Lullaby', 'Halcyon'],
+    'mural-animals':  ['Mural', 'Panel', 'Pavillon', 'Atelier', 'Hand-Painted',
+                       'Vignette', 'Chinoiserie', 'Heirloom', 'Salon', 'Reverie']
 }
 def title_for(cat, hex_, id_):
     pool = NOUNS.get(cat, NOUNS['mixed'])
diff --git a/server.js b/server.js
index 51b9c59..82ea064 100644
--- a/server.js
+++ b/server.js
@@ -562,7 +562,9 @@ const NOUNS = {
   'art deco':       ['Deco','Fan','Sunburst','Chevron','Marquee'],
   'arts and crafts':['Morris','Crafts','Bough','Trellis','Vine'],
   'drunk-animals':  ['Hiccup','Tipple','Tableau','Reverie','Soirée','Vignette','Carouse','Caprice','Saunter','Folly'],
-  'stoned-animals': ['Stealie','Trip','Stardust','Daydream','Vespers','Hazefield','Sundrift','Spore','Lullaby','Halcyon']
+  'stoned-animals': ['Stealie','Trip','Stardust','Daydream','Vespers','Hazefield','Sundrift','Spore','Lullaby','Halcyon'],
+  // Iksel / de Gournay / Mural Sources luxe-mural vocabulary.
+  'mural-animals':  ['Mural','Panel','Pavillon','Atelier','Hand-Painted','Vignette','Chinoiserie','Heirloom','Salon','Reverie']
 };
 function hueName(hex) {
   if (!hex) return 'Bone';
@@ -2220,6 +2222,10 @@ app.get('/stoned-animals', (req, res) => {
   const qs = new URLSearchParams({ cat: 'stoned-animals', ...req.query }).toString();
   res.redirect(302, '/designs?' + qs);
 });
+app.get('/mural-animals', (req, res) => {
+  const qs = new URLSearchParams({ cat: 'mural-animals', ...req.query }).toString();
+  res.redirect(302, '/designs?' + qs);
+});
 
 // ── JSON feed for the /drunk-animals/live page — newest 60 designs with
 // just the fields the viewer needs (id/title/image_url/dominant_hex/prompt).
@@ -2708,6 +2714,18 @@ ${cat === 'stoned-animals' ? `
   </div>
 </section>
 ` : ''}
+${cat === 'mural-animals' ? `
+<section style="padding:56px 24px 32px;text-align:center;background:linear-gradient(180deg,#f4ece0 0%,#e8d8c0 100%);color:#3a2818;margin-bottom:0;border-bottom:1px solid #c8b89a">
+  <div style="max-width:760px;margin:0 auto">
+    <p style="font-size:11px;letter-spacing:.32em;text-transform:uppercase;color:#8a6f44;margin:0 0 10px;font-weight:500">Hand-painted · Five-color · Atelier edition</p>
+    <h1 style="font-family:'Playfair Display','Didot',serif;font-weight:400;font-style:italic;font-size:clamp(36px,5vw,58px);line-height:1.05;margin:0 0 16px;color:#2a1f10">The Mural Menagerie</h1>
+    <p style="font-size:15px;line-height:1.7;color:#5a4632;margin:0 auto;max-width:580px">Refined chinoiserie-tradition wallpaper murals — peacocks amongst peonies, sika deer in misted clearings, mandarin ducks on still water. Watercolour and gouache on antiqued grounds, five-color palettes, no cartoon, no neon. In the manner of the great hand-painted mural houses.</p>
+    <div style="margin-top:20px;display:flex;gap:10px;justify-content:center;flex-wrap:wrap;font-size:12px">
+      <span style="padding:4px 12px;border:1px solid #8a6f44;border-radius:14px;color:#8a6f44"><strong>${total}</strong> hand-painted panels</span>
+    </div>
+  </div>
+</section>
+` : ''}
 <section class="catalog-section">
   <div class="catalog-toolbar">
     <form method="get" action="/designs" class="filter-form">

← 14ea612 /designs: fix 'newest' sort — was returning oldest first  ·  back to Wallco Ai  ·  mural-scenic: panoramic 20ft x 11ft scenic murals (NOT seaml 58f892e →