Use the photo-anchored ashlar limestone on the masonic facade
Full build / Import + headless tests (push) Successful in 49s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-03 15:40:25 +01:00
1 parent 05cb6a43cb
commit f95a685934
24 files changed
+111 -10

No files matched your search

+28 -4
View File
@@ -539,9 +539,21 @@ def _fit(img: Image.Image, max_dim: int = MAX_DIM) -> Image.Image:
def generate_ai_textures(prompt: str, name: str, model: str, size: int,
transparent: bool = False) -> None:
"""Generate one texture via OpenRouter and save it under assets/textures/."""
img = generate_image(prompt, model, size, transparent)
transparent: bool = False,
reference_path=None) -> None:
"""Generate one texture via OpenRouter and save it under assets/textures/.
With `reference_path`, the request is image-to-image (licence-cleared
reference photo anchoring value and detail); the returned frame is then
centre-cropped to the requested square so tile wraps stay predictable.
"""
img = generate_image(prompt, model, size, transparent,
reference_path=reference_path)
if reference_path is not None:
side = min(img.size)
left = (img.width - side) // 2
top = (img.height - side) // 2
img = img.crop((left, top, left + side, top + side))
img = _fit(img)
if transparent:
img = img.convert("RGBA")
@@ -556,7 +568,11 @@ def _run_ai(args: argparse.Namespace) -> None:
if args.prompt:
if not args.name:
sys.exit("error: --name is required when --prompt is given")
generate_ai_textures(args.prompt, args.name, args.model, args.size)
if bool(args.reference) != bool(args.reference_licence):
sys.exit("error: --reference and --reference-licence must be given "
"together (the licence note records the sidecar clearance)")
generate_ai_textures(args.prompt, args.name, args.model, args.size,
reference_path=args.reference or None)
return
for name, prompt, transparent in AI_TEXTURES:
print(f"generating {name} ...")
@@ -579,6 +595,14 @@ def _build_arg_parser() -> argparse.ArgumentParser:
parser.add_argument(
"--model", default=DEFAULT_IMAGE_MODEL,
help=f"image model slug (default: {DEFAULT_IMAGE_MODEL})")
parser.add_argument(
"--reference", default="",
help="licence-cleared photo (listed in a refs-board SIDECAR.md) used "
"as an image-to-image anchor; requires --reference-licence")
parser.add_argument(
"--reference-licence", default="",
help="licence label from the photo's sidecar row, recorded in the "
"generation provenance")
parser.add_argument(
"--size", type=int, default=GEN_SIZE,
help=f"square size requested from the API in px (min {GEN_SIZE}); "