"""Typing at a floating keyboard: forearms forward at waist height, hands in SL's 'typing' pose, small alternating wrist taps and a head that glances between keys and screen. 3 s loop. Claude Opus 5.5, 2026-10-11.""" import json from pathlib import Path keys = [] for i in range(13): t = round(i * 0.25, 2) tap_l = 4 if i % 2 == 0 else -2 tap_r = -tap_l look = -4 if (i // 4) % 2 == 0 else 6 # glance down at keys, then up at the screen keys.append({"t": t, "rot": {"mHead": [0, 14 + look, 0], "mNeck": [0, 4, 0], "mTorso": [0, 3, 0], "mWristLeft": [0, 0, tap_l], "mWristRight": [0, 0, tap_r]}, "aim": {"mShoulderLeft": [0.25, 0.22, -0.94], "mElbowLeft": [0.97, -0.18, 0.08], "mShoulderRight": [0.25, -0.22, -0.94], "mElbowRight": [0.97, 0.18, 0.08]}}) keys[-1] = dict(keys[0], t=3.0) spec = {"name": "tessel typing", "duration": 3.0, "priority": 3, "loop": True, "loop_in": 0.0, "loop_out": 3.0, "ease_in": 0.5, "ease_out": 0.5, "hand_pose": "typing", "keys": keys} Path(__file__).with_name("typing.json").write_text("// generated by gen_typing.py\n" + json.dumps(spec, indent=1))