[object Object]

← back to Wallco Ai

chore: macstudio3 migration — reconcile from mac2 + repoint paths (stevestudio2→macstudio3, node/npm/npx→/opt/homebrew)

ce1283be846f5c871a7e22fd5986a9de006c13d0 · 2026-07-03 08:08:19 -0700 · Steve

Files touched

Diff

commit ce1283be846f5c871a7e22fd5986a9de006c13d0
Author: Steve <steve@designerwallcoverings.com>
Date:   Fri Jul 3 08:08:19 2026 -0700

    chore: macstudio3 migration — reconcile from mac2 + repoint paths (stevestudio2→macstudio3, node/npm/npx→/opt/homebrew)
---
 data/ghost-audit-sample.json                       | 100 ++++++++++-----------
 data/mural-batch-monterey-2.json                   |  24 ++---
 data/mural-batch-monterey.json                     |  24 ++---
 data/seam-fail-scan.json                           |  28 +++---
 deploy/com.steve.wallco-publish-ok-murals.plist    |   8 +-
 scratch_fuzz_remediate.py                          |   2 +-
 scratch_fuzz_scan.py                               |   4 +-
 scripts/apply-id-collision-resolutions.py          |   2 +-
 scripts/auto-deploy-loop.sh                        |   2 +-
 scripts/backfill_drunk_animals.sh                  |   2 +-
 scripts/cw-rooms-driver.sh                         |   2 +-
 scripts/dw-stale-urls-push.js                      |   2 +-
 scripts/elements_extract_prod.py                   |   4 +-
 scripts/fuzzy_seam_scan.py                         |   4 +-
 scripts/instant-image-sync.sh                      |   2 +-
 scripts/overnight-noghost-bulk.sh                  |   2 +-
 scripts/qa-make-seamless.js                        |  10 +--
 scripts/refresh_designs_snapshot.py                |   2 +-
 scripts/salvage_orphan_pngs.py                     |   2 +-
 scripts/smoke-test-customizer.js                   |   2 +-
 scripts/smoke-test-themes.js                       |   2 +-
 scripts/spoonflower_lib.py                         |   2 +-
 scripts/sync-geometric-9-to-prod.sh                |   2 +-
 scripts/sync_drunk_animals_to_prod.sh              |   2 +-
 scripts/test-classifier.sh                         |   2 +-
 scripts/test_drunk_animals.sh                      |   2 +-
 .../detect_correlation_length.py                   |   8 +-
 scripts/variants-9roots-supervisor.sh              |   2 +-
 scripts/verify-theme-controls.js                   |   2 +-
 scripts/watch-rescan-then-notify.sh                |   2 +-
 server.js                                          |   6 +-
 tomorrow-after-25min.sh                            |  22 ++---
 32 files changed, 141 insertions(+), 141 deletions(-)

