← back to Wallco Ai
LA Toile: staged recipe-B winners gallery builder
26deee22999c6880cbddfef6b502bc8772bf5a75 · 2026-06-02 13:26:38 -0700 · steve@designerwallcoverings.com
Files touched
A scripts/build-la-toile-staged-gallery.js
Diff
commit 26deee22999c6880cbddfef6b502bc8772bf5a75
Author: steve@designerwallcoverings.com <steve@designerwallcoverings.com>
Date: Tue Jun 2 13:26:38 2026 -0700
LA Toile: staged recipe-B winners gallery builder
---
scripts/build-la-toile-staged-gallery.js | 55 ++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/scripts/build-la-toile-staged-gallery.js b/scripts/build-la-toile-staged-gallery.js
new file mode 100644
index 0000000..b304e75
--- /dev/null
+++ b/scripts/build-la-toile-staged-gallery.js
@@ -0,0 +1,55 @@
+// Gallery of the STAGED LA Toile recipe-B winners (not published — for Steve's review).
+// Reads a winners json (slug -> design id) and renders each with its scene label.
+// Usage: node scripts/build-la-toile-staged-gallery.js [winnersJson] [outHtml]
+const fs = require('fs');
+const WINNERS = process.argv[2] || '/tmp/la-toile-winners.json';
+const OUT = process.argv[3] || '/tmp/la-toile-staged-gallery.html';
+const BASE = 'http://127.0.0.1:9905/designs/img/by-id/';
+const LABELS = [
+ 'Hollywood Sign + Griffith Observatory','Venice Beach boardwalk + pier','Downtown LA skyline + City Hall',
+ 'Jacaranda-lined Sunset Blvd','Beverly Hills Spanish-revival bungalows','Santa Monica Pier Ferris wheel',
+ 'Chinatown paifang gate','Echo Park Lake paddle boats','Mid-century Case Study houses',
+ 'Mulholland convertibles','Watts Towers spires','LA Aqueduct + San Gabriels',
+ 'Olvera Street market','Griffith Park oak trails','Malibu coastline + lighthouse',
+ 'Art-Deco movie palaces','Old-LA citrus groves','Union Station + streamliner',
+ 'Golden-age studio backlot','Pasadena Rose Parade','Angels Flight funicular',
+ 'La Brea Tar Pits','Bradbury Building atrium','Mulholland coyote at dusk',
+ 'Silver Lake reservoir','Original Farmers Market','Topanga Canyon cabins',
+ 'Googie LAX Theme Building','Dodger Stadium','Jacaranda residential streets',
+];
+let winners = {};
+try { winners = JSON.parse(fs.readFileSync(WINNERS, 'utf8')); } catch {}
+const rows = LABELS.map((label, i) => {
+ const slug = 'la-toile-' + String(i + 1).padStart(2, '0');
+ return { slug, label, id: winners[slug] || null };
+});
+const done = rows.filter(r => r.id);
+const cells = rows.map(r => `
+ <div class="card ${r.id ? '' : 'pending'}">
+ <div class="lbl"><b>${r.slug}</b> · ${r.label}</div>
+ ${r.id
+ ? `<a href="${BASE}${r.id}" target="_blank"><img loading="lazy" src="${BASE}${r.id}"></a><figcaption>#${r.id} · clean recipe-B winner</figcaption>`
+ : `<div class="miss">— not yet landed —</div>`}
+ </div>`).join('\n');
+const html = `<!doctype html><html><head><meta charset="utf-8">
+<title>LA Toile de Jouy — STAGED recipe-B winners (NOT published)</title>
+<style>
+ :root{--ink:#1a1713;--line:#e2dcd0;--bg:#f6f2ea}
+ *{box-sizing:border-box} body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.5 -apple-system,Georgia,serif;padding:26px 30px}
+ h1{font:600 25px/1.2 Georgia,serif;margin:0 0 4px} .sub{color:#6b6357;margin:0 0 22px;font-size:14px}
+ .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px;max-width:1340px}
+ .card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px;box-shadow:0 1px 3px rgba(0,0,0,.04)}
+ .card.pending{opacity:.5} .lbl{font-size:13px;margin-bottom:9px;color:#3a342b} .lbl b{color:#8a7f6c;font-variant:all-small-caps;letter-spacing:.02em}
+ img{width:100%;aspect-ratio:1/1;object-fit:cover;border-radius:8px;display:block;background:#eee}
+ .miss{width:100%;aspect-ratio:1/1;border-radius:8px;display:flex;align-items:center;justify-content:center;color:#b3a;background:#faf6f3;border:1px dashed #e2c9c9;font-size:13px}
+ figcaption{font-size:12px;color:#6b6357;margin-top:6px}
+ .banner{background:#fff7e6;border:1px solid #e8d9a8;border-radius:8px;padding:10px 14px;margin:0 0 18px;font-size:13px;color:#7a6a3a}
+</style></head><body>
+<h1>LA Toile de Jouy — staged recipe-B winners</h1>
+<p class="sub">Dense LA-garden botanical toile · img2img-seeded (no register-bands, no palms, no birds) · multi-color on linen · <b>${done.length}/30 landed</b></p>
+<div class="banner">⚠ STAGED ONLY — these are NOT published to live wallco.ai. Awaiting Steve's review + publish sign-off.</div>
+<div class="grid">
+${cells}
+</div></body></html>`;
+fs.writeFileSync(OUT, html);
+console.log(`wrote ${OUT} — ${done.length}/30 staged winners`);
← a878353 LA Toile: Option-B img2img recipe — luxe seed @0.72 + foliag
·
back to Wallco Ai
·
etsy-bucket: add Sort (newest/oldest/id↑↓/dpi) + persist; fo a375967 →