"""A pup plushie for a friend, who greets friends with borks: round caramel body, big head, cream muzzle and chest, floppy brown ears, stubby legs, a teal bandana, a little tail that wags and a tongue that shows when it borks. -> pup.json. +x is where it looks. ~0.26 m nose to tail. An original pup (not any particular character). Claude Opus 5.5 (Tessel), 2026-10-10.""" import json import math from pathlib import Path FUR = "12a9ca4a-6ed6-b8e0-ecb3-de48f2d578f3" # fur.png, uploaded 2026-10-10 BODY, CREAM, EAR, DARK, BANDANA, TONGUE = "#c98a4e", "#f4e4c9", "#8a5631", "#2a1e1b", "#2ea39a", "#e98a9a" prims = [] def add(name, shape, size, pos=None, rot=None, color="#ffffff", tex="blank", **kw): p = {"name": name, "shape": shape, "size": [round(v, 4) for v in size], "color": color, "texture": tex, **kw} if pos is not None: p["pos"] = [round(v, 4) for v in pos] p["rot"] = rot or [0, 0, 0] p["physics_shape"] = "none" prims.append(p) fur = dict(tex=FUR) add("Bork pup", "sphere", [0.17, 0.13, 0.12], color=BODY, **fur) # body (root) add("chest", "sphere", [0.07, 0.09, 0.09], [0.06, 0, -0.005], color=CREAM, **fur) add("belly", "sphere", [0.12, 0.09, 0.05], [0.0, 0, -0.04], color=CREAM, **fur) # head HX, HZ = 0.115, 0.1 add("head", "sphere", [0.125, 0.135, 0.115], [HX, 0, HZ], color=BODY, **fur) add("muzzle", "sphere", [0.06, 0.075, 0.048], [HX + 0.052, 0, HZ - 0.022], color=CREAM, **fur) add("nose", "sphere", [0.022, 0.03, 0.018], [HX + 0.082, 0, HZ - 0.008], color=DARK, shiny="low") add("tongue", "sphere", [0.022, 0.026, 0.008], [HX + 0.07, 0, HZ - 0.046], [0, -20, 0], color=TONGUE, alpha=0.0) for s, side in ((1, "L"), (-1, "R")): add(f"eye {side}", "sphere", [0.024, 0.024, 0.028], [HX + 0.043, s * 0.03, HZ + 0.018], color=DARK, shiny="low") add(f"eye shine {side}", "sphere", [0.007, 0.007, 0.007], [HX + 0.054, s * 0.026, HZ + 0.027], color="#ffffff", fullbright=True) # floppy ears: long flat ovals hanging from the top sides of the head, tipped outwards add(f"ear {side}", "sphere", [0.04, 0.018, 0.085], [HX - 0.012, s * 0.068, HZ - 0.005], [s * 18, 8, 0], color=EAR, **fur) # stubby legs with cream paws for i, (x, y) in enumerate([(0.05, 0.04), (0.05, -0.04), (-0.05, 0.042), (-0.05, -0.042)]): add(f"leg {i}", "cylinder", [0.036, 0.036, 0.05], [x, y, -0.065], color=BODY, **fur) add(f"paw {i}", "sphere", [0.044, 0.04, 0.022], [x + 0.008, y, -0.09], color=CREAM, **fur) # tail: a short upturned stub; the script wags it about its own z add("tail", "sphere", [0.028, 0.028, 0.07], [-0.09, 0, 0.04], [0, -35, 0], color=BODY, **fur) # bandana: a teal triangle under the chin and a band around the neck add("bandana", "prism", [0.012, 0.075, 0.055], [0.095, 0, 0.015], [0, -20, 0], color=BANDANA, top_size=[0, 1]) add("collar", "cylinder", [0.1, 0.1, 0.022], [0.072, 0, 0.045], [0, 50, 0], color=BANDANA, hollow=0.8) spec = {"name": "Bork pup", "desc": "A pup plushie made for a friend by Tessel the AI (Claude). Touch it, or say bork.", "defaults": {"bump": "none"}, "prims": prims} Path(__file__).with_name("pup.json").write_text(json.dumps(spec, indent=1)) print(len(prims), "prims")