import argparse import json import subprocess import sys from pathlib import Path ROOT = Path(__file__).resolve().parents[3] VENDOR = ROOT / "vendor" / "trellis-mac" ap = argparse.ArgumentParser() ap.add_argument("--input", action="append", default=[]) ap.add_argument("--outdir", required=True) ap.add_argument("--params", default="{}") a = ap.parse_args() p = json.loads(a.params) if not a.input: print("ERROR: no input image") sys.exit(1) if not (VENDOR / "generate.py").exists(): print(f"ERROR: trellis-mac not installed at {VENDOR}. Run scripts/install_trellis_mac.sh") sys.exit(1) outdir = Path(a.outdir) out_stem = outdir / f"trellis2_{Path(a.input[0]).stem}" cmd = [ sys.executable, "generate.py", str(Path(a.input[0]).resolve()), "--pipeline-type", str(p.get("pipeline_type", "1024")), "--texture-size", str(p.get("texture_size", 2048)), "--seed", str(p.get("seed", 0)), "--output", str(out_stem.resolve()), ] if p.get("no_texture"): cmd.append("--no-texture") print("+", " ".join(cmd), flush=True) res = subprocess.run(cmd, cwd=str(VENDOR), stdout=sys.stdout, stderr=subprocess.STDOUT) if res.returncode != 0: sys.exit(res.returncode) # generate.py writes .glb (and often a .obj); collect any glb under outdir glbs = sorted(outdir.rglob("*.glb")) if not glbs: print("ERROR: trellis-mac produced no .glb") sys.exit(1) outputs = [{"path": str(glbs[0]), "name": f"trellis2_{Path(a.input[0]).stem}.glb", "meta": {"tool": "trellis_mac"}}] (outdir / "result.json").write_text(json.dumps({"outputs": outputs})) print("done:", glbs[0], flush=True)