← back to Designer Wallcoverings
TK-10057: room-setting heroes live (38); storage-safe no-op guard + daily rotation plist
b22ef15f57f24ee1d373f3b4d38a9f9febdf2702 · 2026-07-30 12:13:30 -0700 · collection-agent
Files touched
A shopify/collection-hero-fix/tk10056-hero-rotate/backups/ajiro-wallpapers-by-maya-romanoff.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/alligator-skin-wallpaper-collection.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/art-nouveau-wallpaper.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/arte-international.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/blue-wallcoverings.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/bohemian-wallpaper.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/bohemian.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/chinoiserie-collection.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/chinoiserie.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/collezione-italia.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/commercial-contract.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/coordonne.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/dresses-phillipe-romano.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/farmhouse-wallpaper.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/gp-j-baker.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/grand-palace-wallpaper-collection.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/grasscloth-natural-fiber.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/hand-crafted.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/kelly-wearstler-collections.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/kids-wallpaper.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/kravet-coillections.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/living-with-art.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/murals-scenics.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/outdoor-fabric.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-faux-metals-collection.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-metals-1.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-renaissance-metal-leaf-collection.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-textures-vol-5.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/pr-jacquard.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/pr-water-hyacinth.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/scenic-wallcoverings.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/scenic-wallpaper.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/scenics.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/steve-abrams-whimsy.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/thibaut-wallcoverings.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/type-2-durable.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/wolf-gordon-wallcoverings.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/backups/zoffany-wallcoverings.jsonA shopify/collection-hero-fix/tk10056-hero-rotate/com.steve.dw-hero-rotate.plistM shopify/collection-hero-fix/tk10056-hero-rotate/hero-rotate.pyA shopify/collection-hero-fix/tk10056-hero-rotate/roomheroes-live.pngA shopify/collection-hero-fix/tk10056-hero-rotate/rotate-heroes.shA shopify/collection-hero-fix/tk10056-hero-rotate/verify/gpj.pngA shopify/collection-hero-fix/tk10056-hero-rotate/verify/kelly.pngA shopify/collection-hero-fix/tk10056-hero-rotate/verify/thibaut.png
Diff
commit b22ef15f57f24ee1d373f3b4d38a9f9febdf2702
Author: collection-agent <steve@designerwallcoverings.com>
Date: Thu Jul 30 12:13:30 2026 -0700
TK-10057: room-setting heroes live (38); storage-safe no-op guard + daily rotation plist
---
.../backups/ajiro-wallpapers-by-maya-romanoff.json | 1 +
.../backups/alligator-skin-wallpaper-collection.json | 1 +
.../backups/art-nouveau-wallpaper.json | 1 +
.../backups/arte-international.json | 1 +
.../backups/blue-wallcoverings.json | 1 +
.../backups/bohemian-wallpaper.json | 1 +
.../tk10056-hero-rotate/backups/bohemian.json | 1 +
.../backups/chinoiserie-collection.json | 1 +
.../tk10056-hero-rotate/backups/chinoiserie.json | 1 +
.../tk10056-hero-rotate/backups/collezione-italia.json | 1 +
.../backups/commercial-contract.json | 1 +
.../tk10056-hero-rotate/backups/coordonne.json | 1 +
.../backups/dresses-phillipe-romano.json | 1 +
.../backups/farmhouse-wallpaper.json | 1 +
.../tk10056-hero-rotate/backups/gp-j-baker.json | 1 +
.../backups/grand-palace-wallpaper-collection.json | 1 +
.../backups/grasscloth-natural-fiber.json | 1 +
.../tk10056-hero-rotate/backups/hand-crafted.json | 1 +
.../backups/kelly-wearstler-collections.json | 1 +
.../tk10056-hero-rotate/backups/kids-wallpaper.json | 1 +
.../backups/kravet-coillections.json | 1 +
.../tk10056-hero-rotate/backups/living-with-art.json | 1 +
.../tk10056-hero-rotate/backups/murals-scenics.json | 1 +
.../tk10056-hero-rotate/backups/outdoor-fabric.json | 1 +
.../phillipe-romano-faux-metals-collection.json | 1 +
.../backups/phillipe-romano-metals-1.json | 1 +
...llipe-romano-renaissance-metal-leaf-collection.json | 1 +
.../backups/phillipe-romano-textures-vol-5.json | 1 +
.../tk10056-hero-rotate/backups/pr-jacquard.json | 1 +
.../tk10056-hero-rotate/backups/pr-water-hyacinth.json | 1 +
.../backups/scenic-wallcoverings.json | 1 +
.../tk10056-hero-rotate/backups/scenic-wallpaper.json | 1 +
.../tk10056-hero-rotate/backups/scenics.json | 1 +
.../backups/steve-abrams-whimsy.json | 1 +
.../backups/thibaut-wallcoverings.json | 1 +
.../tk10056-hero-rotate/backups/type-2-durable.json | 1 +
.../backups/wolf-gordon-wallcoverings.json | 1 +
.../backups/zoffany-wallcoverings.json | 1 +
.../tk10056-hero-rotate/com.steve.dw-hero-rotate.plist | 13 +++++++++++++
.../tk10056-hero-rotate/hero-rotate.py | 16 ++++++++++++----
.../tk10056-hero-rotate/roomheroes-live.png | Bin 0 -> 598336 bytes
.../tk10056-hero-rotate/rotate-heroes.sh | 9 +++++++++
.../tk10056-hero-rotate/verify/gpj.png | Bin 0 -> 505897 bytes
.../tk10056-hero-rotate/verify/kelly.png | Bin 0 -> 746349 bytes
.../tk10056-hero-rotate/verify/thibaut.png | Bin 0 -> 718840 bytes
45 files changed, 72 insertions(+), 4 deletions(-)
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/ajiro-wallpapers-by-maya-romanoff.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/ajiro-wallpapers-by-maya-romanoff.json
new file mode 100644
index 00000000..c9b53521
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/ajiro-wallpapers-by-maya-romanoff.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2025-01-13T08:56:42-08:00", "image": {"created_at": "2026-07-30T11:25:33-07:00", "alt": null, "width": 3000, "height": 2108, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/MR_AH_4X02_P_Ash_Luster_RGB_5f5c4d23-3b55-4499-b447-e16578704c3f.jpg?v=1785435933"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/alligator-skin-wallpaper-collection.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/alligator-skin-wallpaper-collection.json
new file mode 100644
index 00000000..a66b073e
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/alligator-skin-wallpaper-collection.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-18T10:29:49-07:00", "image": {"created_at": "2026-07-30T11:25:35-07:00", "alt": null, "width": 2000, "height": 1604, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/CROCODILE_CREAM_CUSHION_CU-CR01-01-OS-A1_product1.jpg?v=1785435935"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/art-nouveau-wallpaper.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/art-nouveau-wallpaper.json
new file mode 100644
index 00000000..69e9b0f0
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/art-nouveau-wallpaper.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-04T23:52:45-08:00", "image": {"created_at": "2026-07-30T11:25:37-07:00", "alt": null, "width": 1567, "height": 1045, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/Lincrusta-x-Morris-Co.-ACANTHUS-WM1980FR-Painted-in-Wooden-Dell-close-up2.jpg?v=1785435938"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/arte-international.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/arte-international.json
new file mode 100644
index 00000000..578c7caa
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/arte-international.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-04T19:15:10-08:00", "image": {"created_at": "2026-07-30T11:25:39-07:00", "alt": null, "width": 2000, "height": 1125, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/media-library623t98b1v3et16YzHHq-full-pattern.jpg?v=1785435940"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/blue-wallcoverings.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/blue-wallcoverings.json
new file mode 100644
index 00000000..26775c7b
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/blue-wallcoverings.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-04-09T21:02:20-07:00", "image": {"created_at": "2026-07-30T11:25:42-07:00", "alt": null, "width": 1400, "height": 1050, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/7481CE61-86C0-4953-BDED-B557357724A4_1400x1050_73e1fe20-e507-4cf1-98dd-765918ee1489.jpg?v=1785435942"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/bohemian-wallpaper.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/bohemian-wallpaper.json
new file mode 100644
index 00000000..16c0dab7
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/bohemian-wallpaper.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-04T23:52:34-08:00", "image": {"created_at": "2026-07-30T11:25:44-07:00", "alt": null, "width": 2000, "height": 1125, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/media-library839emfqi60s5ef8zM8y-full-pattern.jpg?v=1785435944"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/bohemian.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/bohemian.json
new file mode 100644
index 00000000..3709bf13
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/bohemian.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-04-09T21:34:31-07:00", "image": {"created_at": "2026-07-30T11:25:46-07:00", "alt": null, "width": 2000, "height": 1125, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/media-library839emfqi60s5ef8zM8y-full-pattern_6081b6ed-dda8-41d4-ab99-75dde94b5c34.jpg?v=1785435947"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/chinoiserie-collection.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/chinoiserie-collection.json
new file mode 100644
index 00000000..48956759
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/chinoiserie-collection.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-20T13:10:27-07:00", "image": {"created_at": "2026-07-30T11:25:54-07:00", "alt": null, "width": 1536, "height": 1024, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/room-bedroom-1775418737499.png?v=1785435954"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/chinoiserie.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/chinoiserie.json
new file mode 100644
index 00000000..c4f433b3
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/chinoiserie.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2018-09-29T12:02:03-07:00", "image": {"created_at": "2026-07-30T11:25:56-07:00", "alt": null, "width": 1536, "height": 1024, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/room-bedroom-1775418737499_1a984a21-db7b-4922-a925-e6af343161c1.png?v=1785435957"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/collezione-italia.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/collezione-italia.json
new file mode 100644
index 00000000..c5701a01
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/collezione-italia.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-07-22T09:35:45-07:00", "image": {"created_at": "2026-07-30T11:25:59-07:00", "alt": null, "width": 2500, "height": 1666, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/collezioneitalia_superstar_10743_l_web_1.jpg?v=1785435959"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/commercial-contract.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/commercial-contract.json
new file mode 100644
index 00000000..4f573f85
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/commercial-contract.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-20T23:07:31-07:00", "image": {"created_at": "2026-07-30T11:26:01-07:00", "alt": null, "width": 2048, "height": 1589, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/heavy-madagascar-natural_ef12261c-3c1c-4458-aa23-5ea8fa01fe95.jpg?v=1785435962"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/coordonne.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/coordonne.json
new file mode 100644
index 00000000..e0933277
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/coordonne.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-04T19:13:36-08:00", "image": {"created_at": "2026-07-30T11:26:03-07:00", "alt": null, "width": 1800, "height": 1280, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/A00946_01.jpg?v=1785435964"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/dresses-phillipe-romano.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/dresses-phillipe-romano.json
new file mode 100644
index 00000000..8d2a2ed4
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/dresses-phillipe-romano.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2025-03-05T16:01:21-08:00", "image": {"created_at": "2026-07-30T11:26:06-07:00", "alt": null, "width": 2048, "height": 1536, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/B3pfuJ38HnGiyI9tNwLg.jpg?v=1785435967"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/farmhouse-wallpaper.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/farmhouse-wallpaper.json
new file mode 100644
index 00000000..0bfad4a3
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/farmhouse-wallpaper.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-04T23:52:42-08:00", "image": {"created_at": "2026-07-30T11:26:08-07:00", "alt": null, "width": 2000, "height": 1125, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/media-library839emfqi60s5ef8zM8y-full-pattern_0be0e246-c713-4607-8451-502454bb87ae.jpg?v=1785435969"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/gp-j-baker.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/gp-j-baker.json
new file mode 100644
index 00000000..da4307d4
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/gp-j-baker.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-04T19:15:14-08:00", "image": {"created_at": "2026-07-30T11:26:11-07:00", "alt": null, "width": 2500, "height": 1406, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/BW45128_6_2.png?v=1785435971"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/grand-palace-wallpaper-collection.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/grand-palace-wallpaper-collection.json
new file mode 100644
index 00000000..81f00389
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/grand-palace-wallpaper-collection.json
@@ -0,0 +1 @@
+{"custom_collection": {"published_at": "2025-06-16T09:02:30-07:00", "image": {"created_at": "2026-07-30T11:25:29-07:00", "alt": null, "width": 2000, "height": 1333, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/221018_1093_1_29838cca-4f5b-4ca5-9ac5-9e13c75b8a43.jpg?v=1785435929"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/grasscloth-natural-fiber.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/grasscloth-natural-fiber.json
new file mode 100644
index 00000000..592ca777
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/grasscloth-natural-fiber.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-20T23:07:34-07:00", "image": {"created_at": "2026-07-30T11:26:13-07:00", "alt": null, "width": 2048, "height": 1589, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/heavy-madagascar-natural_2767f1b6-1012-46de-b30b-4f75b536eeb7.jpg?v=1785435974"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/hand-crafted.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/hand-crafted.json
new file mode 100644
index 00000000..fde04e46
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/hand-crafted.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2018-11-19T22:14:00-08:00", "image": {"created_at": "2026-07-30T11:26:15-07:00", "alt": null, "width": 2500, "height": 1667, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/BP11056_1_2.png?v=1785435976"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/kelly-wearstler-collections.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/kelly-wearstler-collections.json
new file mode 100644
index 00000000..31e26a58
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/kelly-wearstler-collections.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2024-10-02T11:05:59-07:00", "image": {"created_at": "2026-07-30T11:26:20-07:00", "alt": null, "width": 2500, "height": 1667, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/GWF-3797_711_5.png?v=1785435980"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/kids-wallpaper.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/kids-wallpaper.json
new file mode 100644
index 00000000..5709f2ad
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/kids-wallpaper.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2024-05-31T01:46:01-07:00", "image": {"created_at": "2026-07-30T11:25:52-07:00", "alt": null, "width": 1600, "height": 1067, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/R13191_interior2.webp?v=1785435952"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/kravet-coillections.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/kravet-coillections.json
new file mode 100644
index 00000000..ca428f5a
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/kravet-coillections.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2025-02-13T13:51:44-08:00", "image": {"created_at": "2026-07-30T11:26:22-07:00", "alt": null, "width": 2500, "height": 1406, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/P2025101_530_7.png?v=1785435983"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/living-with-art.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/living-with-art.json
new file mode 100644
index 00000000..06fd4211
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/living-with-art.json
@@ -0,0 +1 @@
+{"custom_collection": {"published_at": "2024-12-17T10:53:13-08:00", "image": {"created_at": "2026-07-30T11:25:31-07:00", "alt": null, "width": 2348, "height": 1000, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/LW51908F_2fd0a49e-3059-47e4-8c6f-ae33efacd28b.jpg?v=1785435931"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/murals-scenics.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/murals-scenics.json
new file mode 100644
index 00000000..e4863229
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/murals-scenics.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-20T23:07:33-07:00", "image": {"created_at": "2026-07-30T11:26:25-07:00", "alt": null, "width": 1536, "height": 1024, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/room-bedroom-1775418737499_1372a1d6-34e6-41d2-a9af-851f1f03e26b.png?v=1785435986"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/outdoor-fabric.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/outdoor-fabric.json
new file mode 100644
index 00000000..7cceb852
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/outdoor-fabric.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-20T13:14:08-07:00", "image": {"created_at": "2026-07-30T11:26:18-07:00", "alt": null, "width": 2000, "height": 1333, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/fischbacher_rgb_l_garden_party-14616_web.jpg?v=1785435978"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-faux-metals-collection.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-faux-metals-collection.json
new file mode 100644
index 00000000..5a37cd25
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-faux-metals-collection.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2018-09-29T12:45:11-07:00", "image": {"created_at": "2026-07-30T11:26:27-07:00", "alt": null, "width": 1400, "height": 1000, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/Antigua_Stagionato_33010_1_Mood_Web_LR-hero_a3a996ff-5774-46c5-ba0e-0594468ccf1a.jpg?v=1785435988"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-metals-1.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-metals-1.json
new file mode 100644
index 00000000..70889738
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-metals-1.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-03T18:57:26-08:00", "image": {"created_at": "2026-07-30T11:26:31-07:00", "alt": null, "width": 1400, "height": 1000, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/Antigua_Stagionato_33010_1_Mood_Web_LR-hero_95b625a4-6c7a-47e6-82b4-13a702d08124.jpg?v=1785435992"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-renaissance-metal-leaf-collection.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-renaissance-metal-leaf-collection.json
new file mode 100644
index 00000000..fe8f20f9
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-renaissance-metal-leaf-collection.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2018-09-29T12:45:11-07:00", "image": {"created_at": "2026-07-30T11:26:37-07:00", "alt": null, "width": 1400, "height": 1000, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/Antigua_Stagionato_33010_1_Mood_Web_LR-hero_7dd8dce3-9196-4160-a5d5-7eacb9db2f92.jpg?v=1785435998"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-textures-vol-5.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-textures-vol-5.json
new file mode 100644
index 00000000..938ff8da
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/phillipe-romano-textures-vol-5.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-20T15:24:46-07:00", "image": {"created_at": "2026-07-30T11:26:33-07:00", "alt": null, "width": 2000, "height": 1125, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/media-librarymdUYxO-full-pattern.jpg?v=1785435994"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/pr-jacquard.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/pr-jacquard.json
new file mode 100644
index 00000000..36d594c2
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/pr-jacquard.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-07-12T22:48:13-07:00", "image": {"created_at": "2026-07-30T11:26:29-07:00", "alt": null, "width": 2067, "height": 862, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/3d51a2b023a9b833af51ce5c9c82535a.jpg?v=1785435990"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/pr-water-hyacinth.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/pr-water-hyacinth.json
new file mode 100644
index 00000000..5b712b89
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/pr-water-hyacinth.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-07-12T22:48:25-07:00", "image": {"created_at": "2026-07-30T11:26:35-07:00", "alt": null, "width": 1920, "height": 1371, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/3f35f3e1a082366f5509815a733a8238.jpg?v=1785435996"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/scenic-wallcoverings.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/scenic-wallcoverings.json
new file mode 100644
index 00000000..49cb9243
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/scenic-wallcoverings.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-04-10T09:25:22-07:00", "image": {"created_at": "2026-07-30T11:26:42-07:00", "alt": null, "width": 1536, "height": 1024, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/room-bedroom-1775418737499_81f0722f-2b81-40eb-97c0-51bda94eb0a1.png?v=1785436003"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/scenic-wallpaper.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/scenic-wallpaper.json
new file mode 100644
index 00000000..4c698a2c
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/scenic-wallpaper.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-04T23:52:29-08:00", "image": {"created_at": "2026-07-30T11:26:40-07:00", "alt": null, "width": 1536, "height": 1024, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/room-bedroom-1775418737499_b180535d-8648-4264-b800-728dd2444081.png?v=1785436000"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/scenics.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/scenics.json
new file mode 100644
index 00000000..d2aee6af
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/scenics.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-20T13:15:37-07:00", "image": {"created_at": "2026-07-30T11:26:44-07:00", "alt": null, "width": 2000, "height": 1600, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/Welsh_Landscape_Above_Grey_Skies_Artwork_AW-HH06-02-OS-A_product1.jpg?v=1785436005"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/steve-abrams-whimsy.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/steve-abrams-whimsy.json
new file mode 100644
index 00000000..3d4e5f19
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/steve-abrams-whimsy.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2025-03-25T09:24:56-07:00", "image": {"created_at": "2026-07-30T11:26:48-07:00", "alt": null, "width": 2048, "height": 1457, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/AngX3KivZd65I9RIWwLP_be9662a7-b94b-48ef-9925-794e63fff8cd.jpg?v=1785436008"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/thibaut-wallcoverings.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/thibaut-wallcoverings.json
new file mode 100644
index 00000000..2ec7d59c
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/thibaut-wallcoverings.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-11T11:44:13-07:00", "image": {"created_at": "2026-07-30T11:26:50-07:00", "alt": null, "width": 1536, "height": 672, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/room-living_room-dwtt-80220-designer-wallcoverings-los-angeles.jpg?v=1785436010"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/type-2-durable.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/type-2-durable.json
new file mode 100644
index 00000000..0c5e4a3b
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/type-2-durable.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-03-19T05:36:30-07:00", "image": {"created_at": "2026-07-30T11:26:52-07:00", "alt": null, "width": 1553, "height": 1200, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/tg60432_4ae3f76c-4d03-47b6-b94a-94c88a8b7b8a.jpg?v=1785436012"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/wolf-gordon-wallcoverings.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/wolf-gordon-wallcoverings.json
new file mode 100644
index 00000000..baebb018
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/wolf-gordon-wallcoverings.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-04-09T21:34:25-07:00", "image": {"created_at": "2026-07-30T11:26:54-07:00", "alt": null, "width": 1400, "height": 1120, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/wg_wall_cu_c10428dd-4255-4bac-a15a-ccfe21a8091e.jpg?v=1785436014"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/backups/zoffany-wallcoverings.json b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/zoffany-wallcoverings.json
new file mode 100644
index 00000000..b20559e5
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/backups/zoffany-wallcoverings.json
@@ -0,0 +1 @@
+{"smart_collection": {"published_at": "2026-02-25T08:57:05-08:00", "image": {"created_at": "2026-07-30T11:26:56-07:00", "alt": null, "width": 2500, "height": 1406, "src": "https://cdn.shopify.com/s/files/1/0015/4117/7456/collections/arcadian_thames_section_homepage_desktop_ff6d1c8a-b7e8-4d0d-a136-60168a3d0d5e.png?v=1785436017"}}}
\ No newline at end of file
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/com.steve.dw-hero-rotate.plist b/shopify/collection-hero-fix/tk10056-hero-rotate/com.steve.dw-hero-rotate.plist
new file mode 100644
index 00000000..d0d5f2ef
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/com.steve.dw-hero-rotate.plist
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.dw-hero-rotate</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/bin/bash</string>
+ <string>/Users/macstudio3/Projects/Designer-Wallcoverings/shopify/collection-hero-fix/tk10056-hero-rotate/rotate-heroes.sh</string>
+ </array>
+ <key>StartCalendarInterval</key><dict><key>Hour</key><integer>6</integer><key>Minute</key><integer>15</integer></dict>
+ <key>StandardOutPath</key><string>/Users/macstudio3/Projects/Designer-Wallcoverings/shopify/collection-hero-fix/tk10056-hero-rotate/launchd.out</string>
+ <key>StandardErrorPath</key><string>/Users/macstudio3/Projects/Designer-Wallcoverings/shopify/collection-hero-fix/tk10056-hero-rotate/launchd.err</string>
+</dict></plist>
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/hero-rotate.py b/shopify/collection-hero-fix/tk10056-hero-rotate/hero-rotate.py
index 4fccc7e7..fa998e6b 100644
--- a/shopify/collection-hero-fix/tk10056-hero-rotate/hero-rotate.py
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/hero-rotate.py
@@ -81,19 +81,27 @@ def dryrun(handle=None):
bw=f"{best[2]}x{best[3]}" if best else "-"
print(f" {c['handle'][:38]:38} cur={cw:11} -> {tag:9} {bw:11} new={best[5] if best else '-'} {(best[4].split('/')[-1][:40]) if best else ''}")
print(f"\n{nroom}/{n} collections would use a ROOM-SETTING hero from newest items")
+def _base(src): # compare by filename (current is a /collections/ copy of the /files/ src)
+ return (src or "").split("?")[0].split("/")[-1]
def apply(handle=None):
- os.makedirs(os.path.join(HERE,"backups"),exist_ok=True); done=0
+ bdir=os.path.join(HERE,"backups"); os.makedirs(bdir,exist_ok=True); done=0; unchanged=0
for c in rows(handle):
best=pick_hero(c["id"])
if not best: print(f"skip {c['handle']} (no candidate)"); continue
key,path=endpoint(c["res"])
cur=req("GET",f"{path}/{c['id']}.json?fields=image,published_at")
- if not cur.get(key,{}).get("published_at"): print(f"skip {c['handle']} (unpublished)"); continue
- json.dump(cur,open(os.path.join(HERE,"backups",f"{c['handle']}.json"),"w"))
+ col=cur.get(key,{})
+ if not col.get("published_at"): print(f"skip {c['handle']} (unpublished)"); continue
+ cur_img=(col.get("image") or {}).get("src")
+ if _base(cur_img)==_base(best[4]): # already the chosen hero -> NO WRITE (storage-safe for daily runs)
+ unchanged+=1; continue
+ bpath=os.path.join(bdir,f"{c['handle']}.json")
+ if not os.path.exists(bpath): # preserve ORIGINAL only; never overwrite the rollback baseline
+ json.dump(cur,open(bpath,"w"))
req("PUT",f"{path}/{c['id']}.json",{key:{"id":c["id"],"image":{"src":best[4]}}})
done+=1; print(f"set {c['handle']} -> {best[1]} {best[2]}x{best[3]}")
time.sleep(0.6)
- print(f"applied {done}")
+ print(f"applied {done} changed, {unchanged} already-current (no write)")
if __name__=="__main__":
a=sys.argv[1:]; hd=a[a.index("--handle")+1] if "--handle" in a else None
if not a or a[0]=="--dryrun": dryrun(hd)
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/roomheroes-live.png b/shopify/collection-hero-fix/tk10056-hero-rotate/roomheroes-live.png
new file mode 100644
index 00000000..872ff9fb
Binary files /dev/null and b/shopify/collection-hero-fix/tk10056-hero-rotate/roomheroes-live.png differ
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/rotate-heroes.sh b/shopify/collection-hero-fix/tk10056-hero-rotate/rotate-heroes.sh
new file mode 100755
index 00000000..4ec64095
--- /dev/null
+++ b/shopify/collection-hero-fix/tk10056-hero-rotate/rotate-heroes.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+# TK-10057 daily hero rotation — re-pick each collection's hero from its NEWEST items,
+# preferring room-settings. Storage-safe: writes ONLY when the chosen hero changed.
+set -euo pipefail
+DIR="$(cd "$(dirname "$0")" && pwd)"
+LOG="$DIR/rotate.log"
+echo "=== $(date '+%Y-%m-%d %H:%M:%S') hero-rotate run ===" >> "$LOG"
+/usr/bin/env python3 "$DIR/hero-rotate.py" --apply >> "$LOG" 2>&1
+echo "--- done ---" >> "$LOG"
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/verify/gpj.png b/shopify/collection-hero-fix/tk10056-hero-rotate/verify/gpj.png
new file mode 100644
index 00000000..f369a3de
Binary files /dev/null and b/shopify/collection-hero-fix/tk10056-hero-rotate/verify/gpj.png differ
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/verify/kelly.png b/shopify/collection-hero-fix/tk10056-hero-rotate/verify/kelly.png
new file mode 100644
index 00000000..94b555e4
Binary files /dev/null and b/shopify/collection-hero-fix/tk10056-hero-rotate/verify/kelly.png differ
diff --git a/shopify/collection-hero-fix/tk10056-hero-rotate/verify/thibaut.png b/shopify/collection-hero-fix/tk10056-hero-rotate/verify/thibaut.png
new file mode 100644
index 00000000..073e06c5
Binary files /dev/null and b/shopify/collection-hero-fix/tk10056-hero-rotate/verify/thibaut.png differ
← 3f4182cb TK-10057: room-setting-preferring hero selector (newest-item
·
back to Designer Wallcoverings
·
auto-save: 2026-07-30T12:17:59 (41 files) — shopify/collecti 7e0060ad →