← back to Wild Wallcoverings
print pipeline (upscale+resnap proven 3600x3750@150dpi), tileability scan all 150, viewer badges (tile + borderline)
2afea534882cf041c9dd8d6405c49c99278393e2 · 2026-07-22 17:07:04 -0700 · Steve Abrams
Files touched
M data/designs.jsonA output/print/astral-tiger-v1-nano.pngM public/index.htmlA scripts/upscale.py
Diff
commit 2afea534882cf041c9dd8d6405c49c99278393e2
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Jul 22 17:07:04 2026 -0700
print pipeline (upscale+resnap proven 3600x3750@150dpi), tileability scan all 150, viewer badges (tile + borderline)
---
data/designs.json | 606 +++++++++++++++++++++++++++++++++-
output/print/astral-tiger-v1-nano.png | Bin 0 -> 982931 bytes
public/index.html | 2 +
scripts/upscale.py | 50 +++
4 files changed, 656 insertions(+), 2 deletions(-)
diff --git a/data/designs.json b/data/designs.json
index 7ae49ae..cbe6789 100644
--- a/data/designs.json
+++ b/data/designs.json
@@ -19,6 +19,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -33,6 +37,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -47,6 +55,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -61,6 +73,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -75,6 +91,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -89,6 +109,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -118,6 +142,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -132,6 +160,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -146,6 +178,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -160,6 +196,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -174,6 +214,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -188,6 +232,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -217,6 +265,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -231,6 +283,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -245,6 +301,10 @@
"b_prohibited": false,
"b_matched": "empty",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -259,6 +319,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -273,6 +337,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -287,6 +355,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
}
],
@@ -316,6 +388,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -330,6 +406,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -344,6 +424,10 @@
"b_prohibited": false,
"b_matched": "empty",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -358,6 +442,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -372,6 +460,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -386,6 +478,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -415,6 +511,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -429,6 +529,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -443,6 +547,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -457,6 +565,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -471,6 +583,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -485,6 +601,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -514,6 +634,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -528,6 +652,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -542,6 +670,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -556,6 +688,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -570,6 +706,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -584,6 +724,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
}
],
@@ -613,6 +757,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -627,6 +775,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -641,6 +793,10 @@
"b_prohibited": false,
"b_matched": "empty",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -655,6 +811,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -669,6 +829,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -683,6 +847,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
}
],
@@ -712,6 +880,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -726,6 +898,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -740,6 +916,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -754,6 +934,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -768,6 +952,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -782,6 +970,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
}
],
@@ -811,6 +1003,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -825,6 +1021,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -839,6 +1039,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -853,6 +1057,10 @@
"b_prohibited": false,
"b_matched": "empty",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -867,6 +1075,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -881,6 +1093,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -910,6 +1126,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -924,6 +1144,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -938,6 +1162,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -952,6 +1180,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -966,6 +1198,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -980,6 +1216,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -1009,6 +1249,10 @@
"b_prohibited": false,
"b_matched": "empty",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1023,6 +1267,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -1037,6 +1285,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1051,6 +1303,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1065,6 +1321,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1079,7 +1339,12 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
- }
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
+ },
+ "borderline": true
}
],
"reference": {
@@ -1108,6 +1373,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1122,6 +1391,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -1136,6 +1409,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1150,7 +1427,12 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
- }
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
+ },
+ "borderline": true
},
{
"file": "painted-feathers-v3-sdxl.png",
@@ -1164,6 +1446,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1178,6 +1464,10 @@
"b_prohibited": false,
"b_matched": "empty",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -1207,6 +1497,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1221,6 +1515,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1235,6 +1533,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1249,6 +1551,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1263,6 +1569,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1277,6 +1587,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
}
],
@@ -1306,6 +1620,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1320,6 +1638,10 @@
"b_prohibited": false,
"b_matched": "empty",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1334,6 +1656,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1348,6 +1674,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1362,6 +1692,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1376,6 +1710,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -1405,6 +1743,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1419,6 +1761,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -1433,6 +1779,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1447,6 +1797,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1461,6 +1815,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1475,6 +1833,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
}
],
@@ -1504,6 +1866,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1518,6 +1884,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1532,6 +1902,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -1546,6 +1920,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1560,6 +1938,10 @@
"b_prohibited": false,
"b_matched": "empty",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1574,6 +1956,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -1603,6 +1989,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1617,6 +2007,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1631,6 +2025,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1645,6 +2043,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1659,6 +2061,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1673,6 +2079,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -1702,6 +2112,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1716,6 +2130,10 @@
"b_prohibited": false,
"b_matched": "empty",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -1730,6 +2148,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -1744,6 +2166,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -1758,6 +2184,10 @@
"b_prohibited": false,
"b_matched": "empty",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -1772,6 +2202,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
}
],
@@ -1801,6 +2235,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1815,6 +2253,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -1829,6 +2271,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1843,6 +2289,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1857,6 +2307,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1871,6 +2325,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -1900,6 +2358,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1914,6 +2376,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1928,6 +2394,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -1942,6 +2412,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1956,6 +2430,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -1970,6 +2448,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -1999,6 +2481,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -2013,6 +2499,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -2027,6 +2517,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -2041,6 +2535,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -2055,6 +2553,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -2069,6 +2571,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -2098,6 +2604,10 @@
"b_prohibited": false,
"b_matched": "empty",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -2112,6 +2622,10 @@
"b_prohibited": false,
"b_matched": "empty",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -2126,6 +2640,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -2140,6 +2658,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -2154,6 +2676,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -2168,6 +2694,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
}
],
@@ -2197,6 +2727,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -2211,6 +2745,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -2225,6 +2763,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -2239,6 +2781,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -2253,6 +2799,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -2267,6 +2817,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -2296,6 +2850,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "PASS",
+ "max": null
}
},
{
@@ -2310,6 +2868,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -2324,6 +2886,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -2338,6 +2904,10 @@
"b_prohibited": false,
"b_matched": "empty",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -2352,6 +2922,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -2366,6 +2940,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
@@ -2395,6 +2973,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -2409,6 +2991,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -2423,6 +3009,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -2437,6 +3027,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": true
+ },
+ "tile": {
+ "verdict": "WARN",
+ "max": null
}
},
{
@@ -2451,6 +3045,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
},
{
@@ -2465,6 +3063,10 @@
"b_prohibited": false,
"b_matched": "",
"acceptable": false
+ },
+ "tile": {
+ "verdict": "FAIL",
+ "max": null
}
}
],
diff --git a/output/print/astral-tiger-v1-nano.png b/output/print/astral-tiger-v1-nano.png
new file mode 100644
index 0000000..2ba3815
Binary files /dev/null and b/output/print/astral-tiger-v1-nano.png differ
diff --git a/public/index.html b/public/index.html
index 3416a69..d88a33e 100644
--- a/public/index.html
+++ b/public/index.html
@@ -130,6 +130,8 @@ function render() {
<span class="badge ${v.engine === 'nano-banana' ? 'nano' : 'local'}">
${v.engine === 'nano-banana' ? '🍌 nano banana' : '🖥 local SDXL'}</span>
<span class="when" title="${v.created_at}">🕓 ${fmtDate(v.created_at)}</span>
+ ${v.tile ? `<span class="badge" style="background:${v.tile.verdict==='PASS'?'#14301b;color:#6c6':v.tile.verdict==='WARN'?'#33290f;color:#e0b34d':'#331414;color:#e06c6c'}">tile: ${v.tile.verdict}</span>` : ''}
+ ${v.borderline ? '<span class="badge" style="background:#3a2510;color:#f0a050">⚠ settlement REVIEW</span>' : ''}
<button class="choose" onclick="choose('${d.id}','${v.file}')">
${chosenFile === v.file ? '✓ CHOSEN — will go live' : 'Choose this version'}</button>
</div>
diff --git a/scripts/upscale.py b/scripts/upscale.py
new file mode 100644
index 0000000..7763396
--- /dev/null
+++ b/scripts/upscale.py
@@ -0,0 +1,50 @@
+#!/usr/bin/env python3
+"""Upscale a variant to print-ready 24"x25" @150 DPI (3600x3750) and re-snap
+to the design's exact palette so interpolation can't reintroduce off-palette
+colors. $0 local (Lanczos + palette quantize — ideal for flat screen-print art).
+
+Usage: upscale.py <variant-file-or-'--chosen'>
+ --chosen: upscale every design's chosen variant from data/choices.json
+Outputs land in output/print/<file> at 3600x3750 with DPI metadata.
+"""
+import json, os, sys
+from PIL import Image
+
+ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+OUT = os.path.join(ROOT, "output", "print")
+TARGET = (3600, 3750) # 24" x 25" @ 150 DPI
+
+def palettes():
+ briefs = json.load(open(os.path.join(ROOT, "data", "briefs.json")))
+ return {b["id"]: [tuple(int(h[i:i+2], 16) for i in (1, 3, 5))
+ for h in b.get("palette", [])] for b in briefs}
+
+def upscale(fname, pals):
+ src = os.path.join(ROOT, "output", "designs", fname)
+ did = fname.rsplit("-v", 1)[0]
+ im = Image.open(src).convert("RGB").resize(TARGET, Image.LANCZOS)
+ colors = pals.get(did)
+ if colors:
+ pal_img = Image.new("P", (1, 1))
+ flat = [c for rgb in colors for c in rgb]
+ pal_img.putpalette(flat + flat[:3] * (256 - len(colors)))
+ im = im.quantize(palette=pal_img, dither=Image.NONE).convert("RGB")
+ os.makedirs(OUT, exist_ok=True)
+ dst = os.path.join(OUT, fname)
+ im.save(dst, dpi=(150, 150))
+ print(f"print-ready: {dst} {im.size} @150dpi")
+
+def main():
+ pals = palettes()
+ if sys.argv[1] == "--chosen":
+ choices = json.load(open(os.path.join(ROOT, "data", "choices.json")))
+ n = 0
+ for did, c in choices.items():
+ if c.get("variant") and c["variant"] != "none":
+ upscale(c["variant"], pals); n += 1
+ print(f"{n} chosen variants upscaled ($0 local)")
+ else:
+ upscale(sys.argv[1], pals)
+
+if __name__ == "__main__":
+ main()
← bfd8839 auto-save: 2026-07-22T15:45:17 (11 files) — data/designs.jso
·
back to Wild Wallcoverings
·
seamless-focused v7 round: 19/25 designs now have a tile-PAS 1242dfa →