← back to Designer Wallcoverings
Coastal Mist: full-res 960x1200 BA469 image + our-info alt text; base64-attachment upload in fix script
97c99a3d8dd002152a7137b2f02b15d9d5387378 · 2026-06-24 07:53:12 -0700 · Steve
Files touched
A pending-approval/coastal-mist-hires.jpgM pending-approval/coastal-mist-oil-filter-image-fix.mdM pending-approval/fix-coastal-mist-BA469.sh
Diff
commit 97c99a3d8dd002152a7137b2f02b15d9d5387378
Author: Steve <steve@designerwallcoverings.com>
Date: Wed Jun 24 07:53:12 2026 -0700
Coastal Mist: full-res 960x1200 BA469 image + our-info alt text; base64-attachment upload in fix script
---
pending-approval/coastal-mist-hires.jpg | Bin 0 -> 1538476 bytes
.../coastal-mist-oil-filter-image-fix.md | 5 +--
pending-approval/fix-coastal-mist-BA469.sh | 35 ++++++++++++++-------
3 files changed, 27 insertions(+), 13 deletions(-)
diff --git a/pending-approval/coastal-mist-hires.jpg b/pending-approval/coastal-mist-hires.jpg
new file mode 100644
index 00000000..c07506f1
Binary files /dev/null and b/pending-approval/coastal-mist-hires.jpg differ
diff --git a/pending-approval/coastal-mist-oil-filter-image-fix.md b/pending-approval/coastal-mist-oil-filter-image-fix.md
index 98e2a954..8bdd5cf0 100644
--- a/pending-approval/coastal-mist-oil-filter-image-fix.md
+++ b/pending-approval/coastal-mist-oil-filter-image-fix.md
@@ -7,8 +7,9 @@
## UPDATE 2026-06-24 — genuine image FOUND + ready-to-run script
- **Real SKU:** Washington Wallcoverings **BA469** "Smoke Gray Sisal" (Best of Asia IV). "Phillipe Romano Portofino Bamboo – Coastal Mist" is the DW private-label rebrand. `color:Smoke` was correct all along.
- **Root cause (confirmed):** importer fuzzy-matched real SKU **BA469 → B7469** (a Baldwin oil filter) — a 2-char string collision.
-- **Verified genuine image:** `https://www.interiordecorating.com/images/cat/wall/washington/BA469.jpg` — downloaded + eyeballed = correct grey sisal grasscloth. ⚠ low-res 200×250 (EXIF shows a 3278×4097 Canon original exists; source hi-res from Washington Wallcoverings for the final).
-- **Execute with:** `CONFIRM=1 bash pending-approval/fix-coastal-mist-BA469.sh` (dry-run by default; reads live tags so it won't clobber drift). Steps: add BA469 image → delete oil-filter image `37091234611251` → strip `Red` + `Needs-Image` (keep `color:Smoke`).
+- **Verified genuine image (FULL-RES):** `pending-approval/coastal-mist-hires.jpg` — **960×1200**, sourced from the real product (Washington Wall Volusion store `/v/vspfiles/photos/BA469-2.jpg`), downloaded + eyeballed = correct grey sisal grasscloth. Uploaded as a base64 attachment so Shopify rehosts on the DW CDN (no hotlink dependency).
+- **Alt text = OUR info only:** `Portofino Bamboo - Coastal Mist Wallcovering | Phillipe Romano` — source vendor (Washington Wallcoverings/BA469) never exposed customer-facing.
+- **Execute with:** `CONFIRM=1 bash pending-approval/fix-coastal-mist-BA469.sh` (dry-run by default; reads live tags so it won't clobber drift). Steps: upload full-res image → delete oil-filter image `37091234611251` → strip `Red` + `Needs-Image` (keep `color:Smoke`).
- This supersedes the "just delete the image" plan below — we now replace with the real photo.
## What's wrong (live, customer-facing)
diff --git a/pending-approval/fix-coastal-mist-BA469.sh b/pending-approval/fix-coastal-mist-BA469.sh
index 3e1dd301..c9a447c4 100755
--- a/pending-approval/fix-coastal-mist-BA469.sh
+++ b/pending-approval/fix-coastal-mist-BA469.sh
@@ -22,8 +22,8 @@ SHOP="designer-laboratory-sandbox.myshopify.com"
API="2024-10"
PRODUCT_ID="7808267157555"
OIL_FILTER_IMAGE_ID="37091234611251"
-NEW_IMAGE_SRC="https://www.interiordecorating.com/images/cat/wall/washington/BA469.jpg"
-NEW_IMAGE_ALT="Portofino Bamboo - Coastal Mist (Washington Wallcoverings BA469 Smoke Gray Sisal)"
+NEW_IMAGE_FILE="$(dirname "$0")/coastal-mist-hires.jpg" # full-res 960x1200 (in this dir)
+NEW_IMAGE_ALT="Portofino Bamboo - Coastal Mist Wallcovering | Phillipe Romano" # OUR info only — no source-vendor leak
TAGS_TO_REMOVE=("Red" "Needs-Image") # keep color:Smoke and everything else
TOKEN="${SHOPIFY_ADMIN_TOKEN:-}"
@@ -46,10 +46,21 @@ say "0) Current state"
curl -s "${H_TOK[@]}" "$BASE/products/$PRODUCT_ID.json" \
| python3 -c 'import json,sys;p=json.load(sys.stdin)["product"];print(" images:",[(i["id"],i["src"].split("/")[-1]) for i in p["images"]]);print(" tags :",p["tags"])'
-say "1) Add real BA469 image (Shopify pulls from src)"
+say "1) Add full-res image as base64 attachment (Shopify hosts it on its CDN)"
+[ -f "$NEW_IMAGE_FILE" ] || { echo "ERROR: image file not found: $NEW_IMAGE_FILE"; exit 1; }
+PAYLOAD="$(mktemp /tmp/cm-img.XXXXXX.json)"
+python3 - "$NEW_IMAGE_FILE" "$NEW_IMAGE_ALT" > "$PAYLOAD" <<'PY'
+import base64, json, sys
+path, alt = sys.argv[1], sys.argv[2]
+with open(path, "rb") as f:
+ b64 = base64.b64encode(f.read()).decode()
+print(json.dumps({"image": {"attachment": b64, "filename": "portofino-bamboo-coastal-mist.jpg",
+ "position": 1, "alt": alt}}))
+PY
run "curl -s -X POST \"$BASE/products/$PRODUCT_ID/images.json\" ${H_TOK[*]} ${H_JSON[*]} \
- -d '{\"image\":{\"src\":\"$NEW_IMAGE_SRC\",\"position\":1,\"alt\":\"$NEW_IMAGE_ALT\"}}' \
- | python3 -c 'import json,sys;i=json.load(sys.stdin).get(\"image\",{});print(\" added image id\",i.get(\"id\"),i.get(\"src\"))'"
+ --data-binary @\"$PAYLOAD\" \
+ | python3 -c 'import json,sys;i=json.load(sys.stdin).get(\"image\",{});print(\" added image id\",i.get(\"id\"),i.get(\"width\"),\"x\",i.get(\"height\"),i.get(\"src\"))'"
+[ "$DRY" = "0" ] && rm -f "$PAYLOAD" || echo " [dry-run] payload built at $PAYLOAD (alt: $NEW_IMAGE_ALT)"
say "2) Delete the oil-filter image ($OIL_FILTER_IMAGE_ID)"
run "curl -s -X DELETE \"$BASE/products/$PRODUCT_ID/images/$OIL_FILTER_IMAGE_ID.json\" ${H_TOK[*]} -o /dev/null -w ' delete HTTP %{http_code}\n'"
@@ -75,9 +86,11 @@ say "4) Verify"
|| echo " (dry-run: skipped verify)"
say "Done ($([ "$DRY" = 1 ] && echo 'DRY-RUN — re-run with CONFIRM=1 to apply' || echo 'LIVE applied'))."
-# ── HI-RES note ──────────────────────────────────────────────────────────────
-# The interiordecorating.com asset is only 200x250. For a luxury PDP, source the
-# full-res BA469 from Washington Wallcoverings directly (EXIF shows a 3278x4097
-# Canon original), upload via the images endpoint as a base64 "attachment", and
-# skip the src-pull above. If you'd rather keep Needs-Image until hi-res lands,
-# remove "Needs-Image" from TAGS_TO_REMOVE.
+# ── Notes ────────────────────────────────────────────────────────────────────
+# • Image: full-res 960x1200 (coastal-mist-hires.jpg, sourced from the real
+# product BA469). Uploaded as a base64 attachment so Shopify rehosts it on the
+# DW CDN — no hotlink/referer dependency on the source site.
+# • Alt text is OUR info only ("Portofino Bamboo - Coastal Mist Wallcovering |
+# Phillipe Romano") — the source vendor (Washington Wallcoverings/BA469) is
+# never exposed customer-facing.
+# • To keep Needs-Image set for now, remove "Needs-Image" from TAGS_TO_REMOVE.
← b91d293d pending-approval: found genuine BA469 image + ready-to-run l
·
back to Designer Wallcoverings
·
quadrille-house: enrichment 1937/1942 done; 5 Enchanted Bamb 670fae3f →