← back to Model Arena
mood-board-studio: cycle-2 polish — honest export, no stale prices, dead-code purge
493c6dc0b83c52f55d7f48cfdd76d4ba989cc9d4 · 2026-07-30 16:04:54 -0700 · Steve
- Export: replaced the abstract preset-palette strip (colors that weren't on the
board) with a REAL color-story strip sampled from the drawn product photos
(getImageData before the vignette; canvas stays CORS-clean). Dropped the
abstract hex color-name row for a truthful caption.
- Prices: removed the numeric price from tile labels + tooltip — the dw_unified
mirror price column is known stale (memory dw-mirror-price-column-stale); a
wrong price on a client export is worse than none. Name + vendor only.
- Raffia: swapped the 'Designer Wallcoverings' house-vendor entry (Madagascar
Cloth) for Thibaut Bankun Raffia Spa Blue (real manufacturer, verified image).
- Dead code: removed 6 unused tile-factory/canvas fns + MATERIALS const + 3 dead
export branches (~5.8KB). Set willReadFrequently on export ctx (0 warnings).
Verified: 0 price labels, real vendors, export clean (untainted, 3.4MB), 0 console errors/warnings.
Files touched
M public/games/dw-mood-board-studio.html
Diff
commit 493c6dc0b83c52f55d7f48cfdd76d4ba989cc9d4
Author: Steve <steve@designerwallcoverings.com>
Date: Thu Jul 30 16:04:54 2026 -0700
mood-board-studio: cycle-2 polish — honest export, no stale prices, dead-code purge
- Export: replaced the abstract preset-palette strip (colors that weren't on the
board) with a REAL color-story strip sampled from the drawn product photos
(getImageData before the vignette; canvas stays CORS-clean). Dropped the
abstract hex color-name row for a truthful caption.
- Prices: removed the numeric price from tile labels + tooltip — the dw_unified
mirror price column is known stale (memory dw-mirror-price-column-stale); a
wrong price on a client export is worse than none. Name + vendor only.
- Raffia: swapped the 'Designer Wallcoverings' house-vendor entry (Madagascar
Cloth) for Thibaut Bankun Raffia Spa Blue (real manufacturer, verified image).
- Dead code: removed 6 unused tile-factory/canvas fns + MATERIALS const + 3 dead
export branches (~5.8KB). Set willReadFrequently on export ctx (0 warnings).
Verified: 0 price labels, real vendors, export clean (untainted, 3.4MB), 0 console errors/warnings.
---
public/games/dw-mood-board-studio.html | 239 +++++++--------------------------
1 file changed, 45 insertions(+), 194 deletions(-)
diff --git a/public/games/dw-mood-board-studio.html b/public/games/dw-mood-board-studio.html
index 65e1d38..993ce61 100644
--- a/public/games/dw-mood-board-studio.html
+++ b/public/games/dw-mood-board-studio.html
@@ -907,7 +907,7 @@ header {
real cdn.shopify.com photos). Keyed by material type; each product:
{ name, vendor, sku, handle, img, price }
============================================================ */
-const PRODUCTS = {"chinoiserie":[{"name":"Jardin Fleuri - Ivory Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102285","handle":"dwkk-102285","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019118_192_950782b7-bc9c-4b7a-a0a9-49fae23ee1a0.jpg?v=1725922617","price":1567},{"name":"La Pagode - Teal By Brunschwig & Fils | Les Ensembliers Wallcoverings | Chinoiserie Wallcovering Embroidery","vendor":"Brunschwig & Fils","sku":"DWKK-102331","handle":"dwkk-102331","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8020108_35_f3afd4ba-dbe6-4ac9-a195-b930f188a780.jpg?v=1725922727","price":393},{"name":"Tongli - Fern Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102274","handle":"dwkk-102274","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019115_33_a7361bcf-88e8-40df-b0fa-23c228b55301.jpg?v=1725922594","price":1394},{"name":"Ming Dragon Print - Claret Multi By Brunschwig & Fils | Summer Palace |Chinoiserie Novelty Multipurpose Print","vendor":"Brunschwig & Fils","sku":"DWKK-100756","handle":"dwkk-gc1f32da2","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/8019140_195_1fb0f24d-239b-41e5-a453-692799b39101.jpg?v=1725919361","price":298},{"name":"Jardin Fleuri - Delft Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102282","handle":"dwkk-102282","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019118_153_b7b10748-93ce-4c18-9649-24aa6370d0cc.jpg?v=1725922610","price":1567},{"name":"Ming Dragon - Indigo Multi By Brunschwig & Fils | Summer Palace Wallcoverings | Chinoiserie Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102269","handle":"dwkk-102269","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019113_50_c18abe3c-8f2d-4eda-9618-afb98f493602.jpg?v=1725922585","price":605},{"name":"Tongli - Lagoon Turquoise By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102272","handle":"dwkk-102272","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019115_133_9415dc52-c6cd-4caf-8098-030e271046f5.jpg?v=1725922590","price":1394},{"name":"Jardin Fleuri - Opal Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102283","handle":"dwkk-102283","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019118_157_3d36ee49-50bf-4eb9-9487-f3ad353c0648.jpg?v=1725922612","price":1567}],"damask":[{"name":"Lido Paper - Mist Turquoise By Lee Jofa | Westport |Damask Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139824","handle":"dwkk-g3debcaad","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_123_ed9eb126-b3a9-4eb9-b8d6-cb30c87ba09f.jpg?v=1753291200","price":613},{"name":"Lido Paper - Sky Blue By Lee Jofa | Westport |Damask Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139826","handle":"dwkk-g6d5d7dd3","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_5_ee195d96-83ec-42cd-8d7b-1fac955bba72.jpg?v=1753291195","price":613},{"name":"Lido Paper - Petal Pink By Lee Jofa | Westport |Damask Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139827","handle":"dwkk-gc00f95a0","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_7_69da694e-811e-404f-bf77-7ee042dcfe90.jpg?v=1753291193","price":613},{"name":"Lido Paper - Fog Grey By Lee Jofa | Westport |Damask Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139823","handle":"dwkk-gf4b29cec","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_11_a8350620-d0f1-4139-9d1b-7cbe4af4c42e.jpg?v=1753291202","price":613},{"name":"Lido Paper - Leaf Green By Lee Jofa | Westport |Damask Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139825","handle":"dwkk-g6d4685ef","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_3_67c4052d-2912-4eac-b0ae-3247d5c50cc5.jpg?v=1753291197","price":613},{"name":"Balmuccia Damask Soft Green Wallcovering","vendor":"Anna French","sku":"DWTT-80288","handle":"dwtt-80288-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Bristol-BalmucciaDamaskWP-softgreen-EnsburyFernFAB-green-detail.jpg?v=1770340093","price":4},{"name":"Canal Damask Durable Vinyl | Hollywood Wallcoverings","vendor":"Hollywood Wallcoverings","sku":"XWA-52078","handle":"canal-damask-durable-vinyl-xwa-52078","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwa-52078-sample-canal-damask-durable-vinyl-hollywood-wallcoverings.jpg?v=1775707053","price":4},{"name":"Damasco Damask Stripe Crocus | Designers Guild Europe","vendor":"Designers Guild","sku":"EUR-70081","handle":"eur-70081-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/47451_5cf553c7-3554-4629-b8e5-3132c3c2f066.webp?v=1782461907","price":null}],"grasscloth":[{"name":"Grasscloth Slubs Natura | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-1811","handle":"grasscloth-slubs-natura-grs-1811","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/a731e8e333ad16ef3b05543b830e00de_7ec623bc-ba2d-44dd-8884-176af8ed4f39.jpg?v=1745460826","price":23},{"name":"Hula - Black Black By Lee Jofa Modern | Hunt Slonem Ii | Modern Wallcovering Grasscloth","vendor":"Groundworks","sku":"DWKK-139617","handle":"dwkk-139617","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GWP-3713_84_e688a483-e43f-4d03-b8a3-d9a6741c8a75.jpg?v=1753291483","price":444},{"name":"Diamond Grasscloth Tribal | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-1804","handle":"diamond-grasscloth-tribal-grs-1804","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/9014b0c5b6e28bcffc717479cca2f5e0.jpg?v=1745460833","price":23},{"name":"Plantation Grasscloth | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-1806","handle":"plantation-grasscloth-grs-1806","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/plantation-grasscloth-grs-1806-cropped.jpg?v=1774341392","price":23},{"name":"Pali Basketweave Paperweave Grasscloth | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRA-39052","handle":"pali-basketweave-paperweave-grasscloth-gra-39052","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/da6ddb3316744cc200ef1ea31be33850.jpg?v=1745459005","price":5},{"name":"Hank's Horizontal Grasscloth | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-38023","handle":"hank-s-horizontal-grasscloth-wall-paper-grs-38023","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/grs-1495926177904-cropped_5f436f24-2e50-4830-ac9a-898a00c493f6.jpg?v=1774344984","price":4},{"name":"Nantucket Grasscloth Warm Cool Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"DWLA-50091","handle":"nantucket-grasscloth-warm-cool-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/88a720c068d2b31c60cfe77582123886.jpg?v=1784232024","price":null},{"name":"Roma Sisal Grasscloth Horizontal Weave Light Brown | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRT-38309","handle":"roma-tight-woven-grasscloth-grt-38309","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/f4f84be58dc46b61384a5065ac13eb4f.jpg?v=1745459404","price":4}],"linen":[{"name":"Camellia Garden - Navy and Linen Wallcovering | Anna French","vendor":"Anna French","sku":"DWTA-65014","handle":"camellia-garden-navy-and-linen-anna-french","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT24553_c53cd2fa-1662-4475-83c7-95b4bfa6e5e9.jpg?v=1773967647","price":157},{"name":"Annette - Metallic Silver on Linen Wallcovering | Anna French","vendor":"Anna French","sku":"DWTA-65598","handle":"annette-metallic-silver-on-linen-anna-french","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT34111.jpg?v=1773963751","price":118},{"name":"Dahlia - Navy on Linen Wallcovering | Anna French","vendor":"Anna French","sku":"DWTA-65019","handle":"dahlia-navy-on-linen-anna-french","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT24540.jpg?v=1773967664","price":208},{"name":"Carmel-Misty Blue Linen Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"LINN-500060","handle":"carmel-misty-blue-linen-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/61e4c00a6dee9dc19b41d15900f6ca45.jpg?v=1783879027","price":null},{"name":"Rehoboth-Plain Linen Patterns Hemp Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"HEMP-500500","handle":"rehoboth-plain-linen-patterns-hemp-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/f59b5045838f468cf1ca2c6cb0ec64ed.jpg?v=1783879715","price":null},{"name":"Belgian Linen Wallcovering - Steel Blue Wallcovering | Arte International","vendor":"Arte International","sku":"DWK-31401","handle":"dwk-31401-koroseal-arte-type-2-vinyls-67130-belgian-linen","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/67130_45d13979-c715-4239-bb8c-2d79fc2d701f.jpg?v=1751962288","price":null},{"name":"Athens Katari Linen Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"DWPP-207945","handle":"athens-katari-linen-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/3501KT.jpg?v=1785089900","price":null},{"name":"Summer Wall - Linen wallcovering | Donghia","vendor":"Donghia","sku":"DWDH-188069","handle":"summer-wall-linen-wallcovering-donghia","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DG-09700_018.jpg?v=1772818831","price":null}],"raffia":[{"name":"Fine Raffia - Natural Beige By Lee Jofa Modern | Elements Ii Naturals |Solid Texture Wallcovering Grasscloth","vendor":"Groundworks","sku":"DWKK-139575","handle":"dwkk-g328a6d2a","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GWP-3415_16_ae628f14-0e94-479b-bfd8-a11a13484a57.jpg?v=1753291589","price":138},{"name":"Cabo Raffia Wallcovering | Thibaut","vendor":"Thibaut","sku":"DWTT-80391","handle":"dwtt-80391-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T41160_d90c5f1b-3086-4237-851f-332ec133f1c8.jpg?v=1781202567","price":196},{"name":"Bethany Raffia Off White - Off White Wallcovering | Thibaut","vendor":"Thibaut","sku":"DWTT-80363","handle":"dwtt-80363-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T19602_05477fe1-50d1-4fa8-b5ec-f23c50e31727.jpg?v=1781202597","price":379},{"name":"Sea Bright Plain Paper Weave Raffia Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"PWV-500950","handle":"sea-bright-plain-paper-weave-raffia-paper-weave-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/baf2884af6422e26083a1b2f6e07e3cd.jpg?v=1783880263","price":null},{"name":"Raffia Decor - Smoke | Scalamandre","vendor":"Scalamandre Wallpaper","sku":"DWA-88550","handle":"wtt661468","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WTT661468.jpg?v=1745346442","price":null},{"name":"Bankun Raffia Antique - Antique Natural Wallcovering | Thibaut","vendor":"Thibaut","sku":"DWTT-72328","handle":"dwtt-72328-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T6817_89424133-37e8-4acd-9f01-2b49bbf46f15.jpg?v=1781202941","price":4},{"name":"Madagascar Cloth 3 Raffia","vendor":"Designer Wallcoverings","sku":"DWC-278566","handle":"dwc-278566-designerwallcoverings-com","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DWC-278566-DesignerWallcoverings-Los-Angeles-1_a3bede8c-b94d-477d-b0c2-97ad23dba752.png?v=1741881338","price":null},{"name":"Taiki Paper Weave Raffia | Phillipe Romano","vendor":"Phillipe Romano","sku":"XQA-33723","handle":"taiki-paper-weave-raffia-xqa-33723","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/69007e51570bb9c98f02694ac9a82280_13600e9f-b3b4-4f31-9801-14c9e2a4965a.jpg?v=1745457371","price":4}],"silk":[{"name":"Watered Silk, Platinum Grey Wallcoverings | Zoffany","vendor":"Zoffany","sku":"DWZF-187032","handle":"watered-silk-platinum-grey-dwzf-187032","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ZRHW312915_d9df_1d698e8d-35e1-44ae-893d-bcdfa5caff5c.jpg?v=1782315651","price":null},{"name":"Seijun - Wheat By Brunschwig & Fils | |Solid Texture Wallcovering Silk","vendor":"Brunschwig & Fils","sku":"DWKK-102232","handle":"dwkk-102232","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8015147_614_c235fc43-02e2-4b31-a124-a591b9091b29.jpg?v=1725922499","price":null},{"name":"Ipswich-Snow Silk Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"SILK-500850","handle":"ipswich-snow-silk-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/034c378753fce9d5ca67c42f155319c8.jpg?v=1783879517","price":null},{"name":"Manchester Silk-Black Ink Durable Vinyl | Phillipe Romano","vendor":"Phillipe Romano","sku":"XXP-969464","handle":"xxp-969464-designerwallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-LK-08_1fbbb96d-63c4-48f9-a745-e4085ad058a8.jpg?v=1733890863","price":null},{"name":"Milford Silk-Dusk Durable Vinyl | Phillipe Romano","vendor":"Phillipe Romano","sku":"XXP-969682","handle":"xxp-969682-designerwallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-SL-03_730e8632-1d44-4317-b0f5-79497ea74c9c.jpg?v=1733890246","price":null},{"name":"Portsmouth Silk-Palladium Durable Vinyl | Phillipe Romano","vendor":"Phillipe Romano","sku":"XXP-969547","handle":"xxp-969547-designerwallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-LX-05_fdec728e-7f70-4452-beca-8066a1c731fc.jpg?v=1733890636","price":null},{"name":"Silkx Wallcovering - Light Gray Wallcovering | Arte International","vendor":"Arte International","sku":"DWK-31451","handle":"dwk-31451-koroseal-arte-type-2-vinyls-67009-silkx","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/67009_1fe3b816-0112-4df5-a70a-968ceab7545b.jpg?v=1751962467","price":null},{"name":"Silken One Palatial - Beige Commercial Wallcovering | Koroseal","vendor":"Koroseal","sku":"DWK-31563","handle":"dwk-31563-koroseal-roger-thomas-s522-10-silken-one-costly","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/SILKEN_ONE-PALATIAL_S522-10_f3e44120-9a03-4bf0-9b08-899d74d13262.jpg?v=1751949423","price":null}]};
+const PRODUCTS = {"chinoiserie":[{"name":"Jardin Fleuri - Ivory Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102285","handle":"dwkk-102285","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019118_192_950782b7-bc9c-4b7a-a0a9-49fae23ee1a0.jpg?v=1725922617","price":1567},{"name":"La Pagode - Teal By Brunschwig & Fils | Les Ensembliers Wallcoverings | Chinoiserie Wallcovering Embroidery","vendor":"Brunschwig & Fils","sku":"DWKK-102331","handle":"dwkk-102331","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8020108_35_f3afd4ba-dbe6-4ac9-a195-b930f188a780.jpg?v=1725922727","price":393},{"name":"Tongli - Fern Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102274","handle":"dwkk-102274","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019115_33_a7361bcf-88e8-40df-b0fa-23c228b55301.jpg?v=1725922594","price":1394},{"name":"Ming Dragon Print - Claret Multi By Brunschwig & Fils | Summer Palace |Chinoiserie Novelty Multipurpose Print","vendor":"Brunschwig & Fils","sku":"DWKK-100756","handle":"dwkk-gc1f32da2","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/8019140_195_1fb0f24d-239b-41e5-a453-692799b39101.jpg?v=1725919361","price":298},{"name":"Jardin Fleuri - Delft Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102282","handle":"dwkk-102282","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019118_153_b7b10748-93ce-4c18-9649-24aa6370d0cc.jpg?v=1725922610","price":1567},{"name":"Ming Dragon - Indigo Multi By Brunschwig & Fils | Summer Palace Wallcoverings | Chinoiserie Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102269","handle":"dwkk-102269","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019113_50_c18abe3c-8f2d-4eda-9618-afb98f493602.jpg?v=1725922585","price":605},{"name":"Tongli - Lagoon Turquoise By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102272","handle":"dwkk-102272","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019115_133_9415dc52-c6cd-4caf-8098-030e271046f5.jpg?v=1725922590","price":1394},{"name":"Jardin Fleuri - Opal Multi By Brunschwig & Fils | Summer Palace Wallcoverings |Chinoiserie Botanical & Floral Wallcovering Print","vendor":"Brunschwig & Fils","sku":"DWKK-102283","handle":"dwkk-102283","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8019118_157_3d36ee49-50bf-4eb9-9487-f3ad353c0648.jpg?v=1725922612","price":1567}],"damask":[{"name":"Lido Paper - Mist Turquoise By Lee Jofa | Westport |Damask Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139824","handle":"dwkk-g3debcaad","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_123_ed9eb126-b3a9-4eb9-b8d6-cb30c87ba09f.jpg?v=1753291200","price":613},{"name":"Lido Paper - Sky Blue By Lee Jofa | Westport |Damask Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139826","handle":"dwkk-g6d5d7dd3","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_5_ee195d96-83ec-42cd-8d7b-1fac955bba72.jpg?v=1753291195","price":613},{"name":"Lido Paper - Petal Pink By Lee Jofa | Westport |Damask Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139827","handle":"dwkk-gc00f95a0","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_7_69da694e-811e-404f-bf77-7ee042dcfe90.jpg?v=1753291193","price":613},{"name":"Lido Paper - Fog Grey By Lee Jofa | Westport |Damask Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139823","handle":"dwkk-gf4b29cec","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_11_a8350620-d0f1-4139-9d1b-7cbe4af4c42e.jpg?v=1753291202","price":613},{"name":"Lido Paper - Leaf Green By Lee Jofa | Westport |Damask Wallcovering Print","vendor":"Lee Jofa","sku":"DWKK-139825","handle":"dwkk-g6d4685ef","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P2018104_3_67c4052d-2912-4eac-b0ae-3247d5c50cc5.jpg?v=1753291197","price":613},{"name":"Balmuccia Damask Soft Green Wallcovering","vendor":"Anna French","sku":"DWTT-80288","handle":"dwtt-80288-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/Bristol-BalmucciaDamaskWP-softgreen-EnsburyFernFAB-green-detail.jpg?v=1770340093","price":4},{"name":"Canal Damask Durable Vinyl | Hollywood Wallcoverings","vendor":"Hollywood Wallcoverings","sku":"XWA-52078","handle":"canal-damask-durable-vinyl-xwa-52078","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/xwa-52078-sample-canal-damask-durable-vinyl-hollywood-wallcoverings.jpg?v=1775707053","price":4},{"name":"Damasco Damask Stripe Crocus | Designers Guild Europe","vendor":"Designers Guild","sku":"EUR-70081","handle":"eur-70081-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/47451_5cf553c7-3554-4629-b8e5-3132c3c2f066.webp?v=1782461907","price":null}],"grasscloth":[{"name":"Grasscloth Slubs Natura | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-1811","handle":"grasscloth-slubs-natura-grs-1811","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/a731e8e333ad16ef3b05543b830e00de_7ec623bc-ba2d-44dd-8884-176af8ed4f39.jpg?v=1745460826","price":23},{"name":"Hula - Black Black By Lee Jofa Modern | Hunt Slonem Ii | Modern Wallcovering Grasscloth","vendor":"Groundworks","sku":"DWKK-139617","handle":"dwkk-139617","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GWP-3713_84_e688a483-e43f-4d03-b8a3-d9a6741c8a75.jpg?v=1753291483","price":444},{"name":"Diamond Grasscloth Tribal | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-1804","handle":"diamond-grasscloth-tribal-grs-1804","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/9014b0c5b6e28bcffc717479cca2f5e0.jpg?v=1745460833","price":23},{"name":"Plantation Grasscloth | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-1806","handle":"plantation-grasscloth-grs-1806","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/plantation-grasscloth-grs-1806-cropped.jpg?v=1774341392","price":23},{"name":"Pali Basketweave Paperweave Grasscloth | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRA-39052","handle":"pali-basketweave-paperweave-grasscloth-gra-39052","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/da6ddb3316744cc200ef1ea31be33850.jpg?v=1745459005","price":5},{"name":"Hank's Horizontal Grasscloth | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRS-38023","handle":"hank-s-horizontal-grasscloth-wall-paper-grs-38023","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/grs-1495926177904-cropped_5f436f24-2e50-4830-ac9a-898a00c493f6.jpg?v=1774344984","price":4},{"name":"Nantucket Grasscloth Warm Cool Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"DWLA-50091","handle":"nantucket-grasscloth-warm-cool-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/88a720c068d2b31c60cfe77582123886.jpg?v=1784232024","price":null},{"name":"Roma Sisal Grasscloth Horizontal Weave Light Brown | Phillipe Romano","vendor":"Phillipe Romano","sku":"GRT-38309","handle":"roma-tight-woven-grasscloth-grt-38309","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/f4f84be58dc46b61384a5065ac13eb4f.jpg?v=1745459404","price":4}],"linen":[{"name":"Camellia Garden - Navy and Linen Wallcovering | Anna French","vendor":"Anna French","sku":"DWTA-65014","handle":"camellia-garden-navy-and-linen-anna-french","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT24553_c53cd2fa-1662-4475-83c7-95b4bfa6e5e9.jpg?v=1773967647","price":157},{"name":"Annette - Metallic Silver on Linen Wallcovering | Anna French","vendor":"Anna French","sku":"DWTA-65598","handle":"annette-metallic-silver-on-linen-anna-french","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT34111.jpg?v=1773963751","price":118},{"name":"Dahlia - Navy on Linen Wallcovering | Anna French","vendor":"Anna French","sku":"DWTA-65019","handle":"dahlia-navy-on-linen-anna-french","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/AT24540.jpg?v=1773967664","price":208},{"name":"Carmel-Misty Blue Linen Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"LINN-500060","handle":"carmel-misty-blue-linen-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/61e4c00a6dee9dc19b41d15900f6ca45.jpg?v=1783879027","price":null},{"name":"Rehoboth-Plain Linen Patterns Hemp Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"HEMP-500500","handle":"rehoboth-plain-linen-patterns-hemp-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/f59b5045838f468cf1ca2c6cb0ec64ed.jpg?v=1783879715","price":null},{"name":"Belgian Linen Wallcovering - Steel Blue Wallcovering | Arte International","vendor":"Arte International","sku":"DWK-31401","handle":"dwk-31401-koroseal-arte-type-2-vinyls-67130-belgian-linen","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/67130_45d13979-c715-4239-bb8c-2d79fc2d701f.jpg?v=1751962288","price":null},{"name":"Athens Katari Linen Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"DWPP-207945","handle":"athens-katari-linen-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/3501KT.jpg?v=1785089900","price":null},{"name":"Summer Wall - Linen wallcovering | Donghia","vendor":"Donghia","sku":"DWDH-188069","handle":"summer-wall-linen-wallcovering-donghia","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/DG-09700_018.jpg?v=1772818831","price":null}],"raffia":[{"name":"Fine Raffia - Natural Beige By Lee Jofa Modern | Elements Ii Naturals |Solid Texture Wallcovering Grasscloth","vendor":"Groundworks","sku":"DWKK-139575","handle":"dwkk-g328a6d2a","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/GWP-3415_16_ae628f14-0e94-479b-bfd8-a11a13484a57.jpg?v=1753291589","price":138},{"name":"Cabo Raffia Wallcovering | Thibaut","vendor":"Thibaut","sku":"DWTT-80391","handle":"dwtt-80391-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T41160_d90c5f1b-3086-4237-851f-332ec133f1c8.jpg?v=1781202567","price":196},{"name":"Bethany Raffia Off White - Off White Wallcovering | Thibaut","vendor":"Thibaut","sku":"DWTT-80363","handle":"dwtt-80363-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T19602_05477fe1-50d1-4fa8-b5ec-f23c50e31727.jpg?v=1781202597","price":379},{"name":"Sea Bright Plain Paper Weave Raffia Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"PWV-500950","handle":"sea-bright-plain-paper-weave-raffia-paper-weave-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/baf2884af6422e26083a1b2f6e07e3cd.jpg?v=1783880263","price":null},{"name":"Raffia Decor - Smoke | Scalamandre","vendor":"Scalamandre Wallpaper","sku":"DWA-88550","handle":"wtt661468","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/WTT661468.jpg?v=1745346442","price":null},{"name":"Bankun Raffia Antique - Antique Natural Wallcovering | Thibaut","vendor":"Thibaut","sku":"DWTT-72328","handle":"dwtt-72328-designer-wallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T6817_89424133-37e8-4acd-9f01-2b49bbf46f15.jpg?v=1781202941","price":4},{"name":"Bankun Raffia, Spa Blue Wallcoverings | Thibaut","vendor":"Thibaut","sku":"DWTT-73839","handle":"bankun-raffia-spa-blue-dwtt-73839","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/T14519.jpg?v=1783471222","price":null},{"name":"Taiki Paper Weave Raffia | Phillipe Romano","vendor":"Phillipe Romano","sku":"XQA-33723","handle":"taiki-paper-weave-raffia-xqa-33723","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/69007e51570bb9c98f02694ac9a82280_13600e9f-b3b4-4f31-9801-14c9e2a4965a.jpg?v=1745457371","price":4}],"silk":[{"name":"Watered Silk, Platinum Grey Wallcoverings | Zoffany","vendor":"Zoffany","sku":"DWZF-187032","handle":"watered-silk-platinum-grey-dwzf-187032","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/ZRHW312915_d9df_1d698e8d-35e1-44ae-893d-bcdfa5caff5c.jpg?v=1782315651","price":null},{"name":"Seijun - Wheat By Brunschwig & Fils | |Solid Texture Wallcovering Silk","vendor":"Brunschwig & Fils","sku":"DWKK-102232","handle":"dwkk-102232","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/P8015147_614_c235fc43-02e2-4b31-a124-a591b9091b29.jpg?v=1725922499","price":null},{"name":"Ipswich-Snow Silk Wallcovering | Phillipe Romano","vendor":"Phillipe Romano","sku":"SILK-500850","handle":"ipswich-snow-silk-wallcovering-phillipe-romano","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/034c378753fce9d5ca67c42f155319c8.jpg?v=1783879517","price":null},{"name":"Manchester Silk-Black Ink Durable Vinyl | Phillipe Romano","vendor":"Phillipe Romano","sku":"XXP-969464","handle":"xxp-969464-designerwallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-LK-08_1fbbb96d-63c4-48f9-a745-e4085ad058a8.jpg?v=1733890863","price":null},{"name":"Milford Silk-Dusk Durable Vinyl | Phillipe Romano","vendor":"Phillipe Romano","sku":"XXP-969682","handle":"xxp-969682-designerwallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-SL-03_730e8632-1d44-4317-b0f5-79497ea74c9c.jpg?v=1733890246","price":null},{"name":"Portsmouth Silk-Palladium Durable Vinyl | Phillipe Romano","vendor":"Phillipe Romano","sku":"XXP-969547","handle":"xxp-969547-designerwallcoverings-los-angeles","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/products/T2-LX-05_fdec728e-7f70-4452-beca-8066a1c731fc.jpg?v=1733890636","price":null},{"name":"Silkx Wallcovering - Light Gray Wallcovering | Arte International","vendor":"Arte International","sku":"DWK-31451","handle":"dwk-31451-koroseal-arte-type-2-vinyls-67009-silkx","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/67009_1fe3b816-0112-4df5-a70a-968ceab7545b.jpg?v=1751962467","price":null},{"name":"Silken One Palatial - Beige Commercial Wallcovering | Koroseal","vendor":"Koroseal","sku":"DWK-31563","handle":"dwk-31563-koroseal-roger-thomas-s522-10-silken-one-costly","img":"https://cdn.shopify.com/s/files/1/0015/4117/7456/files/SILKEN_ONE-PALATIAL_S522-10_f3e44120-9a03-4bf0-9b08-899d74d13262.jpg?v=1751949423","price":null}]};
/* Rotating picker — each spawn surfaces the next real product for its material,
so switching / reshuffling presets keeps revealing different live SKUs. */
@@ -1213,30 +1213,6 @@ function buildSwatchSVG(type, palette) {
/* ============================================================
MATERIAL CHIP CONFIGS
============================================================ */
-const MATERIALS = [
- {
- name: 'Brass',
- bg: 'linear-gradient(135deg,#d4b44a 0%,#c9a961 45%,#e0c870 100%)',
- color: '#3a2e10',
- iconBg: 'rgba(201,169,97,0.3)',
- icon: `<svg width="16" height="16" viewBox="0 0 16 16"><circle cx="8" cy="8" r="5" stroke="#7a5a20" stroke-width="1.2" fill="none"/><circle cx="8" cy="8" r="2" fill="#c9a961"/></svg>`
- },
- {
- name: 'Marble',
- bg: 'linear-gradient(135deg,#f0eee8 0%,#e8e4dc 40%,#f4f2ea 100%)',
- color: '#2a2824',
- iconBg: 'rgba(100,90,80,0.15)',
- icon: `<svg width="16" height="16" viewBox="0 0 16 16"><ellipse cx="8" cy="8" rx="6" ry="5" stroke="#aaa" stroke-width="0.8" fill="none"/><path d="M4 6 C6 8 7 10 10 10" stroke="#bbb" stroke-width="0.7" fill="none"/><path d="M6 4 C8 6 9 8 12 9" stroke="#ccc" stroke-width="0.5" fill="none"/></svg>`
- },
- {
- name: 'White Oak',
- bg: 'linear-gradient(135deg,#d8c8a4 0%,#c4b48e 50%,#d0c09a 100%)',
- color: '#3c2e14',
- iconBg: 'rgba(100,80,40,0.2)',
- icon: `<svg width="16" height="16" viewBox="0 0 16 16"><rect x="3" y="2" width="10" height="12" rx="1" stroke="#8a6a30" stroke-width="0.8" fill="none"/><line x1="3" y1="5" x2="13" y2="5" stroke="#a08040" stroke-width="0.5"/><line x1="3" y1="8" x2="13" y2="8" stroke="#a08040" stroke-width="0.5"/><line x1="3" y1="11" x2="13" y2="11" stroke="#a08040" stroke-width="0.5"/></svg>`
- },
-];
-
/* ============================================================
LAYOUT COMPOSER — determines tile positions
============================================================ */
@@ -1343,15 +1319,17 @@ function createSwatchTile(type, palette, x, y, z, id) {
el.dataset.material = type;
el.dataset.product = JSON.stringify(prod);
const short = productShortName(prod.name);
- const priceStr = (typeof prod.price === 'number' && prod.price > 0) ? ' · $' + prod.price : '';
const esc = s => String(s || '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
- el.title = `${prod.name} — ${prod.vendor}${prod.sku ? ' · ' + prod.sku : ''}${priceStr}\n(double-click to open on designerwallcoverings.com)`;
+ // Price intentionally NOT shown: the dw_unified mirror price column is known to
+ // be stale/wrong (memory dw-mirror-price-column-stale) — a wrong number on a
+ // client-facing export is worse than none. Name + vendor only; SKU in tooltip.
+ el.title = `${prod.name} — ${prod.vendor}${prod.sku ? ' · ' + prod.sku : ''}\n(double-click to open on designerwallcoverings.com)`;
el.innerHTML =
`<img class="swatch-img" crossorigin="anonymous" loading="lazy" alt="${esc(short)}" src="${esc(prod.img)}">` +
`<div class="tile-label">` +
`<span class="tl-name">${esc(short)}</span>` +
- `<span class="tl-vendor">${esc(prod.vendor)}${esc(priceStr)}</span>` +
+ `<span class="tl-vendor">${esc(prod.vendor)}</span>` +
`</div>`;
// Degrade gracefully to the procedural texture if a photo ever fails to load
@@ -1365,56 +1343,6 @@ function createSwatchTile(type, palette, x, y, z, id) {
return el;
}
-
-function createColorChip(colorData, x, y, z, id) {
- const el = document.createElement('div');
- el.className = 'tile color-chip';
- el.dataset.id = id;
- el.style.left = x + 'px';
- el.style.top = y + 'px';
- el.style.zIndex = z;
- el.innerHTML = `
- <div class="chip-swatch" style="background:${colorData.hex};"></div>
- <div class="chip-info">
- <div class="chip-name">${colorData.name}</div>
- <div class="chip-hex">${colorData.hex}</div>
- </div>
- `;
- return el;
-}
-
-function createTypeTile(palette, x, y, z, id) {
- const el = document.createElement('div');
- el.className = 'tile type-tile';
- el.dataset.id = id;
- el.style.left = x + 'px';
- el.style.top = y + 'px';
- el.style.zIndex = z;
- el.style.borderLeftColor = palette[2]?.hex || '#c9a961';
- el.innerHTML = `
- <div class="type-tile-serif">Living Room</div>
- <div class="type-tile-sans" style="font-weight:700;letter-spacing:.08em;font-size:8.5px;text-transform:uppercase;color:${palette[2]?.hex||'#c9a961'};margin-bottom:2px;">Cormorant Garamond + Helvetica</div>
- <div class="type-tile-sans">Wallcovering specification<br>reference for client presentation.</div>
- <div class="type-tile-label">Type Pairing</div>
- `;
- return el;
-}
-
-function createMaterialChip(mat, x, y, z, id) {
- const el = document.createElement('div');
- el.className = 'tile material-chip';
- el.dataset.id = id;
- el.style.left = x + 'px';
- el.style.top = y + 'px';
- el.style.zIndex = z;
- el.style.background = mat.bg;
- el.innerHTML = `
- <div class="mat-icon" style="background:${mat.iconBg};">${mat.icon}</div>
- <div class="mat-label" style="color:${mat.color};">${mat.name}</div>
- `;
- return el;
-}
-
/* ============================================================
BOARD POPULATION
============================================================ */
@@ -1735,7 +1663,7 @@ async function openExport() {
await new Promise(r => setTimeout(r, 50));
const exportCanvas = document.getElementById('exportCanvas');
- const ctx = exportCanvas.getContext('2d');
+ const ctx = exportCanvas.getContext('2d', { willReadFrequently: true });
const W = 1080;
const H = 1350;
const data = PRESETS[currentPreset];
@@ -1781,30 +1709,35 @@ async function openExport() {
// --- Render each tile as a colored block with label ---
const sortedTiles = [...tiles].sort((a, b) => (a.z || 0) - (b.z || 0));
+ // Board is real-products-only, so every tile is a swatch tile.
for (const t of sortedTiles) {
- const el = t.el;
- const ex = (t.x * scaleX);
- const ey = (t.y * scaleY);
-
- if (el.classList.contains('swatch-tile')) {
- const sw = 160 * scaleX;
- const sh = 160 * scaleY;
- drawSwatchOnCanvas(ctx, t, ex, ey, sw, sh, data.palette);
- } else if (el.classList.contains('color-chip')) {
- const cw = 80 * scaleX;
- const ch = 110 * scaleY;
- drawChipOnCanvas(ctx, el, ex, ey, cw, ch);
- } else if (el.classList.contains('type-tile')) {
- const tw = 220 * scaleX;
- const th = 130 * scaleY;
- drawTypeOnCanvas(ctx, ex, ey, tw, th, data.palette);
- } else if (el.classList.contains('material-chip')) {
- const mw = 100 * scaleX;
- const mh = 56 * scaleY;
- drawMaterialOnCanvas(ctx, el, ex, ey, mw, mh);
- }
+ if (!t.el.classList.contains('swatch-tile')) continue;
+ drawSwatchOnCanvas(ctx, t, t.x * scaleX, t.y * scaleY, 160 * scaleX, 160 * scaleY, data.palette);
}
+ // --- Color story: sample average colors from the REAL product photos now,
+ // BEFORE the vignette/bar darken the canvas. Truthful "real products only"
+ // palette (replaces the old abstract preset-palette strip). ---
+ const _storyColors = (() => {
+ const st = sortedTiles.filter(t => t.el.classList.contains('swatch-tile'));
+ const out = [];
+ const step = Math.max(1, Math.floor(st.length / 6));
+ for (let i = 0; i < st.length && out.length < 6; i += step) {
+ const t = st[i];
+ const cx = Math.round(t.x * scaleX + 80 * scaleX);
+ const cy = Math.round(t.y * scaleY + 80 * scaleY);
+ try {
+ const px = Math.min(W - 16, Math.max(16, cx)) - 8;
+ const py = Math.min(H - 16, Math.max(16, cy)) - 8;
+ const d = ctx.getImageData(px, py, 16, 16).data;
+ let R = 0, G = 0, B = 0, n = 0;
+ for (let k = 0; k < d.length; k += 4) { R += d[k]; G += d[k+1]; B += d[k+2]; n++; }
+ out.push(`rgb(${Math.round(R/n)},${Math.round(G/n)},${Math.round(B/n)})`);
+ } catch (e) { out.push('#7a6a4a'); }
+ }
+ return out;
+ })();
+
// --- Vignette ---
const vig = ctx.createRadialGradient(W/2, H/2, H*0.35, W/2, H/2, H*0.75);
vig.addColorStop(0, 'rgba(0,0,0,0)');
@@ -1822,30 +1755,25 @@ async function openExport() {
ctx.fillStyle = barGrad;
ctx.fillRect(0, barY - 40, W, barH + 40);
- // --- Color palette strip ---
+ // --- Color-story strip: real colors sampled from the actual wallcoverings ---
const stripY = H - 108;
const stripH = 10;
const stripW = W - 120;
const stripX = 60;
- const colW = stripW / data.palette.length;
- data.palette.forEach((c, i) => {
- ctx.fillStyle = c.hex;
+ const storyColors = _storyColors.length ? _storyColors : ['#7a6a4a'];
+ const colW = stripW / storyColors.length;
+ storyColors.forEach((c, i) => {
+ ctx.fillStyle = c;
ctx.fillRect(stripX + i * colW, stripY, colW, stripH);
});
- // Palette names
- ctx.font = `500 ${Math.round(18)}px -apple-system,Helvetica,Arial,sans-serif`;
- ctx.fillStyle = 'rgba(201,169,97,0.65)';
- ctx.textAlign = 'left';
- data.palette.forEach((c, i) => {
- const cx = stripX + i * colW + colW/2;
- ctx.save();
- ctx.font = `500 16px -apple-system,Helvetica,Arial,sans-serif`;
- ctx.fillStyle = 'rgba(232,227,218,0.55)';
- ctx.textAlign = 'center';
- ctx.fillText(c.name.toUpperCase(), cx, stripY + stripH + 24);
- ctx.restore();
- });
+ // Caption — truthful about where the palette came from (no abstract color names)
+ ctx.save();
+ ctx.font = `500 15px -apple-system,Helvetica,Arial,sans-serif`;
+ ctx.fillStyle = 'rgba(232,227,218,0.50)';
+ ctx.textAlign = 'center';
+ ctx.fillText('COLOR STORY · SAMPLED FROM SELECTED WALLCOVERINGS', W/2, stripY + stripH + 24);
+ ctx.restore();
// --- Brass separator line ---
ctx.strokeStyle = 'rgba(201,169,97,0.50)';
@@ -2032,83 +1960,6 @@ function drawProceduralSwatch(ctx, t, x, y, w, h, palette) {
ctx.globalAlpha = 1;
}
}
-
-function drawChipOnCanvas(ctx, el, x, y, w, h) {
- const hex = el.querySelector('.chip-swatch')?.style.background || '#ccc';
- const name = el.querySelector('.chip-name')?.textContent || '';
- const hexV = el.querySelector('.chip-hex')?.textContent || '';
- const swatchH = h * 0.68;
- const infoH = h - swatchH;
-
- ctx.fillStyle = hex;
- ctx.fillRect(x, y, w, swatchH);
- ctx.fillStyle = '#fff';
- ctx.fillRect(x, y + swatchH, w, infoH);
-
- ctx.font = `700 ${Math.round(w * 0.11)}px -apple-system,Helvetica,Arial,sans-serif`;
- ctx.fillStyle = '#1c1a17';
- ctx.textAlign = 'left';
- ctx.fillText(name.toUpperCase(), x + w*0.08, y + swatchH + infoH * 0.48);
-
- ctx.font = `400 ${Math.round(w * 0.09)}px -apple-system,Helvetica,Arial,sans-serif`;
- ctx.fillStyle = '#888';
- ctx.fillText(hexV, x + w*0.08, y + swatchH + infoH * 0.80);
-}
-
-function drawTypeOnCanvas(ctx, x, y, w, h, palette) {
- const acc = palette[2]?.hex || '#c9a961';
- ctx.fillStyle = '#ffffff';
- ctx.fillRect(x, y, w, h);
- ctx.fillStyle = acc;
- ctx.fillRect(x, y, 3, h);
-
- ctx.font = `600 ${Math.round(h * 0.20)}px Georgia,serif`;
- ctx.fillStyle = '#1c1a17';
- ctx.textAlign = 'left';
- ctx.fillText('Living Room', x + w*0.07, y + h*0.35);
-
- ctx.font = `700 ${Math.round(h * 0.083)}px -apple-system,Helvetica,Arial,sans-serif`;
- ctx.fillStyle = acc;
- ctx.fillText('CORMORANT + HELVETICA', x + w*0.07, y + h*0.55);
-
- ctx.font = `400 ${Math.round(h * 0.083)}px -apple-system,Helvetica,Arial,sans-serif`;
- ctx.fillStyle = '#888';
- ctx.fillText('Wallcovering specification', x + w*0.07, y + h*0.73);
- ctx.fillText('reference for client decks.', x + w*0.07, y + h*0.86);
-}
-
-function drawMaterialOnCanvas(ctx, el, x, y, w, h) {
- const name = el.querySelector('.mat-label')?.textContent || '';
- // Gradient based on material
- let grad;
- if (name === 'Brass') {
- grad = ctx.createLinearGradient(x, y, x+w, y+h);
- grad.addColorStop(0, '#d4b44a');
- grad.addColorStop(0.5, '#c9a961');
- grad.addColorStop(1, '#e0c870');
- } else if (name === 'Marble') {
- grad = ctx.createLinearGradient(x, y, x+w, y+h);
- grad.addColorStop(0, '#f0eee8');
- grad.addColorStop(0.5, '#e8e4dc');
- grad.addColorStop(1, '#f4f2ea');
- } else {
- grad = ctx.createLinearGradient(x, y, x+w, y+h);
- grad.addColorStop(0, '#d8c8a4');
- grad.addColorStop(0.5, '#c4b48e');
- grad.addColorStop(1, '#d0c09a');
- }
- ctx.fillStyle = grad;
- ctx.beginPath();
- ctx.roundRect(x, y, w, h, 4);
- ctx.fill();
-
- const textColor = name === 'Marble' ? '#2a2824' : '#3a2e10';
- ctx.font = `700 ${Math.round(h * 0.22)}px -apple-system,Helvetica,Arial,sans-serif`;
- ctx.fillStyle = textColor;
- ctx.textAlign = 'center';
- ctx.fillText(name.toUpperCase(), x + w/2, y + h*0.62);
-}
-
/* ============================================================
EXPORT OVERLAY CONTROLS
============================================================ */
← f6f19f3 mood-board-studio: material fidelity — replace fabric-mislab
·
back to Model Arena
·
mood-board-studio: cycle-2 Cody-gate fixes — honest export + e76e1ab →