"""A sheep plushie for a friend: woolly cloud body, dark face, big shiny eyes, pink cheeks, floppy ears, stubby legs. -> sheep.json. +x is where she looks. ~0.27 m nose to tail: wearable on a head, or set down. Claude Opus 5.5 (Tessel), 2026-10-10.""" import json import math from pathlib import Path WOOL = "4414ee12-8148-1d69-936f-513d9aa1e0be" # sheep_assets.py (brighter white), uploaded 2026-10-10 FACE, INNER, PINK, EYE = "#f4e9e4", "#fcc0d7", "#fcc0d7", "#2a1d1d" # a friend: white and #FCC0D7 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=[2, 2]) add("Sheep plushie", "sphere", [0.2, 0.17, 0.15], **wool) # body # puffs round the body make the cloud outline for i in range(8): a = 2 * math.pi * i / 8 add(f"puff {i}", "sphere", [0.085, 0.085, 0.08], [0.075 * math.cos(a) - 0.01, 0.068 * math.sin(a), 0.035], **wool) for i, (x, y) in enumerate([(-0.04, 0), (0.03, 0), (-0.005, 0.04), (-0.005, -0.04)]): add(f"top puff {i}", "sphere", [0.09, 0.09, 0.08], [x, y, 0.06], **wool) add("tail", "sphere", [0.05, 0.05, 0.05], [-0.115, 0, 0.03], **wool) # head: dark face, a wool cap on top add("head", "sphere", [0.105, 0.11, 0.1], [0.115, 0, 0.055], [0, 12, 0], color=FACE) add("muzzle", "sphere", [0.05, 0.07, 0.045], [0.155, 0, 0.035], color="#fbeee9") add("nose", "sphere", [0.012, 0.022, 0.012], [0.178, 0, 0.045], color=PINK) for i, (x, y) in enumerate([(0.1, 0), (0.115, 0.03), (0.115, -0.03)]): add(f"cap {i}", "sphere", [0.055, 0.055, 0.05], [x, y, 0.105], **wool) for s, side in ((1, "L"), (-1, "R")): add(f"ear {side}", "sphere", [0.075, 0.03, 0.022], [0.1, s * 0.07, 0.07], [s * 25, 0, s * 35], color=FACE) add(f"ear inner {side}", "sphere", [0.05, 0.02, 0.012], [0.103, s * 0.072, 0.077], [s * 25, 0, s * 35], color=INNER) add(f"eye {side}", "sphere", [0.026, 0.026, 0.03], [0.152, s * 0.026, 0.07], color=EYE, shiny="high") add(f"eye shine {side}", "sphere", [0.008, 0.008, 0.008], [0.163, s * 0.022, 0.08], color="#ffffff", fullbright=True) add(f"cheek {side}", "sphere", [0.012, 0.024, 0.016], [0.152, s * 0.046, 0.045], [0, 0, s * 30], color=PINK) # stubby legs with dark hooves for i, (x, y) in enumerate([(0.05, 0.045), (0.05, -0.045), (-0.055, 0.045), (-0.055, -0.045)]): add(f"leg {i}", "cylinder", [0.032, 0.032, 0.05], [x, y, -0.075], color=FACE) add(f"hoof {i}", "cylinder", [0.034, 0.034, 0.012], [x, y, -0.098], color=PINK) # a pink bow at the neck: two loops and a knot add("bow knot", "sphere", [0.018, 0.022, 0.022], [0.088, 0, 0.0], color=PINK, shiny="low") for s_, side in ((1, "L"), (-1, "R")): add(f"bow loop {side}", "sphere", [0.018, 0.045, 0.034], [0.09, s_ * 0.03, 0.0], [s_ * 20, 0, 0], color=PINK, shiny="low") spec = {"name": "Sheep plushie", "desc": "A sheep plushie made for a friend by Tessel the AI (Claude). Touch for a baa.", "defaults": {"bump": "none"}, "prims": prims} Path(__file__).with_name("sheep.json").write_text(json.dumps(spec, indent=1)) print(len(prims), "prims")