diff --git a/data/ghost-audit-sample.json b/data/ghost-audit-sample.json
index 69a5bbe..26b7b22 100644
--- a/data/ghost-audit-sample.json
+++ b/data/ghost-audit-sample.json
@@ -5,7 +5,7 @@
     "source": "pg",
     "confidence": 0.95,
     "reason": "The same leopard motifs appear at full opacity and as faded, semi-transparent copies behind them.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779292861052_30426829.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779292861052_30426829.png",
     "image_url": "/designs/img/by-id/27619"
   },
   {
@@ -14,7 +14,7 @@
     "source": "pg",
     "confidence": 0.95,
     "reason": "Faded, semi-transparent copies of the floral motifs appear behind the sharp, solid ones, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779282431771_898531695.cw-greenhouse-glass.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779282431771_898531695.cw-greenhouse-glass.png",
     "image_url": "/designs/img/by-id/23022"
   },
   {
@@ -23,7 +23,7 @@
     "source": "pg",
     "confidence": 0.95,
     "reason": "Many cacti appear in both a solid dark color and a faded, semi-transparent version behind the solid one.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779291165046_73796089.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779291165046_73796089.png",
     "image_url": "/designs/img/by-id/25902"
   },
   {
@@ -32,7 +32,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "Faint, semi-transparent copies of the branches and leaves appear behind the main motifs.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779274922600_1655325223.cw-antique-brass.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779274922600_1655325223.cw-antique-brass.png",
     "image_url": "/designs/img/by-id/16394"
   },
   {
@@ -41,7 +41,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "Faded, semi-transparent copies of the bird motifs appear behind the sharper, solid ones.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779272162623_1391280064.cw-indigo-library.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779272162623_1391280064.cw-indigo-library.png",
     "image_url": "/designs/img/by-id/13728"
   },
   {
@@ -50,7 +50,7 @@
     "source": "pg",
     "confidence": 0.95,
     "reason": "Faded, semi-transparent copies of the animals and trees appear behind the main motifs, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779299854785_359451565.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779299854785_359451565.png",
     "image_url": "/designs/img/by-id/34289"
   },
   {
@@ -59,7 +59,7 @@
     "source": "json",
     "confidence": 0.95,
     "reason": "The wallpaper pattern has a clear, darker motif with a faded, semi-transparent version behind it, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/var_1688_mono_1778638060094.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/var_1688_mono_1778638060094.png",
     "image_url": "/designs/img/by-id/1693"
   },
   {
@@ -68,7 +68,7 @@
     "source": "json",
     "confidence": 0.95,
     "reason": "The birds and floral elements have faded, semi-transparent copies behind the sharp, opaque versions.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/var_38033_hue+120_1779318836182.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/var_38033_hue+120_1779318836182.png",
     "image_url": "/designs/img/by-id/38035"
   },
   {
@@ -77,7 +77,7 @@
     "source": "pg",
     "confidence": 0.95,
     "reason": "Faded skull motifs appear behind the sharper, more opaque skulls, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779292042906_632388710.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779292042906_632388710.png",
     "image_url": "/designs/img/by-id/26803"
   },
   {
@@ -86,7 +86,7 @@
     "source": "json",
     "confidence": 0.9,
     "reason": "The bear and flower motifs appear at full opacity with faded copies behind them.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1778687526465_225430772.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1778687526465_225430772.png",
     "image_url": "/designs/img/by-id/2739"
   },
   {
@@ -95,7 +95,7 @@
     "source": "pg",
     "confidence": 0.95,
     "reason": "The parrots and palm trees have faded, semi-transparent copies behind the solid foreground motifs.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779299621098_1750355885.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779299621098_1750355885.png",
     "image_url": "/designs/img/by-id/34064"
   },
   {
@@ -104,7 +104,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "Faint, semi-transparent copies of the animals appear behind the solid white motifs, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779278179748_1413090825.cw-forest-loden.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779278179748_1413090825.cw-forest-loden.png",
     "image_url": "/designs/img/by-id/19567"
   },
   {
@@ -113,7 +113,7 @@
     "source": "json",
     "confidence": 0.99,
     "reason": "The same floral motif appears both sharp and faded/translucent in the pattern, indicating a ghost layer.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/var_38049_hue+180_1779320998411.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/var_38049_hue+180_1779320998411.png",
     "image_url": "/designs/img/by-id/38052"
   },
   {
@@ -122,7 +122,7 @@
     "source": "json",
     "confidence": 0.9,
     "reason": "Faint, semi-transparent copies of the floral motifs appear behind the main pattern.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/var_5904_mono_1778753405268.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/var_5904_mono_1778753405268.png",
     "image_url": "/designs/img/by-id/5909"
   },
   {
@@ -131,7 +131,7 @@
     "source": "json",
     "confidence": 0.95,
     "reason": "The buffalo motifs have a distinct, faded copy behind the sharp foreground images, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779273553719_1451513845.cw-antique-brass.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779273553719_1451513845.cw-antique-brass.png",
     "image_url": "/designs/img/by-id/15060"
   },
   {
@@ -140,7 +140,7 @@
     "source": "pg",
     "confidence": 0.95,
     "reason": "Faded, semi-transparent copies of the floral motifs appear behind the sharp, solid versions, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779271123099_1064193713.cw-saddle-mocha.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779271123099_1064193713.cw-saddle-mocha.png",
     "image_url": "/designs/img/by-id/12732"
   },
   {
@@ -149,7 +149,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "Faded, semi-transparent copies of the floral motifs appear behind the sharper, darker ones, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779282931752_1491040935.cw-manor-saddle.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779282931752_1491040935.cw-manor-saddle.png",
     "image_url": "/designs/img/by-id/23197"
   },
   {
@@ -158,7 +158,7 @@
     "source": "json",
     "confidence": 0.99,
     "reason": "The same human figures are repeated at different opacity levels, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779298226956_2140481548.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779298226956_2140481548.png",
     "image_url": "/designs/img/by-id/32700"
   },
   {
@@ -167,7 +167,7 @@
     "source": "json",
     "confidence": 0.9,
     "reason": "Faded, semi-transparent copies of the main floral motifs appear behind the sharper, solid ones.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/var_1159_hue-60_1778619822725.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/var_1159_hue-60_1778619822725.png",
     "image_url": "/designs/img/by-id/1163"
   },
   {
@@ -176,7 +176,7 @@
     "source": "json",
     "confidence": 0.99,
     "reason": "Faded roses and monkey silhouettes appear behind the sharp, solid motifs, indicating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779400863776_1687113879.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779400863776_1687113879.png",
     "image_url": "/designs/img/by-id/38944"
   },
   {
@@ -185,7 +185,7 @@
     "source": "pg",
     "confidence": 0.95,
     "reason": "Faded, semi-transparent floral motifs appear behind the sharp, solid ones, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779275005792_84277211.cw-midnight-navy.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779275005792_84277211.cw-midnight-navy.png",
     "image_url": "/designs/img/by-id/16473"
   },
   {
@@ -194,7 +194,7 @@
     "source": "json",
     "confidence": 0.9,
     "reason": "The same floral motifs appear at two opacity levels, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/var_9407_hue-60_1779226830814.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/var_9407_hue-60_1779226830814.png",
     "image_url": "/designs/img/by-id/9411"
   },
   {
@@ -203,7 +203,7 @@
     "source": "json",
     "confidence": 0.99,
     "reason": "The same flower and butterfly motifs appear at full opacity and as faded, semi-transparent copies behind them.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779295201366_743295464.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779295201366_743295464.png",
     "image_url": "/designs/img/by-id/29926"
   },
   {
@@ -212,7 +212,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "Faint, semi-transparent horse silhouettes appear behind the main, darker horse motifs, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779294489494_1541464443.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779294489494_1541464443.png",
     "image_url": "/designs/img/by-id/29171"
   },
   {
@@ -221,7 +221,7 @@
     "source": "json",
     "confidence": 0.95,
     "reason": "The leaves and flowers appear as sharp motifs, but also as faded, semi-transparent copies behind them.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/var_38421_hue+180_1779333258119.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/var_38421_hue+180_1779333258119.png",
     "image_url": "/designs/img/by-id/38424"
   },
   {
@@ -230,7 +230,7 @@
     "source": "json",
     "confidence": 0.99,
     "reason": "The same floral motifs appear in sharp white and faded translucent versions, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/var_36370_hue+180_1779302018948.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/var_36370_hue+180_1779302018948.png",
     "image_url": "/designs/img/by-id/36391"
   },
   {
@@ -239,7 +239,7 @@
     "source": "json",
     "confidence": 0.99,
     "reason": "The same floral motifs appear at full opacity and as faded, semi-transparent copies behind them.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/var_38381_mono_1779331875710.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/var_38381_mono_1779331875710.png",
     "image_url": "/designs/img/by-id/38386"
   },
   {
@@ -248,7 +248,7 @@
     "source": "json",
     "confidence": 0.9,
     "reason": "Faint, semi-transparent horse and rider motifs appear behind the sharper, more opaque versions, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779285526706_174731365.cw-indigo-library.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779285526706_174731365.cw-indigo-library.png",
     "image_url": "/designs/img/by-id/24106"
   },
   {
@@ -257,7 +257,7 @@
     "source": "json",
     "confidence": 0.9,
     "reason": "Faded, semi-transparent copies of the floral motifs appear behind the solid ones, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1778706085896_985591414.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1778706085896_985591414.png",
     "image_url": "/designs/img/by-id/3971"
   },
   {
@@ -266,7 +266,7 @@
     "source": "json",
     "confidence": 0.9,
     "reason": "Faded, semi-transparent copies of the floral motifs appear behind the sharp, solid ones.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779293952735_1941396548.cw-antique-tan.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779293952735_1941396548.cw-antique-tan.png",
     "image_url": "/designs/img/by-id/28653"
   },
   {
@@ -275,7 +275,7 @@
     "source": "json",
     "confidence": 0.95,
     "reason": "The pattern has faded, semi-transparent copies of the main floral motifs behind the solid ones.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/var_2473_hue+180_1778680732346.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/var_2473_hue+180_1778680732346.png",
     "image_url": "/designs/img/by-id/2476"
   },
   {
@@ -284,7 +284,7 @@
     "source": "pg",
     "confidence": 0.95,
     "reason": "Faint, semi-transparent floral shapes appear behind the solid white flower motifs, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779278264996_1279655031.cw-oxblood.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779278264996_1279655031.cw-oxblood.png",
     "image_url": "/designs/img/by-id/19649"
   },
   {
@@ -293,7 +293,7 @@
     "source": "json",
     "confidence": 0.99,
     "reason": "The same bird and floral motifs appear at full opacity and as faded, semi-transparent copies behind them.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/var_38033_hue+180_1779318843065.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/var_38033_hue+180_1779318843065.png",
     "image_url": "/designs/img/by-id/38036"
   },
   {
@@ -302,7 +302,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "The kangaroo motifs have a faded, semi-transparent copy behind the solid foreground image.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779291316615_1513379526.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779291316615_1513379526.png",
     "image_url": "/designs/img/by-id/26062"
   },
   {
@@ -311,7 +311,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "Faded, semi-transparent copies of the floral motifs appear behind the sharper, solid ones.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779303518341_885068920.cw-deep-plum.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779303518341_885068920.cw-deep-plum.png",
     "image_url": "/designs/img/by-id/37836"
   },
   {
@@ -320,7 +320,7 @@
     "source": "json",
     "confidence": 0.95,
     "reason": "Faded, semi-transparent copies of the floral motifs appear behind the sharper, solid ones.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/var_3950_hue+60_1778705715775.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/var_3950_hue+60_1778705715775.png",
     "image_url": "/designs/img/by-id/3951"
   },
   {
@@ -329,7 +329,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "Faint, semi-transparent copies of the foxes appear behind the solid ones, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779273966118_530845442.cw-deep-plum.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779273966118_530845442.cw-deep-plum.png",
     "image_url": "/designs/img/by-id/15460"
   },
   {
@@ -338,7 +338,7 @@
     "source": "pg",
     "confidence": 0.95,
     "reason": "Faded giraffe and tree silhouettes appear behind the solid foreground motifs, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779301917723_1120460221.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779301917723_1120460221.png",
     "image_url": "/designs/img/by-id/36300"
   },
   {
@@ -347,7 +347,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "The figures have a darker, solid version and a faded, semi-transparent version behind them.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779300499222_972087553.cw-midnight-navy.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779300499222_972087553.cw-midnight-navy.png",
     "image_url": "/designs/img/by-id/34900"
   },
   {
@@ -356,7 +356,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "Faint, semi-transparent copies of the roses appear behind the sharper, more opaque foreground roses.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779299446120_678218883.cw-manor-saddle.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779299446120_678218883.cw-manor-saddle.png",
     "image_url": "/designs/img/by-id/33885"
   },
   {
@@ -365,7 +365,7 @@
     "source": "pg",
     "confidence": 0.95,
     "reason": "There are multiple instances of the same flower appearing at different opacities, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779293612718_1912492634.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779293612718_1912492634.png",
     "image_url": "/designs/img/by-id/28314"
   },
   {
@@ -374,7 +374,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "Faint tiger silhouettes appear behind the main tiger motifs, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779275531146_1936609397.cw-saddle-mocha.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779275531146_1936609397.cw-saddle-mocha.png",
     "image_url": "/designs/img/by-id/16975"
   },
   {
@@ -383,7 +383,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "The image shows a clear duplication of the floral pattern, creating a ghost-like overlay effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779294440151_168373868.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779294440151_168373868.png",
     "image_url": "/designs/img/by-id/29118"
   },
   {
@@ -392,7 +392,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "The same figures appear with a faded, semi-transparent copy behind the main image.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779278460236_1153663569.cw-champagne-linen.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779278460236_1153663569.cw-champagne-linen.png",
     "image_url": "/designs/img/by-id/19835"
   },
   {
@@ -401,7 +401,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "Some motifs appear to have a faded, semi-transparent copy behind the main, darker image.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779293540821_1279028106.cw-midnight-navy.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779293540821_1279028106.cw-midnight-navy.png",
     "image_url": "/designs/img/by-id/28246"
   },
   {
@@ -410,7 +410,7 @@
     "source": "json",
     "confidence": 0.9,
     "reason": "The lighter beige outlines of the leaves appear as a faded, secondary layer behind the solid brown leaves.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1778706472331_1277553684.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1778706472331_1277553684.png",
     "image_url": "/designs/img/by-id/3993"
   },
   {
@@ -419,7 +419,7 @@
     "source": "json",
     "confidence": 0.95,
     "reason": "The image has a translucent overlay of the whole scene, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779301456814_1815948328.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779301456814_1815948328.png",
     "image_url": "/designs/img/by-id/35839"
   },
   {
@@ -428,7 +428,7 @@
     "source": "json",
     "confidence": 0.99,
     "reason": "The same floral motifs appear both sharp white and faded/translucent in the pattern.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/var_38359_mono_1779331256017.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/var_38359_mono_1779331256017.png",
     "image_url": "/designs/img/by-id/38364"
   },
   {
@@ -437,7 +437,7 @@
     "source": "pg",
     "confidence": 0.9,
     "reason": "Faded, semi-transparent floral motifs appear behind the sharper, solid-colored foreground elements.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779294424502_902305510.cw-antique-brass.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779294424502_902305510.cw-antique-brass.png",
     "image_url": "/designs/img/by-id/29109"
   },
   {
@@ -446,7 +446,7 @@
     "source": "json",
     "confidence": 0.9,
     "reason": "Faint, semi-transparent copies of the line art motifs appear behind the main design, creating a ghost layer effect.",
-    "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1778636189658_15948922.png",
+    "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1778636189658_15948922.png",
     "image_url": "/designs/img/by-id/1627"
   }
 ]
