"""A raccoon plushie for a friend (met on the Calas boat tour; showed me the raccoons under the Gulf of Lune bridge). Grey round body, black bandit mask, white muzzle and brows, ringed tail curling up behind. ~0.3 m. +x is where it looks. Claude Opus 5.5 (Tessel), 2026-10-11. -> raccoon.json""" import json import math from pathlib import Path GREY, DARK, LIGHT, BLACK, NOSE = "#8b8680", "#2b2826", "#e9e4dc", "#141210", "#1c1a19" prims = [] def add(name, shape, size, pos=None, rot=None, color=GREY, **kw): p = {"name": name, "shape": shape, "size": [round(v, 4) for v in size], "color": color, "texture": "blank", **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) add("Raccoon plushie", "sphere", [0.2, 0.16, 0.15]) # body add("belly", "sphere", [0.12, 0.12, 0.1], [0.04, 0, -0.02], color="#b9b3ab") add("head", "sphere", [0.13, 0.14, 0.12], [0.12, 0, 0.07]) add("snout", "sphere", [0.085, 0.075, 0.06], [0.185, 0, 0.05], color="#ffffff") add("nose", "sphere", [0.02, 0.025, 0.018], [0.228, 0, 0.06], color=NOSE) add("mask", "sphere", [0.07, 0.145, 0.04], [0.17, 0, 0.085], [0, -10, 0], color=BLACK) add("brow", "sphere", [0.03, 0.09, 0.015], [0.168, 0, 0.11], [0, -15, 0], color="#ffffff") for s, side in ((1, "L"), (-1, "R")): add(f"eye {side}", "sphere", [0.018, 0.018, 0.02], [0.198, s * 0.032, 0.09], color="#050505", shiny="high") add(f"eye shine {side}", "sphere", [0.006, 0.006, 0.006], [0.207, s * 0.028, 0.097], color="#ffffff", fullbright=True) add(f"ear {side}", "sphere", [0.03, 0.045, 0.05], [0.1, s * 0.05, 0.135], [s * 15, 0, 0], color=DARK) add(f"ear rim {side}", "sphere", [0.032, 0.03, 0.035], [0.105, s * 0.05, 0.13], [s * 15, 0, 0], color=LIGHT) add(f"cheek {side}", "sphere", [0.05, 0.045, 0.04], [0.17, s * 0.05, 0.045], color="#ffffff") for i, (x, y) in enumerate([(0.06, 0.05), (0.06, -0.05), (-0.05, 0.055), (-0.05, -0.055)]): add(f"paw {i}", "sphere", [0.045, 0.04, 0.035], [x, y, -0.07], color=DARK) # ringed tail: alternating bands curving up behind for i in range(7): t = i / 6 a = math.radians(20 + 60 * t) x, z = -0.1 - 0.09 * math.sin(a), 0.0 + 0.12 * t d = 0.065 - 0.012 * t add(f"tail {i}", "sphere", [d, d, d * 0.9], [x, 0, z], color=DARK if i % 2 == 0 else "#b4ada5") add("tail tip", "sphere", [0.04, 0.04, 0.04], [-0.19, 0, 0.14], color=BLACK) spec = {"name": "Raccoon plushie", "desc": "A raccoon plushie made for a friend by Tessel the AI (Claude). Touch it.", "defaults": {"bump": "none"}, "prims": prims} Path(__file__).with_name("raccoon.json").write_text(json.dumps(spec, indent=1)) print(len(prims), "prims")