[object Object]

← back to Wild Wallcoverings

scale-lock per design + 3 extra nano variations (6 versions/design)

31adc5ff89dea1145b868bcd69b601373f91ceb0 · 2026-07-22 12:39:47 -0700 · Steve Abrams

Files touched

Diff

commit 31adc5ff89dea1145b868bcd69b601373f91ceb0
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Jul 22 12:39:47 2026 -0700

    scale-lock per design + 3 extra nano variations (6 versions/design)
---
 data/briefs.json                                 |  75 +++++++++++++++--------
 output/archive-v1/astral-tiger-v1-nano.png       | Bin 1988402 -> 1824802 bytes
 output/archive-v1/galaxy-bots-v1-nano.png        | Bin 2101873 -> 1882506 bytes
 output/archive-v1/herbarium-press-v1-nano.png    | Bin 1944088 -> 2128198 bytes
 output/archive-v1/midnight-frequency-v1-nano.png | Bin 1541627 -> 1588693 bytes
 output/archive-v1/robot-parade-v1-nano.png       | Bin 1411198 -> 1579412 bytes
 scripts/batch_gen.py                             |  58 +++++++++++-------
 7 files changed, 85 insertions(+), 48 deletions(-)

diff --git a/data/briefs.json b/data/briefs.json
index 8565170..dbf84a5 100644
--- a/data/briefs.json
+++ b/data/briefs.json
@@ -11,7 +11,8 @@
    "#7d7d7d",
    "#d6d6d6",
    "#ababab"
