feat: pool set_mask + route

Write a per-slot grayscale mask sidecar (img_XXXX.mask.png) and record
it on the slot. Add the multipart /grid_pool/set_mask route.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-21 14:01:26 +02:00
parent cd0b8783dc
commit 6feb2c6e63
4 changed files with 48 additions and 0 deletions
+13
View File
@@ -112,6 +112,19 @@ def set_label(base_dir, pool_id, index, label):
return m
def set_mask(base_dir, pool_id, index, mask_bytes):
m = read_manifest(base_dir, pool_id)
if not (0 <= index < len(m["slots"])):
return m
img_name = m["slots"][index]["image"]
mask_name = img_name.replace(".png", ".mask.png")
with open(pool_dir(base_dir, pool_id) / mask_name, "wb") as f:
f.write(mask_bytes)
m["slots"][index]["mask"] = mask_name
write_manifest(base_dir, pool_id, m)
return m
def rebuild_manifest(base_dir, pool_id):
d = pool_dir(base_dir, pool_id)
m = empty_manifest()