← back to Trending Dw
real-image pipeline scaffold: plan/download/qc/attach scripts + fingerprint-keyed ledger (internal-only marketplace images)
c44ad99f40bd9be5f52651d0e731dd7dbfc05ee8 · 2026-07-15 10:42:29 -0700 · Steve Abrams
Files touched
A data/real-images/manifest.jsonA scripts/attach-real-images.jsA scripts/download-real-images.jsA scripts/plan-real-images.jsA scripts/qc-real-images.jsA scripts/real-lib.js
Diff
commit c44ad99f40bd9be5f52651d0e731dd7dbfc05ee8
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Jul 15 10:42:29 2026 -0700
real-image pipeline scaffold: plan/download/qc/attach scripts + fingerprint-keyed ledger (internal-only marketplace images)
---
data/real-images/manifest.json | 3110 +++++++++++++++++++++++++++++++++++++++
scripts/attach-real-images.js | 43 +
scripts/download-real-images.js | 95 ++
scripts/plan-real-images.js | 56 +
scripts/qc-real-images.js | 72 +
scripts/real-lib.js | 51 +
6 files changed, 3427 insertions(+)
diff --git a/data/real-images/manifest.json b/data/real-images/manifest.json
new file mode 100644
index 0000000..d750d09
--- /dev/null
+++ b/data/real-images/manifest.json
@@ -0,0 +1,3110 @@
+{
+ "plannedAt": "2026-07-15T17:42:17.350Z",
+ "count": 247,
+ "estExaCalls": 491,
+ "estExaCostUsd": 2.46,
+ "batches": [
+ {
+ "batch": "etsy-1",
+ "urlClass": "etsy",
+ "items": [
+ {
+ "id": "TR-001",
+ "fingerprint": "c0f9456906fc21c2",
+ "title": "Dark Botanic: Cheetahs & Monkeys Secret Garden",
+ "company": "xwallcolors",
+ "marketplace": "Etsy",
+ "style": "Animal-Skin Print",
+ "color": "Black",
+ "url": "https://www.etsy.com/shop/xwallcolors",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-002",
+ "fingerprint": "ef4dc765b1ea6850",
+ "title": "Sunrise Landscape Boho Mural",
+ "company": "Wallphy",
+ "marketplace": "Etsy",
+ "style": "Scenic Mural",
+ "color": "Terracotta",
+ "url": "https://www.etsy.com/featured/etsy-wallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-003",
+ "fingerprint": "1fcb172898433b84",
+ "title": "Fern Botanical Naturalist (removable)",
+ "company": "MUSE Wall Studio",
+ "marketplace": "Etsy",
+ "style": "Botanical",
+ "color": "Forest Green",
+ "url": "https://www.etsy.com/featured/etsy-wallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-004",
+ "fingerprint": "4129690cd1352750",
+ "title": "Material Minerals on Brushed Blush",
+ "company": "MUSE Wall Studio",
+ "marketplace": "Etsy",
+ "style": "Texture-Effect",
+ "color": "Blush",
+ "url": "https://www.etsy.com/uk/shop/musewallstudio",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-005",
+ "fingerprint": "3ec28b7873415bc7",
+ "title": "Gray Botanical Ink Leaf",
+ "company": "MUSE Wall Studio",
+ "marketplace": "Etsy",
+ "style": "Botanical",
+ "color": "Greige",
+ "url": "https://www.etsy.com/uk/shop/musewallstudio",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-006",
+ "fingerprint": "fff7613d27edc11a",
+ "title": "Citrus Exotic Fruit Watercolor",
+ "company": "MUSE Wall Studio",
+ "marketplace": "Etsy",
+ "style": "Botanical",
+ "color": "Mustard",
+ "url": "https://www.etsy.com/uk/shop/musewallstudio",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-007",
+ "fingerprint": "ae1e26775eeccb7d",
+ "title": "Snake Botanical Wall Mural",
+ "company": "MUSE Wall Studio",
+ "marketplace": "Etsy",
+ "style": "Botanical",
+ "color": "Pop Pink",
+ "url": "https://www.etsy.com/uk/shop/musewallstudio",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-008",
+ "fingerprint": "c936eb590c093388",
+ "title": "Mineral Science Removable",
+ "company": "MUSE Wall Studio",
+ "marketplace": "Etsy",
+ "style": "Texture-Effect",
+ "color": "Blush",
+ "url": "https://www.etsy.com/uk/shop/musewallstudio",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-009",
+ "fingerprint": "c63e68b01715efd4",
+ "title": "Light Blue Damask",
+ "company": "MUSE Wall Studio",
+ "marketplace": "Etsy",
+ "style": "Damask",
+ "color": "Powder Blue",
+ "url": "https://www.etsy.com/uk/shop/musewallstudio",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-010",
+ "fingerprint": "4a6a4f34c57301bd",
+ "title": "Blue Chevron Watercolor",
+ "company": "MUSE Wall Studio",
+ "marketplace": "Etsy",
+ "style": "Geometric",
+ "color": "Powder Blue",
+ "url": "https://www.etsy.com/uk/shop/musewallstudio",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-011",
+ "fingerprint": "272cfc8f00dd9d4b",
+ "title": "Dalmatian Dot Custom",
+ "company": "MUSE Wall Studio",
+ "marketplace": "Etsy",
+ "style": "Retro Geometric",
+ "color": "Cloud White",
+ "url": "https://www.etsy.com/uk/shop/musewallstudio",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-017",
+ "fingerprint": "68a8100657a9ddd5",
+ "title": "Minimalist Limewash Venetian Plaster",
+ "company": "Livettes",
+ "marketplace": "Etsy",
+ "style": "Texture-Effect",
+ "color": "Greige",
+ "url": "https://www.etsy.com/shop/LivettesWallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ }
+ ]
+ },
+ {
+ "batch": "etsy-2",
+ "urlClass": "etsy",
+ "items": [
+ {
+ "id": "TR-018",
+ "fingerprint": "78c1121be7f943b7",
+ "title": "Gold Chain Metallic",
+ "company": "Livettes",
+ "marketplace": "Etsy",
+ "style": "Art-Deco Geometric",
+ "color": "Gold",
+ "url": "https://www.etsy.com/shop/LivettesWallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-019",
+ "fingerprint": "06354f219cec20b7",
+ "title": "Gold Snake Metallic",
+ "company": "Livettes",
+ "marketplace": "Etsy",
+ "style": "Animal-Skin Print",
+ "color": "Gold",
+ "url": "https://www.etsy.com/shop/LivettesWallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-020",
+ "fingerprint": "330f7e521a9ed495",
+ "title": "Fall Terrazzo",
+ "company": "Livettes",
+ "marketplace": "Etsy",
+ "style": "Abstract Blur",
+ "color": "Rust",
+ "url": "https://www.etsy.com/shop/LivettesWallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-021",
+ "fingerprint": "76512e93c1d2c6cf",
+ "title": "Vintage Botanical Toile (Green)",
+ "company": "Livettes",
+ "marketplace": "Etsy",
+ "style": "Heritage Floral",
+ "color": "Forest Green",
+ "url": "https://www.etsy.com/shop/LivettesWallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-022",
+ "fingerprint": "af8b3c20ff008e91",
+ "title": "Dark Moody Purple Floral",
+ "company": "Livettes",
+ "marketplace": "Etsy",
+ "style": "Dark Floral",
+ "color": "Plum",
+ "url": "https://www.etsy.com/shop/LivettesWallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-023",
+ "fingerprint": "b0f5b9183747fc3e",
+ "title": "Agate Blue Faux Stone",
+ "company": "Livettes",
+ "marketplace": "Etsy",
+ "style": "Texture-Effect",
+ "color": "Powder Blue",
+ "url": "https://www.etsy.com/shop/LivettesWallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-024",
+ "fingerprint": "b3818e9a9baa078f",
+ "title": "Retro Circle Mid-Century (Green/Pink)",
+ "company": "Livettes",
+ "marketplace": "Etsy",
+ "style": "Retro Geometric",
+ "color": "Pop Pink",
+ "url": "https://www.etsy.com/shop/LivettesWallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-025",
+ "fingerprint": "0ab7a0b22c9877fb",
+ "title": "Seamless Crane Chinoiserie (removable)",
+ "company": "WallHalla",
+ "marketplace": "Etsy",
+ "style": "Chinoiserie Mural",
+ "color": "Blush",
+ "url": "https://www.etsy.com/shop/WallHalla",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-026",
+ "fingerprint": "ce3f2fc1cde14615",
+ "title": "Masai Red Zebra (removable)",
+ "company": "WallHalla",
+ "marketplace": "Etsy",
+ "style": "Animal-Skin Print",
+ "color": "Claret",
+ "url": "https://www.etsy.com/shop/WallHalla",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-027",
+ "fingerprint": "427638acec417e9f",
+ "title": "Leopard Jungle Peel & Stick",
+ "company": "WallHalla",
+ "marketplace": "Etsy",
+ "style": "Animal-Skin Print",
+ "color": "Mustard",
+ "url": "https://www.etsy.com/shop/WallHalla",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-028",
+ "fingerprint": "84b85ac096533c4c",
+ "title": "Watercolor Tropical Palm",
+ "company": "WallHalla",
+ "marketplace": "Etsy",
+ "style": "Tropical",
+ "color": "Sage",
+ "url": "https://www.etsy.com/shop/WallHalla",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-029",
+ "fingerprint": "500e54ee3982ccdd",
+ "title": "Abstract Pomegranate (Red & White)",
+ "company": "RoomBloomArt",
+ "marketplace": "Etsy",
+ "style": "Botanical",
+ "color": "Claret",
+ "url": "https://www.etsy.com/featured/etsy-wallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ }
+ ]
+ },
+ {
+ "batch": "etsy-3",
+ "urlClass": "etsy",
+ "items": [
+ {
+ "id": "TR-030",
+ "fingerprint": "a4096c64eca913c0",
+ "title": "Cozy Cottage Floral Scatter (ink & watercolor)",
+ "company": "MerseaHome",
+ "marketplace": "Etsy",
+ "style": "Ditsy Micro-Print",
+ "color": "Sage",
+ "url": "https://www.etsy.com/featured/etsy-wallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-031",
+ "fingerprint": "bc392f61f00f6914",
+ "title": "Fishing Lures (Navy)",
+ "company": "CrabDancer",
+ "marketplace": "Etsy",
+ "style": "Novelty Conversational",
+ "color": "Navy",
+ "url": "https://www.etsy.com/featured/etsy-wallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-032",
+ "fingerprint": "b66cffb3f1b6a5d4",
+ "title": "Dark Galaxy Space Mural",
+ "company": "AccentuWall",
+ "marketplace": "Etsy",
+ "style": "Scenic Mural",
+ "color": "Indigo",
+ "url": "https://www.etsy.com/featured/etsy-wallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-033",
+ "fingerprint": "da4270996bf5bdc1",
+ "title": "Wiggle Harlequin Flower Neckerchief",
+ "company": "KateZarembaCompany",
+ "marketplace": "Etsy",
+ "style": "Retro Psychedelic",
+ "color": "Pop Pink",
+ "url": "https://www.etsy.com/featured/etsy-wallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-034",
+ "fingerprint": "3760902b58c72b1a",
+ "title": "Mexican Embroidery Birds",
+ "company": "TimelessDecorations",
+ "marketplace": "Etsy",
+ "style": "Boho",
+ "color": "Blush",
+ "url": "https://www.etsy.com/uk/shop/TimelessDecorations",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-035",
+ "fingerprint": "43fd6e2f30c8b8a0",
+ "title": "Porcelain Indigo Persian Ikat",
+ "company": "TimelessDecorations",
+ "marketplace": "Etsy",
+ "style": "Paisley / Nomadic",
+ "color": "Indigo",
+ "url": "https://www.etsy.com/uk/shop/TimelessDecorations",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-036",
+ "fingerprint": "7c6082afcc7b1b7d",
+ "title": "Boho Ethnic (Blue & Orange)",
+ "company": "TimelessDecorations",
+ "marketplace": "Etsy",
+ "style": "Boho",
+ "color": "Rust",
+ "url": "https://www.etsy.com/uk/shop/TimelessDecorations",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-037",
+ "fingerprint": "f4c262c6b16f8349",
+ "title": "Mandala Oriental Geometric",
+ "company": "TimelessDecorations",
+ "marketplace": "Etsy",
+ "style": "Paisley / Nomadic",
+ "color": "Teal",
+ "url": "https://www.etsy.com/uk/shop/TimelessDecorations",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-038",
+ "fingerprint": "bf6ce705e04743b1",
+ "title": "Art Deco Texture (Green & White)",
+ "company": "TimelessDecorations",
+ "marketplace": "Etsy",
+ "style": "Art-Deco Geometric",
+ "color": "Forest Green",
+ "url": "https://www.etsy.com/uk/shop/TimelessDecorations",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-039",
+ "fingerprint": "e16bb114addade18",
+ "title": "Tribal African Style (Black & Red)",
+ "company": "TimelessDecorations",
+ "marketplace": "Etsy",
+ "style": "Retro Geometric",
+ "color": "Claret",
+ "url": "https://www.etsy.com/uk/shop/TimelessDecorations",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-040",
+ "fingerprint": "81b92e4bf55f943b",
+ "title": "Gold Ferns & Leaves (dark)",
+ "company": "TimelessDecorations",
+ "marketplace": "Etsy",
+ "style": "Botanical",
+ "color": "Gold",
+ "url": "https://www.etsy.com/uk/shop/TimelessDecorations",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-041",
+ "fingerprint": "b069bcb56698b5db",
+ "title": "Provence Violet Lavender",
+ "company": "TimelessDecorations",
+ "marketplace": "Etsy",
+ "style": "Ditsy Micro-Print",
+ "color": "Plum",
+ "url": "https://www.etsy.com/uk/shop/TimelessDecorations",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ }
+ ]
+ },
+ {
+ "batch": "etsy-4",
+ "urlClass": "etsy",
+ "items": [
+ {
+ "id": "TR-042",
+ "fingerprint": "d71bd6c6ce4c3bff",
+ "title": "Chaotic Dots Monochrome",
+ "company": "TimelessDecorations",
+ "marketplace": "Etsy",
+ "style": "Retro Geometric",
+ "color": "Black",
+ "url": "https://www.etsy.com/uk/shop/TimelessDecorations",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-043",
+ "fingerprint": "dc28bcbe99919878",
+ "title": "Flying Bird Minimalist",
+ "company": "TimelessDecorations",
+ "marketplace": "Etsy",
+ "style": "Ditsy Micro-Print",
+ "color": "Greige",
+ "url": "https://www.etsy.com/uk/shop/TimelessDecorations",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-044",
+ "fingerprint": "7eec936f768dc8e7",
+ "title": "Bee Playground (kids)",
+ "company": "TimelessDecorations",
+ "marketplace": "Etsy",
+ "style": "Novelty Conversational",
+ "color": "Mustard",
+ "url": "https://www.etsy.com/uk/shop/TimelessDecorations",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-045",
+ "fingerprint": "e8234bb26bc85170",
+ "title": "Tropical Flowers (Blue & Green)",
+ "company": "TimelessDecorations",
+ "marketplace": "Etsy",
+ "style": "Tropical",
+ "color": "Teal",
+ "url": "https://www.etsy.com/uk/shop/TimelessDecorations",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-046",
+ "fingerprint": "e01b292ddd4d5ab7",
+ "title": "Fish Pink Under-the-Sea",
+ "company": "SianZeng",
+ "marketplace": "Etsy",
+ "style": "Novelty Conversational",
+ "color": "Blush",
+ "url": "https://www.etsy.com/featured/etsy-wallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-047",
+ "fingerprint": "01fed1ec969baa25",
+ "title": "Garden Party Floral",
+ "company": "Rifle Paper Co (Etsy)",
+ "marketplace": "Etsy",
+ "style": "Heritage Floral",
+ "color": "Blush",
+ "url": "https://www.etsy.com/featured/etsy-wallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-048",
+ "fingerprint": "c7ed7c11bae10431",
+ "title": "Grateful Thread Woven",
+ "company": "Chasing Paper",
+ "marketplace": "Etsy",
+ "style": "Texture-Effect",
+ "color": "Cream",
+ "url": "https://www.etsy.com/featured/etsy-wallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ },
+ {
+ "id": "TR-049",
+ "fingerprint": "929a320faa1ee792",
+ "title": "Vintage Botanical Mural",
+ "company": "Anewall",
+ "marketplace": "Etsy",
+ "style": "Scenic Mural",
+ "color": "Sage",
+ "url": "https://www.etsy.com/featured/etsy-wallpaper",
+ "host": "etsy.com",
+ "urlClass": "etsy"
+ }
+ ]
+ },
+ {
+ "batch": "vendor-1",
+ "urlClass": "vendor",
+ "items": [
+ {
+ "id": "TR-012",
+ "fingerprint": "469112ed0f40143e",
+ "title": "Paintbrush Maze (removable)",
+ "company": "Livettes",
+ "marketplace": "Etsy",
+ "style": "Retro Geometric",
+ "color": "Ombre Blue",
+ "url": "https://livetteswallpaper.com/blogs/interior-blog/meet-our-bestselling-wallpapers",
+ "host": "livetteswallpaper.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-013",
+ "fingerprint": "eada6424bc14e48e",
+ "title": "London Metro Lines",
+ "company": "Livettes",
+ "marketplace": "Etsy",
+ "style": "Retro Geometric",
+ "color": "Black",
+ "url": "https://livetteswallpaper.com/blogs/interior-blog/meet-our-bestselling-wallpapers",
+ "host": "livetteswallpaper.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-014",
+ "fingerprint": "07283c9736eae19a",
+ "title": "Delicate Oversized Floral",
+ "company": "Livettes",
+ "marketplace": "Etsy",
+ "style": "Heritage Floral",
+ "color": "Cloud White",
+ "url": "https://livetteswallpaper.com/blogs/interior-blog/meet-our-bestselling-wallpapers",
+ "host": "livetteswallpaper.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-015",
+ "fingerprint": "951e80bc6fd362ff",
+ "title": "Wildflower Foliage (nursery)",
+ "company": "Livettes",
+ "marketplace": "Etsy",
+ "style": "Ditsy Micro-Print",
+ "color": "Sage",
+ "url": "https://livetteswallpaper.com/blogs/interior-blog/meet-our-bestselling-wallpapers",
+ "host": "livetteswallpaper.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-016",
+ "fingerprint": "c87e268467fa93f8",
+ "title": "Blue Classic Plaid",
+ "company": "Livettes",
+ "marketplace": "Etsy",
+ "style": "Gingham / Check",
+ "color": "Powder Blue",
+ "url": "https://livetteswallpaper.com/blogs/interior-blog/meet-our-bestselling-wallpapers",
+ "host": "livetteswallpaper.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-150",
+ "fingerprint": "3ddd320d8423d628",
+ "title": "Pimpernel",
+ "company": "Morris & Co. (Wallpaperdirect)",
+ "marketplace": "Google / Retail",
+ "style": "Heritage Floral",
+ "color": "Sage",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-151",
+ "fingerprint": "b21164bc3813fbdb",
+ "title": "Strawberry Thief",
+ "company": "William Morris & Co.",
+ "marketplace": "Google / Retail",
+ "style": "Heritage Floral",
+ "color": "Indigo",
+ "url": "https://williammorriswallpaper.co/blogs/guides/wallpaper-trends-2026",
+ "host": "williammorriswallpaper.co",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-152",
+ "fingerprint": "027ad3a070448e21",
+ "title": "Willow Bough",
+ "company": "William Morris at Home",
+ "marketplace": "Google / Retail",
+ "style": "Heritage Floral",
+ "color": "Sage",
+ "url": "https://www.wallpaperdirect.com/us/products/william-morris-at-home/willow-bough/221675",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-153",
+ "fingerprint": "e6e1c1c409ab469f",
+ "title": "Acanthus",
+ "company": "Morris & Co.",
+ "marketplace": "Google / Retail",
+ "style": "Heritage Floral",
+ "color": "Olive",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-154",
+ "fingerprint": "b7a9cd1467d0e97c",
+ "title": "Golden Lily",
+ "company": "Morris & Co.",
+ "marketplace": "Google / Retail",
+ "style": "Heritage Floral",
+ "color": "Forest Green",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-155",
+ "fingerprint": "2a2e3b87075efe46",
+ "title": "Thistle",
+ "company": "Morris & Co.",
+ "marketplace": "Google / Retail",
+ "style": "Heritage Floral",
+ "color": "Claret",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-156",
+ "fingerprint": "0c07236ddf96122f",
+ "title": "Bird & Pomegranate",
+ "company": "Morris & Co.",
+ "marketplace": "Google / Retail",
+ "style": "Botanical",
+ "color": "Teal",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ }
+ ]
+ },
+ {
+ "batch": "vendor-2",
+ "urlClass": "vendor",
+ "items": [
+ {
+ "id": "TR-157",
+ "fingerprint": "af3b4dbde07b8505",
+ "title": "Brer Rabbit",
+ "company": "Morris & Co.",
+ "marketplace": "Google / Retail",
+ "style": "Novelty Conversational",
+ "color": "Peacock Gold",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-158",
+ "fingerprint": "2b2225ba89b375e8",
+ "title": "Morris Seaweed",
+ "company": "Morris & Co.",
+ "marketplace": "Google / Retail",
+ "style": "Botanical",
+ "color": "Olive",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-159",
+ "fingerprint": "f2fd8b44cd969a7e",
+ "title": "Snakeshead",
+ "company": "Morris & Co.",
+ "marketplace": "Google / Retail",
+ "style": "Heritage Floral",
+ "color": "Slate",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-160",
+ "fingerprint": "bc263a7bcd9ab2d7",
+ "title": "Garden (Arts & Crafts damask)",
+ "company": "William Morris at Home",
+ "marketplace": "Google / Retail",
+ "style": "Damask",
+ "color": "Ombre Blue",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-161",
+ "fingerprint": "a8af0db4f6ef427c",
+ "title": "Blackthorn",
+ "company": "William Morris at Home",
+ "marketplace": "Google / Retail",
+ "style": "Botanical",
+ "color": "Charcoal",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-162",
+ "fingerprint": "2cc9bced11bee107",
+ "title": "Honeysuckle",
+ "company": "William Morris at Home",
+ "marketplace": "Google / Retail",
+ "style": "Heritage Floral",
+ "color": "Sage",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-163",
+ "fingerprint": "94d6e549884685a3",
+ "title": "Raphael (Central Park trees)",
+ "company": "Sandberg",
+ "marketplace": "Google / Retail",
+ "style": "Scenic Mural",
+ "color": "Powder Blue",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-164",
+ "fingerprint": "b7e60c0a34ed1144",
+ "title": "Florencecourt",
+ "company": "Cole & Son",
+ "marketplace": "Google / Retail",
+ "style": "Botanical",
+ "color": "Forest Green",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-165",
+ "fingerprint": "99480187e77c2b0d",
+ "title": "Highgrove (peonies & roses)",
+ "company": "Timothy Wilman",
+ "marketplace": "Google / Retail",
+ "style": "Heritage Floral",
+ "color": "Blush",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-166",
+ "fingerprint": "c1608aaa84294d72",
+ "title": "Magnolia Grove",
+ "company": "Laura Ashley",
+ "marketplace": "Google / Retail",
+ "style": "Heritage Floral",
+ "color": "Cream",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-167",
+ "fingerprint": "baaec803e93a4212",
+ "title": "Japanese Garden (birds)",
+ "company": "Arthouse",
+ "marketplace": "Google / Retail",
+ "style": "Chinoiserie Mural",
+ "color": "Teal",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-168",
+ "fingerprint": "434de6d3ae0117a3",
+ "title": "Amelie Texture",
+ "company": "Albany",
+ "marketplace": "Google / Retail",
+ "style": "Texture-Effect",
+ "color": "Greige",
+ "url": "https://www.wallpaperdirect.com/",
+ "host": "wallpaperdirect.com",
+ "urlClass": "vendor"
+ }
+ ]
+ },
+ {
+ "batch": "vendor-3",
+ "urlClass": "vendor",
+ "items": [
+ {
+ "id": "TR-169",
+ "fingerprint": "5638ea6cdccef45a",
+ "title": "Copper Garden",
+ "company": "Wall Blush",
+ "marketplace": "Google / Retail",
+ "style": "Dark Floral",
+ "color": "Oxblood",
+ "url": "https://wallblush.com/collections/best-selling-products",
+ "host": "wallblush.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-170",
+ "fingerprint": "75d516ccacf751ef",
+ "title": "Jagger",
+ "company": "Wall Blush",
+ "marketplace": "Google / Retail",
+ "style": "Retro Geometric",
+ "color": "Charcoal",
+ "url": "https://wallblush.com/collections/best-selling-products",
+ "host": "wallblush.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-171",
+ "fingerprint": "3e0fe463c7d438bc",
+ "title": "Bloom Wild Moody Floral",
+ "company": "The Ania Zwara Line (Wall Blush)",
+ "marketplace": "Google / Retail",
+ "style": "Dark Floral",
+ "color": "Ombre Blue",
+ "url": "https://wallblush.com/products/bloom-wild-wallpaper",
+ "host": "wallblush.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-172",
+ "fingerprint": "8ac260c9c4fdf615",
+ "title": "The Nora Mural",
+ "company": "Wall Blush",
+ "marketplace": "Google / Retail",
+ "style": "Scenic Mural",
+ "color": "Sage",
+ "url": "https://wallblush.com/collections/best-selling-products",
+ "host": "wallblush.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-173",
+ "fingerprint": "1b520f98fd656dc6",
+ "title": "Reality Star (Clay)",
+ "company": "Wall Blush",
+ "marketplace": "Google / Retail",
+ "style": "Texture-Effect",
+ "color": "Terracotta",
+ "url": "https://wallblush.com/collections/best-selling-products",
+ "host": "wallblush.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-174",
+ "fingerprint": "63817889b833cb7e",
+ "title": "Leaf Me Be",
+ "company": "Wall Blush",
+ "marketplace": "Google / Retail",
+ "style": "Botanical",
+ "color": "Sage",
+ "url": "https://wallblush.com/collections/best-selling-products",
+ "host": "wallblush.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-175",
+ "fingerprint": "04152a5bef91827a",
+ "title": "Manhattan Concrete",
+ "company": "Wall Blush",
+ "marketplace": "Google / Retail",
+ "style": "Texture-Effect",
+ "color": "Charcoal",
+ "url": "https://wallblush.com/collections/best-selling-products",
+ "host": "wallblush.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-176",
+ "fingerprint": "cdb37426bf51b786",
+ "title": "Huck & Finn",
+ "company": "Wall Blush",
+ "marketplace": "Google / Retail",
+ "style": "Botanical",
+ "color": "Forest Green",
+ "url": "https://wallblush.com/collections/best-selling-products",
+ "host": "wallblush.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-177",
+ "fingerprint": "d066d461ff6c2eb3",
+ "title": "Selina Boho",
+ "company": "Wall Blush",
+ "marketplace": "Google / Retail",
+ "style": "Boho",
+ "color": "Terracotta",
+ "url": "https://wallblush.com/collections/best-selling-products",
+ "host": "wallblush.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-185",
+ "fingerprint": "01ca889d6eb7af65",
+ "title": "Chinoiserie Garden Mural — Vintage Botanical",
+ "company": "Vivawalls",
+ "marketplace": "Google / Retail",
+ "style": "Chinoiserie Mural",
+ "color": "Plum",
+ "url": "https://vivawalls.com/products/chinoiserie-garden-mural-wallpaper-vintage-botanical-scene",
+ "host": "vivawalls.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-186",
+ "fingerprint": "de79c816aba58aed",
+ "title": "Oriental Garden Crane Mural",
+ "company": "Milton & King",
+ "marketplace": "Google / Retail",
+ "style": "Chinoiserie Mural",
+ "color": "Teal",
+ "url": "https://www.miltonandking.co.uk/product/oriental-garden-mural/",
+ "host": "miltonandking.co.uk",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-187",
+ "fingerprint": "b7e9bcab518245af",
+ "title": "Nijo Saffron Chinoiserie Mural",
+ "company": "Feathr",
+ "marketplace": "Google / Retail",
+ "style": "Chinoiserie Mural",
+ "color": "Mustard",
+ "url": "https://www.feathr.com/global/wall-murals/yellow-floral-chinoiserie-wall-mural-fe48605/",
+ "host": "feathr.com",
+ "urlClass": "vendor"
+ }
+ ]
+ },
+ {
+ "batch": "vendor-4",
+ "urlClass": "vendor",
+ "items": [
+ {
+ "id": "TR-188",
+ "fingerprint": "6543cf4ad46ab0d9",
+ "title": "Botanical Panorama Scenic Mural",
+ "company": "Giffywalls",
+ "marketplace": "Google / Retail",
+ "style": "Scenic Mural",
+ "color": "Teal",
+ "url": "https://www.giffywalls.com/blogs/inspiration-hub/mural-wallpaper-the-biggest-wall-trend-of-2026",
+ "host": "giffywalls.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-189",
+ "fingerprint": "6ee39dbc570d45d2",
+ "title": "Art-Deco Fan & Sunburst Geometric",
+ "company": "MeltFlex trend",
+ "marketplace": "Google / Retail",
+ "style": "Art-Deco Geometric",
+ "color": "Gold",
+ "url": "https://www.meltflexai.com/blog/wallpaper-trends-2026",
+ "host": "meltflexai.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-194",
+ "fingerprint": "33269d2cc3bf54f1",
+ "title": "Oversized Abstract Botanical",
+ "company": "World of Wallpaper",
+ "marketplace": "Google / Retail",
+ "style": "Botanical",
+ "color": "Olive",
+ "url": "https://www.worldofwallpaper.com/us/blog/Wallpaper-Trends-2026-Colours-Textures-Patterns",
+ "host": "worldofwallpaper.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-211",
+ "fingerprint": "2c6dde81a92f60d1",
+ "title": "Weathered Plank Multicolor",
+ "company": "York",
+ "marketplace": "Amazon / Big-box",
+ "style": "Texture-Effect",
+ "color": "Powder Blue",
+ "url": "https://www.decoratorsbest.com/products/york-weathered-plank-multicolor-peel-stick-wallpaper",
+ "host": "decoratorsbest.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-212",
+ "fingerprint": "461d70e2c2863431",
+ "title": "Hadrian Stone Wall",
+ "company": "York",
+ "marketplace": "Amazon / Big-box",
+ "style": "Texture-Effect",
+ "color": "Greige",
+ "url": "https://www.decoratorsbest.com/products/york-hadrian-stone-wall-peel-stick-wallpaper",
+ "host": "decoratorsbest.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-214",
+ "fingerprint": "dfb138fece148019",
+ "title": "Sisal Monochromatic Grasscloth",
+ "company": "Tempaper & Co.",
+ "marketplace": "Amazon / Big-box",
+ "style": "Texture-Effect",
+ "color": "Greige",
+ "url": "https://tempaper.com/",
+ "host": "tempaper.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-215",
+ "fingerprint": "f5a2cdcb39d1d378",
+ "title": "Canopy Toile Faux Grasscloth",
+ "company": "Tempaper & Co.",
+ "marketplace": "Amazon / Big-box",
+ "style": "Texture-Effect",
+ "color": "Sage",
+ "url": "https://tempaper.com/",
+ "host": "tempaper.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-216",
+ "fingerprint": "6373abf85d16c441",
+ "title": "Bursa Stripe Textured",
+ "company": "Tempaper x Pure Salt",
+ "marketplace": "Amazon / Big-box",
+ "style": "Stripe",
+ "color": "Cream",
+ "url": "https://tempaper.com/",
+ "host": "tempaper.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-217",
+ "fingerprint": "e95446e2889253e7",
+ "title": "Strata Mosaic",
+ "company": "Tempaper x Jeremiah Brent",
+ "marketplace": "Amazon / Big-box",
+ "style": "Retro Geometric",
+ "color": "Mushroom",
+ "url": "https://tempaper.com/",
+ "host": "tempaper.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-218",
+ "fingerprint": "5713a30ad823813e",
+ "title": "Hoffmann Faux Sisal",
+ "company": "Tempaper x Jeremiah Brent",
+ "marketplace": "Amazon / Big-box",
+ "style": "Texture-Effect",
+ "color": "Greige",
+ "url": "https://tempaper.com/",
+ "host": "tempaper.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-230",
+ "fingerprint": "7eda28b38208d9f2",
+ "title": "Palm Frond",
+ "company": "Tempaper x Novogratz",
+ "marketplace": "Amazon / Big-box",
+ "style": "Tropical",
+ "color": "Sage",
+ "url": "https://tempaper.com/",
+ "host": "tempaper.com",
+ "urlClass": "vendor"
+ },
+ {
+ "id": "TR-231",
+ "fingerprint": "b8de07f4fac9e68c",
+ "title": "Abstract Wave",
+ "company": "Tempaper x Bobby Berk",
+ "marketplace": "Amazon / Big-box",
+ "style": "Abstract Blur",
+ "color": "Teal",
+ "url": "https://tempaper.com/",
+ "host": "tempaper.com",
+ "urlClass": "vendor"
+ }
+ ]
+ },
+ {
+ "batch": "spoonflower-1",
+ "urlClass": "spoonflower",
+ "items": [
+ {
+ "id": "TR-050",
+ "fingerprint": "993aaac8c8def0da",
+ "title": "Frog Nouveau Art-Nouveau",
+ "company": "Jillian Nichole",
+ "marketplace": "Etsy",
+ "style": "Botanical",
+ "color": "Forest Green",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-054",
+ "fingerprint": "9c0048d9fb9a2d64",
+ "title": "Blush Drift Marble (Soft Futurism)",
+ "company": "yenandpens",
+ "marketplace": "Spoonflower",
+ "style": "Abstract Blur",
+ "color": "Blush",
+ "url": "https://www.spoonflower.com/en/shop/2026-natural-trend",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-055",
+ "fingerprint": "5bd8cbb7bd914b4a",
+ "title": "Goblin’s Grotto (goblincore)",
+ "company": "Jillian Nichole",
+ "marketplace": "Spoonflower",
+ "style": "Mushroom / Goblincore",
+ "color": "Forest Green",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-056",
+ "fingerprint": "b15b3df277a2db2d",
+ "title": "Witch’s Cottage (cozy autumn)",
+ "company": "Jillian Nichole",
+ "marketplace": "Spoonflower",
+ "style": "Botanical",
+ "color": "Rust",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-057",
+ "fingerprint": "987bb21ae141975e",
+ "title": "Sword Garden (pastel recolor)",
+ "company": "Jillian Nichole",
+ "marketplace": "Spoonflower",
+ "style": "Botanical",
+ "color": "Sage",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-058",
+ "fingerprint": "2c162fd83c197fd6",
+ "title": "Feminine Floral Story",
+ "company": "Indy Bloom Designs",
+ "marketplace": "Spoonflower",
+ "style": "Heritage Floral",
+ "color": "Blush",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-059",
+ "fingerprint": "ee4516f3d35fb092",
+ "title": "Stars and Stripes Brown & Cream",
+ "company": "Danika Herrick",
+ "marketplace": "Spoonflower",
+ "style": "Stripe",
+ "color": "Mushroom",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-060",
+ "fingerprint": "4fb2803ada3caaca",
+ "title": "Heritage Charm Plaid & Floral",
+ "company": "Marie Cloud",
+ "marketplace": "Spoonflower",
+ "style": "Gingham / Check",
+ "color": "Sage",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-061",
+ "fingerprint": "fd09ecc4b768fe2a",
+ "title": "Vivid Rhythm Bold Motion",
+ "company": "Marie Cloud",
+ "marketplace": "Spoonflower",
+ "style": "Abstract Blur",
+ "color": "Teal",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-062",
+ "fingerprint": "73feec6a08cf240b",
+ "title": "Hot House Tropical Layered Foliage",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Tropical",
+ "color": "Forest Green",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-063",
+ "fingerprint": "24396bcd51599189",
+ "title": "Artisanal Boho Block & Global Motif",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Boho",
+ "color": "Terracotta",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-064",
+ "fingerprint": "c7fa761cf6f814db",
+ "title": "Romantic Vintage Rococo",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Damask",
+ "color": "Blush",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ }
+ ]
+ },
+ {
+ "batch": "spoonflower-2",
+ "urlClass": "spoonflower",
+ "items": [
+ {
+ "id": "TR-065",
+ "fingerprint": "f4343b2478615104",
+ "title": "Craft Revival Victorian Botanical",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Heritage Floral",
+ "color": "Oxblood",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-066",
+ "fingerprint": "eca58fe40addd80c",
+ "title": "Cottagecore Pastoral Florals",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Ditsy Micro-Print",
+ "color": "Cream",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-067",
+ "fingerprint": "02be936a6c5eb4c9",
+ "title": "Art Deco Roaring-20s",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Art-Deco Geometric",
+ "color": "Gold",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-068",
+ "fingerprint": "e8351fec81a4a574",
+ "title": "Japandi Farmhouse",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Texture-Effect",
+ "color": "Greige",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-069",
+ "fingerprint": "a2bcda7cde8250f2",
+ "title": "Color Confident Conversational",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Novelty Conversational",
+ "color": "Pop Pink",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-070",
+ "fingerprint": "9d0d0eb5ad5bb6a4",
+ "title": "Cabincore Woodland",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Botanical",
+ "color": "Olive",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-071",
+ "fingerprint": "843bf9d1292e3f2c",
+ "title": "Warm Minimalism Soft Hues",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Texture-Effect",
+ "color": "Cream",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-072",
+ "fingerprint": "627b5e32ec097587",
+ "title": "Mid-Century Bold Shapes",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Retro Geometric",
+ "color": "Mustard",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-073",
+ "fingerprint": "d1b48ba902aec415",
+ "title": "William Morris Inspired",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Heritage Floral",
+ "color": "Forest Green",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-074",
+ "fingerprint": "a7956ba04f530fd9",
+ "title": "Chinoiserie Trending Style",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Chinoiserie Mural",
+ "color": "Teal",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-075",
+ "fingerprint": "158f888907834f9e",
+ "title": "Textured & Tonal",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Texture-Effect",
+ "color": "Greige",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-076",
+ "fingerprint": "8cb6f548778a1f92",
+ "title": "Garden Tapestry",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Heritage Floral",
+ "color": "Claret",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ }
+ ]
+ },
+ {
+ "batch": "spoonflower-3",
+ "urlClass": "spoonflower",
+ "items": [
+ {
+ "id": "TR-077",
+ "fingerprint": "6982131ba3588103",
+ "title": "Chintz Revival",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Heritage Floral",
+ "color": "Blush",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-078",
+ "fingerprint": "d36460edcaff7ce7",
+ "title": "Riviera-Inspired Coastal",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Botanical",
+ "color": "Ombre Blue",
+ "url": "https://www.spoonflower.com/en/inspiration/collections",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-079",
+ "fingerprint": "62ef545fc07ab581",
+ "title": "Bazaar Maxima Gator",
+ "company": "holli_zollinger",
+ "marketplace": "Spoonflower",
+ "style": "Boho",
+ "color": "Teal",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-080",
+ "fingerprint": "9ef4585b1cf5c27d",
+ "title": "Marigold Extra-Large",
+ "company": "danika_herrick",
+ "marketplace": "Spoonflower",
+ "style": "Heritage Floral",
+ "color": "Mustard",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-081",
+ "fingerprint": "10fad02e658cbcc2",
+ "title": "William Morris Honeysuckle",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Heritage Floral",
+ "color": "Forest Green",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-082",
+ "fingerprint": "c57865556ef26f09",
+ "title": "Queen Anne’s Lace",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Botanical",
+ "color": "Cloud White",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-083",
+ "fingerprint": "86bb66fb2f551829",
+ "title": "Magical Peony Chintz",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Heritage Floral",
+ "color": "Blush",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-084",
+ "fingerprint": "40ebda2906ee2ba8",
+ "title": "Tropical Blossom Dance",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Tropical",
+ "color": "Sage",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-085",
+ "fingerprint": "cf52bdf4b0fa33bd",
+ "title": "Art Nouveau Honey Bee & Flower",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Botanical",
+ "color": "Mustard",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-086",
+ "fingerprint": "1bed9a6239238c69",
+ "title": "Aegean Stripe Black",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Stripe",
+ "color": "Black",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-087",
+ "fingerprint": "3a27ff59d4436f9e",
+ "title": "Victorian Raspberry",
+ "company": "The Home Edit",
+ "marketplace": "Spoonflower",
+ "style": "Heritage Floral",
+ "color": "Claret",
+ "url": "https://www.spoonflower.com/en/inspiration/collaborations/the-home-edit",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-088",
+ "fingerprint": "3914635e26903f72",
+ "title": "Ivy Tangle (Blue Dusk)",
+ "company": "The Home Edit",
+ "marketplace": "Spoonflower",
+ "style": "Botanical",
+ "color": "Indigo",
+ "url": "https://www.spoonflower.com/en/inspiration/collaborations/the-home-edit",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ }
+ ]
+ },
+ {
+ "batch": "spoonflower-4",
+ "urlClass": "spoonflower",
+ "items": [
+ {
+ "id": "TR-089",
+ "fingerprint": "3534ba9a41e637b6",
+ "title": "Genevieve Olive",
+ "company": "The Home Edit",
+ "marketplace": "Spoonflower",
+ "style": "Ditsy Micro-Print",
+ "color": "Olive",
+ "url": "https://www.spoonflower.com/en/inspiration/collaborations/the-home-edit",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-090",
+ "fingerprint": "41c20256785b99f9",
+ "title": "Kilim Fabric Mushroom",
+ "company": "The Home Edit",
+ "marketplace": "Spoonflower",
+ "style": "Paisley / Nomadic",
+ "color": "Mushroom",
+ "url": "https://www.spoonflower.com/en/inspiration/collaborations/the-home-edit",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-091",
+ "fingerprint": "5a7967bf2be86841",
+ "title": "Rough Stripes Taupe",
+ "company": "The Home Edit",
+ "marketplace": "Spoonflower",
+ "style": "Stripe",
+ "color": "Greige",
+ "url": "https://www.spoonflower.com/en/inspiration/collaborations/the-home-edit",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-092",
+ "fingerprint": "06c2f8602a5212c8",
+ "title": "Block Print Sunflower Blueberry",
+ "company": "The Home Edit",
+ "marketplace": "Spoonflower",
+ "style": "Boho",
+ "color": "Indigo",
+ "url": "https://www.spoonflower.com/en/inspiration/collaborations/the-home-edit",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-093",
+ "fingerprint": "2e0380113d7c4873",
+ "title": "Modern Cinnamon Stripes",
+ "company": "The Home Edit",
+ "marketplace": "Spoonflower",
+ "style": "Stripe",
+ "color": "Rust",
+ "url": "https://www.spoonflower.com/en/inspiration/collaborations/the-home-edit",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-094",
+ "fingerprint": "fe27c5af9266a81e",
+ "title": "New Wildflowers White",
+ "company": "The Home Edit",
+ "marketplace": "Spoonflower",
+ "style": "Ditsy Micro-Print",
+ "color": "Cloud White",
+ "url": "https://www.spoonflower.com/en/inspiration/collaborations/the-home-edit",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-095",
+ "fingerprint": "f538e13eecc01a42",
+ "title": "Cowboy Toile Western",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Novelty Conversational",
+ "color": "Rust",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-096",
+ "fingerprint": "de1c0fd8f7eb45a8",
+ "title": "Pink Parisian Toile",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Heritage Floral",
+ "color": "Blush",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-097",
+ "fingerprint": "81f6efaa9eacdf1f",
+ "title": "Edwina Floral Toss",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Ditsy Micro-Print",
+ "color": "Sage",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-098",
+ "fingerprint": "bb4a0ca36d52e347",
+ "title": "Soft Wildflower Garden Toss",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Ditsy Micro-Print",
+ "color": "Plum",
+ "url": "https://www.spoonflower.com/en/shop/top-sellers",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ },
+ {
+ "id": "TR-099",
+ "fingerprint": "9970fe3f0439dc1b",
+ "title": "Storybook Woodland Toile",
+ "company": "Spoonflower",
+ "marketplace": "Spoonflower",
+ "style": "Novelty Conversational",
+ "color": "Sage",
+ "url": "https://www.spoonflower.com/en/learn/2026-home-and-interior-trends",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower"
+ }
+ ]
+ },
+ {
+ "batch": "spoonflower-product-1",
+ "urlClass": "spoonflower-product",
+ "items": [
+ {
+ "id": "TR-051",
+ "fingerprint": "df2d3ead8272250d",
+ "title": "Pastel Floral Garden — Pantone 2026",
+ "company": "j_couture",
+ "marketplace": "Spoonflower",
+ "style": "Heritage Floral",
+ "color": "Blush",
+ "url": "https://www.spoonflower.com/en/wallpaper/21557185-pastel-floral-garden-pantone-2026-by-j_couture",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower-product"
+ },
+ {
+ "id": "TR-052",
+ "fingerprint": "316cd4c407ba8bd5",
+ "title": "Cloud Dancer Polkadots Tropical — Pantone 2026",
+ "company": "linda-elizabeth",
+ "marketplace": "Spoonflower",
+ "style": "Tropical",
+ "color": "Cloud White",
+ "url": "https://www.spoonflower.com/en/wallpaper/20937145-pantone-color-of-the-year-2026-cloud-dancer-polkadots-large-tropical-by-linda-elizabeth",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower-product"
+ },
+ {
+ "id": "TR-053",
+ "fingerprint": "a310b3e1353e5da4",
+ "title": "Monstera Leaves — Pantone 2026",
+ "company": "tinyisland",
+ "marketplace": "Spoonflower",
+ "style": "Tropical",
+ "color": "Forest Green",
+ "url": "https://www.spoonflower.com/en/wallpaper/21749426-monsteraleaves-pantone2026-bytinyisland-3-by-tinyisland",
+ "host": "spoonflower.com",
+ "urlClass": "spoonflower-product"
+ }
+ ]
+ },
+ {
+ "batch": "patternbank-1",
+ "urlClass": "patternbank",
+ "items": [
+ {
+ "id": "TR-100",
+ "fingerprint": "778396f58b9c14c5",
+ "title": "Abstract Blurs — Ombre Watercolour",
+ "company": "Patternbank AW26-27",
+ "marketplace": "Patternbank",
+ "style": "Abstract Blur",
+ "color": "Ombre Blue",
+ "url": "https://patternbank.com/trends/premiere-vision-AW-26-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-101",
+ "fingerprint": "b0de17862564b239",
+ "title": "Botanical Haze — Floating Florals",
+ "company": "Patternbank AW26-27",
+ "marketplace": "Patternbank",
+ "style": "Botanical",
+ "color": "Sage",
+ "url": "https://patternbank.com/trends/premiere-vision-AW-26-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-102",
+ "fingerprint": "eeefbdb5fcf07cd0",
+ "title": "Nomadic Embellishments — Persian Boteh Paisley",
+ "company": "Patternbank AW26-27",
+ "marketplace": "Patternbank",
+ "style": "Paisley / Nomadic",
+ "color": "Claret",
+ "url": "https://patternbank.com/trends/premiere-vision-AW-26-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-103",
+ "fingerprint": "4a0f21d419b40166",
+ "title": "Painterly Florals — Floral Oil Paintings",
+ "company": "Patternbank AW26-27",
+ "marketplace": "Patternbank",
+ "style": "Heritage Floral",
+ "color": "Oxblood",
+ "url": "https://patternbank.com/trends/premiere-vision-AW-26-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-104",
+ "fingerprint": "bf065dca400c6189",
+ "title": "Interlocking Geometry — Fractal Forms",
+ "company": "Patternbank AW26-27",
+ "marketplace": "Patternbank",
+ "style": "Retro Geometric",
+ "color": "Mustard",
+ "url": "https://patternbank.com/trends/premiere-vision-AW-26-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-105",
+ "fingerprint": "246969b25c3a56fd",
+ "title": "Midnight Flora — Nocturnal Botanicals",
+ "company": "Patternbank AW26-27",
+ "marketplace": "Patternbank",
+ "style": "Dark Floral",
+ "color": "Black",
+ "url": "https://patternbank.com/trends/premiere-vision-AW-26-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-106",
+ "fingerprint": "eb0c2ff2410ba057",
+ "title": "Botanical Haze — Shadow Overlays",
+ "company": "Patternbank AW26-27",
+ "marketplace": "Patternbank",
+ "style": "Abstract Blur",
+ "color": "Greige",
+ "url": "https://patternbank.com/trends/premiere-vision-AW-26-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-107",
+ "fingerprint": "c4d90ed765fefa09",
+ "title": "Nomadic — Kashmiri Paisley",
+ "company": "Patternbank AW26-27",
+ "marketplace": "Patternbank",
+ "style": "Paisley / Nomadic",
+ "color": "Indigo",
+ "url": "https://patternbank.com/trends/premiere-vision-AW-26-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-108",
+ "fingerprint": "3a2a71bc809632f6",
+ "title": "Midnight Flora — Luminous Blooms",
+ "company": "Patternbank AW26-27",
+ "marketplace": "Patternbank",
+ "style": "Dark Floral",
+ "color": "Plum",
+ "url": "https://patternbank.com/trends/premiere-vision-AW-26-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-109",
+ "fingerprint": "9aab8896781c597f",
+ "title": "Interlocking — Loose Linear Outlines",
+ "company": "Patternbank AW26-27",
+ "marketplace": "Patternbank",
+ "style": "Retro Geometric",
+ "color": "Teal",
+ "url": "https://patternbank.com/trends/premiere-vision-AW-26-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-110",
+ "fingerprint": "d58f85305b86f917",
+ "title": "Untamed Garden — Chaotic Ditsy Florals",
+ "company": "Patternbank SS26",
+ "marketplace": "Patternbank",
+ "style": "Ditsy Micro-Print",
+ "color": "Pop Pink",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-26-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-111",
+ "fingerprint": "549a13ede911d908",
+ "title": "Exotic Luxe — Tropical Bird Prints",
+ "company": "Patternbank SS26",
+ "marketplace": "Patternbank",
+ "style": "Tropical",
+ "color": "Teal",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-26-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ }
+ ]
+ },
+ {
+ "batch": "patternbank-2",
+ "urlClass": "patternbank",
+ "items": [
+ {
+ "id": "TR-112",
+ "fingerprint": "d0052ae1696b5676",
+ "title": "Bohemian Summer — Indigo Batik Paisley",
+ "company": "Patternbank SS26",
+ "marketplace": "Patternbank",
+ "style": "Paisley / Nomadic",
+ "color": "Indigo",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-26-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-113",
+ "fingerprint": "6b69f58562d6f762",
+ "title": "Primal Geometry — Totem Graphics",
+ "company": "Patternbank SS26",
+ "marketplace": "Patternbank",
+ "style": "Retro Geometric",
+ "color": "Rust",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-26-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-114",
+ "fingerprint": "76409c16be893cab",
+ "title": "Indigo Escape — Moody Blue Tropicals",
+ "company": "Patternbank SS26",
+ "marketplace": "Patternbank",
+ "style": "Tropical",
+ "color": "Navy",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-26-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-115",
+ "fingerprint": "733af76e5d039099",
+ "title": "Soft Symmetry — Tie-Dye Geometric",
+ "company": "Patternbank SS26",
+ "marketplace": "Patternbank",
+ "style": "Abstract Blur",
+ "color": "Teal",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-26-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-116",
+ "fingerprint": "a86371fffe4a998a",
+ "title": "Exotic Luxe — Saturated Blooms",
+ "company": "Patternbank SS26",
+ "marketplace": "Patternbank",
+ "style": "Tropical",
+ "color": "Claret",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-26-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-117",
+ "fingerprint": "8e5d9f031c89e03f",
+ "title": "Bohemian Summer — Indian Block Prints",
+ "company": "Patternbank SS26",
+ "marketplace": "Patternbank",
+ "style": "Boho",
+ "color": "Terracotta",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-26-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-118",
+ "fingerprint": "9b1e520c4bec6a28",
+ "title": "Untamed Garden — Impressionist Garden",
+ "company": "Patternbank SS26",
+ "marketplace": "Patternbank",
+ "style": "Heritage Floral",
+ "color": "Sage",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-26-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-119",
+ "fingerprint": "532146ae8413b8f9",
+ "title": "Primal Geometry — Tribal Marks",
+ "company": "Patternbank SS26",
+ "marketplace": "Patternbank",
+ "style": "Retro Geometric",
+ "color": "Charcoal",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-26-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-120",
+ "fingerprint": "068e0b639a677ee9",
+ "title": "Dreamy Floral — Ethereal Translucent",
+ "company": "Patternbank SS27",
+ "marketplace": "Patternbank",
+ "style": "Abstract Blur",
+ "color": "Blush",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-121",
+ "fingerprint": "9d13146fca985ed4",
+ "title": "Sweet Motifs — Petite Posies",
+ "company": "Patternbank SS27",
+ "marketplace": "Patternbank",
+ "style": "Ditsy Micro-Print",
+ "color": "Powder Blue",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-122",
+ "fingerprint": "9f68b176082fbd9a",
+ "title": "Retro Geos — Mid-Century Repeats",
+ "company": "Patternbank SS27",
+ "marketplace": "Patternbank",
+ "style": "Retro Geometric",
+ "color": "Mustard",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-123",
+ "fingerprint": "16fc3627eb8ab8e9",
+ "title": "Decorative Paisley Boho Chic",
+ "company": "Patternbank SS27",
+ "marketplace": "Patternbank",
+ "style": "Paisley / Nomadic",
+ "color": "Claret",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ }
+ ]
+ },
+ {
+ "batch": "patternbank-3",
+ "urlClass": "patternbank",
+ "items": [
+ {
+ "id": "TR-124",
+ "fingerprint": "1c40594b9fc4630f",
+ "title": "Large-Scale Statement Florals",
+ "company": "Patternbank SS27",
+ "marketplace": "Patternbank",
+ "style": "Heritage Floral",
+ "color": "Oxblood",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-125",
+ "fingerprint": "469ee232a1f5f8d1",
+ "title": "Distorted Botanicals — Warped Organic",
+ "company": "Patternbank SS27",
+ "marketplace": "Patternbank",
+ "style": "Abstract Blur",
+ "color": "Teal",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-126",
+ "fingerprint": "d8bef40b7c2f3549",
+ "title": "Acid Colour Electric Neons",
+ "company": "Patternbank SS27",
+ "marketplace": "Patternbank",
+ "style": "Retro Psychedelic",
+ "color": "Chartreuse",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-127",
+ "fingerprint": "26547313da484daa",
+ "title": "Kaleidoscopic Geo Mosaic",
+ "company": "Patternbank SS27",
+ "marketplace": "Patternbank",
+ "style": "Retro Geometric",
+ "color": "Teal",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-27-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-128",
+ "fingerprint": "13e4b400744f3afb",
+ "title": "Floaty Florals",
+ "company": "Patternbank Resort26",
+ "marketplace": "Patternbank",
+ "style": "Heritage Floral",
+ "color": "Blush",
+ "url": "https://patternbank.com/catwalk/Resort-2026-print-pattern-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-129",
+ "fingerprint": "d34d044e44405897",
+ "title": "Dotty",
+ "company": "Patternbank Resort26",
+ "marketplace": "Patternbank",
+ "style": "Retro Geometric",
+ "color": "Navy",
+ "url": "https://patternbank.com/catwalk/Resort-2026-print-pattern-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-130",
+ "fingerprint": "612d9d6d4044448c",
+ "title": "Rugs & Blankets (kilim)",
+ "company": "Patternbank Resort26",
+ "marketplace": "Patternbank",
+ "style": "Paisley / Nomadic",
+ "color": "Rust",
+ "url": "https://patternbank.com/catwalk/Resort-2026-print-pattern-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-131",
+ "fingerprint": "8952310482a9f462",
+ "title": "Dreamtime",
+ "company": "Patternbank Resort26",
+ "marketplace": "Patternbank",
+ "style": "Abstract Blur",
+ "color": "Ombre Blue",
+ "url": "https://patternbank.com/catwalk/Resort-2026-print-pattern-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-132",
+ "fingerprint": "945bc43c45c65653",
+ "title": "Artistic Textures — Psychedelic Shibori",
+ "company": "Patternbank Catwalk",
+ "marketplace": "Patternbank",
+ "style": "Retro Psychedelic",
+ "color": "Indigo",
+ "url": "https://patternbank.com/catwalk/spring-summer-2026-catwalk-print-pattern-trend-report",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-133",
+ "fingerprint": "3438400fa94a1819",
+ "title": "Bedtime Florals — Sprigged Cotton",
+ "company": "Patternbank Catwalk",
+ "marketplace": "Patternbank",
+ "style": "Ditsy Micro-Print",
+ "color": "Blush",
+ "url": "https://patternbank.com/catwalk/spring-summer-2026-catwalk-print-pattern-trend-report",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-134",
+ "fingerprint": "793f2dc8b8185e75",
+ "title": "Floral Stencil — Lino Prints",
+ "company": "Patternbank Catwalk",
+ "marketplace": "Patternbank",
+ "style": "Heritage Floral",
+ "color": "Forest Green",
+ "url": "https://patternbank.com/catwalk/spring-summer-2026-catwalk-print-pattern-trend-report",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-135",
+ "fingerprint": "6f1ef4ce853da461",
+ "title": "Painterly Florals — Expressive Roses",
+ "company": "Patternbank Catwalk",
+ "marketplace": "Patternbank",
+ "style": "Heritage Floral",
+ "color": "Claret",
+ "url": "https://patternbank.com/catwalk/spring-summer-2026-catwalk-print-pattern-trend-report",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ }
+ ]
+ },
+ {
+ "batch": "patternbank-4",
+ "urlClass": "patternbank",
+ "items": [
+ {
+ "id": "TR-136",
+ "fingerprint": "f9d478d62d22ef99",
+ "title": "Stripe Variations — Optical Stripe",
+ "company": "Patternbank Catwalk",
+ "marketplace": "Patternbank",
+ "style": "Stripe",
+ "color": "Black",
+ "url": "https://patternbank.com/catwalk/spring-summer-2026-catwalk-print-pattern-trend-report",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-137",
+ "fingerprint": "7919fd38068453e6",
+ "title": "Artistic Textures — Inky Blurs",
+ "company": "Patternbank Catwalk",
+ "marketplace": "Patternbank",
+ "style": "Abstract Blur",
+ "color": "Teal",
+ "url": "https://patternbank.com/catwalk/spring-summer-2026-catwalk-print-pattern-trend-report",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-138",
+ "fingerprint": "8ad2bfc204b3ab62",
+ "title": "Dark Blooms — Gothic Ghostly Flowers",
+ "company": "Patternbank AW25-26",
+ "marketplace": "Patternbank",
+ "style": "Dark Floral",
+ "color": "Black",
+ "url": "https://patternbank.com/trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-139",
+ "fingerprint": "478f38dd7b46394d",
+ "title": "Brushstrokes — Loose Dab Marks",
+ "company": "Patternbank AW25-26",
+ "marketplace": "Patternbank",
+ "style": "Abstract Blur",
+ "color": "Rust",
+ "url": "https://patternbank.com/trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-140",
+ "fingerprint": "47d52ff63c20782f",
+ "title": "Enticing Erosion — Natural Bleed",
+ "company": "Patternbank AW25-26",
+ "marketplace": "Patternbank",
+ "style": "Abstract Blur",
+ "color": "Greige",
+ "url": "https://patternbank.com/trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-141",
+ "fingerprint": "992ef6be03359540",
+ "title": "Linear Traced — Fine Contours",
+ "company": "Patternbank AW25-26",
+ "marketplace": "Patternbank",
+ "style": "Retro Geometric",
+ "color": "Charcoal",
+ "url": "https://patternbank.com/trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-142",
+ "fingerprint": "4829c42b034733c2",
+ "title": "Black & White Impact — Optical Diagonals",
+ "company": "Patternbank AW25-26",
+ "marketplace": "Patternbank",
+ "style": "Retro Geometric",
+ "color": "Black",
+ "url": "https://patternbank.com/trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-143",
+ "fingerprint": "afd6edbdd3087217",
+ "title": "Fall Bouquet — Dark Earthy Florals",
+ "company": "Patternbank AW25-26",
+ "marketplace": "Patternbank",
+ "style": "Dark Floral",
+ "color": "Oxblood",
+ "url": "https://patternbank.com/trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-144",
+ "fingerprint": "3e6d9d93d38f2556",
+ "title": "Maxi Floral",
+ "company": "Patternbank Trends",
+ "marketplace": "Patternbank",
+ "style": "Heritage Floral",
+ "color": "Plum",
+ "url": "https://patternbank.com/trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-145",
+ "fingerprint": "7008229ce0974f5c",
+ "title": "Candy Stripe",
+ "company": "Patternbank Trends",
+ "marketplace": "Patternbank",
+ "style": "Stripe",
+ "color": "Pop Pink",
+ "url": "https://patternbank.com/trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-146",
+ "fingerprint": "8652ed0fd1d1bb56",
+ "title": "Tropical Haze",
+ "company": "Patternbank Trends",
+ "marketplace": "Patternbank",
+ "style": "Tropical",
+ "color": "Sage",
+ "url": "https://patternbank.com/trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-147",
+ "fingerprint": "089376044a2b7896",
+ "title": "Garden Florals",
+ "company": "Patternbank Trends",
+ "marketplace": "Patternbank",
+ "style": "Heritage Floral",
+ "color": "Forest Green",
+ "url": "https://patternbank.com/trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ }
+ ]
+ },
+ {
+ "batch": "patternbank-5",
+ "urlClass": "patternbank",
+ "items": [
+ {
+ "id": "TR-148",
+ "fingerprint": "4ad87c15a83ed808",
+ "title": "Floral Symmetry",
+ "company": "Patternbank Trends",
+ "marketplace": "Patternbank",
+ "style": "Damask",
+ "color": "Claret",
+ "url": "https://patternbank.com/trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-149",
+ "fingerprint": "b32843d1a862c88e",
+ "title": "Monochromatic Minimal",
+ "company": "Patternbank Trends",
+ "marketplace": "Patternbank",
+ "style": "Abstract Blur",
+ "color": "Charcoal",
+ "url": "https://patternbank.com/trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ },
+ {
+ "id": "TR-190",
+ "fingerprint": "aa991f0f35e4a1c9",
+ "title": "Chartreuse Metallic Stepped Deco",
+ "company": "Trend forecast",
+ "marketplace": "Google / Retail",
+ "style": "Art-Deco Geometric",
+ "color": "Chartreuse",
+ "url": "https://patternbank.com/trends/premiere-vision-SS-26-print-trends",
+ "host": "patternbank.com",
+ "urlClass": "patternbank"
+ }
+ ]
+ },
+ {
+ "batch": "listicle-1",
+ "urlClass": "listicle",
+ "items": [
+ {
+ "id": "TR-178",
+ "fingerprint": "f0543df70aec54e2",
+ "title": "Rose-Hued Cheetah Print",
+ "company": "House of Hackney",
+ "marketplace": "Google / Retail",
+ "style": "Animal-Skin Print",
+ "color": "Blush",
+ "url": "https://www.countryandtownhouse.com/interiors/wallpaper-trends-2026/",
+ "host": "countryandtownhouse.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-179",
+ "fingerprint": "ee2850a422177a35",
+ "title": "Verdant Green Tiger Print",
+ "company": "House of Hackney",
+ "marketplace": "Google / Retail",
+ "style": "Animal-Skin Print",
+ "color": "Forest Green",
+ "url": "https://www.countryandtownhouse.com/interiors/wallpaper-trends-2026/",
+ "host": "countryandtownhouse.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-180",
+ "fingerprint": "062be1ea3128c0eb",
+ "title": "Layered Heritage Damask",
+ "company": "House of Hackney",
+ "marketplace": "Google / Retail",
+ "style": "Damask",
+ "color": "Oxblood",
+ "url": "https://www.countryandtownhouse.com/interiors/wallpaper-trends-2026/",
+ "host": "countryandtownhouse.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-181",
+ "fingerprint": "d1d827ca96681405",
+ "title": "Grasscloth with Metallic Threads",
+ "company": "Sasha Bikoff (designer)",
+ "marketplace": "Google / Retail",
+ "style": "Texture-Effect",
+ "color": "Greige",
+ "url": "https://www.goodhousekeeping.com/home/decorating-ideas/g70161758/wallpaper-trends-2026/",
+ "host": "goodhousekeeping.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-182",
+ "fingerprint": "2f14cbc5eded5d7b",
+ "title": "Tweed Faux-Fabric",
+ "company": "Kelsey Deirdre (designer)",
+ "marketplace": "Google / Retail",
+ "style": "Texture-Effect",
+ "color": "Mushroom",
+ "url": "https://www.goodhousekeeping.com/home/decorating-ideas/g70161758/wallpaper-trends-2026/",
+ "host": "goodhousekeeping.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-183",
+ "fingerprint": "29f0d89d086b65d3",
+ "title": "Linen-Weave Embroidery Illusion",
+ "company": "Harlequin (Flora Daly)",
+ "marketplace": "Google / Retail",
+ "style": "Texture-Effect",
+ "color": "Cloud White",
+ "url": "https://www.countryandtownhouse.com/interiors/wallpaper-trends-2026/",
+ "host": "countryandtownhouse.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-184",
+ "fingerprint": "0a3ed5423112c1cf",
+ "title": "1920s Sunflower Vintage Floral",
+ "company": "Peter Dunham (designer)",
+ "marketplace": "Google / Retail",
+ "style": "Heritage Floral",
+ "color": "Mustard",
+ "url": "https://www.goodhousekeeping.com/home/decorating-ideas/g70161758/wallpaper-trends-2026/",
+ "host": "goodhousekeeping.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-191",
+ "fingerprint": "25c0dfea5bd91e7e",
+ "title": "Grasscloth-Effect Textured Plain",
+ "company": "Wallpaperdirect editors",
+ "marketplace": "Google / Retail",
+ "style": "Texture-Effect",
+ "color": "Greige",
+ "url": "https://blog.wallpaperdirect.com/wallpaper-trends-forecast-2025-2/",
+ "host": "blog.wallpaperdirect.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-192",
+ "fingerprint": "55a700ff35cc7288",
+ "title": "Timeless Floral Stripe",
+ "company": "GP&J Baker",
+ "marketplace": "Google / Retail",
+ "style": "Stripe",
+ "color": "Mustard",
+ "url": "https://blog.wallpaperdirect.com/wallpaper-trends-forecast-2025-2/",
+ "host": "blog.wallpaperdirect.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-193",
+ "fingerprint": "b04f47044e009492",
+ "title": "Earthy Statement Stripe",
+ "company": "Josephine Munsey",
+ "marketplace": "Google / Retail",
+ "style": "Stripe",
+ "color": "Mushroom",
+ "url": "https://blog.wallpaperdirect.com/wallpaper-trends-forecast-2025-2/",
+ "host": "blog.wallpaperdirect.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-195",
+ "fingerprint": "1d4948f2492ac3f3",
+ "title": "Conversational Whimsy Print",
+ "company": "Sarah Storms (designer)",
+ "marketplace": "Google / Retail",
+ "style": "Novelty Conversational",
+ "color": "Teal",
+ "url": "https://www.goodhousekeeping.com/home/decorating-ideas/g70161758/wallpaper-trends-2026/",
+ "host": "goodhousekeeping.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-196",
+ "fingerprint": "2bbc6b6a5bb16af7",
+ "title": "Small-Scale Nostalgic Floral",
+ "company": "Jennifer Pacca (designer)",
+ "marketplace": "Google / Retail",
+ "style": "Ditsy Micro-Print",
+ "color": "Blush",
+ "url": "https://www.goodhousekeeping.com/home/decorating-ideas/g70161758/wallpaper-trends-2026/",
+ "host": "goodhousekeeping.com",
+ "urlClass": "listicle"
+ }
+ ]
+ },
+ {
+ "batch": "listicle-2",
+ "urlClass": "listicle",
+ "items": [
+ {
+ "id": "TR-197",
+ "fingerprint": "8e5bade8ba7fbd35",
+ "title": "Painterly Botanical Panorama",
+ "company": "Wallpaperdirect editors",
+ "marketplace": "Google / Retail",
+ "style": "Scenic Mural",
+ "color": "Teal",
+ "url": "https://blog.wallpaperdirect.com/wallpaper-trends-forecast-2025-2/",
+ "host": "blog.wallpaperdirect.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-198",
+ "fingerprint": "7573bfe936792e5a",
+ "title": "Garden Party Floral",
+ "company": "Rifle Paper Co. (York)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Heritage Floral",
+ "color": "Blush",
+ "url": "https://wildfireinteriors.com/i-tested-12-peel-and-stick-wallpapers-on-textured-walls-my-5-month-results/",
+ "host": "wildfireinteriors.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-199",
+ "fingerprint": "d10bec217a482ad8",
+ "title": "Roman Holiday by Barbie™",
+ "company": "Wallshoppe",
+ "marketplace": "Amazon / Big-box",
+ "style": "Novelty Conversational",
+ "color": "Pop Pink",
+ "url": "https://www.bhg.com/home-improvement/walls/wallpapering/best-removable-wallpapers/",
+ "host": "bhg.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-200",
+ "fingerprint": "b54fef657399d16e",
+ "title": "Pink Trellis",
+ "company": "The Pioneer Woman (Walmart)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Heritage Trellis",
+ "color": "Blush",
+ "url": "https://www.bhg.com/home-improvement/walls/wallpapering/best-removable-wallpapers/",
+ "host": "bhg.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-201",
+ "fingerprint": "066190a8c2af2f22",
+ "title": "Modern Peel & Stick",
+ "company": "OSECAGE (Amazon)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Texture-Effect",
+ "color": "Cloud White",
+ "url": "https://www.bhg.com/home-improvement/walls/wallpapering/best-removable-wallpapers/",
+ "host": "bhg.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-202",
+ "fingerprint": "8c3761447e57a811",
+ "title": "Herringbone",
+ "company": "Threshold (Target)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Geometric",
+ "color": "Greige",
+ "url": "https://www.bhg.com/home-improvement/walls/wallpapering/best-removable-wallpapers/",
+ "host": "bhg.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-203",
+ "fingerprint": "1d449661486bd7d3",
+ "title": "Ethan-Jay",
+ "company": "Bungalow Rose (Wayfair)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Botanical",
+ "color": "Sage",
+ "url": "https://www.thespruce.com/best-removable-wallpaper-4165109",
+ "host": "thespruce.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-204",
+ "fingerprint": "3ebc40156bf01f4b",
+ "title": "Modern Delicate Herringbone",
+ "company": "Livettes",
+ "marketplace": "Amazon / Big-box",
+ "style": "Geometric",
+ "color": "Powder Blue",
+ "url": "https://www.thespruce.com/best-removable-wallpaper-4165109",
+ "host": "thespruce.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-205",
+ "fingerprint": "b959314968c73d9f",
+ "title": "Intersections",
+ "company": "Tempaper & Co. (West Elm)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Retro Geometric",
+ "color": "Charcoal",
+ "url": "https://www.thespruce.com/best-removable-wallpaper-4165109",
+ "host": "thespruce.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-206",
+ "fingerprint": "fc81562e25c6d45a",
+ "title": "Arthouse Ochre Bird Garden",
+ "company": "NextWall (Amazon)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Chinoiserie Mural",
+ "color": "Mustard",
+ "url": "https://www.thespruce.com/best-removable-wallpaper-4165109",
+ "host": "thespruce.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-207",
+ "fingerprint": "7877572bf1027326",
+ "title": "Awning Stripe",
+ "company": "RoomMates (Amazon)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Stripe",
+ "color": "Navy",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-208",
+ "fingerprint": "aa5813b12dea036d",
+ "title": "Charcoal Meraki",
+ "company": "NuWallpaper",
+ "marketplace": "Amazon / Big-box",
+ "style": "Retro Geometric",
+ "color": "Charcoal",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ }
+ ]
+ },
+ {
+ "batch": "listicle-3",
+ "urlClass": "listicle",
+ "items": [
+ {
+ "id": "TR-209",
+ "fingerprint": "bef79291ebd5f8d6",
+ "title": "Feather Flock (Mid-Century birds)",
+ "company": "Tempaper x Genevieve Gorder",
+ "marketplace": "Amazon / Big-box",
+ "style": "Animal-Skin Print",
+ "color": "Blush",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-210",
+ "fingerprint": "88526bed20161170",
+ "title": "Geometric",
+ "company": "MelunMer (Amazon)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Retro Geometric",
+ "color": "Teal",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-213",
+ "fingerprint": "49d955e4b5a7e038",
+ "title": "Grateful Thread",
+ "company": "Chasing Paper",
+ "marketplace": "Amazon / Big-box",
+ "style": "Texture-Effect",
+ "color": "Cream",
+ "url": "https://www.thespruce.com/best-removable-wallpaper-4165109",
+ "host": "thespruce.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-219",
+ "fingerprint": "256671405f3c91ea",
+ "title": "Vintage Botanical Mural",
+ "company": "Anewall",
+ "marketplace": "Amazon / Big-box",
+ "style": "Scenic Mural",
+ "color": "Sage",
+ "url": "https://wildfireinteriors.com/i-tested-12-peel-and-stick-wallpapers-on-textured-walls-my-5-month-results/",
+ "host": "wildfireinteriors.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-220",
+ "fingerprint": "e267bcff30b9dbb4",
+ "title": "Feather Removable",
+ "company": "Serena & Lily",
+ "marketplace": "Amazon / Big-box",
+ "style": "Novelty Conversational",
+ "color": "Powder Blue",
+ "url": "https://wildfireinteriors.com/i-tested-12-peel-and-stick-wallpapers-on-textured-walls-my-5-month-results/",
+ "host": "wildfireinteriors.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-221",
+ "fingerprint": "217b33c3e564e854",
+ "title": "Painterly Floral",
+ "company": "Love vs. Design",
+ "marketplace": "Amazon / Big-box",
+ "style": "Heritage Floral",
+ "color": "Blush",
+ "url": "https://wildfireinteriors.com/i-tested-12-peel-and-stick-wallpapers-on-textured-walls-my-5-month-results/",
+ "host": "wildfireinteriors.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-222",
+ "fingerprint": "c90f1f20fffda7b5",
+ "title": "Boho Medallion",
+ "company": "Opalhouse (Target)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Boho",
+ "color": "Terracotta",
+ "url": "https://wildfireinteriors.com/i-tested-12-peel-and-stick-wallpapers-on-textured-walls-my-5-month-results/",
+ "host": "wildfireinteriors.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-223",
+ "fingerprint": "ac41cd2e30fc5cbe",
+ "title": "Modern Geometric",
+ "company": "InHome (Amazon)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Retro Geometric",
+ "color": "Navy",
+ "url": "https://wildfireinteriors.com/i-tested-12-peel-and-stick-wallpapers-on-textured-walls-my-5-month-results/",
+ "host": "wildfireinteriors.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-224",
+ "fingerprint": "c2a1f7a46f1e3689",
+ "title": "Grasscloth Natural",
+ "company": "NuWallpaper",
+ "marketplace": "Amazon / Big-box",
+ "style": "Texture-Effect",
+ "color": "Greige",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-225",
+ "fingerprint": "dcb959531834ef71",
+ "title": "Bohemian Wildflower",
+ "company": "NuWallpaper",
+ "marketplace": "Amazon / Big-box",
+ "style": "Boho",
+ "color": "Sage",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-226",
+ "fingerprint": "5f4e05e4950ae73b",
+ "title": "Watercolor Floral",
+ "company": "RoomMates",
+ "marketplace": "Amazon / Big-box",
+ "style": "Heritage Floral",
+ "color": "Blush",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-227",
+ "fingerprint": "0881d0c9c4440aa9",
+ "title": "Marble Contact",
+ "company": "RoomMates",
+ "marketplace": "Amazon / Big-box",
+ "style": "Texture-Effect",
+ "color": "Cloud White",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ }
+ ]
+ },
+ {
+ "batch": "listicle-4",
+ "urlClass": "listicle",
+ "items": [
+ {
+ "id": "TR-228",
+ "fingerprint": "1ce6af7bab30d9ac",
+ "title": "Peonies Cream",
+ "company": "York (Rifle Paper Co.)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Heritage Floral",
+ "color": "Cream",
+ "url": "https://wildfireinteriors.com/i-tested-12-peel-and-stick-wallpapers-on-textured-walls-my-5-month-results/",
+ "host": "wildfireinteriors.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-229",
+ "fingerprint": "35fa928dbe91bb8c",
+ "title": "Wildwood",
+ "company": "York (Rifle Paper Co.)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Botanical",
+ "color": "Forest Green",
+ "url": "https://wildfireinteriors.com/i-tested-12-peel-and-stick-wallpapers-on-textured-walls-my-5-month-results/",
+ "host": "wildfireinteriors.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-232",
+ "fingerprint": "1597d04150badcb5",
+ "title": "Deco Palm",
+ "company": "Wallshoppe",
+ "marketplace": "Amazon / Big-box",
+ "style": "Art-Deco Geometric",
+ "color": "Gold",
+ "url": "https://www.bhg.com/home-improvement/walls/wallpapering/best-removable-wallpapers/",
+ "host": "bhg.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-233",
+ "fingerprint": "8b84c1f180cb42e1",
+ "title": "Scallop Stripe",
+ "company": "Wallshoppe",
+ "marketplace": "Amazon / Big-box",
+ "style": "Stripe",
+ "color": "Blush",
+ "url": "https://www.bhg.com/home-improvement/walls/wallpapering/best-removable-wallpapers/",
+ "host": "bhg.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-234",
+ "fingerprint": "b5a6ba09b6610a71",
+ "title": "Terracotta Arch",
+ "company": "Walls Need Love",
+ "marketplace": "Amazon / Big-box",
+ "style": "Abstract Blur",
+ "color": "Terracotta",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-235",
+ "fingerprint": "1b9c0684c6e8c661",
+ "title": "Botanical Trail",
+ "company": "Carter + Main",
+ "marketplace": "Amazon / Big-box",
+ "style": "Botanical",
+ "color": "Sage",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-236",
+ "fingerprint": "5fc82a561414c110",
+ "title": "Grand Palms",
+ "company": "Astek Home",
+ "marketplace": "Amazon / Big-box",
+ "style": "Tropical",
+ "color": "Forest Green",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-237",
+ "fingerprint": "fa9d1580299ac8fd",
+ "title": "Modern Marble",
+ "company": "Scott Living (NuWallpaper)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Texture-Effect",
+ "color": "Charcoal",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-238",
+ "fingerprint": "24d92feb2b760bc0",
+ "title": "Concrete Grey",
+ "company": "d-c-fix (Amazon)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Texture-Effect",
+ "color": "Charcoal",
+ "url": "https://www.bhg.com/home-improvement/walls/wallpapering/best-removable-wallpapers/",
+ "host": "bhg.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-239",
+ "fingerprint": "42c79caea940318a",
+ "title": "Vintage Floral",
+ "company": "HaokHome (Amazon)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Heritage Floral",
+ "color": "Sage",
+ "url": "https://www.bhg.com/home-improvement/walls/wallpapering/best-removable-wallpapers/",
+ "host": "bhg.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-240",
+ "fingerprint": "024e5ded84e6258c",
+ "title": "Grasscloth Faux",
+ "company": "HaokHome (Amazon)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Texture-Effect",
+ "color": "Greige",
+ "url": "https://www.bhg.com/home-improvement/walls/wallpapering/best-removable-wallpapers/",
+ "host": "bhg.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-241",
+ "fingerprint": "6a99e599d9b2d2b3",
+ "title": "Strawberry Fields",
+ "company": "Rifle Paper Co.",
+ "marketplace": "Amazon / Big-box",
+ "style": "Ditsy Micro-Print",
+ "color": "Pop Pink",
+ "url": "https://wildfireinteriors.com/i-tested-12-peel-and-stick-wallpapers-on-textured-walls-my-5-month-results/",
+ "host": "wildfireinteriors.com",
+ "urlClass": "listicle"
+ }
+ ]
+ },
+ {
+ "batch": "listicle-5",
+ "urlClass": "listicle",
+ "items": [
+ {
+ "id": "TR-242",
+ "fingerprint": "9af7b9dd44a38ff8",
+ "title": "Marble Peel & Stick",
+ "company": "Tempaper",
+ "marketplace": "Amazon / Big-box",
+ "style": "Texture-Effect",
+ "color": "Cloud White",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-243",
+ "fingerprint": "fcf2d5d90e793968",
+ "title": "Woodland Fox (kids)",
+ "company": "RoomMates",
+ "marketplace": "Amazon / Big-box",
+ "style": "Novelty Conversational",
+ "color": "Rust",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-244",
+ "fingerprint": "80f8ccbe027cb3a5",
+ "title": "Blush Pink Trellis",
+ "company": "NuWallpaper",
+ "marketplace": "Amazon / Big-box",
+ "style": "Heritage Trellis",
+ "color": "Blush",
+ "url": "https://www.realsimple.com/home-organizing/decorating/best-removable-wallpaper",
+ "host": "realsimple.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-245",
+ "fingerprint": "7e9af9db9e49dd45",
+ "title": "Bloomsbury Floral",
+ "company": "Threshold (Target)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Heritage Floral",
+ "color": "Sage",
+ "url": "https://www.bhg.com/home-improvement/walls/wallpapering/best-removable-wallpapers/",
+ "host": "bhg.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-246",
+ "fingerprint": "845ea368086ce9e3",
+ "title": "Global Stripe",
+ "company": "Opalhouse (Target)",
+ "marketplace": "Amazon / Big-box",
+ "style": "Stripe",
+ "color": "Rust",
+ "url": "https://www.bhg.com/home-improvement/walls/wallpapering/best-removable-wallpapers/",
+ "host": "bhg.com",
+ "urlClass": "listicle"
+ },
+ {
+ "id": "TR-247",
+ "fingerprint": "d88dca0e1fa6ca3f",
+ "title": "Ceiling Star",
+ "company": "Wallshoppe",
+ "marketplace": "Amazon / Big-box",
+ "style": "Novelty Conversational",
+ "color": "Navy",
+ "url": "https://www.bhg.com/home-improvement/walls/wallpapering/best-removable-wallpapers/",
+ "host": "bhg.com",
+ "urlClass": "listicle"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/scripts/attach-real-images.js b/scripts/attach-real-images.js
new file mode 100644
index 0000000..af3511c
--- /dev/null
+++ b/scripts/attach-real-images.js
@@ -0,0 +1,43 @@
+#!/usr/bin/env node
+// attach-real-images.js — merge qc-passed real product images into bestsellers.json.
+// Fingerprint-keyed (survives the TR-id churn scout-to-bestsellers.js causes on refresh).
+// Writes ONLY the realImage* fields. `image`/`imageSource`/`imageDesign`/`isOurOriginal` are
+// our-own-design fields consumed by the Shopify staging flow and are NEVER touched here —
+// competitor marketplace images must never become stageable product images.
+// Run AFTER attach-images.js in any refresh (documented in refresh.sh + README).
+const fs = require('fs');
+const path = require('path');
+const { ASSETS, fingerprint, loadBest, saveBest, loadLedger } = require('./real-lib');
+
+const WRITE = process.argv.includes('--write');
+
+const data = loadBest();
+const ledger = loadLedger();
+
+let attached = 0, cleared = 0, missingFile = 0;
+const byMarket = {};
+for (const it of data.items){
+ const fp = fingerprint(it);
+ const l = ledger[fp];
+ const mk = it.marketplace || '?';
+ byMarket[mk] = byMarket[mk] || { total: 0, real: 0 };
+ byMarket[mk].total++;
+ if (l && l.status === 'qc-pass' && l.file && fs.existsSync(path.join(ASSETS, l.file))){
+ it.realImage = '/assets/real/' + l.file;
+ it.realImageSource = mk + (l.sourceUrl ? ' — ' + new URL(l.sourceUrl).hostname.replace(/^www\./, '') : '');
+ it.realImageUrl = l.sourceUrl || null;
+ it.realImageFetchedAt = l.downloadedAt || l.updatedAt || null;
+ attached++; byMarket[mk].real++;
+ } else {
+ if (l && l.status === 'qc-pass') missingFile++;
+ if (it.realImage){ delete it.realImage; delete it.realImageSource; delete it.realImageUrl; delete it.realImageFetchedAt; cleared++; }
+ }
+}
+data.realImagesAttachedAt = new Date().toISOString();
+
+console.log(`real images attached: ${attached} of ${data.items.length}${cleared ? ` (cleared ${cleared} stale)` : ''}${missingFile ? ` (${missingFile} qc-pass but file MISSING on disk!)` : ''}`);
+console.log('coverage by marketplace:');
+for (const [mk, s] of Object.entries(byMarket)) console.log(` ${mk.padEnd(20)} ${s.real}/${s.total}`);
+
+if (WRITE){ saveBest(data); console.log('bestsellers.json updated (realImage* fields only).'); }
+else console.log('(dry-run — pass --write to persist)');
diff --git a/scripts/download-real-images.js b/scripts/download-real-images.js
new file mode 100644
index 0000000..18a351f
--- /dev/null
+++ b/scripts/download-real-images.js
@@ -0,0 +1,95 @@
+#!/usr/bin/env node
+// download-real-images.js — pull each resolved candidate image down to public/assets/real/.
+// Reads the fan-out agents' outputs (data/real-images/candidates/*.json), folds them into the
+// ledger, then downloads every entry still at status candidate. $0 (plain HTTPS fetches).
+// Idempotent: qc-pass/downloaded entries are skipped; re-run freely.
+//
+// Guards: browser UA (marketplace CDNs 403 default agents), ≥400px min dimension (sips),
+// sha256 dedupe — the same byte-identical file arriving for >3 different items is a CDN
+// placeholder, not 4 different products, and gets rejected.
+const fs = require('fs');
+const path = require('path');
+const { execFileSync } = require('child_process');
+const { CAND_DIR, ASSETS, loadLedger, saveLedger, sha256 } = require('./real-lib');
+
+const DRY = process.argv.includes('--dry-run');
+const LIMIT = (() => { const i = process.argv.indexOf('--limit'); return i > -1 ? parseInt(process.argv[i + 1], 10) : Infinity; })();
+const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126 Safari/537.36';
+const EXT = { 'image/png': 'png', 'image/jpeg': 'jpg', 'image/webp': 'webp', 'image/gif': 'gif', 'image/avif': 'avif' };
+const MIN_PX = 400;
+const MAX_SAME_SHA = 3;
+
+fs.mkdirSync(ASSETS, { recursive: true });
+
+// ---- 1. fold candidate files into the ledger (agents never touch the ledger themselves) ----
+const ledger = loadLedger();
+let folded = 0;
+if (fs.existsSync(CAND_DIR)){
+ for (const f of fs.readdirSync(CAND_DIR).filter(f => f.endsWith('.json'))){
+ let c; try { c = JSON.parse(fs.readFileSync(path.join(CAND_DIR, f), 'utf8')); } catch(e){ console.log(` BAD candidate file ${f}: ${e.message}`); continue; }
+ if (!c.fingerprint) continue;
+ const l = ledger[c.fingerprint] || {};
+ if (l.status === 'qc-pass') continue; // already settled — don't churn
+ ledger[c.fingerprint] = { ...l, fingerprint: c.fingerprint, id: c.id, title: c.title || l.title,
+ status: c.candidateImageUrl ? 'candidate' : 'unresolved',
+ candidateUrl: c.candidateImageUrl || null, sourceUrl: c.sourcePageUrl || null,
+ altCandidates: c.altCandidates || [], confidence: c.confidence ?? null,
+ method: c.method || null, exaCalls: c.exaCalls ?? null, estCostUsd: c.estCostUsd ?? null,
+ notes: c.notes || null, updatedAt: new Date().toISOString() };
+ folded++;
+ }
+}
+
+async function fetchImage(url){
+ const res = await fetch(url, { headers: { 'User-Agent': UA, 'Accept': 'image/avif,image/webp,image/png,image/jpeg,*/*' }, redirect: 'follow', signal: AbortSignal.timeout(30000) });
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
+ const type = (res.headers.get('content-type') || '').split(';')[0].trim();
+ const buf = Buffer.from(await res.arrayBuffer());
+ if (!buf.length) throw new Error('empty body');
+ if (!EXT[type] && !/^image\//.test(type)) throw new Error(`not an image (${type || 'no content-type'})`);
+ return { buf, ext: EXT[type] || 'jpg' };
+}
+
+function dimensions(fp){
+ try {
+ const out = execFileSync('sips', ['-g', 'pixelWidth', '-g', 'pixelHeight', fp], { encoding: 'utf8' });
+ const w = +(out.match(/pixelWidth: (\d+)/) || [])[1], h = +(out.match(/pixelHeight: (\d+)/) || [])[1];
+ return { w, h };
+ } catch(e){ return { w: 0, h: 0 }; }
+}
+
+(async () => {
+ const todo = Object.values(ledger).filter(l => l.status === 'candidate' && l.candidateUrl).slice(0, LIMIT);
+ console.log(`candidates folded: ${folded} · to download: ${todo.length}${DRY ? ' (dry-run)' : ''}`);
+ if (DRY){ todo.forEach(l => console.log(` ${l.id} ${l.candidateUrl}`)); return; }
+
+ const shaCount = {}; // sha256 -> #items this run+prior
+ for (const l of Object.values(ledger)) if (l.sha256) shaCount[l.sha256] = (shaCount[l.sha256] || 0) + 1;
+
+ let ok = 0, fail = 0;
+ for (const l of todo){
+ try {
+ const { buf, ext } = await fetchImage(l.candidateUrl);
+ const sha = sha256(buf);
+ if ((shaCount[sha] || 0) >= MAX_SAME_SHA) throw new Error('placeholder: same bytes already used by ' + shaCount[sha] + ' items');
+ const fname = `${l.fingerprint}.${ext}`; // fingerprint stem — survives TR-id churn
+ const fp = path.join(ASSETS, fname);
+ fs.writeFileSync(fp, buf);
+ const { w, h } = dimensions(fp);
+ if (w < MIN_PX && h < MIN_PX){ fs.unlinkSync(fp); throw new Error(`too small (${w}×${h})`); }
+ shaCount[sha] = (shaCount[sha] || 0) + 1;
+ Object.assign(l, { status: 'downloaded', file: fname, sha256: sha, width: w, height: h, downloadedAt: new Date().toISOString() });
+ ok++; console.log(` ✓ ${l.id} ← ${l.candidateUrl.slice(0, 90)} (${w}×${h})`);
+ } catch(e){
+ fail++;
+ // burn this candidate; promote the next alternate if the agent supplied one
+ const alts = l.altCandidates || [];
+ if (alts.length){ l.candidateUrl = alts.shift(); l.altCandidates = alts; l.status = 'candidate'; console.log(` ↻ ${l.id} — ${e.message}; trying alt (${alts.length} left)`); }
+ else { l.status = 'unresolved'; l.failReason = e.message; console.log(` ✗ ${l.id} — ${e.message}`); }
+ l.updatedAt = new Date().toISOString();
+ }
+ }
+ saveLedger(ledger);
+ const retriable = Object.values(ledger).filter(l => l.status === 'candidate').length;
+ console.log(`downloaded ${ok}, failed ${fail}${retriable ? `, ${retriable} candidates remain (re-run to retry alts)` : ''}. $0 (plain fetches).`);
+})();
diff --git a/scripts/plan-real-images.js b/scripts/plan-real-images.js
new file mode 100644
index 0000000..173e261
--- /dev/null
+++ b/scripts/plan-real-images.js
@@ -0,0 +1,56 @@
+#!/usr/bin/env node
+// plan-real-images.js — build the work manifest for the real-image fan-out.
+// Reads bestsellers.json + ledger, emits data/real-images/manifest.json: every item that
+// still lacks a qc-passed real image, grouped into agent-sized batches by host class,
+// with an up-front Exa cost estimate (metered — Steve's always-show-costs rule).
+// Default is a dry-run report; --write persists the manifest.
+const fs = require('fs');
+const path = require('path');
+const { RI_DIR, MANIFEST, fingerprint, classifyUrl, loadBest, loadLedger, atomicWrite } = require('./real-lib');
+
+const WRITE = process.argv.includes('--write');
+const BATCH_SIZE = 12; // items per fan-out agent — keeps each agent's tool budget sane
+const EXA_COST_PER_CALL = 0.005; // assumed $/request (search or fetch)
+const EST_CALLS_PER_ITEM = { 'etsy-product': 1, 'spoonflower-product': 1, etsy: 2, spoonflower: 2, patternbank: 2, listicle: 2, vendor: 2, none: 2 };
+
+const data = loadBest();
+const ledger = loadLedger();
+
+const work = [];
+for (const it of data.items){
+ const fp = fingerprint(it);
+ const l = ledger[fp];
+ if (l && l.status === 'qc-pass') continue; // already done — idempotent re-runs
+ const { host, klass } = classifyUrl(it.url);
+ work.push({ id: it.id, fingerprint: fp, title: it.title, company: it.company,
+ marketplace: it.marketplace, style: it.style, color: it.color,
+ url: it.url || null, host, urlClass: klass });
+}
+
+// group by class, then chunk into batches
+const byClass = {};
+for (const w of work){ (byClass[w.urlClass] = byClass[w.urlClass] || []).push(w); }
+const batches = [];
+for (const [klass, items] of Object.entries(byClass)){
+ for (let i = 0; i < items.length; i += BATCH_SIZE){
+ batches.push({ batch: `${klass}-${Math.floor(i / BATCH_SIZE) + 1}`, urlClass: klass, items: items.slice(i, i + BATCH_SIZE) });
+ }
+}
+
+let estCalls = 0;
+for (const w of work) estCalls += EST_CALLS_PER_ITEM[w.urlClass] || 2;
+const estCost = estCalls * EXA_COST_PER_CALL;
+
+console.log(`items needing a real image: ${work.length} of ${data.items.length}`);
+for (const [klass, items] of Object.entries(byClass)) console.log(` ${klass.padEnd(20)} ${items.length}`);
+console.log(`batches: ${batches.length} × ≤${BATCH_SIZE} items`);
+console.log(`est. Exa spend: ~${estCalls} calls × $${EXA_COST_PER_CALL} ≈ $${estCost.toFixed(2)}`);
+
+if (WRITE){
+ fs.mkdirSync(RI_DIR, { recursive: true });
+ atomicWrite(MANIFEST, JSON.stringify({ plannedAt: new Date().toISOString(), count: work.length,
+ estExaCalls: estCalls, estExaCostUsd: +estCost.toFixed(2), batches }, null, 2));
+ console.log(`manifest → ${path.relative(process.cwd(), MANIFEST)}`);
+} else {
+ console.log('(dry-run — pass --write to persist the manifest)');
+}
diff --git a/scripts/qc-real-images.js b/scripts/qc-real-images.js
new file mode 100644
index 0000000..34286c7
--- /dev/null
+++ b/scripts/qc-real-images.js
@@ -0,0 +1,72 @@
+#!/usr/bin/env node
+// qc-real-images.js — $0 LOCAL vision gate over downloaded real-product images.
+// Every downloaded file is judged by a local ollama vision model (qwen2.5vl:7b, fallback
+// gemma3:12b): it must look like a wallpaper/textile pattern swatch or a product/room shot
+// showing wallpaper — logos, text banners, site chrome, screenshots, blank tiles are rejected.
+// Style/color match is advisory (lenient); the hard job is keeping garbage off the board.
+// Reject → promote the next altCandidate (status back to 'candidate' for the download script),
+// else 'unresolved'. Re-run download → qc until no candidates remain.
+const fs = require('fs');
+const path = require('path');
+const { ASSETS, loadLedger, saveLedger, loadBest, fingerprint } = require('./real-lib');
+
+const DRY = process.argv.includes('--dry-run');
+const ONLY = (() => { const i = process.argv.indexOf('--only'); return i > -1 ? process.argv[i + 1] : null; })();
+const OLLAMA = process.env.OLLAMA_URL || 'http://127.0.0.1:11434';
+const MODELS = ['qwen2.5vl:7b', 'gemma3:12b'];
+
+// style/color hints per fingerprint, for the advisory match part of the rubric
+const hints = {};
+for (const it of loadBest().items) hints[fingerprint(it)] = { style: it.style, color: it.color, title: it.title };
+
+async function judge(model, file, hint){
+ const b64 = fs.readFileSync(path.join(ASSETS, file)).toString('base64');
+ const prompt = `You are quality-gating an image for an internal wallpaper market-intelligence board.
+The image is supposed to show a REAL trending wallpaper product: "${hint.title}" (style: ${hint.style}, color family: ${hint.color}).
+ACCEPT if the image is a wallpaper/textile pattern swatch, a wallpaper product photo, or a room scene where wallpaper is clearly visible.
+REJECT if it is: a logo, a text-heavy banner or ad, website chrome or a page screenshot, a mostly-blank placeholder, a photo of people/objects with no wallpaper, or a watermark-dominated image.
+A loose style/color mismatch alone is NOT a reason to reject — only reject on the categories above, or if the image is obviously a completely different product category.
+Answer with ONLY a JSON object: {"ok": true|false, "reason": "<max 12 words>"}`;
+ const res = await fetch(OLLAMA + '/api/generate', {
+ method: 'POST', headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ model, prompt, images: [b64], stream: false, options: { temperature: 0 } }),
+ signal: AbortSignal.timeout(120000)
+ });
+ if (!res.ok) throw new Error(`ollama HTTP ${res.status}`);
+ const out = (await res.json()).response || '';
+ const m = out.match(/\{[\s\S]*?\}/);
+ if (!m) throw new Error('no JSON in model output: ' + out.slice(0, 80));
+ return JSON.parse(m[0]);
+}
+
+(async () => {
+ const ledger = loadLedger();
+ const todo = Object.values(ledger).filter(l => l.status === 'downloaded' && l.file && (!ONLY || l.id === ONLY));
+ console.log(`to QC: ${todo.length}${DRY ? ' (dry-run)' : ''} · model ${MODELS[0]} @ ${OLLAMA} ($0 local)`);
+ if (DRY){ todo.forEach(l => console.log(` ${l.id} ${l.file}`)); return; }
+
+ let pass = 0, reject = 0, err = 0;
+ for (const l of todo){
+ const hint = hints[l.fingerprint] || { style: '?', color: '?', title: l.title || '?' };
+ let verdict = null, used = null;
+ for (const model of MODELS){
+ try { verdict = await judge(model, l.file, hint); used = model; break; }
+ catch(e){ console.log(` ! ${l.id} ${model}: ${e.message}`); }
+ }
+ if (!verdict){ err++; continue; } // leave as downloaded — retriable
+ l.qc = { model: used, verdict: verdict.ok ? 'pass' : 'reject', reason: verdict.reason || '' };
+ l.updatedAt = new Date().toISOString();
+ if (verdict.ok){ l.status = 'qc-pass'; pass++; console.log(` ✓ ${l.id} — ${verdict.reason || 'ok'}`); }
+ else {
+ reject++;
+ fs.rmSync(path.join(ASSETS, l.file), { force: true }); // never leave rejected bytes deployable
+ l.file = null; l.sha256 = null;
+ const alts = l.altCandidates || [];
+ if (alts.length){ l.candidateUrl = alts.shift(); l.altCandidates = alts; l.status = 'candidate'; console.log(` ↻ ${l.id} — REJECT (${verdict.reason}); alt queued`); }
+ else { l.status = 'qc-reject'; console.log(` ✗ ${l.id} — REJECT (${verdict.reason})`); }
+ }
+ saveLedger(ledger); // per-item save — a crash loses nothing
+ }
+ const retriable = Object.values(ledger).filter(l => l.status === 'candidate').length;
+ console.log(`qc-pass ${pass}, reject ${reject}, model-errors ${err}${retriable ? ` · ${retriable} alts queued — re-run download-real-images.js then this` : ''}`);
+})();
diff --git a/scripts/real-lib.js b/scripts/real-lib.js
new file mode 100644
index 0000000..9019152
--- /dev/null
+++ b/scripts/real-lib.js
@@ -0,0 +1,51 @@
+// real-lib.js — shared plumbing for the REAL-product-image pipeline.
+// Real marketplace images are INTERNAL-ONLY intel (Steve override 2026-07-15): they live in
+// new realImage* fields + public/assets/real/, and must never flow into `image`
+// (which /api/put-on-shopify stages as a DW Shopify product image).
+const fs = require('fs');
+const path = require('path');
+const crypto = require('crypto');
+
+const ROOT = path.join(__dirname, '..');
+const BEST = path.join(ROOT, 'data', 'bestsellers.json');
+const RI_DIR = path.join(ROOT, 'data', 'real-images');
+const LEDGER = path.join(RI_DIR, 'ledger.json');
+const MANIFEST = path.join(RI_DIR, 'manifest.json');
+const CAND_DIR = path.join(RI_DIR, 'candidates');
+const ASSETS = path.join(ROOT, 'public', 'assets', 'real');
+
+// TR-ids are regenerated by array index on every scout refresh (scout-to-bestsellers.js),
+// so the ledger keys on a content fingerprint instead — it survives id churn.
+function fingerprint(it){
+ return crypto.createHash('sha1').update([it.title, it.company, it.marketplace].join('|')).digest('hex').slice(0, 16);
+}
+
+const LISTICLE_HOSTS = new Set([
+ 'realsimple.com', 'bhg.com', 'goodhousekeeping.com', 'thespruce.com',
+ 'countryandtownhouse.com', 'wildfireinteriors.com', 'blog.wallpaperdirect.com'
+]);
+
+// host class drives the resolution strategy — the `marketplace` label lies
+// (all 50 "Amazon / Big-box" items actually point at vendor sites + listicles).
+function classifyUrl(url){
+ if (!url) return { host: null, klass: 'none' };
+ let host; try { host = new URL(url).hostname.replace(/^www\./, ''); } catch(e){ return { host: null, klass: 'none' }; }
+ if (host === 'etsy.com') return { host, klass: /\/listing\//.test(url) ? 'etsy-product' : 'etsy' };
+ if (host === 'spoonflower.com') return { host, klass: /\/(wallpaper|fabric)\/\d+/.test(url) ? 'spoonflower-product' : 'spoonflower' };
+ if (host === 'patternbank.com') return { host, klass: 'patternbank' };
+ if (LISTICLE_HOSTS.has(host)) return { host, klass: 'listicle' };
+ return { host, klass: 'vendor' };
+}
+
+function loadBest(){ return JSON.parse(fs.readFileSync(BEST, 'utf8')); }
+function saveBest(data){ atomicWrite(BEST, JSON.stringify(data, null, 2)); }
+
+function loadLedger(){ try { return JSON.parse(fs.readFileSync(LEDGER, 'utf8')); } catch(e){ return {}; } }
+function saveLedger(l){ fs.mkdirSync(RI_DIR, { recursive: true }); atomicWrite(LEDGER, JSON.stringify(l, null, 2)); }
+
+function atomicWrite(fp, body){ const tmp = fp + '.tmp'; fs.writeFileSync(tmp, body); fs.renameSync(tmp, fp); }
+
+function sha256(buf){ return crypto.createHash('sha256').update(buf).digest('hex'); }
+
+module.exports = { ROOT, BEST, RI_DIR, LEDGER, MANIFEST, CAND_DIR, ASSETS,
+ fingerprint, classifyUrl, loadBest, saveBest, loadLedger, saveLedger, atomicWrite, sha256 };
← 0968c22 chore: v0.2.0 (session close) — 247-item multi-platform expa
·
back to Trending Dw
·
server+frontend: realImage support (signal default sort, met b3b4e49 →