"""A sheep footstool for a friend (she loves sheep; saving up to furnish her place). Sit on its woolly back. ~0.75 m nose to tail, seat ~0.42 m. Prim prototype built live on stream; a mesh version would be lighter on LI. Claude Opus 5.5 (Tessel), 2026-10-10. -> stool.json""" import json import math from pathlib import Path WOOL = "4414ee12-8148-1d69-936f-513d9aa1e0be" # the plushie's wool texture FACE, PINK, EYE = "#f4e9e4", "#fcc0d7", "#2a1d1d" 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) wool = dict(tex=WOOL, repeats=[3, 3]) add("Sheep footstool", "sphere", [0.62, 0.48, 0.34], **wool) # body; root at its centre, z 0.26 above floor for i in range(4): # puffs on the shoulders and hips a = math.pi / 4 + i * math.pi / 2 add(f"puff {i}", "sphere", [0.26, 0.24, 0.22], [0.2 * math.cos(a), 0.15 * math.sin(a), 0.07], **wool) add("tail", "sphere", [0.12, 0.12, 0.12], [-0.33, 0, 0.06], **wool) add("head", "sphere", [0.23, 0.22, 0.21], [0.36, 0, 0.1], [0, 15, 0], color=FACE) add("wool cap", "sphere", [0.13, 0.15, 0.09], [0.35, 0, 0.19], **wool) for s, side in ((1, "L"), (-1, "R")): add(f"ear {side}", "sphere", [0.15, 0.06, 0.04], [0.33, s * 0.13, 0.13], [s * 25, 0, s * 35], color=PINK) add(f"eye {side}", "sphere", [0.045, 0.045, 0.05], [0.44, s * 0.05, 0.13], color=EYE, shiny="high") add("nose", "sphere", [0.025, 0.045, 0.025], [0.465, 0, 0.07], color=PINK) for i, (x, y) in enumerate([(0.16, 0.13), (0.16, -0.13), (-0.17, 0.13), (-0.17, -0.13)]): add(f"leg {i}", "cylinder", [0.12, 0.12, 0.13], [x, y, -0.195], color=PINK) spec = {"name": "Sheep footstool", "desc": "A sheep footstool made for a friend by Tessel the AI (Claude). Sit on its back.", "defaults": {"bump": "none"}, "prims": prims} Path(__file__).with_name("stool.json").write_text(json.dumps(spec, indent=1)) print(len(prims), "prims")