\ No newline at end of file
diff --git a/data/mural-batch-monterey-2.json b/data/mural-batch-monterey-2.json
index c5ea5c5..be88cc2 100644
--- a/data/mural-batch-monterey-2.json
+++ b/data/mural-batch-monterey-2.json
@@ -30,62 +30,62 @@
     {
       "id": 20774,
       "dominant_hex": "#3b251c",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779279406349_1761239685.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779279406349_1761239685.png"
     },
     {
       "id": 31866,
       "dominant_hex": "#423328",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779297327224_383564080.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779297327224_383564080.png"
     },
     {
       "id": 33427,
       "dominant_hex": "#c0996a",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779298985600_171913157.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779298985600_171913157.png"
     },
     {
       "id": 14124,
       "dominant_hex": "#d7c39e",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779272594989_1988053788.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779272594989_1988053788.png"
     },
     {
       "id": 35652,
       "dominant_hex": "#746c56",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779301271665_1018451784.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779301271665_1018451784.png"
     },
     {
       "id": 14302,
       "dominant_hex": "#615f45",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779272775706_1194218692.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779272775706_1194218692.png"
     },
     {
       "id": 12201,
       "dominant_hex": "#919e6e",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779270590520_1743878687.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779270590520_1743878687.png"
     },
     {
       "id": 14972,
       "dominant_hex": "#8eb99d",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779273463681_1458301185.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779273463681_1458301185.png"
     },
     {
       "id": 30823,
       "dominant_hex": "#3c7985",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779296208586_830889448.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779296208586_830889448.png"
     },
     {
       "id": 27806,
       "dominant_hex": "#878f85",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779293051748_84301667.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779293051748_84301667.png"
     },
     {
       "id": 25668,
       "dominant_hex": "#353029",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779290938533_1712523307.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779290938533_1712523307.png"
     },
     {
       "id": 34576,
       "dominant_hex": "#29211a",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779300170220_659215985.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779300170220_659215985.png"
     }
   ],
   "batch_command": "for id in 20774 31866 33427 14124 35652 14302 12201 14972 30823 27806 25668 34576; do python3 scripts/build-mural-master.py $id; done",