-  ]
+  ],
+  "scale": "large-scale motif: tiger about 14 inches tall within the 24 inch repeat, stars 2-3 inches"
  },
  {
   "id": "midnight-frequency",
@@ -24,7 +25,8 @@
    "#d4d4d6",
    "#616065",
    "#828286"
-  ]
+  ],
+  "scale": "medium-scale motifs about 5 inches each, evenly scattered"
  },
  {
   "id": "robot-parade",
@@ -36,7 +38,8 @@
    "#ffffff",
    "#b3b3b3",
    "#e3e3e3"
-  ]
+  ],
+  "scale": "large-scale motifs: robots 10-12 inches tall, bold and dominant"
  },
  {
   "id": "galaxy-bots",
@@ -49,7 +52,8 @@
    "#dbdbdb",
    "#bababa",
    "#797979"
-  ]
+  ],
+  "scale": "medium-scale motifs 4-6 inches, generously scattered scene"
  },
  {
   "id": "herbarium-press",
@@ -63,7 +67,8 @@
    "#c2ac65",
    "#f3eabc",
    "#e5d581"
-  ]
+  ],
+  "scale": "medium-scale pressed flowers 5-8 inches, airy arrangement"
  },
  {
   "id": "desert-choir",
@@ -74,7 +79,8 @@
   "palette": [
    "#edb8a2",
    "#f7eee7"
-  ]
+  ],
+  "scale": "oversized large-scale cacti 16-20 inches tall spanning most of the repeat"
  },
  {
   "id": "ray-shadow",
@@ -85,7 +91,8 @@
   "palette": [
    "#e8cec2",
    "#f8ede8"
-  ]
+  ],
+  "scale": "small-scale dense allover spots 1-2 inches, tight organic texture"
  },
  {
   "id": "moonrise-ikat",
@@ -96,7 +103,8 @@
   "palette": [
    "#ece5de",
    "#fcfcfc"
-  ]
+  ],
+  "scale": "medium-scale moons 3-4 inches in rhythmic vertical rows"
  },
  {
   "id": "night-jungle",
@@ -110,7 +118,8 @@
    "#c4c4c4",
    "#797878",
    "#abaaaa"
-  ]
+  ],
+  "scale": "large-scale dense jungle motifs 8-12 inches, immersive full coverage"
  },
  {
   "id": "golden-pineapple",
@@ -124,7 +133,8 @@
    "#c0c0c0",
    "#999999",
    "#6c6c6c"
-  ]
+  ],
+  "scale": "medium-scale pineapples about 5 inches in a roomy offset grid"
  },
  {
   "id": "monstera-bungalow",
@@ -137,7 +147,8 @@
    "#fdfdef",
    "#d0e175",
    "#0a9059"
-  ]
+  ],
+  "scale": "large-scale leaves 10-14 inches, statement scale"
  },
  {
   "id": "painted-feathers",
@@ -149,7 +160,8 @@
    "#fefefe",
    "#d1b684",
    "#e2d4b5"
-  ]
+  ],
+  "scale": "medium-scale feathers 6-8 inches in flowing vertical bands"
  },
  {
   "id": "tidepool-bloom",
@@ -160,7 +172,8 @@
   "palette": [
    "#dae5e9",
    "#f8fbfc"
-  ]
+  ],
+  "scale": "small-scale dense texture, clusters 2-3 inches"
  },
  {
   "id": "mod-orbit",
@@ -172,7 +185,8 @@
    "#ffffff",
    "#57bee7",
    "#94d6ef"
-  ]
+  ],
+  "scale": "small-scale tight geometric repeat, elements about 2 inches"
  },
  {
   "id": "lost-continent",
@@ -184,7 +198,8 @@
    "#ffffff",
    "#bae3dd",
    "#8897a3"
-  ]
+  ],
+  "scale": "medium-scale dinosaurs 5-7 inches, playful spacing"
  },
  {
   "id": "plumbline",
@@ -196,7 +211,8 @@
    "#ffffff",
    "#8ecbd6",
    "#cbe7eb"
-  ]
+  ],
+  "scale": "micro-scale geometric, elements under 1 inch, fine dense grid"
  },
  {
   "id": "lagoon-legends",
@@ -208,7 +224,8 @@
    "#ffffff",
    "#52eebf",
    "#93f4d7"
-  ]
+  ],
+  "scale": "medium-scale creatures 5-8 inches gliding across the repeat"
  },
  {
   "id": "fungi-skyline",
@@ -220,7 +237,8 @@
    "#e4f6fe",
    "#92acab",
    "#c9dddf"
-  ]
+  ],
+  "scale": "medium-to-large mushrooms of varying heights 4-10 inches, skyline rhythm"
  },
  {
   "id": "regatta-day",
@@ -234,7 +252,8 @@
    "#4d7e7b",
    "#91afad",
    "#739996"
-  ]
+  ],
+  "scale": "medium-scale boats 5-6 inches, calm even scatter"
  },
  {
   "id": "arcade-memory",
@@ -247,7 +266,8 @@
    "#7c8975",
    "#aab2a5",
    "#ced2cb"
-  ]
+  ],
+  "scale": "medium-scale devices 4-5 inches, even scatter"
  },
  {
   "id": "daily-dose",
@@ -260,7 +280,8 @@
    "#7d3055",
    "#185f4f",
    "#655a43"
-  ]
+  ],
+  "scale": "small-scale capsules about 2 inches in diagonal rhythm"
  },
  {
   "id": "circle-fields",
@@ -271,7 +292,8 @@
   "palette": [
    "#e1e1e1",
    "#fcfcfc"
-  ]
+  ],
+  "scale": "medium-scale concentric circles 3-6 inches overlapping"
  },
  {
   "id": "campfire-toile",
@@ -285,7 +307,8 @@
    "#e2e2e2",
    "#adadad",
    "#6d6d6d"
-  ]
+  ],
+  "scale": "classic toile scale: vignette scenes 6-8 inches"
  },
  {
   "id": "dream-clouds",
@@ -298,7 +321,8 @@
    "#b6b7b9",
    "#f4f4f4",
    "#818892"
-  ]
+  ],
+  "scale": "medium-scale clouds 4-6 inches, calm even spacing"
  },
  {
   "id": "bodega-cats",
@@ -311,6 +335,7 @@
    "#acb3bd",
    "#58646b",
    "#7d888f"
-  ]
+  ],
+  "scale": "small-to-medium motifs 3-4 inches, city-scatter layout"
  }
 ]
