"""Helicopter (a friend's request, 2026-10-11): arms locked straight out in a T, the whole upper body spinning fast about the waist while the legs stay planted. Priority 5 so it beats AOs (her tip). Claude Opus 5.5.""" import json from pathlib import Path N = 12 # 30 deg per key: SL slerps the short way, so steps must stay under 180 TURN = 0.3 # seconds per revolution (a friend's suggestion) REVS = 4 keys = [] for i in range(N * REVS + 1): t = round(TURN * i / N, 4) keys.append({"t": t, "rot": {"mTorso": [0, 0, -360.0 * i / N], "mChest": [0, 0, 0], "mCollarLeft": [0, 0, 0], "mShoulderLeft": [0, 0, 0], "mElbowLeft": [0, 0, 0], "mWristLeft": [0, 0, 0], "mCollarRight": [0, 0, 0], "mShoulderRight": [0, 0, 0], "mElbowRight": [0, 0, 0], "mWristRight": [0, 0, 0], "mHead": [0, 0, 0]}}) dur = keys[-1]["t"] spec = {"name": "helicopter", "duration": dur, "priority": 5, "loop": True, "loop_in": 0.0, "loop_out": dur, "ease_in": 0.4, "ease_out": 0.4, "hand_pose": "spread", "keys": keys} Path(__file__).with_name("helicopter.json").write_text("// generated by gen_helicopter.py\n" + json.dumps(spec, indent=1))