diff --git a/data/mural-batch-monterey.json b/data/mural-batch-monterey.json
index 030e56f..a44c48b 100644
--- a/data/mural-batch-monterey.json
+++ b/data/mural-batch-monterey.json
@@ -30,62 +30,62 @@
     {
       "id": 27151,
       "dominant_hex": "#38241d",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779292386636_1863399989.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779292386636_1863399989.png"
     },
     {
       "id": 14681,
       "dominant_hex": "#442e1e",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779273166085_2012825945.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779273166085_2012825945.png"
     },
     {
       "id": 21079,
       "dominant_hex": "#bb8f5a",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779279719211_1211482687.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779279719211_1211482687.png"
     },
     {
       "id": 21976,
       "dominant_hex": "#3c362b",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779280649902_1263199119.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779280649902_1263199119.png"
     },
     {
       "id": 14136,
       "dominant_hex": "#e6dab8",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779272608611_79122496.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779272608611_79122496.png"
     },
     {
       "id": 20213,
       "dominant_hex": "#a9a78a",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779278839653_957644793.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779278839653_957644793.png"
     },
     {
       "id": 14450,
       "dominant_hex": "#d4dbbc",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779272933057_483747888.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779272933057_483747888.png"
     },
     {
       "id": 12635,
       "dominant_hex": "#708074",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779271030559_1146357644.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779271030559_1146357644.png"
     },
     {
       "id": 16204,
       "dominant_hex": "#136c7c",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779274725819_878426997.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779274725819_878426997.png"
     },
     {
       "id": 11308,
       "dominant_hex": "#959389",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779269704427_406092530.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779269704427_406092530.png"
     },
     {
       "id": 31169,
       "dominant_hex": "#323533",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779296617990_1000052140.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779296617990_1000052140.png"
     },
     {
       "id": 12599,
       "dominant_hex": "#2a2521",
-      "local_path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779270987318_1919163578.png"
+      "local_path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779270987318_1919163578.png"
     }
   ],
   "batch_command": "for id in 27151 14681 21079 21976 14136 20213 14450 12635 16204 11308 31169 12599; do python3 scripts/build-mural-master.py $id; done",
diff --git a/data/seam-fail-scan.json b/data/seam-fail-scan.json
index fd0f4d4..431ec73 100644
--- a/data/seam-fail-scan.json
+++ b/data/seam-fail-scan.json
@@ -13,72 +13,72 @@
     {
       "id": 43197,
       "overall_max": 38.77,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779805176441_993290578.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779805176441_993290578.png"
     },
     {
       "id": 43197,
       "overall_max": 38.77,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779805176441_993290578.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779805176441_993290578.png"
     },
     {
       "id": 50566,
       "overall_max": 36.36,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779811502549_1280451696.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779811502549_1280451696.png"
     },
     {
       "id": 50566,
       "overall_max": 36.36,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779811502549_1280451696.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779811502549_1280451696.png"
     },
     {
       "id": 50565,
       "overall_max": 35.01,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779810576790_159605057.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779810576790_159605057.png"
     },
     {
       "id": 50565,
       "overall_max": 35.01,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779810576790_159605057.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779810576790_159605057.png"
     },
     {
       "id": 43199,
       "overall_max": 20.13,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779806462956_732266097.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779806462956_732266097.png"
     },
     {
       "id": 43199,
       "overall_max": 20.13,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1779806462956_732266097.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1779806462956_732266097.png"
     },
     {
       "id": 55272,
       "overall_max": 16.14,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1780336621951_1793762070.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1780336621951_1793762070.png"
     },
     {
       "id": 55272,
       "overall_max": 16.14,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1780336621951_1793762070.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1780336621951_1793762070.png"
     },
     {
       "id": 54686,
       "overall_max": 16.01,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1780181582926_458477544.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1780181582926_458477544.png"
     },
     {
       "id": 54686,
       "overall_max": 16.01,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1780181582926_458477544.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1780181582926_458477544.png"
     },
     {
       "id": 54385,
       "overall_max": 13.16,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1780088222096_113927942.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1780088222096_113927942.png"
     },
     {
       "id": 54385,
       "overall_max": 13.16,
-      "path": "/Users/stevestudio2/Projects/wallco-ai/data/generated/1780088222096_113927942.png"
+      "path": "/Users/macstudio3/Projects/wallco-ai/data/generated/1780088222096_113927942.png"
     }
   ]
 }
\ No newline at end of file
diff --git a/deploy/com.steve.wallco-publish-ok-murals.plist b/deploy/com.steve.wallco-publish-ok-murals.plist
index 717ea35..9bd92f3 100644
--- a/deploy/com.steve.wallco-publish-ok-murals.plist
+++ b/deploy/com.steve.wallco-publish-ok-murals.plist
@@ -23,11 +23,11 @@
     <key>ProgramArguments</key>
     <array>
         <string>/bin/bash</string>
-        <string>/Users/stevestudio2/Projects/wallco-ai/scripts/publish-ok-murals.sh</string>
+        <string>/Users/macstudio3/Projects/wallco-ai/scripts/publish-ok-murals.sh</string>
     </array>
 
     <key>WorkingDirectory</key>
-    <string>/Users/stevestudio2/Projects/wallco-ai</string>
+    <string>/Users/macstudio3/Projects/wallco-ai</string>
 
     <!-- every 30 minutes -->
     <key>StartInterval</key>
@@ -39,9 +39,9 @@
     <false/>
 
     <key>StandardOutPath</key>
-    <string>/Users/stevestudio2/Projects/wallco-ai/logs/publish-ok-murals.out.log</string>
+    <string>/Users/macstudio3/Projects/wallco-ai/logs/publish-ok-murals.out.log</string>
     <key>StandardErrorPath</key>
-    <string>/Users/stevestudio2/Projects/wallco-ai/logs/publish-ok-murals.err.log</string>
+    <string>/Users/macstudio3/Projects/wallco-ai/logs/publish-ok-murals.err.log</string>
 
     <key>EnvironmentVariables</key>
     <dict>
diff --git a/scratch_fuzz_remediate.py b/scratch_fuzz_remediate.py
index c93468e..e9b7417 100644
--- a/scratch_fuzz_remediate.py
+++ b/scratch_fuzz_remediate.py
@@ -11,7 +11,7 @@ import os, sys, json, subprocess
 import scratch_fuzz_scan as s   # reuse scan()
 
 GEN = s.GEN_DIR