\ No newline at end of file
diff --git a/output/archive-v1/astral-tiger-v1-nano.png b/output/archive-v1/astral-tiger-v1-nano.png
index c5794a4..0b6765c 100644
Binary files a/output/archive-v1/astral-tiger-v1-nano.png and b/output/archive-v1/astral-tiger-v1-nano.png differ
diff --git a/output/archive-v1/galaxy-bots-v1-nano.png b/output/archive-v1/galaxy-bots-v1-nano.png
index 4b41007..b276720 100644
Binary files a/output/archive-v1/galaxy-bots-v1-nano.png and b/output/archive-v1/galaxy-bots-v1-nano.png differ
diff --git a/output/archive-v1/herbarium-press-v1-nano.png b/output/archive-v1/herbarium-press-v1-nano.png
index 5e860b0..b93c00f 100644
Binary files a/output/archive-v1/herbarium-press-v1-nano.png and b/output/archive-v1/herbarium-press-v1-nano.png differ
diff --git a/output/archive-v1/midnight-frequency-v1-nano.png b/output/archive-v1/midnight-frequency-v1-nano.png
index 2d4f714..b2e9bbb 100644
Binary files a/output/archive-v1/midnight-frequency-v1-nano.png and b/output/archive-v1/midnight-frequency-v1-nano.png differ
diff --git a/output/archive-v1/robot-parade-v1-nano.png b/output/archive-v1/robot-parade-v1-nano.png
index 99c50ea..733d892 100644
Binary files a/output/archive-v1/robot-parade-v1-nano.png and b/output/archive-v1/robot-parade-v1-nano.png differ
diff --git a/scripts/batch_gen.py b/scripts/batch_gen.py
index e2e202b..6334edf 100644
--- a/scripts/batch_gen.py
+++ b/scripts/batch_gen.py
@@ -33,21 +33,32 @@ def hexname(h):
     shade = "pale " if l > 190 else "deep " if l < 90 else ""
     return shade + hue
 
-def full_prompt(brief, engine):
+def full_prompt(brief, engine, variation=""):
+    p = brief["prompt"]
     pal = brief.get("palette")
-    if not pal:
-        return brief["prompt"]
-    if engine == "nano":
-        clause = ("; palette strictly limited to these exact colors, matching a "
+    if pal:
+        if engine == "nano":
+            p += ("; palette strictly limited to these exact colors, matching a "
                   "reference colorway: " + ", ".join(pal))
-    else:
-        names = []
-        for h in pal:
-            n = hexname(h)
-            if n not in names:
-                names.append(n)
-        clause = "; limited color palette of only: " + ", ".join(names)
-    return brief["prompt"] + clause
+        else:
+            names = []
+            for h in pal:
+                n = hexname(h)
+                if n not in names:
+                    names.append(n)
+            p += "; limited color palette of only: " + ", ".join(names)
+    if brief.get("scale"):
+        p += "; motif scale: " + brief["scale"]
+    if variation:
+        p += "; " + variation
+    return p
+
+NANO_VARIATIONS = {
+    "v1": "",
+    "v4": "alternate take: different individual characters and poses, same style and layout logic",
+    "v5": "alternate take: different composition arrangement, same motifs family and style",
+    "v6": "alternate take: refined minimal interpretation, slightly sparser layout, same style",
+}
 
 def load_designs():
     try:
@@ -82,16 +93,17 @@ def main():
 
     if mode in ("nano", "all"):
         for b in briefs:
-            fname = f"{b['id']}-v1-nano.png"
-            path = os.path.join(OUT, fname)
-            if os.path.exists(path):
-                save_variant(b, "nano-banana", fname); continue
-            print(f"[nano] {b['id']}")
-            if run([sys.executable, os.path.join(SCRIPTS, "nano_gen.py"),
-                    full_prompt(b, "nano"), path], 180):
-                save_variant(b, "nano-banana", fname)
-                nano_done += 1
-            time.sleep(2)
+            for ver, variation in NANO_VARIATIONS.items():
+                fname = f"{b['id']}-{ver}-nano.png"
+                path = os.path.join(OUT, fname)
+                if os.path.exists(path):
+                    save_variant(b, "nano-banana", fname); continue
+                print(f"[nano {ver}] {b['id']}")
+                if run([sys.executable, os.path.join(SCRIPTS, "nano_gen.py"),
+                        full_prompt(b, "nano", variation), path], 180):
+                    save_variant(b, "nano-banana", fname)
+                    nano_done += 1
+                time.sleep(2)
         print(f"nano complete: {nano_done} new images, est ${nano_done * 0.039:.2f}")
 
     if mode in ("sdxl", "all"):

← c91e30a palette-lock: extract colorway palettes from originals, wire  ·  back to Wild Wallcoverings  ·  auto-save: 2026-07-22T12:44:11 (2 files) — data/designs.json d55803e →