← back to Pattern Vault
fernwick: wire trending-dw GAP lanes into the generator (--lanes trending|both)
54f80259abdaaff26350c9972f83ba777628dea1 · 2026-07-08 08:52:05 -0700 · Steve Abrams
Connects the intelligence board to the generation pipeline: gen_daily.py can now generate in
the 8 settlement-safe GAP lanes that trending.designerwallcoverings.com flags as SELLING but
thin in our catalog (Art-Deco Geometric, Animal-Skin Print, Texture-Effect, Boho, Paisley/
Nomadic, Abstract Blur, Retro Geometric, Mushroom/Goblincore) — 'make what's actually selling'
instead of only whimsical. Tropical deliberately EXCLUDED (closest to the DW settlement bone).
--lanes whimsical (default) | trending | both. Records lane per design. Verified end-to-end:
2 trending designs generated + settlement-passed (Boho kilim + rose-blush tiger stripes = the
board's #1 animal-print-with-a-twist pick), actual cost $0.0063.
Files touched
M whimsical-compare/daily/scripts/gen_daily.py
Diff
commit 54f80259abdaaff26350c9972f83ba777628dea1
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Jul 8 08:52:05 2026 -0700
fernwick: wire trending-dw GAP lanes into the generator (--lanes trending|both)
Connects the intelligence board to the generation pipeline: gen_daily.py can now generate in
the 8 settlement-safe GAP lanes that trending.designerwallcoverings.com flags as SELLING but
thin in our catalog (Art-Deco Geometric, Animal-Skin Print, Texture-Effect, Boho, Paisley/
Nomadic, Abstract Blur, Retro Geometric, Mushroom/Goblincore) — 'make what's actually selling'
instead of only whimsical. Tropical deliberately EXCLUDED (closest to the DW settlement bone).
--lanes whimsical (default) | trending | both. Records lane per design. Verified end-to-end:
2 trending designs generated + settlement-passed (Boho kilim + rose-blush tiger stripes = the
board's #1 animal-print-with-a-twist pick), actual cost $0.0063.
---
whimsical-compare/daily/scripts/gen_daily.py | 58 +++++++++++++++++++++++++---
1 file changed, 52 insertions(+), 6 deletions(-)
diff --git a/whimsical-compare/daily/scripts/gen_daily.py b/whimsical-compare/daily/scripts/gen_daily.py
index eeb9c41..44efb03 100755
--- a/whimsical-compare/daily/scripts/gen_daily.py
+++ b/whimsical-compare/daily/scripts/gen_daily.py
@@ -51,6 +51,43 @@ PALETTES = ["sage, cream, terracotta", "dusty blue, ochre, ivory", "blush pink,
"forest green, rust, bone", "peach, mint, taupe", "navy, marigold, linen",
"plum, sage, apricot"]
+# ── TRENDING GAP LANES ─────────────────────────────────────────────────────────
+# Mapped from trending.designerwallcoverings.com's GAP_STYLES (styles that are demonstrably
+# SELLING across Etsy/Spoonflower/Patternbank/retail but thin in our catalog). Generating in
+# these lanes = "make what's actually selling", not just whimsical. Settlement-safe by
+# construction: NO directional-leaf tropical foliage, NO birds/butterflies/bananas/grapes
+# (the vision check still enforces the 4 banned motifs per output). Tropical is deliberately
+# EXCLUDED — it sits closest to the DW settlement bone; route tropical through the full
+# settlement gate separately, never the daily auto-drop.
+TREND_LANES = {
+ "Art-Deco Geometric": {"style": "art-deco geometric", "desc": "bold graphic gilded and luxe",
+ "motifs": ["fan and sunburst motifs", "stepped chevron zigzags", "scalloped shell arcs", "metallic linear grid"],
+ "palettes": ["chartreuse, black, gold", "emerald, brass, cream", "navy, gold, black"]},
+ "Animal-Skin Print": {"style": "animal-skin print", "desc": "chic maximalist with a modern colour twist",
+ "motifs": ["cheetah spots", "tiger stripes", "zebra stripes", "leopard rosettes", "snakeskin scales"],
+ "palettes": ["rose blush, cream, charcoal", "verdant green, black", "claret, sand, ink"]},
+ "Texture-Effect": {"style": "textured wallcovering effect", "desc": "tactile tonal and sophisticated",
+ "motifs": ["grasscloth woven texture", "linen weave texture", "plaster limewash texture", "tweed fabric texture"],
+ "palettes": ["greige, oatmeal, stone", "mushroom, cream", "sage, taupe"]},
+ "Boho": {"style": "artisanal boho block-print", "desc": "earthy handcrafted and global",
+ "motifs": ["block-print medallions", "folk geometric borders", "mudcloth marks", "kilim diamonds"],
+ "palettes": ["terracotta, indigo, cream", "rust, ochre, sand"]},
+ "Paisley / Nomadic": {"style": "nomadic paisley", "desc": "intricate decorative and heritage",
+ "motifs": ["kashmiri paisley boteh", "persian teardrop paisley", "mandala medallions"],
+ "palettes": ["claret, indigo, gold", "plum, teal, cream"]},
+ "Abstract Blur": {"style": "abstract watercolor", "desc": "soft ethereal ombre and dreamy",
+ "motifs": ["ombre gradient washes", "inky bleed marks", "marbled fluid swirls", "soft-focus colour drifts"],
+ "palettes": ["blush, taupe, grey", "dusty blue, ivory", "sage, sand"]},
+ "Retro Geometric": {"style": "retro mid-century geometric", "desc": "nostalgic bold and structured",
+ "motifs": ["interlocking semicircles", "atomic starbursts", "mod circle grids", "totem shapes"],
+ "palettes": ["mustard, teal, cream", "olive, rust, bone"]},
+ "Mushroom / Goblincore":{"style": "goblincore woodland", "desc": "whimsical cozy and folkloric",
+ "motifs": ["mushroom clusters and ferns", "toadstool rings and moss", "snails and pebbles among fungi"],
+ "palettes": ["forest green, brown, cream", "moss, plum, ochre"]},
+}
+# --lanes: whimsical (default, the original pools) | trending (GAP lanes) | both (50/50 mix)
+LANES = argv("--lanes", "whimsical")
+
def http_json(url, payload=None, headers=None, timeout=180):
hdr = {"User-Agent": UA, "Content-Type": "application/json"}
if headers: hdr.update(headers)
@@ -99,11 +136,20 @@ attempts = 0
i = 0
while len(designs) < N and attempts < N * 3:
attempts += 1
- style = random.choice(STYLES); motif = random.choice(MOTIFS); palette = random.choice(PALETTES)
- prompt = (f"Original hand-illustrated {style} wallpaper: {motif}, whimsical and charming, playful naive "
- f"hand-drawn linework, our own artistic invention, not a copy of any existing design. "
- f"seamless repeating wallpaper pattern, tileable, flat lay, even lighting, high-end wallcovering. "
- f"Colorway: {palette}.")
+ use_trend = LANES == "trending" or (LANES == "both" and random.random() < 0.5)
+ if use_trend:
+ lane_label = random.choice(list(TREND_LANES)); L = TREND_LANES[lane_label]
+ style = L["style"]; motif = random.choice(L["motifs"]); palette = random.choice(L["palettes"])
+ prompt = (f"Original {style} wallpaper: {motif}, {L['desc']}, our own artistic invention, "
+ f"not a copy of any existing design. seamless repeating wallpaper pattern, tileable, "
+ f"flat lay, even lighting, high-end wallcovering. Colorway: {palette}.")
+ else:
+ lane_label = "whimsical"
+ style = random.choice(STYLES); motif = random.choice(MOTIFS); palette = random.choice(PALETTES)
+ prompt = (f"Original hand-illustrated {style} wallpaper: {motif}, whimsical and charming, playful naive "
+ f"hand-drawn linework, our own artistic invention, not a copy of any existing design. "
+ f"seamless repeating wallpaper pattern, tileable, flat lay, even lighting, high-end wallcovering. "
+ f"Colorway: {palette}.")
seed = SEED_BASE + attempts * 13
pred = sdxl(prompt, seed)
secs = (pred.get("metrics") or {}).get("predict_time", 0) or 0
@@ -121,7 +167,7 @@ while len(designs) < N and attempts < N * 3:
continue
t = title(style, motif, len(designs))
designs.append({"n": len(designs)+1, "file": dest, "title": t, "style": style,
- "motif": motif, "palette": palette, "prompt": prompt,
+ "motif": motif, "palette": palette, "lane": lane_label, "prompt": prompt,
"settlement": "OK", "predict_secs": round(secs, 1)})
print(f"[{len(designs)}/{N}] {t}", file=sys.stderr)
time.sleep(0.6)
← 3f91374 fernwick: surface uploader-DEGRADED in the daily email (both
·
back to Pattern Vault
·
fernwick: daily drop generates whimsical+trending mix (--lan db2ebec →