-J = "/Users/stevestudio2/.claude/yolo-queue/output/13-fuzzy-cohort-scan-2026-05-26.json"
+J = "/Users/macstudio3/.claude/yolo-queue/output/13-fuzzy-cohort-scan-2026-05-26.json"
 
 def psql(sql):
     return subprocess.run(["psql", "dw_unified", "-tAc", sql],
diff --git a/scratch_fuzz_scan.py b/scratch_fuzz_scan.py
index 947e73a..33c3017 100644
--- a/scratch_fuzz_scan.py
+++ b/scratch_fuzz_scan.py
@@ -8,8 +8,8 @@ import os, sys, json, subprocess, time
 import numpy as np
 from PIL import Image
 
-GEN_DIR = "/Users/stevestudio2/Projects/wallco-ai/data/generated"
-OUT = "/Users/stevestudio2/.claude/yolo-queue/output/13-fuzzy-cohort-scan-2026-05-26.md"
+GEN_DIR = "/Users/macstudio3/Projects/wallco-ai/data/generated"
+OUT = "/Users/macstudio3/.claude/yolo-queue/output/13-fuzzy-cohort-scan-2026-05-26.md"
 BAND_PX = 14            # half-width of the center cross band
 INTER_T = 45.0         # RGB euclidean dist beyond which a px is 'intermediate' (between the 2 tones)
 DOWN = 256             # downsample edge for palette detection
diff --git a/scripts/apply-id-collision-resolutions.py b/scripts/apply-id-collision-resolutions.py
index bdf3d2d..882f75c 100644
--- a/scripts/apply-id-collision-resolutions.py
+++ b/scripts/apply-id-collision-resolutions.py
@@ -4,7 +4,7 @@
 import json, sys, os, subprocess
 
 FT_VERDICT = sys.argv[1] if len(sys.argv) > 1 else "A"  # A=no-op preserve prod / B=prod unpublish / C=escalate
-AUDIT = "/Users/stevestudio2/Projects/wallco-ai/data/id-collision-resolutions-2026-05-29.jsonl"
+AUDIT = "/Users/macstudio3/Projects/wallco-ai/data/id-collision-resolutions-2026-05-29.jsonl"
 
 d = json.load(open('/tmp/collisions-data.json'))
 collisions = d['collisions']
diff --git a/scripts/auto-deploy-loop.sh b/scripts/auto-deploy-loop.sh
index 73a39cd..6f0671c 100755
--- a/scripts/auto-deploy-loop.sh
+++ b/scripts/auto-deploy-loop.sh
@@ -4,7 +4,7 @@
 # PNGs to prod, then reloads.
 # Kill: pkill -f auto-deploy-loop.sh
 
-ROOT="/Users/stevestudio2/Projects/wallco-ai"
+ROOT="/Users/macstudio3/Projects/wallco-ai"
 PROD_HOST="root@45.61.58.125"
 PROD_PATH="/root/public-projects/wallco-ai"
 COOKIE_FILE="/tmp/steve-dw-auth-cookie.txt"
diff --git a/scripts/backfill_drunk_animals.sh b/scripts/backfill_drunk_animals.sh
index f497445..ca30347 100755
--- a/scripts/backfill_drunk_animals.sh
+++ b/scripts/backfill_drunk_animals.sh
@@ -7,7 +7,7 @@
 #
 # Idempotent — both scripts overwrite in-place; running twice is harmless.
 
-ROOT=/Users/stevestudio2/Projects/wallco-ai
+ROOT=/Users/macstudio3/Projects/wallco-ai
 PSQL=/opt/homebrew/opt/postgresql@14/bin/psql
 PY=/opt/homebrew/bin/python3
 cd "$ROOT"
diff --git a/scripts/cw-rooms-driver.sh b/scripts/cw-rooms-driver.sh
index abae6eb..0535fb5 100755
--- a/scripts/cw-rooms-driver.sh
+++ b/scripts/cw-rooms-driver.sh
@@ -3,7 +3,7 @@
 # Reads /tmp/cw-cats.txt (one category per line), generates PIL living_room composites,
 # inserts wallco_rooms rows, reports per-cohort.
 set -uo pipefail
-cd /Users/stevestudio2/Projects/wallco-ai
+cd /Users/macstudio3/Projects/wallco-ai
 OUT=public/uploads/rooms
 mkdir -p "$OUT"
 PG="dw_unified"
diff --git a/scripts/dw-stale-urls-push.js b/scripts/dw-stale-urls-push.js
index e38fd6a..7f46e61 100644
--- a/scripts/dw-stale-urls-push.js
+++ b/scripts/dw-stale-urls-push.js
@@ -17,7 +17,7 @@ const path = require('path');
 const SHOP = 'designer-laboratory-sandbox.myshopify.com';
 const API = '2026-01';
 const TOKEN = (() => {
-  const envPath = '/Users/stevestudio2/Projects/secrets-manager/.env';
+  const envPath = '/Users/macstudio3/Projects/secrets-manager/.env';
   const txt = fs.readFileSync(envPath, 'utf8');
   const m = txt.match(/^SHOPIFY_ADMIN_TOKEN=(.+)$/m);
   if (!m) throw new Error('SHOPIFY_ADMIN_TOKEN missing');
diff --git a/scripts/elements_extract_prod.py b/scripts/elements_extract_prod.py
index 3f33acf..d600e4d 100644
--- a/scripts/elements_extract_prod.py
+++ b/scripts/elements_extract_prod.py
@@ -4,7 +4,7 @@
 Differences from the Mac2 canonical at ~/.claude/skills/elements/scripts/extract.py:
   - WALLCO_ROOT = /root/public-projects/wallco-ai (prod path layout)
   - Path rewriter: many prod PG rows have local_path pointing at Mac2's
-    /Users/stevestudio2/Projects/wallco-ai/... — rewrite to the prod-native
+    /Users/macstudio3/Projects/wallco-ai/... — rewrite to the prod-native
     /root/public-projects/wallco-ai/... so the bake can read the source PNG.
   - psql invoked via `sudo -u postgres` since the bake script runs as root and
     pg_hba peer-auth is by OS user.
@@ -28,7 +28,7 @@ CROP_FRAC = 0.75
 PALETTE_K = 6
 
 # Path rewriter — prod PG carries Mac2 paths; rewrite to prod-native.
-MAC2_PREFIX = '/Users/stevestudio2/Projects/wallco-ai/'
+MAC2_PREFIX = '/Users/macstudio3/Projects/wallco-ai/'
 PROD_PREFIX = '/root/public-projects/wallco-ai/'
 
 
diff --git a/scripts/fuzzy_seam_scan.py b/scripts/fuzzy_seam_scan.py
index b823925..3b750f2 100644
--- a/scripts/fuzzy_seam_scan.py
+++ b/scripts/fuzzy_seam_scan.py
@@ -19,7 +19,7 @@ import argparse, json, os, subprocess, sys, time
 import numpy as np
 from PIL import Image
 
-GEN_DIR = "/Users/stevestudio2/Projects/wallco-ai/data/generated"
+GEN_DIR = "/Users/macstudio3/Projects/wallco-ai/data/generated"
 
 # --- tunables (validated against the 2026-05-26 heal cohort) ---
 # The heal seam is a THIN blurred line at the EXACT geometric midline, flanked
@@ -175,7 +175,7 @@ def main():
     ap.add_argument("--cohort", action="store_true", help="scan all published heal designs")
     ap.add_argument("--shard", type=int, default=0)
     ap.add_argument("--shards", type=int, default=1)
-    ap.add_argument("--out", default="/Users/stevestudio2/Projects/wallco-ai/data/fuzzy-seam-scan.json")
+    ap.add_argument("--out", default="/Users/macstudio3/Projects/wallco-ai/data/fuzzy-seam-scan.json")
     ap.add_argument("--json", action="store_true")
     args = ap.parse_args()
 
diff --git a/scripts/instant-image-sync.sh b/scripts/instant-image-sync.sh
index 3f58df6..099c013 100755
--- a/scripts/instant-image-sync.sh
+++ b/scripts/instant-image-sync.sh
@@ -5,7 +5,7 @@
 # polling loop checking every 5s.
 
 set -u
-SRC="/Users/stevestudio2/Projects/wallco-ai/data/generated"
+SRC="/Users/macstudio3/Projects/wallco-ai/data/generated"
 PROD_HOST="root@45.61.58.125"
 PROD_PATH="/root/public-projects/wallco-ai/data/generated"
 LOG="/tmp/instant-image-sync.log"
diff --git a/scripts/overnight-noghost-bulk.sh b/scripts/overnight-noghost-bulk.sh
index f4fd8eb..53f689a 100755
--- a/scripts/overnight-noghost-bulk.sh
+++ b/scripts/overnight-noghost-bulk.sh
@@ -71,4 +71,4 @@ OK_NOGHOST=$(grep -c "^OK no-ghost" "$LOG_FILE" || echo 0)
 echo "=== overnight no-ghost bulk done $(date) ===" | tee -a "$LOG_FILE"
 echo "  2-tone processed:   $OK_2TONE" | tee -a "$LOG_FILE"
 echo "  no-ghost processed: $OK_NOGHOST" | tee -a "$LOG_FILE"
-echo "next: rsync /Users/stevestudio2/Projects/wallco-ai/data/generated/ to prod"
+echo "next: rsync /Users/macstudio3/Projects/wallco-ai/data/generated/ to prod"
diff --git a/scripts/qa-make-seamless.js b/scripts/qa-make-seamless.js
index 9d3aaa6..112bfa3 100644
--- a/scripts/qa-make-seamless.js
+++ b/scripts/qa-make-seamless.js
@@ -25,11 +25,11 @@ fs.mkdirSync(QA_DIR, { recursive: true });
 
 // Tests — passed inline so the script is self-contained.
 const TESTS = [
-  { bucket: 'sparse-damask',     id: 19,    category: 'damask',             local_path: '/Users/stevestudio2/Projects/wallco-ai/data/generated/1778541171660_1800259551.png' },
-  { bucket: 'dense-damask',      id: 33932, category: 'damask',             local_path: '/Users/stevestudio2/Projects/wallco-ai/data/generated/var_33925_hue+60_1779299498943.png' },
-  { bucket: 'zoo-calm',          id: 37768, category: 'designer-zoo-calm',  local_path: '/Users/stevestudio2/Projects/wallco-ai/data/generated/1779303456129_284434792.png' },
-  { bucket: 'scenic',            id: 39305, category: 'cactus-pine-scenic', local_path: '/Users/stevestudio2/Projects/wallco-ai/data/generated/regenrev_39122_1779606344330_1457904876.png' },
-  { bucket: 'drunk-monkeys-v2',  id: 39304, category: 'drunk-monkeys-v2',   local_path: '/Users/stevestudio2/Projects/wallco-ai/data/generated/cropfix_39115_1779606289209_561987055.png' },
+  { bucket: 'sparse-damask',     id: 19,    category: 'damask',             local_path: '/Users/macstudio3/Projects/wallco-ai/data/generated/1778541171660_1800259551.png' },
+  { bucket: 'dense-damask',      id: 33932, category: 'damask',             local_path: '/Users/macstudio3/Projects/wallco-ai/data/generated/var_33925_hue+60_1779299498943.png' },
+  { bucket: 'zoo-calm',          id: 37768, category: 'designer-zoo-calm',  local_path: '/Users/macstudio3/Projects/wallco-ai/data/generated/1779303456129_284434792.png' },
+  { bucket: 'scenic',            id: 39305, category: 'cactus-pine-scenic', local_path: '/Users/macstudio3/Projects/wallco-ai/data/generated/regenrev_39122_1779606344330_1457904876.png' },
+  { bucket: 'drunk-monkeys-v2',  id: 39304, category: 'drunk-monkeys-v2',   local_path: '/Users/macstudio3/Projects/wallco-ai/data/generated/cropfix_39115_1779606289209_561987055.png' },
 ];
 
 function runSeamless(algoPath, input, output) {
diff --git a/scripts/refresh_designs_snapshot.py b/scripts/refresh_designs_snapshot.py
index c255f6c..a4e0aa7 100644
--- a/scripts/refresh_designs_snapshot.py
+++ b/scripts/refresh_designs_snapshot.py
@@ -305,7 +305,7 @@ for r in rows:
         "image_url": pub_image_url,
         "filename": pub_filename,
         # NOTE: do NOT include local_path here — it leaks the Mac2 absolute path
-        # (`/Users/stevestudio2/...`) into the public /api/designs JSON response.
+        # (`/Users/macstudio3/...`) into the public /api/designs JSON response.
         # The /designs/img/by-id/:id route uses filename → IMG_DIR/<filename>,
         # and admin ops (settlement-delete, hue-shift, etc.) re-read local_path
         # live from PG via psqlQuery — neither needs it in designs.json.
diff --git a/scripts/salvage_orphan_pngs.py b/scripts/salvage_orphan_pngs.py
index 8f89871..4f64cd1 100644
--- a/scripts/salvage_orphan_pngs.py
+++ b/scripts/salvage_orphan_pngs.py
@@ -14,7 +14,7 @@ import subprocess, json
 from PIL import Image
 from collections import Counter
 
-ROOT = Path('/Users/stevestudio2/Projects/wallco-ai')
+ROOT = Path('/Users/macstudio3/Projects/wallco-ai')
 GEN  = ROOT / 'data' / 'generated'
 
 ORPHANS = [
diff --git a/scripts/smoke-test-customizer.js b/scripts/smoke-test-customizer.js
index 1c711ee..6895853 100644
--- a/scripts/smoke-test-customizer.js
+++ b/scripts/smoke-test-customizer.js
@@ -23,7 +23,7 @@
 'use strict';
 const EXIT_SKIP = 3;
 function loadChromium() {
-  const tries = ['playwright', '/Users/stevestudio2/Projects/animals/node_modules/playwright'];
+  const tries = ['playwright', '/Users/macstudio3/Projects/animals/node_modules/playwright'];
   for (const t of tries) { try { return require(t).chromium; } catch {} }
   console.error('SKIP: playwright not found'); process.exit(EXIT_SKIP);
 }
diff --git a/scripts/smoke-test-themes.js b/scripts/smoke-test-themes.js
index 7e59886..436c563 100644
--- a/scripts/smoke-test-themes.js
+++ b/scripts/smoke-test-themes.js
@@ -34,7 +34,7 @@ const EXIT_SKIP = 3;
 function loadChromium() {
   const tries = [
     'playwright',
-    '/Users/stevestudio2/Projects/animals/node_modules/playwright',
+    '/Users/macstudio3/Projects/animals/node_modules/playwright',
   ];
   for (const t of tries) { try { return require(t).chromium; } catch {} }
   console.error('SKIP: playwright not found (tried: ' + tries.join(', ') + ')');
diff --git a/scripts/spoonflower_lib.py b/scripts/spoonflower_lib.py
index 02f041a..915b1a4 100644
--- a/scripts/spoonflower_lib.py
+++ b/scripts/spoonflower_lib.py
@@ -3,7 +3,7 @@ Shared Spoonflower helpers — three auth paths in priority order:
 
   1. Connect to a running Chrome with --remote-debugging-port=9222
      (Steve's actual browser, already logged in).  This is the pattern
-     that worked in /Users/stevestudio2/Projects/Designer-Wallcoverings/
+     that worked in /Users/macstudio3/Projects/Designer-Wallcoverings/
      DW-Programming/150dpi/connect_and_download.js — proven reliable.
 
   2. Load a saved cookie jar from ~/.spoonflower-cookies.json
diff --git a/scripts/sync-geometric-9-to-prod.sh b/scripts/sync-geometric-9-to-prod.sh
index 015e0dd..46d74c2 100755
--- a/scripts/sync-geometric-9-to-prod.sh
+++ b/scripts/sync-geometric-9-to-prod.sh
@@ -10,7 +10,7 @@
 # UPDATE makes it idempotent. We do NOT setval the sequence (prod keeps issuing
 # from ~39287, no collision for the foreseeable future).
 set -e
-ROOT=/Users/stevestudio2/Projects/wallco-ai
+ROOT=/Users/macstudio3/Projects/wallco-ai
 REMOTE=root@45.61.58.125
 REMOTE_DIR=/root/public-projects/wallco-ai
 IDS="50571,50572,50573,50578,50580,50581,50583,50585,50586"
diff --git a/scripts/sync_drunk_animals_to_prod.sh b/scripts/sync_drunk_animals_to_prod.sh
index 2860246..0f9c941 100755
--- a/scripts/sync_drunk_animals_to_prod.sh
+++ b/scripts/sync_drunk_animals_to_prod.sh
@@ -18,7 +18,7 @@
 #   5. Smoke test https://wallco.ai/api/designs/search?q=drunk
 
 set -e
-ROOT=/Users/stevestudio2/Projects/wallco-ai
+ROOT=/Users/macstudio3/Projects/wallco-ai
 REMOTE=root@45.61.58.125
 REMOTE_DIR=/root/public-projects/wallco-ai
 PSQL=/opt/homebrew/opt/postgresql@14/bin/psql
diff --git a/scripts/test-classifier.sh b/scripts/test-classifier.sh
index f6337f0..e5010e2 100644
--- a/scripts/test-classifier.sh
+++ b/scripts/test-classifier.sh
@@ -52,7 +52,7 @@ source_classifier() {
     GEORGE_BASIC_AUTH=""
 
     # shellcheck source=/dev/null
-    source /Users/stevestudio2/Projects/wallco-ai/scripts/security-monitor.sh
+    source /Users/macstudio3/Projects/wallco-ai/scripts/security-monitor.sh
 }
 source_classifier
 
diff --git a/scripts/test_drunk_animals.sh b/scripts/test_drunk_animals.sh
index fbd5946..3628fe4 100755
--- a/scripts/test_drunk_animals.sh
+++ b/scripts/test_drunk_animals.sh
@@ -37,7 +37,7 @@ check "PG drunk-animals count > 0" $([[ "$pg_count" -gt 0 ]] && echo PASS || ech
 echo "      → $pg_count rows"
 
 # 4. Snapshot matches PG
-snap_count=$(python3 -c "import json; print(sum(1 for d in json.load(open('/Users/stevestudio2/Projects/wallco-ai/data/designs.json')) if d.get('category')=='drunk-animals'))")
+snap_count=$(python3 -c "import json; print(sum(1 for d in json.load(open('/Users/macstudio3/Projects/wallco-ai/data/designs.json')) if d.get('category')=='drunk-animals'))")
 check "designs.json snapshot matches PG" $([[ "$snap_count" == "$pg_count" ]] && echo PASS || echo "snapshot=$snap_count pg=$pg_count")
 
 # 5. In-memory feed total matches PG
diff --git a/scripts/tile-period-detect/detect_correlation_length.py b/scripts/tile-period-detect/detect_correlation_length.py
index 22f7a76..a10e2a7 100644
--- a/scripts/tile-period-detect/detect_correlation_length.py
+++ b/scripts/tile-period-detect/detect_correlation_length.py
@@ -114,10 +114,10 @@ def analyze(label, path, threshold=0.20):
 
 def main():
     cases = [
-        ('37893_NEW_MURAL_MODE',  '/Users/stevestudio2/Projects/wallco-ai/data/rooms/design_37893_living_room.png'),
-        ('39358_OLD_CONTROL',     '/Users/stevestudio2/Projects/wallco-ai/data/rooms/design_39358_bedroom.png'),
-        ('40638_OLD_CONTROL',     '/Users/stevestudio2/Projects/wallco-ai/data/rooms/design_40638_living_room.png'),
-        ('40931_OLD_CONTROL',     '/Users/stevestudio2/Projects/wallco-ai/data/rooms/design_40931_living_room.png'),
+        ('37893_NEW_MURAL_MODE',  '/Users/macstudio3/Projects/wallco-ai/data/rooms/design_37893_living_room.png'),
+        ('39358_OLD_CONTROL',     '/Users/macstudio3/Projects/wallco-ai/data/rooms/design_39358_bedroom.png'),
+        ('40638_OLD_CONTROL',     '/Users/macstudio3/Projects/wallco-ai/data/rooms/design_40638_living_room.png'),
+        ('40931_OLD_CONTROL',     '/Users/macstudio3/Projects/wallco-ai/data/rooms/design_40931_living_room.png'),
     ]
     results = []
     print(f"{'label':28} {'L20_h':>6} {'L20_v':>6} {'ratio_h':>8} {'ratio_v':>8} {'score':>7}  verdict")
diff --git a/scripts/variants-9roots-supervisor.sh b/scripts/variants-9roots-supervisor.sh
index fd2438c..9bee231 100755
--- a/scripts/variants-9roots-supervisor.sh
+++ b/scripts/variants-9roots-supervisor.sh
@@ -3,7 +3,7 @@
 # Mac2 (fork-starvation / abrupt termination, no clean error). It's resumable
 # (skips done cells via the ledger), so just relaunch until the grid is full.
 # Stops when the montage reports 90/90 filled OR the script exits 0 (clean done).
-cd /Users/stevestudio2/Projects/wallco-ai || exit 1
+cd /Users/macstudio3/Projects/wallco-ai || exit 1
 LOG=/tmp/variants9.log
 for i in $(seq 1 300); do
   echo "[supervisor $(date '+%H:%M:%S')] launch #$i" >> "$LOG"
diff --git a/scripts/verify-theme-controls.js b/scripts/verify-theme-controls.js
index 0b4a416..25607ec 100644
--- a/scripts/verify-theme-controls.js
+++ b/scripts/verify-theme-controls.js
@@ -6,7 +6,7 @@
 'use strict';
 const EXIT_SKIP = 3;
 function loadChromium() {
-  for (const t of ['playwright', '/Users/stevestudio2/Projects/animals/node_modules/playwright']) {
+  for (const t of ['playwright', '/Users/macstudio3/Projects/animals/node_modules/playwright']) {
     try { return require(t).chromium; } catch {}
   }
   console.error('SKIP: playwright not found'); process.exit(EXIT_SKIP);
diff --git a/scripts/watch-rescan-then-notify.sh b/scripts/watch-rescan-then-notify.sh
index 424745b..99fd71b 100755
--- a/scripts/watch-rescan-then-notify.sh
+++ b/scripts/watch-rescan-then-notify.sh
@@ -6,7 +6,7 @@
 set -u
 PID="${1:?usage: $0 <scan-pid> <log-path>}"
 LOG="${2:?usage: $0 <scan-pid> <log-path>}"
-ROOT="/Users/stevestudio2/Projects/wallco-ai"
+ROOT="/Users/macstudio3/Projects/wallco-ai"
 READY="$ROOT/data/.rescan-ready.txt"
 
 while kill -0 "$PID" 2>/dev/null; do
diff --git a/server.js b/server.js
index b2ece7e..01f1b82 100644
--- a/server.js
+++ b/server.js
@@ -4564,7 +4564,7 @@ document.getElementById('btn-merge').addEventListener('click', function(){
 // Helper: serve a design image by id (used by /merge previews + new cards).
 // Prefer the in-memory DESIGNS snapshot (sourced from designs.json which IS
 // synced across Mac2 → Kamatera). Fall back to PG only if not in cache.
-// Important — local_path is a Mac2-absolute path (`/Users/stevestudio2/…`)
+// Important — local_path is a Mac2-absolute path (`/Users/macstudio3/…`)
 // and won't resolve on Kamatera. Strip to basename and resolve against the
 // local IMG_DIR so the route works on both Mac2 and prod.
 app.get('/designs/img/by-id/:id', (req, res) => {
@@ -4611,7 +4611,7 @@ app.get('/designs/img/by-id/:id', (req, res) => {
   //   1. localPathForDesign helper (PII-free filename → IMG_DIR/file)
   //   2. d.local_path (DB column, may point at the original generated/ path)
   //   3. IMG_DIR + basename(d.local_path) — when PG carries a Mac2-style
-  //      absolute path (/Users/stevestudio2/…/data/generated/X.png) that
+  //      absolute path (/Users/macstudio3/…/data/generated/X.png) that
   //      never exists on prod's filesystem. The PNG IS on prod under
   //      /root/public-projects/wallco-ai/data/generated/X.png — same basename,
   //      different prefix. Added 2026-05-29 after the drunk-animals curator
@@ -21970,7 +21970,7 @@ app.post('/api/room', async (req, res) => {
     designWidthIn  = designWidthIn  || Number(d.width_in)  || null;
     designHeightIn = designHeightIn || Number(d.height_in) || null;
   }
-  // Prod local_path is often a Mac2 absolute path (/Users/stevestudio2/...) that
+  // Prod local_path is often a Mac2 absolute path (/Users/macstudio3/...) that
   // doesn't exist on this box, while the SAME file lives at IMG_DIR/<basename>
   // (data/generated). Fall back to that before declaring it missing — fixes the
   // "design file missing on disk" error on the admin See-in-Room generate flow
diff --git a/tomorrow-after-25min.sh b/tomorrow-after-25min.sh
index 9a75583..23f66e1 100755
--- a/tomorrow-after-25min.sh
+++ b/tomorrow-after-25min.sh
@@ -116,17 +116,17 @@ log ""
 log "=== Step 2/4: Vendor-name sweep on leaked sites ==="
 
 PATHS=(
-  "/Users/stevestudio2/Projects/wallsandfabrics/data/products.json"
-  "/Users/stevestudio2/Projects/customdigitalmurals/data/products.json"
-  "/Users/stevestudio2/Projects/naturaltextilewallpaper/data/products.json"
-  "/Users/stevestudio2/Projects/goldleafwallpaper/data/products.json"
-  "/Users/stevestudio2/Projects/silkwallpaper/data/products.json"
-  "/Users/stevestudio2/Projects/chinoiseriewallpaper/data/products.json"
-  "/Users/stevestudio2/Projects/1800swallpaper/data/products.json"
-  "/Users/stevestudio2/Projects/1890swallpaper/data/products.json"
-  "/Users/stevestudio2/Projects/carmelwallpapers/data/products.json"
-  "/Users/stevestudio2/Projects/metallicwallpaper/data/products.json"
-  "/Users/stevestudio2/Projects/architecturalwallcoverings/data/products.json"
+  "/Users/macstudio3/Projects/wallsandfabrics/data/products.json"
+  "/Users/macstudio3/Projects/customdigitalmurals/data/products.json"
+  "/Users/macstudio3/Projects/naturaltextilewallpaper/data/products.json"
+  "/Users/macstudio3/Projects/goldleafwallpaper/data/products.json"
+  "/Users/macstudio3/Projects/silkwallpaper/data/products.json"
+  "/Users/macstudio3/Projects/chinoiseriewallpaper/data/products.json"
+  "/Users/macstudio3/Projects/1800swallpaper/data/products.json"
+  "/Users/macstudio3/Projects/1890swallpaper/data/products.json"
+  "/Users/macstudio3/Projects/carmelwallpapers/data/products.json"
+  "/Users/macstudio3/Projects/metallicwallpaper/data/products.json"
+  "/Users/macstudio3/Projects/architecturalwallcoverings/data/products.json"
 )
 
 # Vendor denylist — DW vendor names that must never appear in customer-facing

← 3189159 auto-save: 2026-06-26T06:12:56 (65 files) — public/marketpla  ·  back to Wallco Ai  ·  migrate GoDaddy auth → Bearer PAT (TK-10 key rotation); sso- c08236f →