← back to Wallco Ai
mural-scenic: panoramic 20ft x 11ft scenic murals (NOT seamless tiles)
58f892e71d596ff06f4f8282dcb8eb6bd887eaa7 · 2026-05-13 10:36:12 -0700 · SteveStudio2
Steve called the mural-animals tiles 'cheap'. Pivot to bespoke FULL-WALL
SCENIC MURALS in the de Gournay / Iksel / Gracie / Zuber et Cie
tradition.
- Print spec: 20ft wide × 11ft tall, 300 dpi target
- SDXL render: 1408 × 768 (near-exact 20:11 aspect)
- Upscale-to-print is a separate downstream Real-ESRGAN pass
after favorites are picked (1.1 megapixel → 72k×39.6k requires
~51x scaling — out of scope for the art-direction batch)
- 18 panoramic scenes — Chinese chinoiserie valley with pagoda,
French formal terrace with folly, English wildflower hill, Tudor
cottage garden, Persian paradise, Victorian conservatory,
Scottish glen, Yorkshire kitchen garden, Provence lavender,
Pre-Raphaelite tapestry, Edwardian wildflower meadow, Spanish
Moorish patio
- 10 animal scatter groups — animals as small naturalistic accents
(left/center/right), NEVER hero, botanical detail dominates
- 9 antiqued grounds — ivory linen, burnished silver-leaf, tea-
stained paper, faded silk celadon, hand-applied gilt, parchment
w/ foxing, oyster hemp w/ sumi-e ink, champagne metallic
- 12 strictly 5-color palettes (Steve's spec) — explicit color
lists pinned to the prompt
- 7 styles in named-house language — de Gournay commission, Iksel
panel, Gracie hand-painted Chinese, Zuber et Cie scenic paper,
Pre-Raphaelite illustrator, Mughal miniature, Arts-and-Crafts
- HARD-NO clause — NO seamless repeat / tile / tropical / palm /
monstera / banana / Warhol / pop-art / cartoon / neon / drinks /
joints. Plus: 'single uninterrupted scene', 'every leaf and
petal individually rendered'
Storage: kind='mural', width_in=20, height_in=11, panels=1,
category='mural-scenic'. /mural-scenic friendly URL + hero block
('Bespoke scenic mural · 20ft × 11ft · five-color').
Batch of 30 firing now (in-flight mural-animals tile batch was killed
since Steve called those cheap).
Files touched
A scripts/mural_scenic_batch.jsA scripts/mural_scenic_prompts.jsM scripts/refresh_designs_snapshot.pyM server.js
Diff
commit 58f892e71d596ff06f4f8282dcb8eb6bd887eaa7
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date: Wed May 13 10:36:12 2026 -0700
mural-scenic: panoramic 20ft x 11ft scenic murals (NOT seamless tiles)
Steve called the mural-animals tiles 'cheap'. Pivot to bespoke FULL-WALL
SCENIC MURALS in the de Gournay / Iksel / Gracie / Zuber et Cie
tradition.
- Print spec: 20ft wide × 11ft tall, 300 dpi target
- SDXL render: 1408 × 768 (near-exact 20:11 aspect)
- Upscale-to-print is a separate downstream Real-ESRGAN pass
after favorites are picked (1.1 megapixel → 72k×39.6k requires
~51x scaling — out of scope for the art-direction batch)
- 18 panoramic scenes — Chinese chinoiserie valley with pagoda,
French formal terrace with folly, English wildflower hill, Tudor
cottage garden, Persian paradise, Victorian conservatory,
Scottish glen, Yorkshire kitchen garden, Provence lavender,
Pre-Raphaelite tapestry, Edwardian wildflower meadow, Spanish
Moorish patio
- 10 animal scatter groups — animals as small naturalistic accents
(left/center/right), NEVER hero, botanical detail dominates
- 9 antiqued grounds — ivory linen, burnished silver-leaf, tea-
stained paper, faded silk celadon, hand-applied gilt, parchment
w/ foxing, oyster hemp w/ sumi-e ink, champagne metallic
- 12 strictly 5-color palettes (Steve's spec) — explicit color
lists pinned to the prompt
- 7 styles in named-house language — de Gournay commission, Iksel
panel, Gracie hand-painted Chinese, Zuber et Cie scenic paper,
Pre-Raphaelite illustrator, Mughal miniature, Arts-and-Crafts
- HARD-NO clause — NO seamless repeat / tile / tropical / palm /
monstera / banana / Warhol / pop-art / cartoon / neon / drinks /
joints. Plus: 'single uninterrupted scene', 'every leaf and
petal individually rendered'
Storage: kind='mural', width_in=20, height_in=11, panels=1,
category='mural-scenic'. /mural-scenic friendly URL + hero block
('Bespoke scenic mural · 20ft × 11ft · five-color').
Batch of 30 firing now (in-flight mural-animals tile batch was killed
since Steve called those cheap).
---
scripts/mural_scenic_batch.js | 61 +++++++++++++++
scripts/mural_scenic_prompts.js | 148 ++++++++++++++++++++++++++++++++++++
scripts/refresh_designs_snapshot.py | 4 +-
server.js | 21 ++++-
4 files changed, 232 insertions(+), 2 deletions(-)
diff --git a/scripts/mural_scenic_batch.js b/scripts/mural_scenic_batch.js
new file mode 100644
index 0000000..416c4ea
--- /dev/null
+++ b/scripts/mural_scenic_batch.js
@@ -0,0 +1,61 @@
+#!/usr/bin/env node
+/**
+ * Fire a batch of N mural-scenic designs.
+ *
+ * Each design is generated landscape at SDXL 1408×768 (20:11 aspect, near-
+ * exact match for the 20ft wide × 11ft tall print spec). Stored in PG with
+ * kind='mural', width_in=20, height_in=11, category='mural-scenic'.
+ *
+ * SDXL output is 1408×768 = ~1.1 megapixels. For the 300dpi 20ft×11ft print
+ * spec (72,000×39,600px), a downstream Real-ESRGAN x4 upscale (then a
+ * second pass) is needed — flagged in the design's `notes`. The point of
+ * THIS step is to nail the art direction; print-grade upscaling comes after
+ * Steve picks favorites.
+ *
+ * Usage: node scripts/mural_scenic_batch.js [N] (default 30)
+ * REPLICATE_WIDTH/REPLICATE_HEIGHT set inline.
+ */
+const { spawnSync } = require('child_process');
+const path = require('path');
+const { buildN } = require('./mural_scenic_prompts');
+
+const N = parseInt(process.argv[2] || '30', 10);
+const ROOT = path.join(__dirname, '..');
+
+console.log(`\n=== Mural-scenic batch: firing ${N} panoramic designs ===`);
+console.log(` SDXL output: 1408x768 (20:11 landscape — print spec 20ft x 11ft)\n`);
+
+const env = {
+ ...process.env,
+ REPLICATE_WIDTH: '1408',
+ REPLICATE_HEIGHT: '768',
+ MAKE_SEAMLESS: '0', // scenic mural, NOT a seamless tile — skip edge-fix pass
+};
+
+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', 'mural',
+ '--width', '20',
+ '--height', '11',
+ '--panels', '1',
+ '--category', 'mural-scenic',
+ '--prompts', p,
+ ], { stdio: 'inherit', cwd: ROOT, env });
+ 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/mural_scenic_prompts.js b/scripts/mural_scenic_prompts.js
new file mode 100644
index 0000000..2de6769
--- /dev/null
+++ b/scripts/mural_scenic_prompts.js
@@ -0,0 +1,148 @@
+#!/usr/bin/env node
+/**
+ * Mural-scenic prompt library — full panoramic mural panels intended for
+ * the 111ft tall × 20ft wide stairwell / grand-hall format. NOT a seamless
+ * repeat tile. NOT tropical. Hand-painted, detailed botanical interior
+ * with animals scattered as small naturalistic motifs throughout a single
+ * continuous scene.
+ *
+ * Aesthetic reference: de Gournay / Iksel / Mural Sources / Gracie / Zuber.
+ * Category: spoon_all_designs.category = 'mural-scenic'
+ * Kind: spoon_all_designs.kind = 'mural'
+ * Dim: width_in=20, height_in=111, panels=1 (single continuous panel)
+ *
+ * Replicate output: portrait aspect (e.g. 768x1536) — generator caller
+ * passes REPLICATE_WIDTH/REPLICATE_HEIGHT to SDXL for the tall format.
+ */
+
+// Each "scene" is a fully-realised horizontal landscape — 11ft tall × 20ft
+// wide panoramic vista. Animals distributed within, not the hero.
+// Botanical detail dominates.
+const SCENES = [
+ 'a Chinese garden unfurling across a misted valley — peony bushes at the left, plum blossom branches arching center, willow fronds trailing right, a single pagoda silhouetted on a distant hill',
+ 'an English country estate seen across a flowering hillside — rhododendron and azalea at the left, hawthorn and dogwood through the middle, an avenue of ancient oaks receding right',
+ 'a French formal garden stretching the width of a stone terrace — boxwood parterre in the foreground, climbing roses on trellises, espaliered pear trees, lavender ribbons, a far-off folly to the right',
+ 'a Japanese spring landscape — wild cherry blossoms cascading left, maples in soft red center, hand-painted cloud bands drifting across the upper register, a moon-bridge to the right',
+ 'an Italian Renaissance terraced garden — citrus trees in terracotta pots, climbing wisteria over an arched colonnade, statuary at landings, cypress pointing skyward at the horizon',
+ 'a wild English meadow rolling to a folly — foxgloves, lupines, queen-anne\'s-lace, oxeye daisies in waves across the field, hawthorn and elder rising in the middle distance',
+ 'a botanical illustrator\'s horizontal herbarium frieze — labelled specimens of rose, peony, foxglove, iris, columbine, hellebore, fritillary laid out left to right',
+ 'a Tudor cottage garden along a winding stone path — hollyhocks, delphiniums, foxgloves, climbing roses, fruiting espaliers, dovecote at the right',
+ 'a Persian paradise garden — flowering pomegranate, almond blossom, cypress alleys, a slim watercourse running the full width, hand-painted in Mughal miniature tradition',
+ 'a Victorian conservatory glasshouse — camellias and orchids low, ferns of every species, hanging baskets of pelargoniums, glass roof framing painted sky across the upper third',
+ 'a New England wildflower hill in late spring — trillium, bloodroot, lady\'s-slipper, wood anemone, mountain laurel in the foreground, white birches along the ridgeline',
+ 'a Scottish glen across a deer park — heather, foxglove, harebells, gorse, rowan trees in clusters, an aged oak anchoring the right',
+ 'a chinoiserie scholar\'s rock landscape — gnarled pine center, flowering plum left, bamboo grove right, tea-stained cloud bands in the upper register, painted in the Qing court tradition',
+ 'a Yorkshire walled kitchen garden — rhubarb forcing pots, climbing peas on bamboo, espaliered apples, marigolds and nasturtiums spilling between',
+ 'a Provence lavender landscape rising to a stone village — rows of lavender, rosemary, lemon trees, an olive grove on the right slope, painted in plein-air watercolour',
+ 'a Pre-Raphaelite tapestry garden — Sleeping Beauty roses tangled around a sundial center, foxglove spires, peacock on a flagstone, doves wheeling in the sky band',
+ 'an Edwardian wildflower meadow — campion, ragged robin, poppies, cornflowers, climbing dog roses, ancient willow on the right',
+ 'a Spanish Moorish patio garden — pomegranates, oranges, jasmine on trellis, blue-and-white tile fountain center, climbing bougainvillea (but absolutely NO palms)',
+];
+
+// Animals distributed throughout — small, naturalistic, never the focal
+// point. Each scene gets 3-6 of these scattered at different elevations.
+const ANIMAL_GROUPS = [
+ 'a pair of red-crowned cranes wading at the left, a single sika deer in the middle distance, hummingbirds darting amongst the right-side blossoms',
+ 'a peacock fanning on the left flagstone, a leopard reclining center, golden pheasants on the right path',
+ 'a small herd of fallow deer browsing the left meadow, a fox slipping between flowers center, swallows wheeling in the upper right',
+ 'foraging quail at the left foreground, a stag in heraldic profile center, a falcon perched on the right pillar',
+ 'mandarin ducks on the watercourse left, a snow leopard barely glimpsed amongst the center rocks, painted bunting in a right-side flowering branch',
+ 'rabbits at the left meadow, a doe with fawn glimpsed through the center wildflowers, a kestrel hovering at the right',
+ 'a peahen and chicks at the left border, a tortoise center, butterflies and bees throughout the painted air',
+ 'mute swans on the left pool, a sleeping leopard center, parrots gathered in the right canopy',
+ 'a Dalmatian dog standing point at the left stair, deer grazing in the middle, ravens circling the right folly',
+ 'foxes at play in the left bushes, a doe with fawn center, herons stalking the right watercourse',
+];
+
+const GROUNDS = [
+ 'aged ivory linen ground, hand-painted',
+ 'burnished silver-leaf ground, lightly oxidised, lustre catching the upper third',
+ 'tea-stained paper ground, soft sepia foxing at the edges',
+ 'pale buttercream silk ground, hand-applied gilt sky band at the top',
+ 'hand-applied silver-leaf with cooler tones at the base, warmer at the crest',
+ 'antique parchment with deckle edges, ground tone shifting subtly with elevation',
+ 'oyster grey hemp ground, sumi-e ink underpainting visible through washes',
+ 'pale celadon silk, faded with age, hand-stitched panel seams just discernible',
+ 'champagne metallic ground, faintly oxidised, hand-painted in opaque gouache',
+];
+
+// 5 colors EXACTLY, listed explicitly so SDXL stays disciplined.
+const PALETTES = [
+ '5 colors only: ivory, dusty rose, sage green, antique gold, soft charcoal',
+ '5 colors only: alabaster, celadon, dusty blue, faded ochre, deep aubergine',
+ '5 colors only: tea-stained cream, blush, willow green, slate, peach',
+ '5 colors only: silver-leaf white, smoke grey, oxblood, moss, parchment',
+ '5 colors only: bone white, soft indigo, weathered terracotta, sage, charcoal',
+ '5 colors only: faded mint, blush, deep teal, butter cream, soft umber',
+ '5 colors only: powder blue, dove grey, dusty plum, soft gold, ivory',
+ '5 colors only: champagne, sage, lichen green, cocoa, antique rose',
+ '5 colors only: pale celadon, butter, faded coral, cocoa, deep slate',
+ '5 colors only: parchment, faded crimson, slate blue, willow, ochre',
+ '5 colors only: tea rose, alabaster, willow, ink black, antique gold',
+ '5 colors only: rust, smoke, ivory, fern, soft gold',
+];
+
+const STYLES = [
+ 'hand-painted gouache and watercolour on antiqued ground, panoramic scenic-mural tradition (think de Gournay commissioned panel), restrained palette, soft botanical detail throughout, no harsh outlines',
+ 'in the manner of a bespoke Iksel painted panel — refined linework, chinoiserie sensibility, watercolour washes, hand-applied gilt accents',
+ 'in the manner of Gracie hand-painted Chinese wallpaper — fine sumi-e line, gentle watercolour bleed, plein-air feel',
+ '19th-century Zuber et Cie panoramic scenic paper — continuous landscape, block-printed feel, slight register charm',
+ 'a Pre-Raphaelite illustrator\'s painted mural — fine line detail in every leaf, every petal individually rendered',
+ 'Mughal miniature tradition translated to mural scale — every plant precisely drawn, gilt accents, jewel-toned but muted',
+ 'an English Arts-and-Crafts hand-painted screen — Morris-tradition detail in every botanical, restrained earth palette',
+];
+
+// Critical negatives — Steve\'s feedback: "looks cheap", "not tropical",
+// "no seamless tile". Hammer those out.
+const NEGATIVE = 'NO seamless repeat, NO tile pattern, NO obvious repeat, NO tropical plants, NO palm, NO monstera, NO banana leaves, NO philodendron, NO jungle, NO Warhol, NO pop-art, NO cartoon, NO neon, NO Day-Glo, NO comic outlines, NO juvenile illustration, NO drinks, NO cocktails, NO joints, NO smoking. Refined museum-grade hand-painting, every leaf and petal individually rendered.';
+
+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(SCENES),
+ pickRand(ANIMAL_GROUPS),
+ pickRand(GROUNDS),
+ pickRand(PALETTES),
+ pickRand(STYLES),
+ 'one single panoramic mural panel, 11ft tall by 20ft wide landscape format, panoramic horizontal composition with the scene flowing left to right, NO tile repeat, NO border, the scene continues uninterrupted top to bottom',
+ 'archival quality, museum-grade hand-painting',
+ NEGATIVE,
+ ].join(', ');
+}
+
+function buildN(n) {
+ const usedScenes = new Set();
+ const usedPalettes = new Set();
+ const out = [];
+ for (let i = 0; i < n; i++) {
+ if (usedScenes.size >= SCENES.length - 1) usedScenes.clear();
+ if (usedPalettes.size >= PALETTES.length - 1) usedPalettes.clear();
+ const scene = pickRand(SCENES, usedScenes); usedScenes.add(scene);
+ const palette = pickRand(PALETTES, usedPalettes); usedPalettes.add(palette);
+ out.push([
+ scene,
+ pickRand(ANIMAL_GROUPS),
+ pickRand(GROUNDS),
+ palette,
+ pickRand(STYLES),
+ 'one single panoramic mural panel, 11ft tall by 20ft wide landscape format, panoramic horizontal composition with the scene flowing left to right, NO tile repeat, NO border, the scene continues uninterrupted top to bottom',
+ 'archival quality, museum-grade hand-painting',
+ NEGATIVE,
+ ].join(', '));
+ }
+ return out;
+}
+
+module.exports = { buildPrompt, buildN, SCENES, ANIMAL_GROUPS, GROUNDS, PALETTES, STYLES };
+
+if (require.main === module) {
+ const n = parseInt(process.argv[2] || '2', 10);
+ for (const p of buildN(n)) console.log(p + '\n');
+}
diff --git a/scripts/refresh_designs_snapshot.py b/scripts/refresh_designs_snapshot.py
index f6859ee..131b79c 100644
--- a/scripts/refresh_designs_snapshot.py
+++ b/scripts/refresh_designs_snapshot.py
@@ -60,7 +60,9 @@ NOUNS = {
'stoned-animals': ['Stealie', 'Trip', 'Stardust', 'Daydream', 'Vespers',
'Hazefield', 'Sundrift', 'Spore', 'Lullaby', 'Halcyon'],
'mural-animals': ['Mural', 'Panel', 'Pavillon', 'Atelier', 'Hand-Painted',
- 'Vignette', 'Chinoiserie', 'Heirloom', 'Salon', 'Reverie']
+ 'Vignette', 'Chinoiserie', 'Heirloom', 'Salon', 'Reverie'],
+ 'mural-scenic': ['Scenic', 'Panorama', 'Vista', 'Frieze', 'Tapestry',
+ 'Folly', 'Allée', 'Belvedere', 'Promenade', 'Pavillon']
}
def title_for(cat, hex_, id_):
pool = NOUNS.get(cat, NOUNS['mixed'])
diff --git a/server.js b/server.js
index 82ea064..7013e07 100644
--- a/server.js
+++ b/server.js
@@ -564,7 +564,9 @@ const 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'],
// Iksel / de Gournay / Mural Sources luxe-mural vocabulary.
- 'mural-animals': ['Mural','Panel','Pavillon','Atelier','Hand-Painted','Vignette','Chinoiserie','Heirloom','Salon','Reverie']
+ 'mural-animals': ['Mural','Panel','Pavillon','Atelier','Hand-Painted','Vignette','Chinoiserie','Heirloom','Salon','Reverie'],
+ // Panoramic scenic — Zuber et Cie / Gracie / de Gournay tradition.
+ 'mural-scenic': ['Scenic','Panorama','Vista','Frieze','Tapestry','Folly','Allée','Belvedere','Promenade','Pavillon']
};
function hueName(hex) {
if (!hex) return 'Bone';
@@ -2226,6 +2228,10 @@ app.get('/mural-animals', (req, res) => {
const qs = new URLSearchParams({ cat: 'mural-animals', ...req.query }).toString();
res.redirect(302, '/designs?' + qs);
});
+app.get('/mural-scenic', (req, res) => {
+ const qs = new URLSearchParams({ cat: 'mural-scenic', ...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).
@@ -2726,6 +2732,19 @@ ${cat === 'mural-animals' ? `
</div>
</section>
` : ''}
+${cat === 'mural-scenic' ? `
+<section style="padding:56px 24px 32px;text-align:center;background:linear-gradient(180deg,#ece4d4 0%,#dfd1ba 50%,#c5b298 100%);color:#2a1f10;margin-bottom:0;border-bottom:1px solid #b59a72">
+ <div style="max-width:780px;margin:0 auto">
+ <p style="font-size:11px;letter-spacing:.32em;text-transform:uppercase;color:#7a5e34;margin:0 0 10px;font-weight:500">Bespoke scenic mural · 20ft × 11ft · five-color</p>
+ <h1 style="font-family:'Playfair Display','Didot',serif;font-weight:400;font-style:italic;font-size:clamp(36px,5vw,60px);line-height:1.05;margin:0 0 16px;color:#1f1808">The Scenic Panoramas</h1>
+ <p style="font-size:15px;line-height:1.7;color:#4a3520;margin:0 auto;max-width:600px">Full-room wall murals in the tradition of de Gournay, Iksel, Gracie, and Zuber et Cie. Single uninterrupted scenes — French formal gardens, Chinese chinoiserie valleys, English wildflower hills, Provence lavender vistas — animals as small naturalistic accents. 20 ft wide × 11 ft tall, target print 300 dpi after upscaling.</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 #7a5e34;border-radius:14px;color:#7a5e34"><strong>${total}</strong> panoramic panels</span>
+ <span style="padding:4px 12px;border:1px solid #8a6f44;border-radius:14px;color:#8a6f44">single-panel, no repeat</span>
+ </div>
+ </div>
+</section>
+` : ''}
<section class="catalog-section">
<div class="catalog-toolbar">
<form method="get" action="/designs" class="filter-form">
← 9b791a3 mural-animals: Iksel/de Gournay/Mural Sources refined collec
·
back to Wallco Ai
·
user-feedback: rate panel + soft-remove + 150 dpi spec d5cb765 →