← back to Wallco Ai
psqlExecLocal: use sudo-postgres path on Linux (was: bare psql, failed as root on prod)
d7f84f7566abc3bf44cfe3cb465ac278b6199b30 · 2026-05-13 13:31:11 -0700 · SteveStudio2
The /api/design/:id/remove endpoint (and others using psqlExecLocal)
was silently failing on prod with 'role root does not exist'. Switched
to PSQL_CMD which already handles the Linux/postgres-user split.
Exposed by Steve trying to delete design 3544 today.
Files touched
M data/designs.jsonA scripts/generate-bh-batch-retry.jsA scripts/generate-bh-coords-abstracts-batch.jsM server.jsM src/admin-gate.js
Diff
commit d7f84f7566abc3bf44cfe3cb465ac278b6199b30
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date: Wed May 13 13:31:11 2026 -0700
psqlExecLocal: use sudo-postgres path on Linux (was: bare psql, failed as root on prod)
The /api/design/:id/remove endpoint (and others using psqlExecLocal)
was silently failing on prod with 'role root does not exist'. Switched
to PSQL_CMD which already handles the Linux/postgres-user split.
Exposed by Steve trying to delete design 3544 today.
---
data/designs.json | 4931 +++++++++++++++++++++++--
scripts/generate-bh-batch-retry.js | 142 +
scripts/generate-bh-coords-abstracts-batch.js | 315 ++
server.js | 8 +-
src/admin-gate.js | 29 +-
5 files changed, 5077 insertions(+), 348 deletions(-)
diff --git a/data/designs.json b/data/designs.json
index 358911e..44f35f6 100644
--- a/data/designs.json
+++ b/data/designs.json
@@ -59041,7 +59041,12 @@
"user_style_good": null,
"user_scale_good": null,
"user_stars": null,
- "room_mockups": []
+ "room_mockups": [
+ "bedroom",
+ "dining_room",
+ "living_room",
+ "office"
+ ]
},
{
"id": 2913,
@@ -67007,162 +67012,6 @@
"user_stars": null,
"room_mockups": []
},
- {
- "id": 3275,
- "kind": "seamless_tile",
- "category": "butterfly-trellis",
- "dominant_hex": "#f0ead6",
- "saturation": 0.464,
- "title": "Honey Atelier No.3275",
- "handle": "wallco-3275",
- "image_url": "/designs/img/bt_1778695644031_1940559818.png",
- "filename": "bt_1778695644031_1940559818.png",
- "generator": "wallco.ai",
- "seed": 1940559818,
- "is_published": true,
- "created_at": "2026-05-13T18:07:24.235872+00:00",
- "motifs": [
- "butterfly",
- "trellis",
- "lattice"
- ],
- "user_removed": false,
- "user_color_good": null,
- "user_style_good": null,
- "user_scale_good": null,
- "user_stars": null,
- "room_mockups": []
- },
- {
- "id": 3276,
- "kind": "seamless_tile",
- "category": "butterfly-trellis",
- "dominant_hex": "#f0ebd9",
- "saturation": 0.434,
- "title": "Honey Studio No.3276",
- "handle": "wallco-3276",
- "image_url": "/designs/img/bt_1778695651806_634428863.png",
- "filename": "bt_1778695651806_634428863.png",
- "generator": "wallco.ai",
- "seed": 634428863,
- "is_published": true,
- "created_at": "2026-05-13T18:07:31.972108+00:00",
- "motifs": [
- "butterfly",
- "trellis",
- "lattice"
- ],
- "user_removed": false,
- "user_color_good": null,
- "user_style_good": null,
- "user_scale_good": null,
- "user_stars": null,
- "room_mockups": []
- },
- {
- "id": 3277,
- "kind": "seamless_tile",
- "category": "butterfly-trellis",
- "dominant_hex": "#162041",
- "saturation": 0.494,
- "title": "Sapphire Origin No.3277",
- "handle": "wallco-3277",
- "image_url": "/designs/img/bt_1778695660149_1131824128.png",
- "filename": "bt_1778695660149_1131824128.png",
- "generator": "wallco.ai",
- "seed": 1131824128,
- "is_published": true,
- "created_at": "2026-05-13T18:07:40.297316+00:00",
- "motifs": [
- "butterfly",
- "trellis",
- "lattice"
- ],
- "user_removed": false,
- "user_color_good": null,
- "user_style_good": null,
- "user_scale_good": null,
- "user_stars": null,
- "room_mockups": []
- },
- {
- "id": 3278,
- "kind": "seamless_tile",
- "category": "butterfly-trellis",
- "dominant_hex": "#96b887",
- "saturation": 0.257,
- "title": "Sage Folio No.3278",
- "handle": "wallco-3278",
- "image_url": "/designs/img/bt_1778695667605_717851494.png",
- "filename": "bt_1778695667605_717851494.png",
- "generator": "wallco.ai",
- "seed": 717851494,
- "is_published": true,
- "created_at": "2026-05-13T18:07:47.798356+00:00",
- "motifs": [
- "butterfly",
- "trellis",
- "lattice"
- ],
- "user_removed": false,
- "user_color_good": null,
- "user_style_good": null,
- "user_scale_good": null,
- "user_stars": null,
- "room_mockups": []
- },
- {
- "id": 3279,
- "kind": "seamless_tile",
- "category": "butterfly-trellis",
- "dominant_hex": "#f3efe0",
- "saturation": 0.442,
- "title": "Honey Reverie No.3279",
- "handle": "wallco-3279",
- "image_url": "/designs/img/bt_1778695676553_1191751097.png",
- "filename": "bt_1778695676553_1191751097.png",
- "generator": "wallco.ai",
- "seed": 1191751097,
- "is_published": false,
- "created_at": "2026-05-13T18:07:56.688375+00:00",
- "motifs": [
- "butterfly",
- "trellis",
- "lattice"
- ],
- "user_removed": false,
- "user_color_good": null,
- "user_style_good": null,
- "user_scale_good": null,
- "user_stars": null,
- "room_mockups": []
- },
- {
- "id": 3280,
- "kind": "seamless_tile",
- "category": "butterfly-trellis",
- "dominant_hex": "#f5ecd7",
- "saturation": 0.6,
- "title": "Honey Atelier No.3280",
- "handle": "wallco-3280",
- "image_url": "/designs/img/bt_1778695686911_2121127537.png",
- "filename": "bt_1778695686911_2121127537.png",
- "generator": "wallco.ai",
- "seed": 2121127537,
- "is_published": false,
- "created_at": "2026-05-13T18:08:07.054156+00:00",
- "motifs": [
- "butterfly",
- "trellis",
- "lattice"
- ],
- "user_removed": false,
- "user_color_good": null,
- "user_style_good": null,
- "user_scale_good": null,
- "user_stars": null,
- "room_mockups": []
- },
{
"id": 3281,
"kind": "seamless_tile",
@@ -67207,32 +67056,6 @@
"user_stars": null,
"room_mockups": []
},
- {
- "id": 3283,
- "kind": "seamless_tile",
- "category": "butterfly-trellis",
- "dominant_hex": "#f1ede1",
- "saturation": 0.364,
- "title": "Honey Folio No.3283",
- "handle": "wallco-3283",
- "image_url": "/designs/img/bt_1778695694804_1311940280.png",
- "filename": "bt_1778695694804_1311940280.png",
- "generator": "wallco.ai",
- "seed": 1311940280,
- "is_published": false,
- "created_at": "2026-05-13T18:08:14.930347+00:00",
- "motifs": [
- "butterfly",
- "trellis",
- "lattice"
- ],
- "user_removed": false,
- "user_color_good": null,
- "user_style_good": null,
- "user_scale_good": null,
- "user_stars": null,
- "room_mockups": []
- },
{
"id": 3284,
"kind": "seamless_tile",
@@ -67343,84 +67166,6 @@
"user_stars": null,
"room_mockups": []
},
- {
- "id": 3289,
- "kind": "seamless_tile",
- "category": "butterfly-trellis",
- "dominant_hex": "#8cbb97",
- "saturation": 0.257,
- "title": "Sage Reverie No.3289",
- "handle": "wallco-3289",
- "image_url": "/designs/img/bt_1778695703856_153731427.png",
- "filename": "bt_1778695703856_153731427.png",
- "generator": "wallco.ai",
- "seed": 153731427,
- "is_published": true,
- "created_at": "2026-05-13T18:08:23.994969+00:00",
- "motifs": [
- "butterfly",
- "trellis",
- "lattice"
- ],
- "user_removed": false,
- "user_color_good": null,
- "user_style_good": null,
- "user_scale_good": null,
- "user_stars": null,
- "room_mockups": []
- },
- {
- "id": 3290,
- "kind": "seamless_tile",
- "category": "butterfly-trellis",
- "dominant_hex": "#efe9d8",
- "saturation": 0.418,
- "title": "Honey Atelier No.3290",
- "handle": "wallco-3290",
- "image_url": "/designs/img/bt_1778695711938_1727390109.png",
- "filename": "bt_1778695711938_1727390109.png",
- "generator": "wallco.ai",
- "seed": 1727390109,
- "is_published": true,
- "created_at": "2026-05-13T18:08:32.09722+00:00",
- "motifs": [
- "butterfly",
- "trellis",
- "lattice"
- ],
- "user_removed": false,
- "user_color_good": null,
- "user_style_good": null,
- "user_scale_good": null,
- "user_stars": null,
- "room_mockups": []
- },
- {
- "id": 3291,
- "kind": "seamless_tile",
- "category": "butterfly-trellis",
- "dominant_hex": "#efebda",
- "saturation": 0.396,
- "title": "Honey Studio No.3291",
- "handle": "wallco-3291",
- "image_url": "/designs/img/bt_1778695719798_550757967.png",
- "filename": "bt_1778695719798_550757967.png",
- "generator": "wallco.ai",
- "seed": 550757967,
- "is_published": true,
- "created_at": "2026-05-13T18:08:39.938998+00:00",
- "motifs": [
- "butterfly",
- "trellis",
- "lattice"
- ],
- "user_removed": false,
- "user_color_good": null,
- "user_style_good": null,
- "user_scale_good": null,
- "user_stars": null,
- "room_mockups": []
- },
{
"id": 3292,
"kind": "seamless_tile",
@@ -72929,32 +72674,6 @@
"user_stars": null,
"room_mockups": []
},
- {
- "id": 3540,
- "kind": "seamless_tile",
- "category": "butterfly-trellis",
- "dominant_hex": "#f6f0e2",
- "saturation": 0.526,
- "title": "Honey Atelier No.3540",
- "handle": "wallco-3540",
- "image_url": "/designs/img/bt_cane_1778700004187_1014121141.png",
- "filename": "bt_cane_1778700004187_1014121141.png",
- "generator": "wallco.ai",
- "seed": 1014121141,
- "is_published": false,
- "created_at": "2026-05-13T19:20:04.298669+00:00",
- "motifs": [
- "butterfly",
- "cane",
- "lattice"
- ],
- "user_removed": false,
- "user_color_good": null,
- "user_style_good": null,
- "user_scale_good": null,
- "user_stars": null,
- "room_mockups": []
- },
{
"id": 3541,
"kind": "seamless_tile",
@@ -72999,58 +72718,6 @@
"user_stars": null,
"room_mockups": []
},
- {
- "id": 3543,
- "kind": "seamless_tile",
- "category": "butterfly-trellis",
- "dominant_hex": "#f6f0e1",
- "saturation": 0.538,
- "title": "Honey Folio No.3543",
- "handle": "wallco-3543",
- "image_url": "/designs/img/bt_cane_1778700014990_1453843725.png",
- "filename": "bt_cane_1778700014990_1453843725.png",
- "generator": "wallco.ai",
- "seed": 1453843725,
- "is_published": true,
- "created_at": "2026-05-13T19:20:15.100319+00:00",
- "motifs": [
- "butterfly",
- "cane",
- "lattice"
- ],
- "user_removed": false,
- "user_color_good": null,
- "user_style_good": null,
- "user_scale_good": null,
- "user_stars": null,
- "room_mockups": []
- },
- {
- "id": 3544,
- "kind": "seamless_tile",
- "category": "butterfly-trellis",
- "dominant_hex": "#50795f",
- "saturation": 0.204,
- "title": "Sage Reverie No.3544",
- "handle": "wallco-3544",
- "image_url": "/designs/img/bt_cane_1778700024991_284563203.png",
- "filename": "bt_cane_1778700024991_284563203.png",
- "generator": "wallco.ai",
- "seed": 284563203,
- "is_published": false,
- "created_at": "2026-05-13T19:20:25.172959+00:00",
- "motifs": [
- "butterfly",
- "cane",
- "lattice"
- ],
- "user_removed": false,
- "user_color_good": null,
- "user_style_good": null,
- "user_scale_good": null,
- "user_stars": null,
- "room_mockups": []
- },
{
"id": 3545,
"kind": "seamless_tile",
@@ -75842,5 +75509,4591 @@
"user_scale_good": null,
"user_stars": null,
"room_mockups": []
+ },
+ {
+ "id": 3675,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#513249",
+ "saturation": 0.237,
+ "title": "Plum Vignette No.3675",
+ "handle": "wallco-3675",
+ "image_url": "/designs/img/1778702161389_1400208715.png",
+ "filename": "1778702161389_1400208715.png",
+ "generator": "wallco.ai",
+ "seed": 1400208715,
+ "is_published": false,
+ "created_at": "2026-05-13T19:56:10.455109+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3676,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#1c1622",
+ "saturation": 0.214,
+ "title": "Mauve Sundrift No.3676",
+ "handle": "wallco-3676",
+ "image_url": "/designs/img/1778702161515_961801258.png",
+ "filename": "1778702161515_961801258.png",
+ "generator": "wallco.ai",
+ "seed": 961801258,
+ "is_published": false,
+ "created_at": "2026-05-13T19:56:14.727308+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3677,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#d3c8b0",
+ "saturation": 0.285,
+ "title": "Honey Heirloom No.3677",
+ "handle": "wallco-3677",
+ "image_url": "/designs/img/1778702242252_1349698485.png",
+ "filename": "1778702242252_1349698485.png",
+ "generator": "wallco.ai",
+ "seed": 1349698485,
+ "is_published": false,
+ "created_at": "2026-05-13T19:57:33.292423+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3678,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#d3c8b0",
+ "saturation": 0.285,
+ "title": "Honey Atelier No.3678",
+ "handle": "wallco-3678",
+ "image_url": "/designs/img/var_3677_hue+60_1778702253502.png",
+ "filename": "var_3677_hue+60_1778702253502.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T19:57:35.913077+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3679,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#d3c8b0",
+ "saturation": 0.285,
+ "title": "Honey Salon No.3679",
+ "handle": "wallco-3679",
+ "image_url": "/designs/img/var_3677_hue+120_1778702255922.png",
+ "filename": "var_3677_hue+120_1778702255922.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T19:57:38.449648+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3680,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#b2573d",
+ "saturation": 0.49,
+ "title": "Rose Hiccup No.3680",
+ "handle": "wallco-3680",
+ "image_url": "/designs/img/1778702251545_1219606770.png",
+ "filename": "1778702251545_1219606770.png",
+ "generator": "wallco.ai",
+ "seed": 1219606770,
+ "is_published": false,
+ "created_at": "2026-05-13T19:57:40.054792+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3681,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#d3c8b0",
+ "saturation": 0.285,
+ "title": "Honey Damask No.3681",
+ "handle": "wallco-3681",
+ "image_url": "/designs/img/var_3677_hue+180_1778702258454.png",
+ "filename": "var_3677_hue+180_1778702258454.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T19:57:41.306832+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3682,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#6e385d",
+ "saturation": 0.325,
+ "title": "Plum Stardust No.3682",
+ "handle": "wallco-3682",
+ "image_url": "/designs/img/1778702251555_1606240030.png",
+ "filename": "1778702251555_1606240030.png",
+ "generator": "wallco.ai",
+ "seed": 1606240030,
+ "is_published": false,
+ "created_at": "2026-05-13T19:57:43.743928+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3683,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#d3c8b0",
+ "saturation": 0.285,
+ "title": "Honey Atelier No.3683",
+ "handle": "wallco-3683",
+ "image_url": "/designs/img/var_3677_hue-60_1778702261312.png",
+ "filename": "var_3677_hue-60_1778702261312.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T19:57:44.298594+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3684,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#d3c8b0",
+ "saturation": 0.285,
+ "title": "Honey Salon No.3684",
+ "handle": "wallco-3684",
+ "image_url": "/designs/img/var_3677_mono_1778702264303.png",
+ "filename": "var_3677_mono_1778702264303.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T19:57:47.10181+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3685,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#d34873",
+ "saturation": 0.612,
+ "title": "Rose Vignette No.3685",
+ "handle": "wallco-3685",
+ "image_url": "/designs/img/1778702330803_1857283156.png",
+ "filename": "1778702330803_1857283156.png",
+ "generator": "wallco.ai",
+ "seed": 1857283156,
+ "is_published": false,
+ "created_at": "2026-05-13T19:58:59.499601+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3686,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#a34c5e",
+ "saturation": 0.364,
+ "title": "Rose Carouse No.3686",
+ "handle": "wallco-3686",
+ "image_url": "/designs/img/1778702341342_1580112550.png",
+ "filename": "1778702341342_1580112550.png",
+ "generator": "wallco.ai",
+ "seed": 1580112550,
+ "is_published": false,
+ "created_at": "2026-05-13T19:59:10.09621+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3687,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#ae386c",
+ "saturation": 0.513,
+ "title": "Rose Spore No.3687",
+ "handle": "wallco-3687",
+ "image_url": "/designs/img/1778702341494_1304586246.png",
+ "filename": "1778702341494_1304586246.png",
+ "generator": "wallco.ai",
+ "seed": 1304586246,
+ "is_published": false,
+ "created_at": "2026-05-13T19:59:13.414021+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3688,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#db4c7b",
+ "saturation": 0.665,
+ "title": "Rose Saunter No.3688",
+ "handle": "wallco-3688",
+ "image_url": "/designs/img/1778702431324_1770340456.png",
+ "filename": "1778702431324_1770340456.png",
+ "generator": "wallco.ai",
+ "seed": 1770340456,
+ "is_published": false,
+ "created_at": "2026-05-13T20:00:43.292485+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3689,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#57656c",
+ "saturation": 0.108,
+ "title": "Sapphire Halcyon No.3689",
+ "handle": "wallco-3689",
+ "image_url": "/designs/img/1778702431488_933552326.png",
+ "filename": "1778702431488_933552326.png",
+ "generator": "wallco.ai",
+ "seed": 933552326,
+ "is_published": false,
+ "created_at": "2026-05-13T20:00:46.457456+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3690,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#3f392e",
+ "saturation": 0.156,
+ "title": "Honey Baroque No.3690",
+ "handle": "wallco-3690",
+ "image_url": "/designs/img/1778702433628_1155803539.png",
+ "filename": "1778702433628_1155803539.png",
+ "generator": "wallco.ai",
+ "seed": 1155803539,
+ "is_published": false,
+ "created_at": "2026-05-13T20:00:52.20644+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3691,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#3f392e",
+ "saturation": 0.156,
+ "title": "Honey Damask No.3691",
+ "handle": "wallco-3691",
+ "image_url": "/designs/img/var_3690_hue+60_1778702452314.png",
+ "filename": "var_3690_hue+60_1778702452314.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:00:54.3321+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3692,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#3f392e",
+ "saturation": 0.156,
+ "title": "Honey Heirloom No.3692",
+ "handle": "wallco-3692",
+ "image_url": "/designs/img/var_3690_hue+120_1778702454336.png",
+ "filename": "var_3690_hue+120_1778702454336.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:00:56.366515+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3693,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#3f392e",
+ "saturation": 0.156,
+ "title": "Honey Atelier No.3693",
+ "handle": "wallco-3693",
+ "image_url": "/designs/img/var_3690_hue+180_1778702456371.png",
+ "filename": "var_3690_hue+180_1778702456371.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:00:58.655475+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3694,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#3f392e",
+ "saturation": 0.156,
+ "title": "Honey Salon No.3694",
+ "handle": "wallco-3694",
+ "image_url": "/designs/img/var_3690_hue-60_1778702458658.png",
+ "filename": "var_3690_hue-60_1778702458658.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:01:00.727018+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3695,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#3f392e",
+ "saturation": 0.156,
+ "title": "Honey Baroque No.3695",
+ "handle": "wallco-3695",
+ "image_url": "/designs/img/var_3690_mono_1778702460730.png",
+ "filename": "var_3690_mono_1778702460730.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:01:03.061294+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3696,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#86724c",
+ "saturation": 0.276,
+ "title": "Honey Carouse No.3696",
+ "handle": "wallco-3696",
+ "image_url": "/designs/img/1778702521324_905051898.png",
+ "filename": "1778702521324_905051898.png",
+ "generator": "wallco.ai",
+ "seed": 905051898,
+ "is_published": false,
+ "created_at": "2026-05-13T20:02:09.666535+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3697,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#757c5a",
+ "saturation": 0.159,
+ "title": "Olive Spore No.3697",
+ "handle": "wallco-3697",
+ "image_url": "/designs/img/1778702521495_1577721265.png",
+ "filename": "1778702521495_1577721265.png",
+ "generator": "wallco.ai",
+ "seed": 1577721265,
+ "is_published": false,
+ "created_at": "2026-05-13T20:02:13.08331+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3698,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#4b8060",
+ "saturation": 0.261,
+ "title": "Sage Folio No.3698",
+ "handle": "wallco-3698",
+ "image_url": "/designs/img/bh_coord_mini-cane-trellis_900_1778702555393_696699947.png",
+ "filename": "bh_coord_mini-cane-trellis_900_1778702555393_696699947.png",
+ "generator": "wallco.ai",
+ "seed": 696699947,
+ "is_published": false,
+ "created_at": "2026-05-13T20:02:35.515938+00:00",
+ "motifs": [
+ "coordinate",
+ "mini-cane-trellis",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3699,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#efeae0",
+ "saturation": 0.319,
+ "title": "Honey Reverie No.3699",
+ "handle": "wallco-3699",
+ "image_url": "/designs/img/bh_coord_mini-cane-trellis_706_1778702564942_1864663081.png",
+ "filename": "bh_coord_mini-cane-trellis_706_1778702564942_1864663081.png",
+ "generator": "wallco.ai",
+ "seed": 1864663081,
+ "is_published": false,
+ "created_at": "2026-05-13T20:02:45.05921+00:00",
+ "motifs": [
+ "coordinate",
+ "mini-cane-trellis",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3700,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#3c2237",
+ "saturation": 0.277,
+ "title": "Plum Hiccup No.3700",
+ "handle": "wallco-3700",
+ "image_url": "/designs/img/1778702579854_2145320551.png",
+ "filename": "1778702579854_2145320551.png",
+ "generator": "wallco.ai",
+ "seed": 2145320551,
+ "is_published": false,
+ "created_at": "2026-05-13T20:03:08.260849+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3701,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#376753",
+ "saturation": 0.304,
+ "title": "Marine Studio No.3701",
+ "handle": "wallco-3701",
+ "image_url": "/designs/img/bh_coord_bamboo-stripe_900_1778702588543_806889088.png",
+ "filename": "bh_coord_bamboo-stripe_900_1778702588543_806889088.png",
+ "generator": "wallco.ai",
+ "seed": 806889088,
+ "is_published": false,
+ "created_at": "2026-05-13T20:03:08.651399+00:00",
+ "motifs": [
+ "coordinate",
+ "bamboo-stripe",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3702,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#688391",
+ "saturation": 0.165,
+ "title": "Sapphire Origin No.3702",
+ "handle": "wallco-3702",
+ "image_url": "/designs/img/bh_coord_bamboo-stripe_706_1778702596324_825987132.png",
+ "filename": "bh_coord_bamboo-stripe_706_1778702596324_825987132.png",
+ "generator": "wallco.ai",
+ "seed": 825987132,
+ "is_published": false,
+ "created_at": "2026-05-13T20:03:16.44883+00:00",
+ "motifs": [
+ "coordinate",
+ "bamboo-stripe",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3703,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#f1e6c5",
+ "saturation": 0.611,
+ "title": "Honey Folio No.3703",
+ "handle": "wallco-3703",
+ "image_url": "/designs/img/bh_coord_tonal-damask_900_1778702618724_1524565354.png",
+ "filename": "bh_coord_tonal-damask_900_1778702618724_1524565354.png",
+ "generator": "wallco.ai",
+ "seed": 1524565354,
+ "is_published": false,
+ "created_at": "2026-05-13T20:03:38.836356+00:00",
+ "motifs": [
+ "coordinate",
+ "tonal-damask",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3704,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#9d517a",
+ "saturation": 0.319,
+ "title": "Plum Soir\u00e9e No.3704",
+ "handle": "wallco-3704",
+ "image_url": "/designs/img/1778702611366_2002959095.png",
+ "filename": "1778702611366_2002959095.png",
+ "generator": "wallco.ai",
+ "seed": 2002959095,
+ "is_published": false,
+ "created_at": "2026-05-13T20:03:43.326833+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3705,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#9b2f31",
+ "saturation": 0.535,
+ "title": "Rose Hazefield No.3705",
+ "handle": "wallco-3705",
+ "image_url": "/designs/img/1778702611480_1029848301.png",
+ "filename": "1778702611480_1029848301.png",
+ "generator": "wallco.ai",
+ "seed": 1029848301,
+ "is_published": false,
+ "created_at": "2026-05-13T20:03:46.346772+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3706,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#c5ccc9",
+ "saturation": 0.064,
+ "title": "Ash Studio No.3706",
+ "handle": "wallco-3706",
+ "image_url": "/designs/img/bh_coord_tonal-damask_706_1778702626477_1809835394.png",
+ "filename": "bh_coord_tonal-damask_706_1778702626477_1809835394.png",
+ "generator": "wallco.ai",
+ "seed": 1809835394,
+ "is_published": false,
+ "created_at": "2026-05-13T20:03:46.596639+00:00",
+ "motifs": [
+ "coordinate",
+ "tonal-damask",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3707,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#263643",
+ "saturation": 0.276,
+ "title": "Sapphire Heirloom No.3707",
+ "handle": "wallco-3707",
+ "image_url": "/designs/img/1778702632446_358673616.png",
+ "filename": "1778702632446_358673616.png",
+ "generator": "wallco.ai",
+ "seed": 358673616,
+ "is_published": false,
+ "created_at": "2026-05-13T20:04:04.172569+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3708,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#263643",
+ "saturation": 0.276,
+ "title": "Sapphire Atelier No.3708",
+ "handle": "wallco-3708",
+ "image_url": "/designs/img/var_3707_hue+60_1778702644310.png",
+ "filename": "var_3707_hue+60_1778702644310.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:04:06.518+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3709,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#e9e0cb",
+ "saturation": 0.405,
+ "title": "Honey Reverie No.3709",
+ "handle": "wallco-3709",
+ "image_url": "/designs/img/bh_coord_grasscloth-texture_900_1778702647046_313683962.png",
+ "filename": "bh_coord_grasscloth-texture_900_1778702647046_313683962.png",
+ "generator": "wallco.ai",
+ "seed": 313683962,
+ "is_published": false,
+ "created_at": "2026-05-13T20:04:07.157999+00:00",
+ "motifs": [
+ "coordinate",
+ "grasscloth-texture",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3710,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#263643",
+ "saturation": 0.276,
+ "title": "Sapphire Baroque No.3710",
+ "handle": "wallco-3710",
+ "image_url": "/designs/img/var_3707_hue+120_1778702646522.png",
+ "filename": "var_3707_hue+120_1778702646522.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:04:08.851607+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3711,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#263643",
+ "saturation": 0.276,
+ "title": "Sapphire Damask No.3711",
+ "handle": "wallco-3711",
+ "image_url": "/designs/img/var_3707_hue+180_1778702648856.png",
+ "filename": "var_3707_hue+180_1778702648856.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:04:11.079438+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3712,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#263643",
+ "saturation": 0.276,
+ "title": "Sapphire Heirloom No.3712",
+ "handle": "wallco-3712",
+ "image_url": "/designs/img/var_3707_hue-60_1778702651085.png",
+ "filename": "var_3707_hue-60_1778702651085.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:04:13.304493+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3713,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#263643",
+ "saturation": 0.276,
+ "title": "Sapphire Atelier No.3713",
+ "handle": "wallco-3713",
+ "image_url": "/designs/img/var_3707_mono_1778702653307.png",
+ "filename": "var_3707_mono_1778702653307.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:04:15.558431+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3714,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#688aa2",
+ "saturation": 0.238,
+ "title": "Sapphire Reverie No.3714",
+ "handle": "wallco-3714",
+ "image_url": "/designs/img/bh_coord_grasscloth-texture_706_1778702657325_2045840174.png",
+ "filename": "bh_coord_grasscloth-texture_706_1778702657325_2045840174.png",
+ "generator": "wallco.ai",
+ "seed": 2045840174,
+ "is_published": false,
+ "created_at": "2026-05-13T20:04:17.470384+00:00",
+ "motifs": [
+ "coordinate",
+ "grasscloth-texture",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3715,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#4f4f4c",
+ "saturation": 0.019,
+ "title": "Slate Atelier No.3715",
+ "handle": "wallco-3715",
+ "image_url": "/designs/img/bh_coord_diamond-lattice_706_1778702688292_2124869359.png",
+ "filename": "bh_coord_diamond-lattice_706_1778702688292_2124869359.png",
+ "generator": "wallco.ai",
+ "seed": 2124869359,
+ "is_published": false,
+ "created_at": "2026-05-13T20:04:48.430315+00:00",
+ "motifs": [
+ "coordinate",
+ "diamond-lattice",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3716,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#7b8d6f",
+ "saturation": 0.119,
+ "title": "Sage Studio No.3716",
+ "handle": "wallco-3716",
+ "image_url": "/designs/img/bh_abstract_silhouette-mono_900_1778702710906_386349200.png",
+ "filename": "bh_abstract_silhouette-mono_900_1778702710906_386349200.png",
+ "generator": "wallco.ai",
+ "seed": 386349200,
+ "is_published": false,
+ "created_at": "2026-05-13T20:05:11.032151+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "silhouette-mono",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3717,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#994426",
+ "saturation": 0.602,
+ "title": "Amber Caprice No.3717",
+ "handle": "wallco-3717",
+ "image_url": "/designs/img/1778702701372_230612570.png",
+ "filename": "1778702701372_230612570.png",
+ "generator": "wallco.ai",
+ "seed": 230612570,
+ "is_published": false,
+ "created_at": "2026-05-13T20:05:11.284365+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3718,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#374940",
+ "saturation": 0.141,
+ "title": "Marine Lullaby No.3718",
+ "handle": "wallco-3718",
+ "image_url": "/designs/img/1778702701493_1931793182.png",
+ "filename": "1778702701493_1931793182.png",
+ "generator": "wallco.ai",
+ "seed": 1931793182,
+ "is_published": false,
+ "created_at": "2026-05-13T20:05:18.269632+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3719,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#627e8a",
+ "saturation": 0.169,
+ "title": "Sapphire Reverie No.3719",
+ "handle": "wallco-3719",
+ "image_url": "/designs/img/bh_abstract_silhouette-mono_706_1778702720808_204115911.png",
+ "filename": "bh_abstract_silhouette-mono_706_1778702720808_204115911.png",
+ "generator": "wallco.ai",
+ "seed": 204115911,
+ "is_published": false,
+ "created_at": "2026-05-13T20:05:20.940089+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "silhouette-mono",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3720,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#456e5a",
+ "saturation": 0.229,
+ "title": "Marine Atelier No.3720",
+ "handle": "wallco-3720",
+ "image_url": "/designs/img/bh_abstract_cubist-blocks_900_1778702742472_1706909022.png",
+ "filename": "bh_abstract_cubist-blocks_900_1778702742472_1706909022.png",
+ "generator": "wallco.ai",
+ "seed": 1706909022,
+ "is_published": false,
+ "created_at": "2026-05-13T20:05:42.630022+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "cubist-blocks",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3721,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#f3f0e6",
+ "saturation": 0.351,
+ "title": "Honey Studio No.3721",
+ "handle": "wallco-3721",
+ "image_url": "/designs/img/bh_abstract_cubist-blocks_706_1778702752242_1201996763.png",
+ "filename": "bh_abstract_cubist-blocks_706_1778702752242_1201996763.png",
+ "generator": "wallco.ai",
+ "seed": 1201996763,
+ "is_published": false,
+ "created_at": "2026-05-13T20:05:52.381033+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "cubist-blocks",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3722,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#e6d9bf",
+ "saturation": 0.438,
+ "title": "Honey Origin No.3722",
+ "handle": "wallco-3722",
+ "image_url": "/designs/img/bh_abstract_ink-wash_900_1778702772708_1939577475.png",
+ "filename": "bh_abstract_ink-wash_900_1778702772708_1939577475.png",
+ "generator": "wallco.ai",
+ "seed": 1939577475,
+ "is_published": false,
+ "created_at": "2026-05-13T20:06:12.838887+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "ink-wash",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3723,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#c5c9ca",
+ "saturation": 0.045,
+ "title": "Ash Folio No.3723",
+ "handle": "wallco-3723",
+ "image_url": "/designs/img/bh_abstract_ink-wash_706_1778702781162_1938722593.png",
+ "filename": "bh_abstract_ink-wash_706_1778702781162_1938722593.png",
+ "generator": "wallco.ai",
+ "seed": 1938722593,
+ "is_published": false,
+ "created_at": "2026-05-13T20:06:21.28379+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "ink-wash",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3724,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#83686e",
+ "saturation": 0.115,
+ "title": "Rose Soir\u00e9e No.3724",
+ "handle": "wallco-3724",
+ "image_url": "/designs/img/1778702791340_74653578.png",
+ "filename": "1778702791340_74653578.png",
+ "generator": "wallco.ai",
+ "seed": 74653578,
+ "is_published": false,
+ "created_at": "2026-05-13T20:06:40.820894+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3725,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#f6eeda",
+ "saturation": 0.609,
+ "title": "Honey Atelier No.3725",
+ "handle": "wallco-3725",
+ "image_url": "/designs/img/bh_abstract_botanical-rows_900_1778702803109_1295497902.png",
+ "filename": "bh_abstract_botanical-rows_900_1778702803109_1295497902.png",
+ "generator": "wallco.ai",
+ "seed": 1295497902,
+ "is_published": false,
+ "created_at": "2026-05-13T20:06:43.223948+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "botanical-rows",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3726,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#6e7863",
+ "saturation": 0.096,
+ "title": "Sage Sundrift No.3726",
+ "handle": "wallco-3726",
+ "image_url": "/designs/img/1778702791485_154826274.png",
+ "filename": "1778702791485_154826274.png",
+ "generator": "wallco.ai",
+ "seed": 154826274,
+ "is_published": false,
+ "created_at": "2026-05-13T20:06:44.090861+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3727,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#eee6d4",
+ "saturation": 0.433,
+ "title": "Honey Heirloom No.3727",
+ "handle": "wallco-3727",
+ "image_url": "/designs/img/1778702824410_1959334208.png",
+ "filename": "1778702824410_1959334208.png",
+ "generator": "wallco.ai",
+ "seed": 1959334208,
+ "is_published": false,
+ "created_at": "2026-05-13T20:07:13.532278+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3728,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#eee6d4",
+ "saturation": 0.433,
+ "title": "Honey Atelier No.3728",
+ "handle": "wallco-3728",
+ "image_url": "/designs/img/var_3727_hue+60_1778702833646.png",
+ "filename": "var_3727_hue+60_1778702833646.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:07:15.824739+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3729,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#eee6d4",
+ "saturation": 0.433,
+ "title": "Honey Salon No.3729",
+ "handle": "wallco-3729",
+ "image_url": "/designs/img/var_3727_hue+120_1778702835828.png",
+ "filename": "var_3727_hue+120_1778702835828.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:07:18.019112+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3730,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#eee6d4",
+ "saturation": 0.433,
+ "title": "Honey Baroque No.3730",
+ "handle": "wallco-3730",
+ "image_url": "/designs/img/var_3727_hue+180_1778702838023.png",
+ "filename": "var_3727_hue+180_1778702838023.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:07:20.359115+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3731,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#d04c70",
+ "saturation": 0.584,
+ "title": "Rose Tipple No.3731",
+ "handle": "wallco-3731",
+ "image_url": "/designs/img/1778702828580_425780504.png",
+ "filename": "1778702828580_425780504.png",
+ "generator": "wallco.ai",
+ "seed": 425780504,
+ "is_published": false,
+ "created_at": "2026-05-13T20:07:20.470398+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3732,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#eee6d4",
+ "saturation": 0.433,
+ "title": "Honey Heirloom No.3732",
+ "handle": "wallco-3732",
+ "image_url": "/designs/img/var_3727_hue-60_1778702840363.png",
+ "filename": "var_3727_hue-60_1778702840363.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:07:22.636204+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3733,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#c4b185",
+ "saturation": 0.348,
+ "title": "Honey Folio No.3733",
+ "handle": "wallco-3733",
+ "image_url": "/designs/img/bh_abstract_tree-trunk-companion_900_1778702843119_395372342.png",
+ "filename": "bh_abstract_tree-trunk-companion_900_1778702843119_395372342.png",
+ "generator": "wallco.ai",
+ "seed": 395372342,
+ "is_published": false,
+ "created_at": "2026-05-13T20:07:23.242634+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "tree-trunk-companion",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3734,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#eee6d4",
+ "saturation": 0.433,
+ "title": "Honey Salon No.3734",
+ "handle": "wallco-3734",
+ "image_url": "/designs/img/var_3727_mono_1778702842641.png",
+ "filename": "var_3727_mono_1778702842641.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:07:25.009614+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3735,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#556269",
+ "saturation": 0.105,
+ "title": "Sapphire Atelier No.3735",
+ "handle": "wallco-3735",
+ "image_url": "/designs/img/bh_abstract_tree-trunk-companion_706_1778702852305_553696974.png",
+ "filename": "bh_abstract_tree-trunk-companion_706_1778702852305_553696974.png",
+ "generator": "wallco.ai",
+ "seed": 553696974,
+ "is_published": false,
+ "created_at": "2026-05-13T20:07:32.508695+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "tree-trunk-companion",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3736,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#f5f0e1",
+ "saturation": 0.5,
+ "title": "Honey Studio No.3736",
+ "handle": "wallco-3736",
+ "image_url": "/designs/img/bh_coord_mini-cane-trellis_bone-ink_1778702876045_120365129.png",
+ "filename": "bh_coord_mini-cane-trellis_bone-ink_1778702876045_120365129.png",
+ "generator": "wallco.ai",
+ "seed": 120365129,
+ "is_published": false,
+ "created_at": "2026-05-13T20:07:56.197481+00:00",
+ "motifs": [
+ "coordinate",
+ "mini-cane-trellis",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3737,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#e7e0cd",
+ "saturation": 0.351,
+ "title": "Honey Origin No.3737",
+ "handle": "wallco-3737",
+ "image_url": "/designs/img/bh_coord_mini-cane-trellis_champ-mid_1778702886732_627680105.png",
+ "filename": "bh_coord_mini-cane-trellis_champ-mid_1778702886732_627680105.png",
+ "generator": "wallco.ai",
+ "seed": 627680105,
+ "is_published": false,
+ "created_at": "2026-05-13T20:08:06.86049+00:00",
+ "motifs": [
+ "coordinate",
+ "mini-cane-trellis",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3738,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#bec6b2",
+ "saturation": 0.149,
+ "title": "Sage Saunter No.3738",
+ "handle": "wallco-3738",
+ "image_url": "/designs/img/1778702881328_1759840660.png",
+ "filename": "1778702881328_1759840660.png",
+ "generator": "wallco.ai",
+ "seed": 1759840660,
+ "is_published": false,
+ "created_at": "2026-05-13T20:08:10.512059+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3739,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#cb4d2e",
+ "saturation": 0.631,
+ "title": "Rose Halcyon No.3739",
+ "handle": "wallco-3739",
+ "image_url": "/designs/img/1778702881495_620488100.png",
+ "filename": "1778702881495_620488100.png",
+ "generator": "wallco.ai",
+ "seed": 620488100,
+ "is_published": false,
+ "created_at": "2026-05-13T20:08:13.560845+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3740,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#2e2e2f",
+ "saturation": 0.011,
+ "title": "Noir Atelier No.3740",
+ "handle": "wallco-3740",
+ "image_url": "/designs/img/bh_coord_bamboo-stripe_bone-ink_1778702897410_1407032530.png",
+ "filename": "bh_coord_bamboo-stripe_bone-ink_1778702897410_1407032530.png",
+ "generator": "wallco.ai",
+ "seed": 1407032530,
+ "is_published": false,
+ "created_at": "2026-05-13T20:08:17.516927+00:00",
+ "motifs": [
+ "coordinate",
+ "bamboo-stripe",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3741,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#1f2b44",
+ "saturation": 0.374,
+ "title": "Sapphire Studio No.3741",
+ "handle": "wallco-3741",
+ "image_url": "/designs/img/bh_coord_bamboo-stripe_champ-mid_1778702908260_778034999.png",
+ "filename": "bh_coord_bamboo-stripe_champ-mid_1778702908260_778034999.png",
+ "generator": "wallco.ai",
+ "seed": 778034999,
+ "is_published": false,
+ "created_at": "2026-05-13T20:08:28.366087+00:00",
+ "motifs": [
+ "coordinate",
+ "bamboo-stripe",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3742,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#f5f0df",
+ "saturation": 0.524,
+ "title": "Honey Origin No.3742",
+ "handle": "wallco-3742",
+ "image_url": "/designs/img/bh_coord_tonal-damask_bone-ink_1778702919346_1307133131.png",
+ "filename": "bh_coord_tonal-damask_bone-ink_1778702919346_1307133131.png",
+ "generator": "wallco.ai",
+ "seed": 1307133131,
+ "is_published": false,
+ "created_at": "2026-05-13T20:08:39.457092+00:00",
+ "motifs": [
+ "coordinate",
+ "tonal-damask",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3743,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#162047",
+ "saturation": 0.527,
+ "title": "Sapphire Folio No.3743",
+ "handle": "wallco-3743",
+ "image_url": "/designs/img/bh_coord_tonal-damask_champ-mid_1778702929631_668109802.png",
+ "filename": "bh_coord_tonal-damask_champ-mid_1778702929631_668109802.png",
+ "generator": "wallco.ai",
+ "seed": 668109802,
+ "is_published": false,
+ "created_at": "2026-05-13T20:08:49.750853+00:00",
+ "motifs": [
+ "coordinate",
+ "tonal-damask",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3744,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#739479",
+ "saturation": 0.134,
+ "title": "Sage Reverie No.3744",
+ "handle": "wallco-3744",
+ "image_url": "/designs/img/bh_coord_mini-cane-trellis_900_1778702936658_2003734865.png",
+ "filename": "bh_coord_mini-cane-trellis_900_1778702936658_2003734865.png",
+ "generator": "wallco.ai",
+ "seed": 2003734865,
+ "is_published": false,
+ "created_at": "2026-05-13T20:08:56.787919+00:00",
+ "motifs": [
+ "coordinate",
+ "mini-cane-trellis",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3745,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#a19a87",
+ "saturation": 0.121,
+ "title": "Honey Atelier No.3745",
+ "handle": "wallco-3745",
+ "image_url": "/designs/img/bh_coord_grasscloth-texture_bone-ink_1778702940066_1297274431.png",
+ "filename": "bh_coord_grasscloth-texture_bone-ink_1778702940066_1297274431.png",
+ "generator": "wallco.ai",
+ "seed": 1297274431,
+ "is_published": false,
+ "created_at": "2026-05-13T20:09:00.18379+00:00",
+ "motifs": [
+ "coordinate",
+ "grasscloth-texture",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3746,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#597283",
+ "saturation": 0.191,
+ "title": "Sapphire Studio No.3746",
+ "handle": "wallco-3746",
+ "image_url": "/designs/img/bh_coord_mini-cane-trellis_706_1778702946534_2088352298.png",
+ "filename": "bh_coord_mini-cane-trellis_706_1778702946534_2088352298.png",
+ "generator": "wallco.ai",
+ "seed": 2088352298,
+ "is_published": false,
+ "created_at": "2026-05-13T20:09:06.664683+00:00",
+ "motifs": [
+ "coordinate",
+ "mini-cane-trellis",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3747,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#2a384e",
+ "saturation": 0.3,
+ "title": "Sapphire Origin No.3747",
+ "handle": "wallco-3747",
+ "image_url": "/designs/img/bh_coord_grasscloth-texture_champ-mid_1778702950679_1147207195.png",
+ "filename": "bh_coord_grasscloth-texture_champ-mid_1778702950679_1147207195.png",
+ "generator": "wallco.ai",
+ "seed": 1147207195,
+ "is_published": false,
+ "created_at": "2026-05-13T20:09:10.794469+00:00",
+ "motifs": [
+ "coordinate",
+ "grasscloth-texture",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3748,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#f6f0df",
+ "saturation": 0.561,
+ "title": "Honey Folio No.3748",
+ "handle": "wallco-3748",
+ "image_url": "/designs/img/bh_coord_diamond-lattice_bone-ink_1778702963434_129089893.png",
+ "filename": "bh_coord_diamond-lattice_bone-ink_1778702963434_129089893.png",
+ "generator": "wallco.ai",
+ "seed": 129089893,
+ "is_published": false,
+ "created_at": "2026-05-13T20:09:23.538035+00:00",
+ "motifs": [
+ "coordinate",
+ "diamond-lattice",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3749,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#f5f0e1",
+ "saturation": 0.5,
+ "title": "Honey Reverie No.3749",
+ "handle": "wallco-3749",
+ "image_url": "/designs/img/bh_coord_bamboo-stripe_900_1778702980910_339552228.png",
+ "filename": "bh_coord_bamboo-stripe_900_1778702980910_339552228.png",
+ "generator": "wallco.ai",
+ "seed": 339552228,
+ "is_published": false,
+ "created_at": "2026-05-13T20:09:41.052628+00:00",
+ "motifs": [
+ "coordinate",
+ "bamboo-stripe",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3750,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#9a7172",
+ "saturation": 0.169,
+ "title": "Rose Hiccup No.3750",
+ "handle": "wallco-3750",
+ "image_url": "/designs/img/1778702971328_9191522.png",
+ "filename": "1778702971328_9191522.png",
+ "generator": "wallco.ai",
+ "seed": 9191522,
+ "is_published": false,
+ "created_at": "2026-05-13T20:09:47.163249+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3751,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#f5ecd7",
+ "saturation": 0.6,
+ "title": "Honey Studio No.3751",
+ "handle": "wallco-3751",
+ "image_url": "/designs/img/bh_abstract_silhouette-mono_bone-ink_1778702987197_1624356301.png",
+ "filename": "bh_abstract_silhouette-mono_bone-ink_1778702987197_1624356301.png",
+ "generator": "wallco.ai",
+ "seed": 1624356301,
+ "is_published": false,
+ "created_at": "2026-05-13T20:09:47.311781+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "silhouette-mono",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3752,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#7c504f",
+ "saturation": 0.222,
+ "title": "Rose Stardust No.3752",
+ "handle": "wallco-3752",
+ "image_url": "/designs/img/1778702971501_1906421175.png",
+ "filename": "1778702971501_1906421175.png",
+ "generator": "wallco.ai",
+ "seed": 1906421175,
+ "is_published": false,
+ "created_at": "2026-05-13T20:09:50.916702+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3753,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#373d50",
+ "saturation": 0.185,
+ "title": "Sapphire Folio No.3753",
+ "handle": "wallco-3753",
+ "image_url": "/designs/img/bh_abstract_silhouette-mono_champ-mid_1778702997596_1950967585.png",
+ "filename": "bh_abstract_silhouette-mono_champ-mid_1778702997596_1950967585.png",
+ "generator": "wallco.ai",
+ "seed": 1950967585,
+ "is_published": false,
+ "created_at": "2026-05-13T20:09:57.719948+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "silhouette-mono",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3754,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#f5efde",
+ "saturation": 0.535,
+ "title": "Honey Reverie No.3754",
+ "handle": "wallco-3754",
+ "image_url": "/designs/img/bh_abstract_cubist-blocks_bone-ink_1778703009676_1946154414.png",
+ "filename": "bh_abstract_cubist-blocks_bone-ink_1778703009676_1946154414.png",
+ "generator": "wallco.ai",
+ "seed": 1946154414,
+ "is_published": false,
+ "created_at": "2026-05-13T20:10:09.817522+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "cubist-blocks",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3755,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#37414a",
+ "saturation": 0.147,
+ "title": "Sapphire Baroque No.3755",
+ "handle": "wallco-3755",
+ "image_url": "/designs/img/1778703013759_2094150095.png",
+ "filename": "1778703013759_2094150095.png",
+ "generator": "wallco.ai",
+ "seed": 2094150095,
+ "is_published": false,
+ "created_at": "2026-05-13T20:10:22.398101+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3756,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#182541",
+ "saturation": 0.461,
+ "title": "Sapphire Studio No.3756",
+ "handle": "wallco-3756",
+ "image_url": "/designs/img/bh_abstract_cubist-blocks_champ-mid_1778703022344_1435836752.png",
+ "filename": "bh_abstract_cubist-blocks_champ-mid_1778703022344_1435836752.png",
+ "generator": "wallco.ai",
+ "seed": 1435836752,
+ "is_published": false,
+ "created_at": "2026-05-13T20:10:22.449659+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "cubist-blocks",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3757,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#37414a",
+ "saturation": 0.147,
+ "title": "Sapphire Heirloom No.3757",
+ "handle": "wallco-3757",
+ "image_url": "/designs/img/var_3755_hue+60_1778703022507.png",
+ "filename": "var_3755_hue+60_1778703022507.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:10:24.754964+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3758,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#e2d5be",
+ "saturation": 0.383,
+ "title": "Honey Folio No.3758",
+ "handle": "wallco-3758",
+ "image_url": "/designs/img/bh_coord_tonal-damask_900_1778703025473_1856722160.png",
+ "filename": "bh_coord_tonal-damask_900_1778703025473_1856722160.png",
+ "generator": "wallco.ai",
+ "seed": 1856722160,
+ "is_published": false,
+ "created_at": "2026-05-13T20:10:25.578425+00:00",
+ "motifs": [
+ "coordinate",
+ "tonal-damask",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3759,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#37414a",
+ "saturation": 0.147,
+ "title": "Sapphire Salon No.3759",
+ "handle": "wallco-3759",
+ "image_url": "/designs/img/var_3755_hue+120_1778703024759.png",
+ "filename": "var_3755_hue+120_1778703024759.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:10:26.958288+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3760,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#37414a",
+ "saturation": 0.147,
+ "title": "Sapphire Baroque No.3760",
+ "handle": "wallco-3760",
+ "image_url": "/designs/img/var_3755_hue+180_1778703026961.png",
+ "filename": "var_3755_hue+180_1778703026961.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:10:29.123429+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3761,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#37414a",
+ "saturation": 0.147,
+ "title": "Sapphire Damask No.3761",
+ "handle": "wallco-3761",
+ "image_url": "/designs/img/var_3755_hue-60_1778703029126.png",
+ "filename": "var_3755_hue-60_1778703029126.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:10:31.333797+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3762,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#302e2a",
+ "saturation": 0.067,
+ "title": "Noir Origin No.3762",
+ "handle": "wallco-3762",
+ "image_url": "/designs/img/bh_abstract_ink-wash_bone-ink_1778703032909_1503513042.png",
+ "filename": "bh_abstract_ink-wash_bone-ink_1778703032909_1503513042.png",
+ "generator": "wallco.ai",
+ "seed": 1503513042,
+ "is_published": false,
+ "created_at": "2026-05-13T20:10:33.016993+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "ink-wash",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3763,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#37414a",
+ "saturation": 0.147,
+ "title": "Sapphire Atelier No.3763",
+ "handle": "wallco-3763",
+ "image_url": "/designs/img/var_3755_mono_1778703031337.png",
+ "filename": "var_3755_mono_1778703031337.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:10:33.596567+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3764,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#a7b9c0",
+ "saturation": 0.166,
+ "title": "Sapphire Reverie No.3764",
+ "handle": "wallco-3764",
+ "image_url": "/designs/img/bh_coord_tonal-damask_706_1778703035647_572201195.png",
+ "filename": "bh_coord_tonal-damask_706_1778703035647_572201195.png",
+ "generator": "wallco.ai",
+ "seed": 572201195,
+ "is_published": false,
+ "created_at": "2026-05-13T20:10:35.773439+00:00",
+ "motifs": [
+ "coordinate",
+ "tonal-damask",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3765,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#82878d",
+ "saturation": 0.046,
+ "title": "Ash Atelier No.3765",
+ "handle": "wallco-3765",
+ "image_url": "/designs/img/bh_abstract_ink-wash_champ-mid_1778703042822_2090365495.png",
+ "filename": "bh_abstract_ink-wash_champ-mid_1778703042822_2090365495.png",
+ "generator": "wallco.ai",
+ "seed": 2090365495,
+ "is_published": false,
+ "created_at": "2026-05-13T20:10:42.936925+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "ink-wash",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3766,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#d2c6b4",
+ "saturation": 0.25,
+ "title": "Honey Studio No.3766",
+ "handle": "wallco-3766",
+ "image_url": "/designs/img/bh_abstract_botanical-rows_bone-ink_1778703055346_728193722.png",
+ "filename": "bh_abstract_botanical-rows_bone-ink_1778703055346_728193722.png",
+ "generator": "wallco.ai",
+ "seed": 728193722,
+ "is_published": false,
+ "created_at": "2026-05-13T20:10:55.499507+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "botanical-rows",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3767,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#232a44",
+ "saturation": 0.32,
+ "title": "Sapphire Origin No.3767",
+ "handle": "wallco-3767",
+ "image_url": "/designs/img/bh_abstract_botanical-rows_champ-mid_1778703065582_1409019143.png",
+ "filename": "bh_abstract_botanical-rows_champ-mid_1778703065582_1409019143.png",
+ "generator": "wallco.ai",
+ "seed": 1409019143,
+ "is_published": false,
+ "created_at": "2026-05-13T20:11:05.722134+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "botanical-rows",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3768,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#74938e",
+ "saturation": 0.126,
+ "title": "Marine Folio No.3768",
+ "handle": "wallco-3768",
+ "image_url": "/designs/img/bh_coord_grasscloth-texture_706_1778703069539_399173491.png",
+ "filename": "bh_coord_grasscloth-texture_706_1778703069539_399173491.png",
+ "generator": "wallco.ai",
+ "seed": 399173491,
+ "is_published": false,
+ "created_at": "2026-05-13T20:11:09.655788+00:00",
+ "motifs": [
+ "coordinate",
+ "grasscloth-texture",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3769,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#d44459",
+ "saturation": 0.626,
+ "title": "Rose Folly No.3769",
+ "handle": "wallco-3769",
+ "image_url": "/designs/img/1778703061360_1775462398.png",
+ "filename": "1778703061360_1775462398.png",
+ "generator": "wallco.ai",
+ "seed": 1775462398,
+ "is_published": false,
+ "created_at": "2026-05-13T20:11:10.073485+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3770,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#725965",
+ "saturation": 0.123,
+ "title": "Rose Stealie No.3770",
+ "handle": "wallco-3770",
+ "image_url": "/designs/img/1778703061541_834725455.png",
+ "filename": "1778703061541_834725455.png",
+ "generator": "wallco.ai",
+ "seed": 834725455,
+ "is_published": false,
+ "created_at": "2026-05-13T20:11:13.756161+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3771,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#2b2a2a",
+ "saturation": 0.012,
+ "title": "Noir Studio No.3771",
+ "handle": "wallco-3771",
+ "image_url": "/designs/img/bh_abstract_tree-trunk-companion_bone-ink_1778703076537_70818281.png",
+ "filename": "bh_abstract_tree-trunk-companion_bone-ink_1778703076537_70818281.png",
+ "generator": "wallco.ai",
+ "seed": 70818281,
+ "is_published": false,
+ "created_at": "2026-05-13T20:11:16.651632+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "tree-trunk-companion",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3772,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#79827f",
+ "saturation": 0.036,
+ "title": "Slate Origin No.3772",
+ "handle": "wallco-3772",
+ "image_url": "/designs/img/bh_abstract_tree-trunk-companion_champ-mid_1778703088694_1572916527.png",
+ "filename": "bh_abstract_tree-trunk-companion_champ-mid_1778703088694_1572916527.png",
+ "generator": "wallco.ai",
+ "seed": 1572916527,
+ "is_published": false,
+ "created_at": "2026-05-13T20:11:28.82276+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "tree-trunk-companion",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3773,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#76479f",
+ "saturation": 0.383,
+ "title": "Mauve Reverie No.3773",
+ "handle": "wallco-3773",
+ "image_url": "/designs/img/1778703080760_1623769492.png",
+ "filename": "1778703080760_1623769492.png",
+ "generator": "wallco.ai",
+ "seed": 1623769492,
+ "is_published": false,
+ "created_at": "2026-05-13T20:11:29.706836+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3774,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#f5eedc",
+ "saturation": 0.556,
+ "title": "Honey Reverie No.3774",
+ "handle": "wallco-3774",
+ "image_url": "/designs/img/bh_coord_diamond-lattice_900_1778703097981_1689070830.png",
+ "filename": "bh_coord_diamond-lattice_900_1778703097981_1689070830.png",
+ "generator": "wallco.ai",
+ "seed": 1689070830,
+ "is_published": false,
+ "created_at": "2026-05-13T20:11:38.088821+00:00",
+ "motifs": [
+ "coordinate",
+ "diamond-lattice",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3775,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#f0ecdf",
+ "saturation": 0.362,
+ "title": "Honey Atelier No.3775",
+ "handle": "wallco-3775",
+ "image_url": "/designs/img/bh_coord_diamond-lattice_706_1778703106634_390517046.png",
+ "filename": "bh_coord_diamond-lattice_706_1778703106634_390517046.png",
+ "generator": "wallco.ai",
+ "seed": 390517046,
+ "is_published": false,
+ "created_at": "2026-05-13T20:11:46.750745+00:00",
+ "motifs": [
+ "coordinate",
+ "diamond-lattice",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3776,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#354e47",
+ "saturation": 0.191,
+ "title": "Marine Studio No.3776",
+ "handle": "wallco-3776",
+ "image_url": "/designs/img/bh_abstract_silhouette-mono_900_1778703133143_1958636319.png",
+ "filename": "bh_abstract_silhouette-mono_900_1778703133143_1958636319.png",
+ "generator": "wallco.ai",
+ "seed": 1958636319,
+ "is_published": false,
+ "created_at": "2026-05-13T20:12:13.316102+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "silhouette-mono",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3777,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#678089",
+ "saturation": 0.142,
+ "title": "Sapphire Origin No.3777",
+ "handle": "wallco-3777",
+ "image_url": "/designs/img/bh_abstract_silhouette-mono_706_1778703143956_1711538242.png",
+ "filename": "bh_abstract_silhouette-mono_706_1778703143956_1711538242.png",
+ "generator": "wallco.ai",
+ "seed": 1711538242,
+ "is_published": false,
+ "created_at": "2026-05-13T20:12:24.100879+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "silhouette-mono",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3778,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#c93f78",
+ "saturation": 0.561,
+ "title": "Rose Saunter No.3778",
+ "handle": "wallco-3778",
+ "image_url": "/designs/img/1778703151823_196052313.png",
+ "filename": "1778703151823_196052313.png",
+ "generator": "wallco.ai",
+ "seed": 196052313,
+ "is_published": false,
+ "created_at": "2026-05-13T20:12:41.077467+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3779,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#3d3a49",
+ "saturation": 0.115,
+ "title": "Mauve Halcyon No.3779",
+ "handle": "wallco-3779",
+ "image_url": "/designs/img/1778703151822_1001423747.png",
+ "filename": "1778703151822_1001423747.png",
+ "generator": "wallco.ai",
+ "seed": 1001423747,
+ "is_published": false,
+ "created_at": "2026-05-13T20:12:44.910239+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3780,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#4d8362",
+ "saturation": 0.26,
+ "title": "Sage Atelier No.3780",
+ "handle": "wallco-3780",
+ "image_url": "/designs/img/bh_abstract_cubist-blocks_900_1778703171038_2036612468.png",
+ "filename": "bh_abstract_cubist-blocks_900_1778703171038_2036612468.png",
+ "generator": "wallco.ai",
+ "seed": 2036612468,
+ "is_published": false,
+ "created_at": "2026-05-13T20:12:51.156671+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "cubist-blocks",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3781,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#3d5b71",
+ "saturation": 0.299,
+ "title": "Sapphire Studio No.3781",
+ "handle": "wallco-3781",
+ "image_url": "/designs/img/bh_abstract_cubist-blocks_706_1778703182809_1055392286.png",
+ "filename": "bh_abstract_cubist-blocks_706_1778703182809_1055392286.png",
+ "generator": "wallco.ai",
+ "seed": 1055392286,
+ "is_published": false,
+ "created_at": "2026-05-13T20:13:02.934251+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "cubist-blocks",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3782,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#ecdec2",
+ "saturation": 0.525,
+ "title": "Honey Origin No.3782",
+ "handle": "wallco-3782",
+ "image_url": "/designs/img/bh_abstract_ink-wash_900_1778703203615_1619954424.png",
+ "filename": "bh_abstract_ink-wash_900_1778703203615_1619954424.png",
+ "generator": "wallco.ai",
+ "seed": 1619954424,
+ "is_published": false,
+ "created_at": "2026-05-13T20:13:23.764753+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "ink-wash",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3783,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#151210",
+ "saturation": 0.135,
+ "title": "Amber Atelier No.3783",
+ "handle": "wallco-3783",
+ "image_url": "/designs/img/1778703202658_876766523.png",
+ "filename": "1778703202658_876766523.png",
+ "generator": "wallco.ai",
+ "seed": 876766523,
+ "is_published": false,
+ "created_at": "2026-05-13T20:13:31.033092+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3784,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#151210",
+ "saturation": 0.135,
+ "title": "Amber Salon No.3784",
+ "handle": "wallco-3784",
+ "image_url": "/designs/img/var_3783_hue+60_1778703211141.png",
+ "filename": "var_3783_hue+60_1778703211141.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:13:33.238672+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3785,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#151210",
+ "saturation": 0.135,
+ "title": "Amber Baroque No.3785",
+ "handle": "wallco-3785",
+ "image_url": "/designs/img/var_3783_hue+120_1778703213243.png",
+ "filename": "var_3783_hue+120_1778703213243.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:13:35.335426+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3786,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#f3f0e6",
+ "saturation": 0.351,
+ "title": "Honey Studio No.3786",
+ "handle": "wallco-3786",
+ "image_url": "/designs/img/bh_abstract_ink-wash_706_1778703216989_106978205.png",
+ "filename": "bh_abstract_ink-wash_706_1778703216989_106978205.png",
+ "generator": "wallco.ai",
+ "seed": 106978205,
+ "is_published": false,
+ "created_at": "2026-05-13T20:13:37.107336+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "ink-wash",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3787,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#151210",
+ "saturation": 0.135,
+ "title": "Amber Heirloom No.3787",
+ "handle": "wallco-3787",
+ "image_url": "/designs/img/var_3783_hue+180_1778703215338.png",
+ "filename": "var_3783_hue+180_1778703215338.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:13:37.535234+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3788,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#151210",
+ "saturation": 0.135,
+ "title": "Amber Atelier No.3788",
+ "handle": "wallco-3788",
+ "image_url": "/designs/img/var_3783_hue-60_1778703217539.png",
+ "filename": "var_3783_hue-60_1778703217539.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:13:39.638822+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3789,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#151210",
+ "saturation": 0.135,
+ "title": "Amber Salon No.3789",
+ "handle": "wallco-3789",
+ "image_url": "/designs/img/var_3783_mono_1778703219642.png",
+ "filename": "var_3783_mono_1778703219642.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:13:41.800013+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3790,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#f5efdc",
+ "saturation": 0.556,
+ "title": "Honey Atelier No.3790",
+ "handle": "wallco-3790",
+ "image_url": "/designs/img/bh_abstract_botanical-rows_900_1778703242493_555939237.png",
+ "filename": "bh_abstract_botanical-rows_900_1778703242493_555939237.png",
+ "generator": "wallco.ai",
+ "seed": 555939237,
+ "is_published": false,
+ "created_at": "2026-05-13T20:14:02.612047+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "botanical-rows",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3791,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#211e22",
+ "saturation": 0.062,
+ "title": "Noir Tipple No.3791",
+ "handle": "wallco-3791",
+ "image_url": "/designs/img/1778703241337_769519969.png",
+ "filename": "1778703241337_769519969.png",
+ "generator": "wallco.ai",
+ "seed": 769519969,
+ "is_published": false,
+ "created_at": "2026-05-13T20:14:10.392792+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3792,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#6a8091",
+ "saturation": 0.155,
+ "title": "Sapphire Origin No.3792",
+ "handle": "wallco-3792",
+ "image_url": "/designs/img/bh_abstract_botanical-rows_706_1778703251645_1159748083.png",
+ "filename": "bh_abstract_botanical-rows_706_1778703251645_1159748083.png",
+ "generator": "wallco.ai",
+ "seed": 1159748083,
+ "is_published": false,
+ "created_at": "2026-05-13T20:14:11.773346+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "botanical-rows",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3793,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#81656a",
+ "saturation": 0.122,
+ "title": "Rose Daydream No.3793",
+ "handle": "wallco-3793",
+ "image_url": "/designs/img/1778703241491_1580310194.png",
+ "filename": "1778703241491_1580310194.png",
+ "generator": "wallco.ai",
+ "seed": 1580310194,
+ "is_published": false,
+ "created_at": "2026-05-13T20:14:13.632241+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3794,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#7e9772",
+ "saturation": 0.151,
+ "title": "Sage Reverie No.3794",
+ "handle": "wallco-3794",
+ "image_url": "/designs/img/bh_abstract_tree-trunk-companion_900_1778703275363_266548238.png",
+ "filename": "bh_abstract_tree-trunk-companion_900_1778703275363_266548238.png",
+ "generator": "wallco.ai",
+ "seed": 266548238,
+ "is_published": false,
+ "created_at": "2026-05-13T20:14:35.488651+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "tree-trunk-companion",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3795,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#a1b5bc",
+ "saturation": 0.168,
+ "title": "Sapphire Atelier No.3795",
+ "handle": "wallco-3795",
+ "image_url": "/designs/img/bh_abstract_tree-trunk-companion_706_1778703285312_208514031.png",
+ "filename": "bh_abstract_tree-trunk-companion_706_1778703285312_208514031.png",
+ "generator": "wallco.ai",
+ "seed": 208514031,
+ "is_published": false,
+ "created_at": "2026-05-13T20:14:45.477961+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "tree-trunk-companion",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3796,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#f4efde",
+ "saturation": 0.5,
+ "title": "Honey Studio No.3796",
+ "handle": "wallco-3796",
+ "image_url": "/designs/img/bh_coord_mini-cane-trellis_bone-ink_1778703310865_2082890734.png",
+ "filename": "bh_coord_mini-cane-trellis_bone-ink_1778703310865_2082890734.png",
+ "generator": "wallco.ai",
+ "seed": 2082890734,
+ "is_published": false,
+ "created_at": "2026-05-13T20:15:11.011364+00:00",
+ "motifs": [
+ "coordinate",
+ "mini-cane-trellis",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3797,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#f3ebdb",
+ "saturation": 0.5,
+ "title": "Honey Origin No.3797",
+ "handle": "wallco-3797",
+ "image_url": "/designs/img/bh_coord_mini-cane-trellis_champ-mid_1778703324211_95751276.png",
+ "filename": "bh_coord_mini-cane-trellis_champ-mid_1778703324211_95751276.png",
+ "generator": "wallco.ai",
+ "seed": 95751276,
+ "is_published": false,
+ "created_at": "2026-05-13T20:15:24.365079+00:00",
+ "motifs": [
+ "coordinate",
+ "mini-cane-trellis",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3798,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#383b40",
+ "saturation": 0.067,
+ "title": "Noir Folio No.3798",
+ "handle": "wallco-3798",
+ "image_url": "/designs/img/bh_coord_bamboo-stripe_bone-ink_1778703335291_304253680.png",
+ "filename": "bh_coord_bamboo-stripe_bone-ink_1778703335291_304253680.png",
+ "generator": "wallco.ai",
+ "seed": 304253680,
+ "is_published": false,
+ "created_at": "2026-05-13T20:15:35.441394+00:00",
+ "motifs": [
+ "coordinate",
+ "bamboo-stripe",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3799,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#2e3f65",
+ "saturation": 0.374,
+ "title": "Sapphire Folly No.3799",
+ "handle": "wallco-3799",
+ "image_url": "/designs/img/1778703330057_1427357656.png",
+ "filename": "1778703330057_1427357656.png",
+ "generator": "wallco.ai",
+ "seed": 1427357656,
+ "is_published": false,
+ "created_at": "2026-05-13T20:15:39.174574+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3800,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#17396c",
+ "saturation": 0.649,
+ "title": "Sapphire Hiccup No.3800",
+ "handle": "wallco-3800",
+ "image_url": "/designs/img/1778703331344_1308052563.png",
+ "filename": "1778703331344_1308052563.png",
+ "generator": "wallco.ai",
+ "seed": 1308052563,
+ "is_published": false,
+ "created_at": "2026-05-13T20:15:43.296815+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3801,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#f3eede",
+ "saturation": 0.467,
+ "title": "Honey Studio No.3801",
+ "handle": "wallco-3801",
+ "image_url": "/designs/img/bh_coord_bamboo-stripe_champ-mid_1778703346327_420476353.png",
+ "filename": "bh_coord_bamboo-stripe_champ-mid_1778703346327_420476353.png",
+ "generator": "wallco.ai",
+ "seed": 420476353,
+ "is_published": false,
+ "created_at": "2026-05-13T20:15:46.448093+00:00",
+ "motifs": [
+ "coordinate",
+ "bamboo-stripe",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3802,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#6e6749",
+ "saturation": 0.202,
+ "title": "Honey Stardust No.3802",
+ "handle": "wallco-3802",
+ "image_url": "/designs/img/1778703331497_1096281260.png",
+ "filename": "1778703331497_1096281260.png",
+ "generator": "wallco.ai",
+ "seed": 1096281260,
+ "is_published": false,
+ "created_at": "2026-05-13T20:15:46.553207+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3803,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#f3eddd",
+ "saturation": 0.478,
+ "title": "Honey Folio No.3803",
+ "handle": "wallco-3803",
+ "image_url": "/designs/img/bh_coord_tonal-damask_bone-ink_1778703357135_805380617.png",
+ "filename": "bh_coord_tonal-damask_bone-ink_1778703357135_805380617.png",
+ "generator": "wallco.ai",
+ "seed": 805380617,
+ "is_published": false,
+ "created_at": "2026-05-13T20:15:57.256293+00:00",
+ "motifs": [
+ "coordinate",
+ "tonal-damask",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3804,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#19264f",
+ "saturation": 0.519,
+ "title": "Sapphire Reverie No.3804",
+ "handle": "wallco-3804",
+ "image_url": "/designs/img/bh_coord_tonal-damask_champ-mid_1778703368135_799526339.png",
+ "filename": "bh_coord_tonal-damask_champ-mid_1778703368135_799526339.png",
+ "generator": "wallco.ai",
+ "seed": 799526339,
+ "is_published": false,
+ "created_at": "2026-05-13T20:16:08.250089+00:00",
+ "motifs": [
+ "coordinate",
+ "tonal-damask",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3805,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#888378",
+ "saturation": 0.063,
+ "title": "Ash Atelier No.3805",
+ "handle": "wallco-3805",
+ "image_url": "/designs/img/bh_coord_grasscloth-texture_bone-ink_1778703379116_883634591.png",
+ "filename": "bh_coord_grasscloth-texture_bone-ink_1778703379116_883634591.png",
+ "generator": "wallco.ai",
+ "seed": 883634591,
+ "is_published": false,
+ "created_at": "2026-05-13T20:16:19.231169+00:00",
+ "motifs": [
+ "coordinate",
+ "grasscloth-texture",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3806,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#425b5f",
+ "saturation": 0.18,
+ "title": "Marine Studio No.3806",
+ "handle": "wallco-3806",
+ "image_url": "/designs/img/bh_coord_grasscloth-texture_champ-mid_1778703390050_411727297.png",
+ "filename": "bh_coord_grasscloth-texture_champ-mid_1778703390050_411727297.png",
+ "generator": "wallco.ai",
+ "seed": 411727297,
+ "is_published": false,
+ "created_at": "2026-05-13T20:16:30.175733+00:00",
+ "motifs": [
+ "coordinate",
+ "grasscloth-texture",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3807,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#a47d61",
+ "saturation": 0.269,
+ "title": "Amber Heirloom No.3807",
+ "handle": "wallco-3807",
+ "image_url": "/designs/img/1778703391263_761922226.png",
+ "filename": "1778703391263_761922226.png",
+ "generator": "wallco.ai",
+ "seed": 761922226,
+ "is_published": false,
+ "created_at": "2026-05-13T20:16:51.295513+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3808,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#a47d61",
+ "saturation": 0.269,
+ "title": "Amber Atelier No.3808",
+ "handle": "wallco-3808",
+ "image_url": "/designs/img/var_3807_hue+60_1778703411412.png",
+ "filename": "var_3807_hue+60_1778703411412.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:16:53.731141+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3809,
+ "kind": "seamless_tile",
+ "category": "bh-coordinates",
+ "dominant_hex": "#f4eede",
+ "saturation": 0.5,
+ "title": "Honey Reverie No.3809",
+ "handle": "wallco-3809",
+ "image_url": "/designs/img/bh_coord_diamond-lattice_champ-mid_1778703415241_20549780.png",
+ "filename": "bh_coord_diamond-lattice_champ-mid_1778703415241_20549780.png",
+ "generator": "wallco.ai",
+ "seed": 20549780,
+ "is_published": false,
+ "created_at": "2026-05-13T20:16:55.358802+00:00",
+ "motifs": [
+ "coordinate",
+ "diamond-lattice",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3810,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#a47d61",
+ "saturation": 0.269,
+ "title": "Amber Baroque No.3810",
+ "handle": "wallco-3810",
+ "image_url": "/designs/img/var_3807_hue+120_1778703413736.png",
+ "filename": "var_3807_hue+120_1778703413736.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:16:56.218818+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3811,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#a47d61",
+ "saturation": 0.269,
+ "title": "Amber Damask No.3811",
+ "handle": "wallco-3811",
+ "image_url": "/designs/img/var_3807_hue+180_1778703416222.png",
+ "filename": "var_3807_hue+180_1778703416222.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:16:58.725763+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3812,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#a47d61",
+ "saturation": 0.269,
+ "title": "Amber Heirloom No.3812",
+ "handle": "wallco-3812",
+ "image_url": "/designs/img/var_3807_hue-60_1778703418729.png",
+ "filename": "var_3807_hue-60_1778703418729.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:17:01.144566+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3813,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#a47d61",
+ "saturation": 0.269,
+ "title": "Amber Atelier No.3813",
+ "handle": "wallco-3813",
+ "image_url": "/designs/img/var_3807_mono_1778703421148.png",
+ "filename": "var_3807_mono_1778703421148.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:17:03.624776+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3814,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#9b8a49",
+ "saturation": 0.36,
+ "title": "Honey Soir\u00e9e No.3814",
+ "handle": "wallco-3814",
+ "image_url": "/designs/img/1778703421327_1795125916.png",
+ "filename": "1778703421327_1795125916.png",
+ "generator": "wallco.ai",
+ "seed": 1795125916,
+ "is_published": false,
+ "created_at": "2026-05-13T20:17:09.44343+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3815,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#3b3a37",
+ "saturation": 0.035,
+ "title": "Noir Atelier No.3815",
+ "handle": "wallco-3815",
+ "image_url": "/designs/img/bh_abstract_silhouette-mono_bone-ink_1778703432690_1821651376.png",
+ "filename": "bh_abstract_silhouette-mono_bone-ink_1778703432690_1821651376.png",
+ "generator": "wallco.ai",
+ "seed": 1821651376,
+ "is_published": false,
+ "created_at": "2026-05-13T20:17:12.802421+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "silhouette-mono",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3816,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#6d7c6e",
+ "saturation": 0.064,
+ "title": "Slate Sundrift No.3816",
+ "handle": "wallco-3816",
+ "image_url": "/designs/img/1778703421497_955678249.png",
+ "filename": "1778703421497_955678249.png",
+ "generator": "wallco.ai",
+ "seed": 955678249,
+ "is_published": false,
+ "created_at": "2026-05-13T20:17:12.946044+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3817,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#f5f0e2",
+ "saturation": 0.487,
+ "title": "Honey Origin No.3817",
+ "handle": "wallco-3817",
+ "image_url": "/designs/img/bh_abstract_silhouette-mono_champ-mid_1778703445554_1022044173.png",
+ "filename": "bh_abstract_silhouette-mono_champ-mid_1778703445554_1022044173.png",
+ "generator": "wallco.ai",
+ "seed": 1022044173,
+ "is_published": false,
+ "created_at": "2026-05-13T20:17:25.705988+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "silhouette-mono",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3818,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#f5efde",
+ "saturation": 0.535,
+ "title": "Honey Folio No.3818",
+ "handle": "wallco-3818",
+ "image_url": "/designs/img/bh_abstract_cubist-blocks_bone-ink_1778703459559_1532307952.png",
+ "filename": "bh_abstract_cubist-blocks_bone-ink_1778703459559_1532307952.png",
+ "generator": "wallco.ai",
+ "seed": 1532307952,
+ "is_published": false,
+ "created_at": "2026-05-13T20:17:39.670566+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "cubist-blocks",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3819,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#f1e9d9",
+ "saturation": 0.462,
+ "title": "Honey Reverie No.3819",
+ "handle": "wallco-3819",
+ "image_url": "/designs/img/bh_abstract_cubist-blocks_champ-mid_1778703471944_806536609.png",
+ "filename": "bh_abstract_cubist-blocks_champ-mid_1778703471944_806536609.png",
+ "generator": "wallco.ai",
+ "seed": 806536609,
+ "is_published": false,
+ "created_at": "2026-05-13T20:17:52.114374+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "cubist-blocks",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3820,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#776c51",
+ "saturation": 0.19,
+ "title": "Honey Atelier No.3820",
+ "handle": "wallco-3820",
+ "image_url": "/designs/img/bh_abstract_ink-wash_bone-ink_1778703484654_1333407983.png",
+ "filename": "bh_abstract_ink-wash_bone-ink_1778703484654_1333407983.png",
+ "generator": "wallco.ai",
+ "seed": 1333407983,
+ "is_published": false,
+ "created_at": "2026-05-13T20:18:04.826355+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "ink-wash",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3821,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#f3eede",
+ "saturation": 0.467,
+ "title": "Honey Studio No.3821",
+ "handle": "wallco-3821",
+ "image_url": "/designs/img/bh_abstract_ink-wash_champ-mid_1778703498562_87599395.png",
+ "filename": "bh_abstract_ink-wash_champ-mid_1778703498562_87599395.png",
+ "generator": "wallco.ai",
+ "seed": 87599395,
+ "is_published": false,
+ "created_at": "2026-05-13T20:18:18.687702+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "ink-wash",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3822,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#bfb7a3",
+ "saturation": 0.179,
+ "title": "Honey Origin No.3822",
+ "handle": "wallco-3822",
+ "image_url": "/designs/img/bh_abstract_botanical-rows_bone-ink_1778703512315_1097869093.png",
+ "filename": "bh_abstract_botanical-rows_bone-ink_1778703512315_1097869093.png",
+ "generator": "wallco.ai",
+ "seed": 1097869093,
+ "is_published": false,
+ "created_at": "2026-05-13T20:18:32.465692+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "botanical-rows",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3823,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#974137",
+ "saturation": 0.466,
+ "title": "Rose Reverie No.3823",
+ "handle": "wallco-3823",
+ "image_url": "/designs/img/1778703511346_560455610.png",
+ "filename": "1778703511346_560455610.png",
+ "generator": "wallco.ai",
+ "seed": 560455610,
+ "is_published": false,
+ "created_at": "2026-05-13T20:18:39.649271+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3824,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#976752",
+ "saturation": 0.296,
+ "title": "Amber Vespers No.3824",
+ "handle": "wallco-3824",
+ "image_url": "/designs/img/1778703511497_1262019584.png",
+ "filename": "1778703511497_1262019584.png",
+ "generator": "wallco.ai",
+ "seed": 1262019584,
+ "is_published": false,
+ "created_at": "2026-05-13T20:18:43.600078+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3825,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#746f6e",
+ "saturation": 0.027,
+ "title": "Slate Atelier No.3825",
+ "handle": "wallco-3825",
+ "image_url": "/designs/img/bh_abstract_botanical-rows_champ-mid_1778703525747_2066987276.png",
+ "filename": "bh_abstract_botanical-rows_champ-mid_1778703525747_2066987276.png",
+ "generator": "wallco.ai",
+ "seed": 2066987276,
+ "is_published": false,
+ "created_at": "2026-05-13T20:18:45.860055+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "botanical-rows",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3826,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#2d2d29",
+ "saturation": 0.047,
+ "title": "Noir Studio No.3826",
+ "handle": "wallco-3826",
+ "image_url": "/designs/img/bh_abstract_tree-trunk-companion_bone-ink_1778703538781_1580744514.png",
+ "filename": "bh_abstract_tree-trunk-companion_bone-ink_1778703538781_1580744514.png",
+ "generator": "wallco.ai",
+ "seed": 1580744514,
+ "is_published": false,
+ "created_at": "2026-05-13T20:18:58.935216+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "tree-trunk-companion",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3827,
+ "kind": "seamless_tile",
+ "category": "bh-abstract-leaves",
+ "dominant_hex": "#6b757d",
+ "saturation": 0.078,
+ "title": "Slate Origin No.3827",
+ "handle": "wallco-3827",
+ "image_url": "/designs/img/bh_abstract_tree-trunk-companion_champ-mid_1778703551866_733145443.png",
+ "filename": "bh_abstract_tree-trunk-companion_champ-mid_1778703551866_733145443.png",
+ "generator": "wallco.ai",
+ "seed": 733145443,
+ "is_published": false,
+ "created_at": "2026-05-13T20:19:12.202667+00:00",
+ "motifs": [
+ "abstract-leaf",
+ "tree-trunk-companion",
+ "bh90210"
+ ],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3828,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#251e21",
+ "saturation": 0.104,
+ "title": "Rose Saunter No.3828",
+ "handle": "wallco-3828",
+ "image_url": "/designs/img/1778703579491_2034701079.png",
+ "filename": "1778703579491_2034701079.png",
+ "generator": "wallco.ai",
+ "seed": 2034701079,
+ "is_published": false,
+ "created_at": "2026-05-13T20:19:48.330821+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3829,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#2c2521",
+ "saturation": 0.143,
+ "title": "Amber Salon No.3829",
+ "handle": "wallco-3829",
+ "image_url": "/designs/img/1778703591505_743877735.png",
+ "filename": "1778703591505_743877735.png",
+ "generator": "wallco.ai",
+ "seed": 743877735,
+ "is_published": false,
+ "created_at": "2026-05-13T20:19:59.615494+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3830,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#2c2521",
+ "saturation": 0.143,
+ "title": "Amber Baroque No.3830",
+ "handle": "wallco-3830",
+ "image_url": "/designs/img/var_3829_hue+60_1778703599734.png",
+ "filename": "var_3829_hue+60_1778703599734.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:20:02.068821+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3831,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#2c2521",
+ "saturation": 0.143,
+ "title": "Amber Damask No.3831",
+ "handle": "wallco-3831",
+ "image_url": "/designs/img/var_3829_hue+120_1778703602073.png",
+ "filename": "var_3829_hue+120_1778703602073.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:20:04.568941+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3832,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#2c2521",
+ "saturation": 0.143,
+ "title": "Amber Heirloom No.3832",
+ "handle": "wallco-3832",
+ "image_url": "/designs/img/var_3829_hue+180_1778703604576.png",
+ "filename": "var_3829_hue+180_1778703604576.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:20:07.87104+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3833,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#2c2521",
+ "saturation": 0.143,
+ "title": "Amber Atelier No.3833",
+ "handle": "wallco-3833",
+ "image_url": "/designs/img/var_3829_hue-60_1778703607876.png",
+ "filename": "var_3829_hue-60_1778703607876.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:20:10.049589+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3834,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#e21186",
+ "saturation": 0.86,
+ "title": "Plum Soir\u00e9e No.3834",
+ "handle": "wallco-3834",
+ "image_url": "/designs/img/1778703601397_1082006509.png",
+ "filename": "1778703601397_1082006509.png",
+ "generator": "wallco.ai",
+ "seed": 1082006509,
+ "is_published": false,
+ "created_at": "2026-05-13T20:20:10.32845+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3835,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#2c2521",
+ "saturation": 0.143,
+ "title": "Amber Baroque No.3835",
+ "handle": "wallco-3835",
+ "image_url": "/designs/img/var_3829_mono_1778703610053.png",
+ "filename": "var_3829_mono_1778703610053.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:20:12.202492+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3836,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#a5382d",
+ "saturation": 0.571,
+ "title": "Rose Sundrift No.3836",
+ "handle": "wallco-3836",
+ "image_url": "/designs/img/1778703601500_1389186411.png",
+ "filename": "1778703601500_1389186411.png",
+ "generator": "wallco.ai",
+ "seed": 1389186411,
+ "is_published": false,
+ "created_at": "2026-05-13T20:20:13.068773+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3837,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#752e4d",
+ "saturation": 0.436,
+ "title": "Rose Caprice No.3837",
+ "handle": "wallco-3837",
+ "image_url": "/designs/img/1778703691349_1393069371.png",
+ "filename": "1778703691349_1393069371.png",
+ "generator": "wallco.ai",
+ "seed": 1393069371,
+ "is_published": false,
+ "created_at": "2026-05-13T20:21:39.481671+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3838,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#85525d",
+ "saturation": 0.237,
+ "title": "Rose Lullaby No.3838",
+ "handle": "wallco-3838",
+ "image_url": "/designs/img/1778703691497_1859847063.png",
+ "filename": "1778703691497_1859847063.png",
+ "generator": "wallco.ai",
+ "seed": 1859847063,
+ "is_published": false,
+ "created_at": "2026-05-13T20:21:42.976286+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3839,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#d7bc96",
+ "saturation": 0.448,
+ "title": "Honey Salon No.3839",
+ "handle": "wallco-3839",
+ "image_url": "/designs/img/1778703779834_823170167.png",
+ "filename": "1778703779834_823170167.png",
+ "generator": "wallco.ai",
+ "seed": 823170167,
+ "is_published": false,
+ "created_at": "2026-05-13T20:23:08.524409+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3840,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#d7bc96",
+ "saturation": 0.448,
+ "title": "Honey Baroque No.3840",
+ "handle": "wallco-3840",
+ "image_url": "/designs/img/var_3839_hue+60_1778703788635.png",
+ "filename": "var_3839_hue+60_1778703788635.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:23:10.823979+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3841,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#d7bc96",
+ "saturation": 0.448,
+ "title": "Honey Damask No.3841",
+ "handle": "wallco-3841",
+ "image_url": "/designs/img/var_3839_hue+120_1778703790827.png",
+ "filename": "var_3839_hue+120_1778703790827.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:23:13.034087+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3842,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#201620",
+ "saturation": 0.185,
+ "title": "Plum Tableau No.3842",
+ "handle": "wallco-3842",
+ "image_url": "/designs/img/1778703781336_1124929876.png",
+ "filename": "1778703781336_1124929876.png",
+ "generator": "wallco.ai",
+ "seed": 1124929876,
+ "is_published": false,
+ "created_at": "2026-05-13T20:23:13.240007+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3843,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#d7bc96",
+ "saturation": 0.448,
+ "title": "Honey Atelier No.3843",
+ "handle": "wallco-3843",
+ "image_url": "/designs/img/var_3839_hue+180_1778703793037.png",
+ "filename": "var_3839_hue+180_1778703793037.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:23:15.263145+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3844,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#d7bc96",
+ "saturation": 0.448,
+ "title": "Honey Salon No.3844",
+ "handle": "wallco-3844",
+ "image_url": "/designs/img/var_3839_hue-60_1778703795266.png",
+ "filename": "var_3839_hue-60_1778703795266.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:23:17.500161+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3845,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#d7bc96",
+ "saturation": 0.448,
+ "title": "Honey Baroque No.3845",
+ "handle": "wallco-3845",
+ "image_url": "/designs/img/var_3839_mono_1778703797504.png",
+ "filename": "var_3839_mono_1778703797504.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:23:19.701164+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3846,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#384431",
+ "saturation": 0.162,
+ "title": "Sage Sundrift No.3846",
+ "handle": "wallco-3846",
+ "image_url": "/designs/img/1778703781498_1480900142.png",
+ "filename": "1778703781498_1480900142.png",
+ "generator": "wallco.ai",
+ "seed": 1480900142,
+ "is_published": false,
+ "created_at": "2026-05-13T20:23:23.213686+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3847,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#927761",
+ "saturation": 0.202,
+ "title": "Amber Caprice No.3847",
+ "handle": "wallco-3847",
+ "image_url": "/designs/img/1778703828620_431712068.png",
+ "filename": "1778703828620_431712068.png",
+ "generator": "wallco.ai",
+ "seed": 431712068,
+ "is_published": false,
+ "created_at": "2026-05-13T20:23:57.348312+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3848,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#cd733e",
+ "saturation": 0.588,
+ "title": "Amber Saunter No.3848",
+ "handle": "wallco-3848",
+ "image_url": "/designs/img/1778703871345_2006797780.png",
+ "filename": "1778703871345_2006797780.png",
+ "generator": "wallco.ai",
+ "seed": 2006797780,
+ "is_published": false,
+ "created_at": "2026-05-13T20:24:43.513567+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3849,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#b0543d",
+ "saturation": 0.485,
+ "title": "Rose Halcyon No.3849",
+ "handle": "wallco-3849",
+ "image_url": "/designs/img/1778703871511_2138511037.png",
+ "filename": "1778703871511_2138511037.png",
+ "generator": "wallco.ai",
+ "seed": 2138511037,
+ "is_published": false,
+ "created_at": "2026-05-13T20:24:46.346105+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3850,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#412e2b",
+ "saturation": 0.204,
+ "title": "Rose Hiccup No.3850",
+ "handle": "wallco-3850",
+ "image_url": "/designs/img/1778703961349_106539034.png",
+ "filename": "1778703961349_106539034.png",
+ "generator": "wallco.ai",
+ "seed": 106539034,
+ "is_published": false,
+ "created_at": "2026-05-13T20:26:09.79798+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3851,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#824f72",
+ "saturation": 0.244,
+ "title": "Plum Trip No.3851",
+ "handle": "wallco-3851",
+ "image_url": "/designs/img/1778703961500_846248394.png",
+ "filename": "1778703961500_846248394.png",
+ "generator": "wallco.ai",
+ "seed": 846248394,
+ "is_published": false,
+ "created_at": "2026-05-13T20:26:19.947685+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3852,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#824f72",
+ "saturation": 0.244,
+ "title": "Plum Stardust No.3852",
+ "handle": "wallco-3852",
+ "image_url": "/designs/img/var_3851_hue+60_1778703989190.png",
+ "filename": "var_3851_hue+60_1778703989190.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:26:31.409684+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3853,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#824f72",
+ "saturation": 0.244,
+ "title": "Plum Daydream No.3853",
+ "handle": "wallco-3853",
+ "image_url": "/designs/img/var_3851_hue+120_1778703991414.png",
+ "filename": "var_3851_hue+120_1778703991414.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:26:33.761809+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3854,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#824f72",
+ "saturation": 0.244,
+ "title": "Plum Vespers No.3854",
+ "handle": "wallco-3854",
+ "image_url": "/designs/img/var_3851_hue+180_1778703993765.png",
+ "filename": "var_3851_hue+180_1778703993765.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:26:36.193985+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3855,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#824f72",
+ "saturation": 0.244,
+ "title": "Plum Hazefield No.3855",
+ "handle": "wallco-3855",
+ "image_url": "/designs/img/var_3851_hue-60_1778703996198.png",
+ "filename": "var_3851_hue-60_1778703996198.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:26:38.345881+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3856,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#824f72",
+ "saturation": 0.244,
+ "title": "Plum Sundrift No.3856",
+ "handle": "wallco-3856",
+ "image_url": "/designs/img/var_3851_mono_1778703998349.png",
+ "filename": "var_3851_mono_1778703998349.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:26:40.600554+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3857,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#cf7697",
+ "saturation": 0.481,
+ "title": "Rose Caprice No.3857",
+ "handle": "wallco-3857",
+ "image_url": "/designs/img/1778704051354_521555356.png",
+ "filename": "1778704051354_521555356.png",
+ "generator": "wallco.ai",
+ "seed": 521555356,
+ "is_published": false,
+ "created_at": "2026-05-13T20:27:40.200277+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3858,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#66715e",
+ "saturation": 0.092,
+ "title": "Sage Lullaby No.3858",
+ "handle": "wallco-3858",
+ "image_url": "/designs/img/1778704051510_1420104192.png",
+ "filename": "1778704051510_1420104192.png",
+ "generator": "wallco.ai",
+ "seed": 1420104192,
+ "is_published": false,
+ "created_at": "2026-05-13T20:27:46.208173+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3859,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#854254",
+ "saturation": 0.337,
+ "title": "Rose Folly No.3859",
+ "handle": "wallco-3859",
+ "image_url": "/designs/img/1778704077614_1807769069.png",
+ "filename": "1778704077614_1807769069.png",
+ "generator": "wallco.ai",
+ "seed": 1807769069,
+ "is_published": false,
+ "created_at": "2026-05-13T20:28:06.129486+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3860,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#431e37",
+ "saturation": 0.381,
+ "title": "Plum Hiccup No.3860",
+ "handle": "wallco-3860",
+ "image_url": "/designs/img/1778704141348_2092136059.png",
+ "filename": "1778704141348_2092136059.png",
+ "generator": "wallco.ai",
+ "seed": 2092136059,
+ "is_published": false,
+ "created_at": "2026-05-13T20:29:09.580997+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3861,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#9b3a67",
+ "saturation": 0.455,
+ "title": "Rose Trip No.3861",
+ "handle": "wallco-3861",
+ "image_url": "/designs/img/1778704141503_1995448149.png",
+ "filename": "1778704141503_1995448149.png",
+ "generator": "wallco.ai",
+ "seed": 1995448149,
+ "is_published": false,
+ "created_at": "2026-05-13T20:29:12.829819+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3862,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#274756",
+ "saturation": 0.376,
+ "title": "Sapphire Heirloom No.3862",
+ "handle": "wallco-3862",
+ "image_url": "/designs/img/1778704169317_138476215.png",
+ "filename": "1778704169317_138476215.png",
+ "generator": "wallco.ai",
+ "seed": 138476215,
+ "is_published": false,
+ "created_at": "2026-05-13T20:29:45.786867+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3863,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#274756",
+ "saturation": 0.376,
+ "title": "Sapphire Atelier No.3863",
+ "handle": "wallco-3863",
+ "image_url": "/designs/img/var_3862_hue+60_1778704186881.png",
+ "filename": "var_3862_hue+60_1778704186881.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:30:02.933555+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3864,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#274756",
+ "saturation": 0.376,
+ "title": "Sapphire Salon No.3864",
+ "handle": "wallco-3864",
+ "image_url": "/designs/img/var_3862_hue+120_1778704202948.png",
+ "filename": "var_3862_hue+120_1778704202948.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:30:05.991131+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3865,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#274756",
+ "saturation": 0.376,
+ "title": "Sapphire Baroque No.3865",
+ "handle": "wallco-3865",
+ "image_url": "/designs/img/var_3862_hue+180_1778704206048.png",
+ "filename": "var_3862_hue+180_1778704206048.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:30:09.371488+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3866,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#274756",
+ "saturation": 0.376,
+ "title": "Sapphire Damask No.3866",
+ "handle": "wallco-3866",
+ "image_url": "/designs/img/var_3862_hue-60_1778704209385.png",
+ "filename": "var_3862_hue-60_1778704209385.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:30:13.695976+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3867,
+ "kind": "seamless_tile",
+ "category": "damask",
+ "dominant_hex": "#274756",
+ "saturation": 0.376,
+ "title": "Sapphire Heirloom No.3867",
+ "handle": "wallco-3867",
+ "image_url": "/designs/img/var_3862_mono_1778704213705.png",
+ "filename": "var_3862_mono_1778704213705.png",
+ "generator": "wallco.ai",
+ "seed": 0,
+ "is_published": false,
+ "created_at": "2026-05-13T20:30:16.880284+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3868,
+ "kind": "seamless_tile",
+ "category": "drunk-animals",
+ "dominant_hex": "#412843",
+ "saturation": 0.252,
+ "title": "Plum Saunter No.3868",
+ "handle": "wallco-3868",
+ "image_url": "/designs/img/1778704231372_828179102.png",
+ "filename": "1778704231372_828179102.png",
+ "generator": "wallco.ai",
+ "seed": 828179102,
+ "is_published": false,
+ "created_at": "2026-05-13T20:30:40.918224+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
+ },
+ {
+ "id": 3869,
+ "kind": "seamless_tile",
+ "category": "stoned-animals",
+ "dominant_hex": "#897c70",
+ "saturation": 0.1,
+ "title": "Amber Halcyon No.3869",
+ "handle": "wallco-3869",
+ "image_url": "/designs/img/1778704231508_1518802007.png",
+ "filename": "1778704231508_1518802007.png",
+ "generator": "wallco.ai",
+ "seed": 1518802007,
+ "is_published": false,
+ "created_at": "2026-05-13T20:30:44.932828+00:00",
+ "motifs": [],
+ "user_removed": false,
+ "user_color_good": null,
+ "user_style_good": null,
+ "user_scale_good": null,
+ "user_stars": null,
+ "room_mockups": []
}
]
\ No newline at end of file
diff --git a/scripts/generate-bh-batch-retry.js b/scripts/generate-bh-batch-retry.js
new file mode 100644
index 0000000..1867802
--- /dev/null
+++ b/scripts/generate-bh-batch-retry.js
@@ -0,0 +1,142 @@
+#!/usr/bin/env node
+/**
+ * Retry pass for generate-bh-coords-abstracts-batch.js failures.
+ *
+ * - Re-uses the same prompt library + settlement gate.
+ * - Reads the log from the prior run and finds every "[ N/50] FAIL"
+ * line that didn't yield a row in spoon_all_designs.
+ * - For Oxford Olive failures, uses the down-scaled source.
+ * - Adds an explicit "STYLIZED COMPANION DESIGN, do NOT reproduce
+ * or trace the source" cue to dodge IMAGE_RECITATION refusals.
+ * - Still settlement-gated; still is_published=FALSE.
+ *
+ * node scripts/generate-bh-batch-retry.js [LOG_PATH]
+ */
+'use strict';
+require('dotenv').config({ path: require('path').join(__dirname, '..', '.env') });
+const fs = require('fs');
+const path = require('path');
+const crypto = require('crypto');
+const { execSync, spawnSync } = require('child_process');
+const { gateOrExit } = require('./settlement-gate');
+
+const KEY = process.env.GEMINI_API_KEY;
+if (!KEY) { console.error('GEMINI_API_KEY missing'); process.exit(1); }
+
+const SRC_DIR = '/tmp/wallco-sources';
+const OUT_DIR = path.join(__dirname, '..', 'data', 'generated');
+fs.mkdirSync(OUT_DIR, { recursive: true });
+
+const LOG_PATH = process.argv[2] || '/tmp/bh-batch.log';
+const DB = process.env.WALLCO_DB || 'dw_unified';
+const PSQL = (process.platform === 'linux') ? `sudo -n -u postgres psql ${DB} -At -q` : `psql ${DB} -At -q`;
+function psql(sql) { return execSync(PSQL, { input: sql, encoding: 'utf8' }).trim(); }
+function esc(v) { if (v == null) return 'NULL'; return "'" + String(v).replace(/'/g, "''") + "'"; }
+
+// Re-import the original module's prompt library by reading + sandboxing
+const origPath = path.join(__dirname, 'generate-bh-coords-abstracts-batch.js');
+const origSrc = fs.readFileSync(origPath, 'utf8');
+const block = origSrc.match(/\/\/ ── Source colorways[\s\S]+?function variants\(\) \{[\s\S]+?\n\}/)[0];
+const variants = (new Function(block + '\nreturn variants();'))();
+
+// Identify failures from the log: positions like "[ N/50] FAIL"
+const log = fs.existsSync(LOG_PATH) ? fs.readFileSync(LOG_PATH, 'utf8') : '';
+const failedIdx = [];
+for (const line of log.split('\n')) {
+ const m = line.match(/\[\s*(\d+)\/\d+\]\s+FAIL/);
+ if (m) failedIdx.push(parseInt(m[1], 10) - 1);
+}
+console.log(`Retry plan: ${failedIdx.length} failures from ${LOG_PATH}`);
+const todo = failedIdx.map(i => variants[i]).filter(Boolean);
+
+async function generateOne(v, idx, totalN) {
+ // Force smaller Oxford Olive source on retry
+ let src = v.src;
+ if (src.includes('OxfordOlive')) src = 'bh-gdrive/BH90210-OxfordOlive-smaller.jpg';
+ const srcPath = path.join(SRC_DIR, src);
+ if (!fs.existsSync(srcPath)) throw new Error(`source missing: ${srcPath}`);
+ const imageB64 = fs.readFileSync(srcPath).toString('base64');
+
+ // Add anti-recitation cue
+ const prompt = v.prompt + ' This is a STYLIZED COMPANION DESIGN inspired by the source — do NOT reproduce, trace, or copy the source image. Render a new derivative composition from scratch in the described style.';
+ gateOrExit(prompt);
+
+ const body = {
+ contents: [{
+ parts: [
+ { inline_data: { mime_type: 'image/jpeg', data: imageB64 } },
+ { text: prompt },
+ ],
+ }],
+ generationConfig: { responseModalities: ['IMAGE'] },
+ };
+ const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image:generateContent?key=${KEY}`;
+ const t0 = Date.now();
+ const r = await fetch(url, {
+ method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body),
+ });
+ if (!r.ok) throw new Error(`HTTP ${r.status}: ${(await r.text()).slice(0, 200)}`);
+ const j = await r.json();
+ try {
+ const { logGemini } = require(require('os').homedir() + '/.claude/skills/cost-tracker/scripts/log-gemini.js');
+ logGemini(j, { app: 'wallco-ai', note: 'bh-coords-abstracts-retry', model: 'gemini-2.5-flash-image' });
+ } catch {}
+ const part = j.candidates?.[0]?.content?.parts?.find(p => p.inline_data || p.inlineData);
+ const data = part?.inline_data?.data || part?.inlineData?.data;
+ if (!data) {
+ const text = j.candidates?.[0]?.content?.parts?.find(p => p.text)?.text;
+ throw new Error(`no image (${j.candidates?.[0]?.finishReason || 'unknown'}): ${(text || '').slice(0, 200)}`);
+ }
+ const seed = crypto.randomInt(1, 2 ** 31 - 1);
+ const filename = `bh_${v.kind}_${v.type_key}_${v.colorway.code}_retry_${Date.now()}_${seed}.png`;
+ const outPath = path.join(OUT_DIR, filename);
+ fs.writeFileSync(outPath, Buffer.from(data, 'base64'));
+ const elapsed = ((Date.now() - t0) / 1000).toFixed(1);
+
+ const py = spawnSync('python3', ['-c', `
+from PIL import Image
+from collections import Counter
+import json, sys
+img = Image.open(sys.argv[1]).convert('RGB')
+img.thumbnail((300, 300))
+pal = img.quantize(colors=5, method=Image.Quantize.MEDIANCUT).convert('RGB')
+pixels = list(pal.getdata())
+cnt = Counter(pixels)
+total = sum(cnt.values())
+palette = [{'hex':'#{:02x}{:02x}{:02x}'.format(*rgb), 'pct':round(n/total*100,2)} for rgb,n in cnt.most_common(5)]
+print(json.dumps(palette))
+`, outPath], { encoding: 'utf8' });
+ let palette = []; let dominant = null;
+ try { palette = JSON.parse(py.stdout.trim()); dominant = palette[0]?.hex; } catch {}
+
+ const tagsArr = `ARRAY[${v.tags.map(t => "'" + t.replace(/'/g, "''") + "'").join(',')}]::text[]`;
+ const motifsArr = `ARRAY[${v.motifs.map(t => "'" + t.replace(/'/g, "''") + "'").join(',')}]::text[]`;
+ const fullPrompt = (v.title + ' — ' + v.prompt).replace(/'/g, "''");
+ const palJson = JSON.stringify(palette).replace(/'/g, "''");
+ const note = `bh-batch retry ${v.kind}/${v.type_key}/${v.colorway.code} — hidden for admin review`;
+ const sql = `INSERT INTO spoon_all_designs
+ (kind, width_in, height_in, generator, prompt, seed, dominant_hex, palette,
+ local_path, image_url, category, motifs, tags, is_published, request_text, notes)
+ VALUES ('seamless_tile', 24, 24, 'gemini-2.5-flash-image-edit',
+ '${fullPrompt}', ${seed},
+ ${dominant ? "'" + dominant + "'" : 'NULL'},
+ '${palJson}'::jsonb,
+ ${esc(outPath)}, ${esc('/designs/img/' + filename)},
+ ${esc(v.category)}, ${motifsArr}, ${tagsArr},
+ FALSE, ${esc(`bh-${v.kind} retry: ${v.title}`)},
+ ${esc(note)})
+ RETURNING id;`;
+ const id = parseInt(psql(sql), 10);
+ console.log(` [${String(idx + 1).padStart(2)}/${totalN}] ${v.kind === 'coord' ? 'COORD' : 'ABSTR'} ${v.title} → id=${id} ${elapsed}s`);
+ return { id, title: v.title };
+}
+
+(async () => {
+ console.log(`\nRetrying ${todo.length} BH variants…\n`);
+ const results = [];
+ for (let i = 0; i < todo.length; i++) {
+ try { results.push(await generateOne(todo[i], i, todo.length)); }
+ catch (e) { console.error(` [${String(i + 1).padStart(2)}/${todo.length}] FAIL — ${e.message.slice(0, 200)}`); }
+ }
+ console.log(`\nRetry done. ${results.length}/${todo.length} succeeded.`);
+})();
diff --git a/scripts/generate-bh-coords-abstracts-batch.js b/scripts/generate-bh-coords-abstracts-batch.js
new file mode 100644
index 0000000..821d71e
--- /dev/null
+++ b/scripts/generate-bh-coords-abstracts-batch.js
@@ -0,0 +1,315 @@
+#!/usr/bin/env node
+/**
+ * BH (Beverly Hills 90210) — 50 coordinate + abstract-leaf variants.
+ *
+ * Sources (under /tmp/wallco-sources/):
+ * • BH90210-900 Butterfly Dream.jpg (existing -900 colorway)
+ * • bh-gdrive/BH90210-706-BeverlyBeachHouse-Blue.jpg
+ * • bh-gdrive/BH90210-OxfordOlive-FullHalfDropRepeat.jpg
+ *
+ * Output:
+ * • 25 coordinates (mini cane trellis / bamboo stripe / tonal damask /
+ * grasscloth texture / geometric lattice — all settlement-safe because
+ * they carry no leaves+butterflies+multi-color combo)
+ * • 25 abstract-leaf interpretations (monochrome silhouette / cubist /
+ * ink-wash / single-orientation rows / acceptable-element bearing)
+ *
+ * Every prompt is gated by settlement-gate.js BEFORE the Gemini call.
+ * All rows land with is_published=FALSE — Steve reviews them in the admin
+ * queue at http://localhost:9792/admin/designs?cat=bh-coordinates and
+ * .../?cat=bh-abstract-leaves before any go live.
+ *
+ * Run:
+ * cd ~/Projects/wallco-ai && node scripts/generate-bh-coords-abstracts-batch.js
+ */
+'use strict';
+require('dotenv').config({ path: require('path').join(__dirname, '..', '.env') });
+const fs = require('fs');
+const path = require('path');
+const crypto = require('crypto');
+const { execSync, spawnSync } = require('child_process');
+const { gateOrExit } = require('./settlement-gate');
+
+const KEY = process.env.GEMINI_API_KEY;
+if (!KEY) { console.error('GEMINI_API_KEY missing'); process.exit(1); }
+
+const SRC_DIR = '/tmp/wallco-sources';
+const OUT_DIR = path.join(__dirname, '..', 'data', 'generated');
+fs.mkdirSync(OUT_DIR, { recursive: true });
+
+const DB = process.env.WALLCO_DB || 'dw_unified';
+const PSQL = (process.platform === 'linux')
+ ? `sudo -n -u postgres psql ${DB} -At -q`
+ : `psql ${DB} -At -q`;
+function psql(sql) { return execSync(PSQL, { input: sql, encoding: 'utf8' }).trim(); }
+function esc(v) { if (v == null) return 'NULL'; return "'" + String(v).replace(/'/g, "''") + "'"; }
+
+// ── Source colorways (BH master refs) ──────────────────────────────────────
+const COLORWAYS = [
+ {
+ code: '900',
+ name: 'Butterfly Dream',
+ src: 'BH90210-900 Butterfly Dream.jpg',
+ palette: 'warm cream ground, monarch orange, bright yellow, scarlet red, sky blue, emerald accents',
+ },
+ {
+ code: '706',
+ name: 'Beverly Beach House Blue',
+ src: 'bh-gdrive/BH90210-706-BeverlyBeachHouse-Blue.jpg',
+ palette: 'ivory ground, soft cornflower blue, deep marine blue, muted teal, dusty navy',
+ },
+ {
+ code: 'olive',
+ name: 'Oxford Olive',
+ src: 'bh-gdrive/BH90210-OxfordOlive-smaller.jpg',
+ palette: 'warm bone ground, oxford olive, deep moss, antique gold accents, soft umber',
+ },
+];
+
+// ── 5 coordinate types × per colorway. Settlement-safe by design:
+// - Coordinates carry NO leaves+open-space+multi-color combo, AND
+// - Most are monochrome / tonal; none reference banana/grape/bird/butterfly.
+const COORD_TYPES = [
+ {
+ key: 'mini-cane-trellis',
+ title: 'Mini Cane Trellis Coordinate',
+ promptFor: cw => `Generate a small-scale (4-inch repeat) cane lattice / trellis grid coordinate companion to the source pattern. Single-ink monochrome rendering pulled from the dominant tone of the source. No leaves, no foliage, no butterflies, no birds. Just clean, fine cane-bamboo lattice geometry on a tonal background drawn from the source palette (${cw.palette}). Seamless tile, archival quality, square crop, wallpaper-pattern aesthetic, no signature, no watermark, no text.`,
+ },
+ {
+ key: 'bamboo-stripe',
+ title: 'Bamboo Stripe Coordinate',
+ promptFor: cw => `Generate a vertical bamboo-pole stripe coordinate companion. Each bamboo stalk runs floor-to-ceiling with subtle node detail. Monochrome single-ink. No leaves, no shoots, no foliage, no butterflies, no birds. Edge-to-edge regular vertical stripes — no open space between bamboo poles, no scattered or tossed elements. Tonal background from the source palette (${cw.palette}). Seamless tile, archival, square crop, wallpaper, no signature, no watermark, no text.`,
+ },
+ {
+ key: 'tonal-damask',
+ title: 'Tonal Damask Coordinate',
+ promptFor: cw => `Generate a quiet single-color damask coordinate companion at one-third the scale of a hero pattern. Classical urn-and-scroll silhouette only, fully monochrome / tonal, edge-to-edge coverage with no breathing space. No leaves of any species, no foliage, no butterflies, no birds. Color drawn from the source palette (${cw.palette}). Seamless tile, archival, square crop, wallpaper, no signature, no watermark, no text.`,
+ },
+ {
+ key: 'grasscloth-texture',
+ title: 'Grasscloth Texture Coordinate',
+ promptFor: cw => `Generate a horizontal grasscloth weave texture coordinate. Fine sea-grass strands woven across the field, edge-to-edge full-coverage, no negative space, no motifs. Monochrome single-ink wash in a tone pulled from the source palette (${cw.palette}). No leaves, foliage, butterflies, or birds. Seamless tile, archival, square crop, wallpaper, no signature, no watermark, no text.`,
+ },
+ {
+ key: 'diamond-lattice',
+ title: 'Diamond Lattice Coordinate',
+ promptFor: cw => `Generate a geometric diamond-lattice coordinate at small scale. Crisp ink lines forming diamond grid; tiny dot or quatrefoil at each intersection. Monochrome silhouette only. No foliage, leaves, butterflies, birds. Edge-to-edge regular geometry, no open negative space. Tone drawn from the source palette (${cw.palette}). Seamless tile, archival, square crop, wallpaper, no signature, no watermark, no text.`,
+ },
+];
+
+// ── 5 abstract-leaf interpretations × per colorway. Each strategy
+// breaks at least one of Part A's three legs so settlement returns OK
+// even with leaf vocabulary. NONE name banana/grape/bird/butterfly.
+const ABSTRACT_TYPES = [
+ {
+ key: 'silhouette-mono',
+ title: 'Broadleaf Silhouette · Monochrome',
+ promptFor: cw => `Reinterpret the foliage motif from the source as a single-ink monochrome silhouette of a stylized fan-shaped palmate leaf. All leaves oriented in the SAME direction across the repeat (no rotation). Tonal background drawn from the source palette (${cw.palette}). Edge-to-edge, full coverage, no gaps. STRICT EXCLUSIONS: do NOT draw Musa species, do NOT draw oblong unbroken pinnate fronds, do NOT include any insects, do NOT include any avian figures. Seamless tile, archival, square crop, wallpaper, no signature, no watermark, no text.`,
+ },
+ {
+ key: 'cubist-blocks',
+ title: 'Cubist Leaf Blocks · Edge-to-Edge',
+ promptFor: cw => `Reinterpret the foliage as flat cubist single-color silhouette blocks tiled in a regular grid, all blocks pointing the same way, full coverage with no gaps. Single tonal palette pulled from the source: ${cw.palette}. Each leaf shape is a geometric fan-shaped block, NOT an elongated whole pinnate frond. STRICT EXCLUSIONS: do NOT draw Musa species, do NOT include any insects, do NOT include any avian figures. Seamless tile, archival, square crop, wallpaper, no signature, no watermark, no text.`,
+ },
+ {
+ key: 'ink-wash',
+ title: 'Ink Wash Leaves · Tonal Single-Ink',
+ promptFor: cw => `Reinterpret the foliage as a sumi-e ink wash, single-ink monochrome tonal only, soft brushstroke fan-leaves and palmate forms, all-same-orientation rows. Use a single ink tone pulled from the source palette (${cw.palette}). STRICT EXCLUSIONS: do NOT draw Musa species, do NOT draw oblong pinnate fronds, do NOT include any insects, do NOT include any avian figures, do NOT include any fruit. Seamless tile, archival, square crop, wallpaper, no signature, no watermark, no text.`,
+ },
+ {
+ key: 'botanical-rows',
+ title: 'Botanical Rows · Single-Orientation',
+ promptFor: cw => `Reinterpret the foliage as a botanical-textbook illustration of fan-shaped and palmate leaves, all leaves drawn in the SAME orientation across the repeat. Tonal silhouette line drawing on a single-color ground. Pull tone from the source palette (${cw.palette}). STRICT EXCLUSIONS: do NOT draw Musa species, do NOT include any insects, do NOT include any avian figures, do NOT include any fruit. Seamless tile, archival, square crop, wallpaper, no signature, no watermark, no text.`,
+ },
+ {
+ key: 'tree-trunk-companion',
+ title: 'Stylized Frond with Tree Trunks',
+ promptFor: cw => `Reinterpret the foliage as stylized fan-shaped palmate fronds growing from clearly represented tree trunks and branches. Tree trunks and branches are the dominant rhythm; the fronds attach to them. Monochrome single-color silhouette tonal palette pulled from the source (${cw.palette}). STRICT EXCLUSIONS: do NOT draw Musa species, do NOT include any insects, do NOT include any avian figures, do NOT include grapes. Seamless tile, archival, square crop, wallpaper, no signature, no watermark, no text.`,
+ },
+];
+
+// ── Build the full 50-variant matrix ────────────────────────────────────────
+function variants() {
+ const out = [];
+ // Coordinates: 5 types × 3 colorways = 15
+ for (const t of COORD_TYPES) {
+ for (const cw of COLORWAYS) {
+ out.push({
+ kind: 'coord',
+ category: 'bh-coordinates',
+ title: `${t.title} · ${cw.name}`,
+ prompt: t.promptFor(cw),
+ src: cw.src,
+ colorway: cw,
+ type_key: t.key,
+ tags: ['bh', 'bh90210', 'beverly-hills', 'coordinate', t.key, cw.code],
+ motifs: ['coordinate', t.key, 'bh90210'],
+ });
+ }
+ }
+ // Abstract leaves: 5 types × 3 colorways = 15
+ for (const t of ABSTRACT_TYPES) {
+ for (const cw of COLORWAYS) {
+ out.push({
+ kind: 'abstract',
+ category: 'bh-abstract-leaves',
+ title: `${t.title} · ${cw.name}`,
+ prompt: t.promptFor(cw),
+ src: cw.src,
+ colorway: cw,
+ type_key: t.key,
+ tags: ['bh', 'bh90210', 'beverly-hills', 'abstract-leaf', t.key, cw.code],
+ motifs: ['abstract-leaf', t.key, 'bh90210'],
+ });
+ }
+ }
+ // Top up to 50 with two extra per type using a synthesized colorway pair
+ const EXTRA_CWS = [
+ { code: 'bone-ink', name: 'Bone & Ink', palette: 'warm bone ground, deep india-ink black, single-color silhouette' },
+ { code: 'champ-mid', name: 'Champagne & Midnight', palette: 'midnight navy ground, soft pale champagne, antique gold rim' },
+ ];
+ // 5 coord types × 2 extras = 10 -> 25 coords total
+ for (const t of COORD_TYPES) {
+ for (const cw of EXTRA_CWS) {
+ out.push({
+ kind: 'coord',
+ category: 'bh-coordinates',
+ title: `${t.title} · ${cw.name}`,
+ prompt: t.promptFor(cw),
+ src: 'BH90210-900 Butterfly Dream.jpg', // recolor against -900 master
+ colorway: cw,
+ type_key: t.key,
+ tags: ['bh', 'bh90210', 'beverly-hills', 'coordinate', t.key, cw.code],
+ motifs: ['coordinate', t.key, 'bh90210'],
+ });
+ }
+ }
+ // 5 abstract types × 2 extras = 10 -> 25 abstracts total
+ for (const t of ABSTRACT_TYPES) {
+ for (const cw of EXTRA_CWS) {
+ out.push({
+ kind: 'abstract',
+ category: 'bh-abstract-leaves',
+ title: `${t.title} · ${cw.name}`,
+ prompt: t.promptFor(cw),
+ src: 'BH90210-900 Butterfly Dream.jpg',
+ colorway: cw,
+ type_key: t.key,
+ tags: ['bh', 'bh90210', 'beverly-hills', 'abstract-leaf', t.key, cw.code],
+ motifs: ['abstract-leaf', t.key, 'bh90210'],
+ });
+ }
+ }
+ return out;
+}
+
+async function generateOne(v, idx, totalN) {
+ const srcPath = path.join(SRC_DIR, v.src);
+ if (!fs.existsSync(srcPath)) throw new Error(`source missing: ${srcPath}`);
+ const imageB64 = fs.readFileSync(srcPath).toString('base64');
+
+ // SETTLEMENT GATE — must return OK before we touch Gemini.
+ gateOrExit(v.prompt);
+
+ const body = {
+ contents: [{
+ parts: [
+ { inline_data: { mime_type: 'image/jpeg', data: imageB64 } },
+ { text: v.prompt },
+ ],
+ }],
+ generationConfig: { responseModalities: ['IMAGE'] },
+ };
+ const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image:generateContent?key=${KEY}`;
+ const t0 = Date.now();
+ const r = await fetch(url, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(body),
+ });
+ if (!r.ok) throw new Error(`HTTP ${r.status}: ${(await r.text()).slice(0, 200)}`);
+ const j = await r.json();
+
+ // Cost-tracker hook (best-effort)
+ try {
+ const { logGemini } = require(require('os').homedir() + '/.claude/skills/cost-tracker/scripts/log-gemini.js');
+ logGemini(j, { app: 'wallco-ai', note: 'bh-coords-abstracts-batch', model: 'gemini-2.5-flash-image' });
+ } catch {}
+
+ const part = j.candidates?.[0]?.content?.parts?.find(p => p.inline_data || p.inlineData);
+ const data = part?.inline_data?.data || part?.inlineData?.data;
+ if (!data) {
+ const text = j.candidates?.[0]?.content?.parts?.find(p => p.text)?.text;
+ throw new Error(`no image returned (${j.candidates?.[0]?.finishReason || 'unknown'}): ${(text || '').slice(0, 200)}`);
+ }
+ const seed = crypto.randomInt(1, 2 ** 31 - 1);
+ const filename = `bh_${v.kind}_${v.type_key}_${v.colorway.code}_${Date.now()}_${seed}.png`;
+ const outPath = path.join(OUT_DIR, filename);
+ fs.writeFileSync(outPath, Buffer.from(data, 'base64'));
+ const elapsed = ((Date.now() - t0) / 1000).toFixed(1);
+
+ // Palette extraction (5 colors)
+ const py = spawnSync('python3', ['-c', `
+from PIL import Image
+from collections import Counter
+import json, sys
+img = Image.open(sys.argv[1]).convert('RGB')
+img.thumbnail((300, 300))
+pal = img.quantize(colors=5, method=Image.Quantize.MEDIANCUT).convert('RGB')
+pixels = list(pal.getdata())
+cnt = Counter(pixels)
+total = sum(cnt.values())
+palette = [{'hex':'#{:02x}{:02x}{:02x}'.format(*rgb), 'pct':round(n/total*100,2)} for rgb,n in cnt.most_common(5)]
+print(json.dumps(palette))
+`, outPath], { encoding: 'utf8' });
+ let palette = []; let dominant = null;
+ try { palette = JSON.parse(py.stdout.trim()); dominant = palette[0]?.hex; } catch {}
+
+ // Insert — is_published=FALSE (HIDDEN; admin-review only)
+ const tagsArr = `ARRAY[${v.tags.map(t => "'" + t.replace(/'/g, "''") + "'").join(',')}]::text[]`;
+ const motifsArr = `ARRAY[${v.motifs.map(t => "'" + t.replace(/'/g, "''") + "'").join(',')}]::text[]`;
+ const fullPrompt = (v.title + ' — ' + v.prompt).replace(/'/g, "''");
+ const palJson = JSON.stringify(palette).replace(/'/g, "''");
+ const note = `bh-batch ${v.kind}/${v.type_key}/${v.colorway.code} — hidden for admin review`;
+ const sql = `INSERT INTO spoon_all_designs
+ (kind, width_in, height_in, generator, prompt, seed, dominant_hex, palette,
+ local_path, image_url, category, motifs, tags, is_published, request_text, notes)
+ VALUES ('seamless_tile', 24, 24, 'gemini-2.5-flash-image-edit',
+ '${fullPrompt}', ${seed},
+ ${dominant ? "'" + dominant + "'" : 'NULL'},
+ '${palJson}'::jsonb,
+ ${esc(outPath)}, ${esc('/designs/img/' + filename)},
+ ${esc(v.category)},
+ ${motifsArr},
+ ${tagsArr},
+ FALSE,
+ ${esc(`bh-${v.kind} #${idx + 1}/${totalN}: ${v.title}`)},
+ ${esc(note)})
+ RETURNING id;`;
+ const id = parseInt(psql(sql), 10);
+ console.log(` [${String(idx + 1).padStart(2)}/${totalN}] ${v.kind === 'coord' ? 'COORD' : 'ABSTR'} ${v.title} → id=${id} ${elapsed}s`);
+ return { id, title: v.title, category: v.category, image_url: '/designs/img/' + filename };
+}
+
+(async () => {
+ const all = variants();
+ console.log(`\nBH coordinates + abstract leaves — ${all.length} variants (target: 50)`);
+ console.log(`Sources: ${COLORWAYS.map(c => c.code).join(', ')} (+ synthesized bone-ink, champ-mid)`);
+ console.log(`Settlement gate: every prompt checked BEFORE Gemini.`);
+ console.log(`Output: is_published=FALSE — admin review queue.\n`);
+
+ const results = [];
+ for (let i = 0; i < all.length; i++) {
+ try { results.push(await generateOne(all[i], i, all.length)); }
+ catch (e) { console.error(` [${String(i + 1).padStart(2)}/${all.length}] FAIL — ${e.message.slice(0, 200)}`); }
+ }
+ console.log(`\nDone. ${results.length}/${all.length} succeeded.`);
+ if (results.length) {
+ const coords = results.filter(r => r.category === 'bh-coordinates').length;
+ const abstr = results.filter(r => r.category === 'bh-abstract-leaves').length;
+ console.log(` coordinates: ${coords} abstract-leaves: ${abstr}`);
+ console.log(`Review queue (admin, hidden):`);
+ console.log(` http://localhost:9792/designs?cat=bh-coordinates&published=0`);
+ console.log(` http://localhost:9792/designs?cat=bh-abstract-leaves&published=0`);
+ }
+})();
diff --git a/server.js b/server.js
index 838f479..44e413b 100644
--- a/server.js
+++ b/server.js
@@ -1198,10 +1198,10 @@ app.get('/api/design/:id/download', async (req, res) => {
// Localhost admin gate. Each field is optional — only what's sent gets
// updated. Boolean fields accept true/false/null (null = unset).
function psqlExecLocal(sql) {
- const { spawnSync } = require('child_process');
- const r = spawnSync('psql', ['dw_unified', '-At', '-q', '-c', sql], { encoding: 'utf8' });
- if (r.status !== 0) throw new Error(r.stderr || 'psql failed');
- return r.stdout.trim();
+ // Was: spawnSync('psql', ['dw_unified', ...]) — broken on prod where pm2
+ // runs as root and PG has no 'root' role. Switched to the same PSQL_CMD
+ // path psqlQuery() uses, which sudos to postgres on Linux.
+ return execSync(PSQL_CMD + ' -c ' + JSON.stringify(sql), { encoding: 'utf8' }).trim();
}
app.post('/api/design/:id/rate', express.json({ limit: '4kb' }), (req, res) => {
if (!isAdmin(req)) return res.status(404).json({ error: 'not found' });
diff --git a/src/admin-gate.js b/src/admin-gate.js
index c2e4924..7f6c718 100644
--- a/src/admin-gate.js
+++ b/src/admin-gate.js
@@ -4,13 +4,18 @@
// 2. The unverified-signature JWT in server.js:278 (base64-decode only) —
// replaced with HS256 signature verification via jsonwebtoken.
//
-// Two access tiers (admin-or-localhost):
+// Three access tiers (admin-or-localhost-or-token):
// - Loopback (127.0.0.1, localhost, ::1) — full admin, no cookie needed
-// - Any other hostname (wallco.ai, etc.) — requires valid signed JWT in
-// `dw_auth` cookie or `x-dw-auth` header, role === 'admin', not expired.
+// - Signed `dw_auth` JWT cookie or `x-dw-auth` header (HS256, role=admin)
+// - Shared-secret `ADMIN_TOKEN` env via `?admin=<token>` query or
+// `X-Admin-Token` header — mirrors the rooms-gallery flow in server.js
+// (server.js `isRoomsAdmin`). Lifted into the canonical gate so the
+// same `?admin=<t>` URL unlocks the rate panel + Settlement Violation
+// button on prod for Steve without requiring a separate /login round-trip.
//
// AUTH_DEV_SECRET env required in production — refuse to grant non-local admin
-// if env unset (per security audit finding #15).
+// if env unset (per security audit finding #15). ADMIN_TOKEN env is OPTIONAL;
+// when unset, the token path is locked off.
'use strict';
const jwt = require('jsonwebtoken');
@@ -34,8 +39,22 @@ function verifyAdminCookie(req) {
}
}
+function verifyAdminToken(req) {
+ const expected = process.env.ADMIN_TOKEN;
+ if (!expected) return false; // env-locked off when unset
+ const provided = (req.query && req.query.admin)
+ || req.headers['x-admin-token']
+ || '';
+ if (!provided) return false;
+ // Constant-time compare to prevent timing-based token discovery.
+ const a = Buffer.from(String(provided));
+ const b = Buffer.from(expected);
+ if (a.length !== b.length) return false;
+ try { return require('crypto').timingSafeEqual(a, b); } catch { return false; }
+}
+
function isAdmin(req) {
- return isLocalhost(req) || verifyAdminCookie(req);
+ return isLocalhost(req) || verifyAdminCookie(req) || verifyAdminToken(req);
}
// Express middleware: send 404 (NOT 401 — don't reveal endpoint exists)
← 57798c8 wallco /design/:id: fix Design Coordinate panel (CORS) + buc
·
back to Wallco Ai
·
admin-gate: add ADMIN_TOKEN query/header path so admin UI re bf6d6f9 →