← back to Designer Wallcoverings
schumacher importer: dedup gallery images by URL at ingest (API repeats largeUrl across size-variant entries -> was producing 2-3x duplicate PDP galleries)
a1d4c12e7351758ecfca865f207f21ec04b9e31f · 2026-06-12 07:46:42 -0700 · SteveStudio2
Files touched
M shopify/scripts/schu-api-recrawl.jsM shopify/scripts/schumacher-import.js
Diff
commit a1d4c12e7351758ecfca865f207f21ec04b9e31f
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date: Fri Jun 12 07:46:42 2026 -0700
schumacher importer: dedup gallery images by URL at ingest (API repeats largeUrl across size-variant entries -> was producing 2-3x duplicate PDP galleries)
---
shopify/scripts/schu-api-recrawl.js | 4 +++-
shopify/scripts/schumacher-import.js | 9 +++++++--
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/shopify/scripts/schu-api-recrawl.js b/shopify/scripts/schu-api-recrawl.js
index 5582f136..deead856 100644
--- a/shopify/scripts/schu-api-recrawl.js
+++ b/shopify/scripts/schu-api-recrawl.js
@@ -68,7 +68,9 @@ function attrMap(j) {
function parse(j) {
const a = attrMap(j);
const img = j.imageUrl || (j.images && j.images[0] && j.images[0].largeUrl) || null;
- const gallery = (j.images || []).map(x => x.largeUrl).filter(Boolean);
+ // Dedup: Schumacher's API repeats the same largeUrl across image entries
+ // (size variants of one photo) -> previously caused duplicate PDP galleries.
+ const gallery = [...new Set((j.images || []).map(x => x.largeUrl).filter(Boolean))];
return {
sku: j.itemNumber,
priceUsd: (typeof j.priceUsd === 'number') ? j.priceUsd : null,
diff --git a/shopify/scripts/schumacher-import.js b/shopify/scripts/schumacher-import.js
index 70df2620..f9e76429 100644
--- a/shopify/scripts/schumacher-import.js
+++ b/shopify/scripts/schumacher-import.js
@@ -162,8 +162,13 @@ async function importProducts() {
const prePasted = getAttr(attrs, 'pre-pasted');
const yardsPerRoll = getAttr(attrs, 'yards-per-roll-fraction') || getAttr(attrs, 'yards-per-roll');
- // Images - first is product swatch, rest may include room settings
- const allImages = (detail.images || []).map(img => img.largeUrl).filter(Boolean);
+ // Images - first is product swatch, rest may include room settings.
+ // Schumacher's API repeats the same largeUrl across multiple image
+ // entries (size variants of one photo), which previously produced
+ // 2-3x duplicate galleries on the Shopify PDP. Dedup by URL, order-preserving.
+ const allImages = [...new Set(
+ (detail.images || []).map(img => img.largeUrl).filter(Boolean)
+ )];
const mainImage = allImages[0] || item.imageUrl;
const roomSettingImages = allImages.slice(1); // Images after the first are typically room settings/lifestyle
const galleryImages = allImages;
← 4a502d3c cadence: support MAP-priced vendors (sellExpr) — Kravet fami
·
back to Designer Wallcoverings
·
vendors: wire Brewster & York (costExpr=cost) — price list a f3aead0e →