← back to Dw Domain Fleet
Unique clean heroes per site: global disjoint hero-allocation manifest
52573cc0c7b2194398338cd3377e00a8559b38fe · 2026-06-01 13:32:38 -0700 · Steve Abrams
Every generic-fleet site previously derived its hero from the same
newest-niche slice; thin-niche sites fell back to the shared all-wallcovering
pool, so 18+ sites rendered the identical lead image (43 sites used only 67
unique images across 344 hero slots).
scripts/gen-hero-allocation.js now precomputes data/hero-allocation.json — a
globally-disjoint, niche-relevant, clean (https, non-swatch) set of 8 heroes
per site, distinct base patterns within each rotation. server.js reads it.
Result: 344/344 hero slots unique, zero cross-site duplicates.
Files touched
A data/hero-allocation.jsonA scripts/gen-hero-allocation.jsM server.js
Diff
commit 52573cc0c7b2194398338cd3377e00a8559b38fe
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Jun 1 13:32:38 2026 -0700
Unique clean heroes per site: global disjoint hero-allocation manifest
Every generic-fleet site previously derived its hero from the same
newest-niche slice; thin-niche sites fell back to the shared all-wallcovering
pool, so 18+ sites rendered the identical lead image (43 sites used only 67
unique images across 344 hero slots).
scripts/gen-hero-allocation.js now precomputes data/hero-allocation.json — a
globally-disjoint, niche-relevant, clean (https, non-swatch) set of 8 heroes
per site, distinct base patterns within each rotation. server.js reads it.
Result: 344/344 hero slots unique, zero cross-site duplicates.
---
data/hero-allocation.json | 1 +
scripts/gen-hero-allocation.js | 149 +++++++++++++++++++++++++++++++++++++++++
server.js | 11 ++-
3 files changed, 160 insertions(+), 1 deletion(-)
diff --git a/data/hero-allocation.json b/data/hero-allocation.json
new file mode 100644
index 0000000..014b940
--- /dev/null
+++ b/data/hero-allocation.json
@@ -0,0 +1 @@
+{"etciemurals":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DD113031-0_e50eb14d-5ce6-431d-b5e6-6343a9ea4b16.jpg?v=1776284867","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/31c7bb419863b8f5158cf282db49a776_d28c0fcb-c884-4c0f-ac9d-dbd1c4398fa1.jpg?v=1776187457","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/84533d014611f7e604f4a74e41ae1bd2.jpg?v=1776041525","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/4e3f52b3077dce5bf70e1ac41050d703.jpg?v=1776041521","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/3c91202e14be644227dab95f4b5c020c.jpg?v=1776041264","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/9b11060113f560cb4e7ea248c705a971.jpg?v=1776041213","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/891c69893604d252ee89526d8f14f5fa.jpg?v=1776041193","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/08ea0ddbf289106831d1ec3a694d324f.jpg?v=1776041158"],"restaurantmurals":["https://cdn.shopify.com/s/files/1/0015/4117/7456/products/ScreenShot2022-07-22at10.16.45AM.png?v=1658510339","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/ScreenShot2022-07-22at10.13.44AM.png?v=1658510058","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/ScreenShot2022-07-22at10.10.04AM.png?v=1658509920","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/ScreenShot2022-07-22at10.05.36AM.png?v=1658509656","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/ScreenShot2022-07-22at10.01.24AM.png?v=1658509338","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/LL4785_1348d508-9632-487e-861d-e7112b7886e7.jpg?v=1740774385","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/Laura_Ashley_Wallpaper_LAW_113394_2.jpg?v=1646421170","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/658-31_image1_d4c32df8-326d-4515-95e2-24f099982334.jpg?v=1646104844"],"printmurals":["https://cdn.shopify.com/s/files/1/0015/4117/7456/products/6dd33f19b8ddfb61c703e1bfdf8d8a7d.jpg?v=1572309075","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/20319258.jpg?v=1758052023","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/tre500-sample-tommy-s-trees-wallcovering-hollywood-wallcoverings.jpg?v=1775735302","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/120_6023S_CS_e697010a-8303-47bd-8851-6e86dec2c192.jpg?v=1777020006","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/W0202_01_CAC.jpg?v=1777020004","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/CCP-2347_16.jpg?v=1777019997","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/118_17039_CS_179c48a0-c40d-455e-b819-0f8f9636efda.jpg?v=1776818915","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/W0201_02_CAC.jpg?v=1776818912"],"designermagnetics":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DE509__silver.jpg?v=1775511844","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DE520__silver.jpg?v=1775511840","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0091557_baldwin-pearl-shibori-stripe-wallpaper.jpg?v=1775165236","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0091749_sheehan-stone-faux-grasscloth-wallpaper.jpg?v=1775165220","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0091617_presley-coffee-tessellation-wallpaper.jpg?v=1775165173","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0114093_tortuga-gold-coral-weave-wallpaper.jpg?v=1775165046","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0088942_getty-cream-jungle-damask-wallpaper-by-scott-living.jpg?v=1775165018","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0088787_holmby-grey-brushstroke-zigzag-wallpaper-by-scott-living.jpg?v=1775165002"],"asseeninmovies":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/img_88aaf127-9911-47d7-b8a2-4ff0a20c8d61.jpg?v=1775512372","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/img_1009e1e7-76db-4482-bc77-5e26250422cf.jpg?v=1775512360","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DE534__silver.jpg?v=1775511879","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DE528__white.jpg?v=1775511868","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DE512__white.jpg?v=1775511855","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DE521__gold.jpg?v=1775511838","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0091545_baldwin-teal-shibori-stripe-wallpaper.jpg?v=1775165232","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/0091753_sheehan-gold-faux-grasscloth-wallpaper.jpg?v=1775165210"],"grassclothwallcovering":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/gatehouse-oat_grass.jpg?v=1777480721","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwq-52979-sample-flagler-embossed-durable-hollywood-wallcoverings.jpg?v=1775713355","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/XWQ-52941-sample-clean.jpg?v=1774481759","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwq-52924-sample-st-joseph-embossed-contemporary-durable-vinyl-hollywood-wallcoverings.jpg?v=1775734507","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xws-52895-sample-st-lawrence-embossed-contemporary-durable-vinyl-hollywood-wallcoverings.jpg?v=1775734578","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/como-silver_and_gold.jpg?v=1777480713","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwr-52788-sample-steuben-embossed-vertical-durable-vinyl-hollywood-wallcoverings.jpg?v=1775734830","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwr-52698-sample-vernon-durable-hollywood-wallcoverings.jpg?v=1775735785"],"handmadewallcovering":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Navarre_A202-357-Night_Sky.jpg?v=1773880204","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Lurra_A199-805-Kala_Namak.jpg?v=1773880133","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Burnished_Silk_A198-763-Marigold.jpg?v=1773880118","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Astoria_A197-785-Savanna.jpg?v=1773880080","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Parallel_A195-537-Sterling.jpg?v=1773879998","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Capri_A192-566-Tribal_Silver.jpg?v=1773852689","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Virtual-Vertigo_Laguna.jpg?v=1772656772","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Tekloom-Tumbleweed-Slate_1601299332.jpg?v=1772656555"],"naturalwalltextures":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58135-sample-jutely-vinyl-hollywood-wallcoverings.jpg?v=1775720432","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58104-sample-gundelson-gunny-sack-vinyl-hollywood-wallcoverings.jpg?v=1775715287","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58097-sample-sophie-s-scrim-hollywood-wallcoverings.jpg?v=1775734363","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/XJT-44460-clean.jpg?v=1774479167","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xsc-44289-sample-seeing-circles-hollywood-wallcoverings.jpg?v=1775732882","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xcs-44053-sample-carved-squares-hollywood-wallcoverings.jpg?v=1775707232","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xbg-44017-sample-baja-grasscloth-vinyl-hollywood-wallcoverings.jpg?v=1775701993","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xbg-44000-sample-test1-hollywood-wallcoverings.jpg?v=1775735292"],"montereywallpaper":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/prelude-opera_white.jpg?v=1777480571","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwh-52365-sample-pearl-bay-vertical-faux-durable-hollywood-wallcoverings.jpg?v=1775728982","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/passage-bittersweet.jpg?v=1777480527","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nest-roost.jpg?v=1777480492","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/mindscape-hawthorn.jpg?v=1777480469","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwf-52260-sample-lafayette-modern-embossed-durable-hollywood-wallcoverings.jpg?v=1775721117","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwf-52245-sample-jonesville-contemporary-durable-hollywood-wallcoverings.jpg?v=1775720092","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwf-52230-sample-jones-faux-grass-durable-hollywood-wallcoverings.jpg?v=1775720010"],"carmelwallpaper":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73107-sample-clean.jpg?v=1774483471","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73088-sample-clean.jpg?v=1774483433","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73080-sample-clean.jpg?v=1774483380","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73072-sample-clean.jpg?v=1774483339","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73063-sample-clean.jpg?v=1774483291","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73060-sample-clean.jpg?v=1774483273","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73054-sample-clean.jpg?v=1774483234","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73050-sample-clean.jpg?v=1774483223"],"malibuwallpaper":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72006-sample-clean.jpg?v=1774483931","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72005-sample-clean.jpg?v=1774483926","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73175-sample-clean.jpg?v=1774483897","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73146-sample-clean.jpg?v=1774483724","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73144-sample-clean.jpg?v=1774483714","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73140-sample-clean.jpg?v=1774483694","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73136-sample-clean.jpg?v=1774483661","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/HLW-73133-sample-clean.jpg?v=1774483643"],"philliperomano":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/New_Wave_Darby_Foliage.jpg?v=1772568413","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Galleria-SF_Dapper_Vino.jpg?v=1772568398","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Verdi_Velvet_Crushed_Wheat_a684e433-ed8b-480d-955f-5cfba84828b0.jpg?v=1772568365","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Verdi_Velvet_Crushed_Mocha_74b8bb69-cff8-4a6d-a666-b1939f6c7320.jpg?v=1772568341","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Virtual_Crosshatch_Surf.jpg?v=1772568292","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Nuvtex_Croco_White.jpg?v=1772568270","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/76b4c0554cd76e4ab7ff1fef509c6447.jpg?v=1572310445","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/4aac08ad81e9b993ab3fe4f44f681cc3_2c3004ff-d9f8-4bf4-81e1-7d05a4db0c30.jpg?v=1572310424"],"barwallpaper":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ZIRO-DRIVE-CURRY.jpg?v=1772568538","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Dimensional_Divergent_Palladium.jpg?v=1772568517","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Dimensional_Divergent_Elk.jpg?v=1772568507","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Skintex_Distressd_Vineyard.jpg?v=1772568499","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Skintex_Distressd_English_Tan.jpg?v=1772568477","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Tekloom_Dazzle_Tuxedo.jpg?v=1772568461","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/New_Wave_Darby_Spice.jpg?v=1772568436","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Galleria-SF_Dapper_Tart.jpg?v=1772568395"],"wallpaperfromthe80s":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72196-sample-clean.jpg?v=1774484754","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72157-sample-clean.jpg?v=1774484607","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72145-sample-clean.jpg?v=1774484555","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72136-sample-clean.jpg?v=1774484525","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72135-sample-clean.jpg?v=1774484520","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72119-sample-clean.jpg?v=1774484466","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72097-sample-clean.jpg?v=1774484388","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72082-sample-clean.jpg?v=1774484336"],"hollywoodwallcovering":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xhw-2010424-sample-hollywood-contemporary-cobblestone-hollywood-wallcoverings.jpg?v=1775717225","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/tulle-silken.jpg?v=1777481107","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xhw-2010406-sample-hollywood-tailored-hollywood-wallcoverings.jpg?v=1775719008","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xhw-2010400-sample-hollywood-luxury-solids-hollywood-wallcoverings.jpg?v=1775717980","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xhw-2010391-sample-hollywood-urban-abstract-hollywood-wallcoverings.jpg?v=1775719179","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/surf-volcanic_8ed2dfa2-6ed3-4af5-a11c-4ca6aae56c22.jpg?v=1777481090","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xhw-2010355-sample-hollywood-faux-silk-weave-hollywood-wallcoverings.jpg?v=1775717693","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/selenite-millerite.jpg?v=1777481058"],"cfafabrics":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/6aaa92d98ce154f4eb6902902d268e40.png?v=1775520452","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/tlt-5957.jpg?v=1762311292","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/tgm-5980.jpg?v=1762311113","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/stl-6385.jpg?v=1762310976","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/srp-5307.jpg?v=1762309315","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/rpl-6326.jpg?v=1762305361","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ril-6370.jpg?v=1762304529","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/reh-5513.jpg?v=1762304249"],"fabricfridays":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-t70644.jpg?v=1775156038","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-t70643.jpg?v=1775156035","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-t70642.jpg?v=1775156027","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-t70641.jpg?v=1775155980","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-t424.jpg?v=1775152058","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-t70634.jpg?v=1775155977","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-t70633.jpg?v=1775155968","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-t70632.jpg?v=1775155967"],"restaurantfabrics":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Fairfax-Teal-Tropique-1024x914.jpg?v=1775009772","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Rowan-Birch.jpg?v=1775009726","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Rosario-Ripple.jpg?v=1775009722","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Fairbanks-Igneous-1024x878.jpg?v=1775009718","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Roquet-Jungle-Cruise.jpg?v=1775009704","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Roosevelt-Pipefish.jpg?v=1775009700","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Etro-Oahu-Shalina-Ivory_0c8fee9a-ff6c-4c5a-8c61-49d43ad29293.jpg?v=1775009696","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Rio-Levain.jpg?v=1775009692"],"flocked":["https://cdn.shopify.com/s/files/1/0015/4117/7456/products/583-88_image1_5a69dd41-45e6-4809-845a-770e7aceb0db.jpg?v=1646104605","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/583-11_image1_a1e4c6ba-d7f5-4575-a8c4-b6acaa06f7e8.jpg?v=1646104600","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/583-03_image1_bd47a72a-dc1b-47a4-9937-35ea24292bfe.jpg?v=1646104595","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/549-76_image1_911a0db4-191c-4f2d-a772-6b6c3b101725.jpg?v=1646104587","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/517-71_image1_cc0b4019-5bbe-4b96-8cc4-aa36b6bc6f80.jpg?v=1646104561","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/516-02_image1_b63bc77c-4a29-418b-ac1f-25ccfc0543c6.jpg?v=1646104543","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/493-31_image1_acb5a870-ef1a-4745-b552-49b73f247763.jpg?v=1646104521","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/493-27_image1_66fba548-fa0b-4f01-8deb-32823f2d94cc.jpg?v=1646104517"],"patterndesignlab":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwq-52978-sample-flagler-embossed-durable-hollywood-wallcoverings.jpg?v=1775713351","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/XWQ-52905-sample-clean.jpg?v=1774481692","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/XWQ-52904-sample-clean.jpg?v=1774481680","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/como-biker_black.jpg?v=1777480696","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwp-52682-sample-montgomery-metallic-cubed-durable-hollywood-wallcoverings.jpg?v=1775726398","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/XWP-52658-sample-clean.jpg?v=1774481525","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwp-52645-sample-monterey-coast-durable-hollywood-wallcoverings.jpg?v=1775726352","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/tulum-orchid.jpg?v=1777480658"],"traditionalwhimsy":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Tekloom_Elevate_Flax.jpg?v=1772568630","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Tekloom_Elevate_Azure.jpg?v=1772568627","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Verdi_Velvet_Dynasty_Icecap.jpg?v=1772568600","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Nuvtex_Dundee_Truffle.jpg?v=1772568593","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ZIRO-DRIVE-PAPYRUS.jpg?v=1772568567","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Skintex_Distressd_Sepia.jpg?v=1772568494","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Skintex_Distressd_Cedar.jpg?v=1772568474","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Tekloom_Dazzle_Pumpkin.jpg?v=1772568459"],"blankstocklining":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWBM-260148.jpg?v=1773968869","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWBM-260147.jpg?v=1773968864","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWBM-260146.jpg?v=1773968860","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWBM-260145.jpg?v=1773968856","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWBM-260144.jpg?v=1773968851","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWBM-260143.jpg?v=1773968846","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWBM-260142.jpg?v=1773968841","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWBM-260141.jpg?v=1773968837"],"asseeninhotels":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/XHW-2010370-sample-clean.jpg?v=1774482946","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/selenite-celestine_05a0733d-bc9a-4b5a-8c9e-2bd7068d81af.jpg?v=1777481406","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/rivoli-perivale.jpg?v=1777481037","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/luca-palette.jpg?v=1777481023","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/intarsia-inlayers.jpg?v=1777481008","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/harrison-grand_banks.jpg?v=1777480988","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/crystalline-hearth.jpg?v=1777480963","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/bentley-bespoke.jpg?v=1777480950"],"commercialsalesreps":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/rpl-6327.jpg?v=1762305398","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ros-4146.jpg?v=1762304939","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ron-3345.jpg?v=1762304906","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ril-6373.jpg?v=1762304635","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/reh-5517.jpg?v=1762304387","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/reh-5510.jpg?v=1762304144","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/qnt-5554.jpg?v=1762303767","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/qnt-5546.jpg?v=1762303486"],"hospitalitysalesagency":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwa-52086-sample-canal-damask-durable-vinyl-hollywood-wallcoverings.jpg?v=1775707079","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xvg-49332-sample-oxford-type-ii-vinyl-hollywood-wallcoverings.jpg?v=1775728334","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/belize-bay_cedar_0a69308f-c5ac-4cd0-b24a-6ebafa927971.jpg?v=1777480349","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/malachite-hematite.jpg?v=1777480051","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/XQR-48589-sample-clean.jpg?v=1774480668","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xqq-48575-sample-ventnor-vinyl-hollywood-wallcoverings.jpg?v=1775735727","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/XQM-48545-sample-clean.jpg?v=1774480588","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xqe-48460-sample-sudbury-type-ii-vinyl-hollywood-wallcoverings.jpg?v=1775735108"],"thehotelwallpaper":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Tekloom_Malacca_Lark.jpg?v=1772569663","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Galleria-SF_Madison_Seaside_299b91f1-2f79-46f9-b4e9-d042552dc27c.jpg?v=1772569647","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/CROCA-93018-SAMPLE-clean.jpg?v=1774486112","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/amami-indigo.jpg?v=1761537957","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/alys-texture-ws-split-rock.jpg?v=1761510880","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/novasuede-silver.jpg?v=1761252163","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/l521-25_2cfc99f5-b8c0-40a4-bc85-e014a7440d16.jpg?v=1751950671","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/l521-63_c0abe0b3-f842-4eac-b577-8f7edc802510.jpg?v=1751950673"],"wallpaperpurchasing":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72225-sample-clean.jpg?v=1774484809","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72220-sample-clean.jpg?v=1774484785","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72199-sample-clean.jpg?v=1774484769","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72190-sample-clean.jpg?v=1774484734","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72179-sample-clean.jpg?v=1774484690","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72156-sample-clean.jpg?v=1774484602","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72144-sample-clean.jpg?v=1774484550","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72134-sample-clean.jpg?v=1774484515"],"1800wallcoverings":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-t34036.jpg?v=1775149508","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T89117_05824b42-6a54-44fb-862b-3f45bf733ee8.jpg?v=1733894474","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T89115.jpg?v=1762227542","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T89174_01ea5eef-fe47-4b07-8513-a6dec717dc46.jpg?v=1733894481","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T89164_ad6f942b-7e57-46e5-8bfb-4dfb81667632.jpg?v=1733894483","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T89160_7aaa0d0a-7bb0-402d-9cc3-756200a6cd0f.jpg?v=1733894485","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T89172_95b5fb1a-0f81-47af-8d3f-f49dd6734536.jpg?v=1733894490","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T89124_9b8d373f-6f65-4fc8-8452-343f84bdae20.jpg?v=1733894501"],"asseeninla":["https://cdn.shopify.com/s/files/1/0015/4117/7456/products/0ba8dc45ab39d2f32b3f0bfa0817fa31.jpg?v=1572309972","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/6145f3b70af531e9dcd455c46896de57.jpg?v=1572309972","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/676bbda185aff8d8334ca60778f6ad73.jpg?v=1572309972","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/9edb56a0882bceeb7a1de52d904e9f5f.jpg?v=1572309972","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/4c13b4bc14d3ad10a9d9aa1b273cfbad.jpg?v=1572309972","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/85c1b78ea89d083459d6980356d20ea4.jpg?v=1572309972","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/6c36808ec780b4d82cb96481ad0b8cb5.jpg?v=1572309972","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/b854d4791fa3127e5b370e09fb0a06cb.jpg?v=1572309972"],"asseeninshowrooms":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xhw-201098-sample-hollywood-and-western-hollywood-wallcoverings.jpg?v=1775716918","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/bentley-monarch.jpg?v=1777480949","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xhw-201070-sample-hollywood-sunset-stripe-hollywood-wallcoverings.jpg?v=1775718977","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/avant-cassandre_cb73fdc5-c20a-43ab-863d-b8a9f306a225.jpg?v=1777481461","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xhw-201045-sample-hollywood-and-vine-hollywood-wallcoverings.jpg?v=1775716881","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xhw-20109-sample-hollywood-sunset-scroll.jpg?v=1775718880","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/IKSEL-clean.jpg?v=1774482697","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xhw-2010443-sample-hollywood-antique-wood-hollywood-wallcoverings.jpg?v=1775716953"],"classawallcovering":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Freya-Crystal-Ball-1024x914.jpg?v=1775010185","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Sierra-View.jpg?v=1775010178","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Franciscan-Wheatfield-1024x914.jpg?v=1775010174","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/SHILOH-STONE-NESSA-SANDSTONE.jpg?v=1775010133","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Fonda-Silver-Leaf-1024x914.jpg?v=1775010128","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Shelby-Stripe-Delight.jpg?v=1775010110","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Shane-Boomerang.jpg?v=1775010107","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Flynn-Wirework-1024x914.jpg?v=1775010103"],"commercialwallcovering":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/e1175daca55ee8fb67393d08420a4c9b.png?v=1775519649","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/zig-8856.jpg?v=1762312845","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/wwdf-223f.jpg?v=1762312810","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WolfGordonWallcovering_DWWG_wwdf-200.jpg?v=1733871990","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/wvf-119f.jpg?v=1762312054","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/wvf-100f.jpg?v=1762312019","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/vrl009.jpg?v=1762311911","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WolfGordonWallcovering_DWWG_VRL002.jpg?v=1733872014"],"fireratedwallcovering":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWX-58043-sample-clean_ab01e0c2-8c06-4406-8520-fb713e4bccf7.jpg?v=1774479267","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWX-58024-sample-clean_209db010-69fb-4a70-b9bf-65623c51da80.jpg?v=1774479263","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwx-58012-sample-crushed-costoluto-vinyl-hollywood-wallcoverings.jpg?v=1775709706","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fgb-110-sample-faux-glass-bead-wallpaper.jpg?v=1775711848","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/54ec2c0de6e6c124180d2d67c1b964cc.jpg?v=1572309270","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/a87c730d024d36bc94207188b572c712.jpg?v=1572309257","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/CROCA-93033-sample-clean_bf3508a7-0c61-4473-ac17-b7e38526c215.jpg?v=1774479241","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xtt-44472-sample-tony-s-thick-embossed-vinyl-hollywood-wallcoverings.jpg?v=1775735340"],"roomsettings":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MW170-01-fusuma-wallcovering-parchment_01.jpg?v=1776398815","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MW169-03-boheme-wallcovering-paprika_01.jpg?v=1776398789","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MW166-02-quatro-wallcovering-harvest_00.jpg?v=1776398762","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MW165-01-tressage-wallcovering-bark_01.jpg?v=1776398735","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MW164-03-evoke-wallcovering-indigo_01.jpg?v=1776398708","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MW163-01-marelle-wallcovering-jasper-white_01.jpg?v=1776398680","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MW162-04-motif-wallcovering-typhoon_01.jpg?v=1776398652","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/MW146-01-plait-wallcovering-bark_01.jpg?v=1776398626"],"sheltermagazines":["https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T41111_1f573b0e-8c44-48c9-9b04-6eb5cca542c0.jpg?v=1733893672","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T41109_631f6eea-8921-4793-8f87-6f4e651ce542.jpg?v=1733893673","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwtt-71640-designer-wallcoverings-los-angeles-swatch-spin.gif?v=1771175709","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T41199_55cff5a9-2eba-4777-a471-ce5529190ccf.jpg?v=1733893679","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T41198_064e13fe-492d-4303-a649-3bd59dbd9b68.jpg?v=1733893681","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T41197_06f8c293-718c-4f59-951e-a1784da43605.jpg?v=1733893682","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T41194_e0651d5f-498c-4cdd-8c59-77f4887c5f45.jpg?v=1733893685","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/dwtt-71630-designer-wallcoverings-los-angeles-swatch-spin.gif?v=1771175657"],"specifywallpaper":["https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WolfGordonWallcovering_DWWG_ad9500.jpg?v=1733874163","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/act-5081.jpg?v=1762283678","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/abs-5666.jpg?v=1762357693","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/RobertoCavalliWallpaper_dwrc18026.jpg?v=1587153861","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/SC_0001WP88358.jpg?v=1745345977","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WTW0454FIRE.jpg?v=1745346314","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WTT661540.jpg?v=1745346588","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/CL_0004WP36408_8614a87f-52a0-4f58-9e3b-7230fa7ed384.jpg?v=1745348471"],"stevenabramsphotography":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fdn-5412.jpg?v=1762294570","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/fdn-5411.jpg?v=1762294536","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/QNT-5548.webp?v=1762294323","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WolfGordonWallcovering_DWWG_em11384b.jpg?v=1733873260","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WolfGordonWallcovering_DWWG_em10292r.jpg?v=1733873263","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/em10292r.jpg?v=1762294246","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WolfGordonWallcovering_DWWG_em10290r.jpg?v=1733873267","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WolfGordonWallcovering_DWWG_em10289r.jpg?v=1733873270"],"unitedstateswallpaper":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T89177.jpg?v=1762227888","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/room-living_room-t34038.jpg?v=1775149519","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T89141_096396d1-1d90-447f-b939-9bdb53843878.jpg?v=1733894424","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T89140_e6cd375d-b731-4843-a78e-8d2b0c696425.jpg?v=1733894426","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T89137_60779c72-5f5b-40c5-b3a3-50029d9fae1d.jpg?v=1733894429","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T89135_02e246d3-5124-4cef-984e-81e436103c56.jpg?v=1733894434","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T89157.jpg?v=1762227746","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T89155_8d8d9ee8-d5ac-4525-9de1-0cc7efe25fc7.jpg?v=1733894442"],"wallcovering":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_7513507037235.jpg?v=1775523903","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_7513507004467.jpg?v=1775523896","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_7513506971699.jpg?v=1775523889","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_7513506938931.jpg?v=1775523882","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_7513506906163.jpg?v=1775523875","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_7513506873395.jpg?v=1775523869","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_7513506807859.jpg?v=1775523862","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/nina_crop_7513506775091.jpg?v=1775523856"],"wallpaperexports":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWTA-65449.jpg?v=1776283654","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT79147.jpg?v=1773972692","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT1405.jpg?v=1773972599","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT1448.jpg?v=1773972587","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT34123.jpg?v=1773972563","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT34153.jpg?v=1773972542","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT34131.jpg?v=1773972499","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT34129.jpg?v=1773972493"],"wallpaperny":["https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72294-sample-clean.jpg?v=1774485076","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72289-sample-clean.jpg?v=1774485051","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72288-sample-clean.jpg?v=1774485046","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72277-sample-clean.jpg?v=1774484991","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72249-sample-clean.jpg?v=1774484911","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72247-sample-clean.jpg?v=1774484906","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72233-sample-clean.jpg?v=1774484850","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DUR-72219-sample-clean.jpg?v=1774484779"],"wallpaperweekly":["https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T3625.jpg?v=1733892666","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T3624.jpg?v=1733892669","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T3643.jpg?v=1733892675","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T3642.jpg?v=1733892677","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T3640.jpg?v=1733892682","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T3639.jpg?v=1733892687","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T1845.jpg?v=1733892701","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T1861.jpg?v=1733892706"],"wc01wallcoverings":["https://cdn.shopify.com/s/files/1/0015/4117/7456/products/09620171f63a6edf9af7fcb2057d1f67.jpg?v=1572309178","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/1a4c1158924ad4c27db966649f15600c_ba51e9f9-9b4f-4fef-b29b-435e97011c48.jpg?v=1572309157","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/8d5af6d00d8cc49dbdb1ae43c5c47cef.jpg?v=1572309129","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/just-jute-regular-jute-grs-43063-cropped.jpg?v=1774341928","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/totori-luxury-metal-grasscloth-grs-30336-cropped.jpg?v=1774341771","https://cdn.shopify.com/s/files/1/0015/4117/7456/files/grs-1495628841072-cropped_4530e8fa-1551-4de4-88de-df38cf4acb4b.jpg?v=1774344119","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/30798333a1cc85afc8a01a463a556b37.jpg?v=1572309109","https://cdn.shopify.com/s/files/1/0015/4117/7456/products/05e7edd1f1b60eb86ed521517971da68_defc0218-5d0a-4bae-8912-77e6b573611f.jpg?v=1572309109"]}
\ No newline at end of file
diff --git a/scripts/gen-hero-allocation.js b/scripts/gen-hero-allocation.js
new file mode 100644
index 0000000..1b15a2e
--- /dev/null
+++ b/scripts/gen-hero-allocation.js
@@ -0,0 +1,149 @@
+#!/usr/bin/env node
+/**
+ * gen-hero-allocation.js
+ *
+ * Builds data/hero-allocation.json — a globally-disjoint allocation of clean
+ * hero images across every site in sites/*.json.
+ *
+ * Why: every site's server.js previously derived its hero from the same
+ * "newest products in the niche pool" slice. Thin-niche sites fall back to the
+ * shared all-wallcovering pool, so 18+ sites rendered the IDENTICAL lead image.
+ * This precomputes one disjoint set of 8 clean heroes per site so NO image is
+ * reused on any two sites — niche-relevant where possible, deterministic, and
+ * inspectable.
+ *
+ * Algorithm:
+ * 1. Build each site's candidate pool exactly like server.js (niche slice,
+ * broadened to all Wallcovering when the niche is < 24).
+ * 2. Keep only "clean" images (valid https URL, not an obvious swatch/thumb).
+ * 3. Allocate MOST-CONSTRAINED sites first (smallest pool) so niche sites
+ * claim their best-fit images before broad sites consume the shared pool.
+ * 4. Greedy claim: each site takes the first HERO_COUNT images from its pool
+ * not already globally claimed, starting at a per-site seeded rotation
+ * offset (variety) and sorted newest-first (freshness). Backfill any
+ * shortfall from the global clean pool with the same rule.
+ */
+const fs = require('fs');
+const path = require('path');
+const catalog = require('../shared/catalog');
+const { sortProducts } = require('../shared/sort');
+
+const ROOT = path.join(__dirname, '..');
+const SITES_DIR = path.join(ROOT, 'sites');
+const OUT = path.join(ROOT, 'data', 'hero-allocation.json');
+const HERO_COUNT = 8;
+
+// deterministic 32-bit string hash (FNV-1a)
+function hash(str) {
+ let h = 0x811c9dc5;
+ for (let i = 0; i < str.length; i++) {
+ h ^= str.charCodeAt(i);
+ h = Math.imul(h, 0x01000193);
+ }
+ return h >>> 0;
+}
+
+// Is this a usable, clean hero image? Reject empties, non-https, and obvious
+// tiny swatch/icon files so heroes stay full-bleed quality.
+function isCleanImg(url) {
+ if (!url || typeof url !== 'string') return false;
+ if (!/^https:\/\//i.test(url)) return false;
+ const lower = url.toLowerCase();
+ if (/(_swatch|_thumb|-thumb|icon|sprite|placeholder|\.svg)/.test(lower)) return false;
+ return true;
+}
+
+// Collapse colorway variants to a base pattern so one site's rotation doesn't
+// show the same design four times in different colors. "Dune Road - Camel ..."
+// and "Dune Road - Russet ..." share key "dune road".
+function patternKey(p) {
+ const t = (p.title || p.handle || '').toLowerCase();
+ return t.split(/\s[-–|]\s/)[0].replace(/\s+/g, ' ').trim() || t;
+}
+
+function poolFor(cfg) {
+ const niche = catalog.nicheSlice({
+ pos: cfg.niche.pos || [],
+ neg: cfg.niche.neg || [],
+ types: cfg.niche.types || [],
+ limit: 6000,
+ });
+ const pool = niche.length >= 24
+ ? niche
+ : catalog.nicheSlice({ pos: [], neg: cfg.niche.neg || [], types: ['Wallcovering'], limit: 6000 });
+ // newest-first, clean only, dedup by image_url
+ const seen = new Set();
+ return sortProducts(pool, 'newest')
+ .filter(p => isCleanImg(p.image_url))
+ .filter(p => (seen.has(p.image_url) ? false : (seen.add(p.image_url), true)));
+}
+
+function main() {
+ const files = fs.readdirSync(SITES_DIR).filter(f => f.endsWith('.json')).sort();
+ const sites = files.map(f => {
+ const cfg = JSON.parse(fs.readFileSync(path.join(SITES_DIR, f), 'utf8'));
+ return { slug: cfg.slug, cfg, pool: poolFor(cfg) };
+ });
+
+ // global clean pool (newest-first) for backfill
+ const globalSeen = new Set();
+ const GLOBAL = sortProducts(
+ catalog.nicheSlice({ pos: [], neg: [], types: ['Wallcovering'], limit: 100000 }),
+ 'newest'
+ ).filter(p => isCleanImg(p.image_url))
+ .filter(p => (globalSeen.has(p.image_url) ? false : (globalSeen.add(p.image_url), true)));
+
+ // most-constrained first
+ const order = [...sites].sort((a, b) => a.pool.length - b.pool.length);
+
+ const claimed = new Set(); // global image_url claim — guarantees cross-site disjointness
+ const alloc = {};
+
+ // Pick up to `need` products from `products`, starting at a seeded rotation
+ // offset. Globally disjoint (skip claimed). `usedKeys` enforces distinct base
+ // patterns WITHIN this site; `relaxKeys` lets a second pass fill any shortfall
+ // by allowing repeat patterns (still distinct images).
+ const pickFrom = (products, seed, need, usedKeys) => {
+ const out = [];
+ if (!products.length) return out;
+ for (const relaxKeys of [false, true]) {
+ if (out.length >= need) break;
+ const start = hash(seed + (relaxKeys ? ':relax' : '')) % products.length;
+ for (let i = 0; i < products.length && out.length < need; i++) {
+ const p = products[(start + i) % products.length];
+ if (claimed.has(p.image_url)) continue;
+ const k = patternKey(p);
+ if (!relaxKeys && usedKeys.has(k)) continue;
+ claimed.add(p.image_url);
+ usedKeys.add(k);
+ out.push(p.image_url);
+ }
+ }
+ return out;
+ };
+
+ for (const site of order) {
+ const usedKeys = new Set();
+ let heroes = pickFrom(site.pool, site.slug, HERO_COUNT, usedKeys);
+ if (heroes.length < HERO_COUNT) {
+ // backfill from global clean pool (still globally disjoint)
+ heroes = heroes.concat(pickFrom(GLOBAL, site.slug + ':backfill', HERO_COUNT - heroes.length, usedKeys));
+ }
+ alloc[site.slug] = heroes;
+ }
+
+ // verification
+ const all = [];
+ Object.values(alloc).forEach(a => all.push(...a));
+ const uniq = new Set(all);
+ const dup = all.length - uniq.size;
+ const short = Object.entries(alloc).filter(([, a]) => a.length < HERO_COUNT);
+
+ fs.writeFileSync(OUT, JSON.stringify(alloc, null, 0));
+ console.log(`[hero-alloc] ${sites.length} sites · ${all.length} hero slots · ${uniq.size} unique · ${dup} duplicates`);
+ if (short.length) console.log(`[hero-alloc] WARN short sites: ${short.map(([s, a]) => s + '(' + a.length + ')').join(', ')}`);
+ if (dup !== 0) { console.error('[hero-alloc] FATAL: duplicate hero images across sites'); process.exit(1); }
+ console.log(`[hero-alloc] wrote ${path.relative(ROOT, OUT)} — ZERO cross-site duplicates ✓`);
+}
+
+main();
diff --git a/server.js b/server.js
index 38de191..e1d6f47 100644
--- a/server.js
+++ b/server.js
@@ -38,7 +38,16 @@ const POOL = NICHE.length >= 24 ? NICHE
: catalog.nicheSlice({ pos: [], neg: cfg.niche.neg || [], types: ['Wallcovering'], limit: 6000 });
console.log(`[${SITE}] niche pool: ${NICHE.length} (serving ${POOL.length})`);
-const HERO_IMGS = sortProducts(POOL, 'newest').slice(0, 14).map(p => p.image_url).filter(Boolean);
+// Hero images come from the precomputed global allocation manifest, which
+// guarantees NO image is reused on any two sites in the fleet (see
+// scripts/gen-hero-allocation.js). Fall back to the newest niche slice only if
+// the manifest is missing this site.
+let HERO_ALLOC = {};
+try { HERO_ALLOC = JSON.parse(fs.readFileSync(path.join(__dirname, 'data', 'hero-allocation.json'), 'utf8')); }
+catch (e) { console.warn(`[${SITE}] hero-allocation.json missing — using niche fallback`); }
+const HERO_IMGS = (Array.isArray(HERO_ALLOC[SITE]) && HERO_ALLOC[SITE].length >= 3)
+ ? HERO_ALLOC[SITE]
+ : sortProducts(POOL, 'newest').slice(0, 14).map(p => p.image_url).filter(Boolean);
const FEATURED = sortProducts(POOL, 'newest').slice(0, 20);
const app = express();
← 8b660a0 drop bleachfriendly from fleet (domain not renewing): remove
·
back to Dw Domain Fleet
·
Add bleachfriendly to fleet config + regen 44-site hero mani 79bf34f →