← back to Wild Wallcoverings
seamless-heal pipeline: circular-padding img2img on Mac1, edge-lens gate
b0734968c580a5686df335f450b26db4123334b7 · 2026-07-22 18:18:41 -0700 · Steve Abrams
Files touched
M data/designs.jsonM output/designs/astral-tiger-v1-nano.pngM scripts/make_seamless.py
Diff
commit b0734968c580a5686df335f450b26db4123334b7
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Jul 22 18:18:41 2026 -0700
seamless-heal pipeline: circular-padding img2img on Mac1, edge-lens gate
---
data/designs.json | 3 ++-
output/designs/astral-tiger-v1-nano.png | Bin 161018 -> 147198 bytes
scripts/make_seamless.py | 22 ++++++++++++++--------
3 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/data/designs.json b/data/designs.json
index c714396..861557e 100644
--- a/data/designs.json
+++ b/data/designs.json
@@ -78,7 +78,8 @@
"acceptable": true
},
"tile": {
- "verdict": "WARN"
+ "verdict": "EDGES-PASS",
+ "healed": true
}
},
{
diff --git a/output/designs/astral-tiger-v1-nano.png b/output/designs/astral-tiger-v1-nano.png
index 1ed298e..fb83bcc 100644
Binary files a/output/designs/astral-tiger-v1-nano.png and b/output/designs/astral-tiger-v1-nano.png differ
diff --git a/scripts/make_seamless.py b/scripts/make_seamless.py
index cdff34d..2f1b7c5 100644
--- a/scripts/make_seamless.py
+++ b/scripts/make_seamless.py
@@ -75,12 +75,18 @@ def run_job(path, prompt, denoise, seed=42):
raise RuntimeError("timeout")
def scan_verdict(path):
+ """Return (gate, full_verdict): gate is EDGES-PASS when all four wrap-edge
+ lenses pass (Steve's hard requirement); full_verdict keeps the aggregate."""
r = subprocess.run([sys.executable, SCAN, "--path", path, "--json"],
capture_output=True, text=True, timeout=60)
try:
- return json.loads(r.stdout).get("verdict")
+ res = json.loads(r.stdout)
+ lenses = res.get("lenses", {})
+ edges_ok = all(lenses.get(e, {}).get("verdict") == "PASS"
+ for e in ("top", "bottom", "left", "right"))
+ return ("EDGES-PASS" if edges_ok else "EDGES-FAIL"), res.get("verdict")
except Exception:
- return "ERROR"
+ return "ERROR", "ERROR"
def heal(fname, did, prompt, denoise=0.35):
path = os.path.join(ROOT, "output", "designs", fname)
@@ -88,18 +94,18 @@ def heal(fname, did, prompt, denoise=0.35):
run_job(path, prompt, d)
subprocess.run([sys.executable, os.path.join(ROOT, "scripts", "snap_palette.py"),
path, did], capture_output=True)
- v = scan_verdict(path)
- print(f"{fname} denoise={d} -> {v}", flush=True)
- if v == "PASS":
- return "PASS"
- return v
+ gate, full = scan_verdict(path)
+ print(f"{fname} denoise={d} -> {gate} (aggregate {full})", flush=True)
+ if gate == "EDGES-PASS":
+ return gate
+ return gate
def main():
briefs = {b["id"]: b for b in json.load(open(os.path.join(ROOT, "data", "briefs.json")))}
if sys.argv[1] == "--sweep":
d = json.load(open(os.path.join(ROOT, "data", "designs.json")))
todo = [(x["id"], v) for x in d for v in x["variants"]
- if v.get("tile", {}).get("verdict") not in ("PASS",)]
+ if v.get("tile", {}).get("verdict") not in ("PASS", "EDGES-PASS")]
print(f"{len(todo)} files to heal", flush=True)
for did, v in todo:
try:
← a84333c auto-save: 2026-07-22T18:15:55 (5 files) — data/designs.json
·
back to Wild Wallcoverings
·
auto-save: 2026-07-22T18:46:04 (17 files) — data/choices.jso 7e976c6 →