← 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
A scripts/mural_animal_prompts.jsA scripts/mural_animals_batch.jsM scripts/refresh_designs_snapshot.pyM server.js
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 →