Keypoint locations¶
The packaged skeleton, fly38, tracks 38 points: five per leg (thorax-coxa, coxa-trochanter, femur-tibia, tibia-tarsus, pretarsus) for each of the six legs, one per antenna, the neck, and a five-point chain along the dorsal midline of the abdomen. Their names and order are in src/deeperfly/data/skeletons/fly38.toml; where each sits on the NeuroMechFly model is in the binding, src/deeperfly/data/bindings/fly38@neuromechfly.toml.
The viewer below draws those points on NeuroMechFly, colored as the GUI colors them: left legs blue, right legs red, lightening from front to hind, the neck and abdomen green. Drag to orbit, scroll to zoom, and move the joint sliders to see how each point follows the body. Under Pose, Neutral returns to the model's resting pose and Zero sets every joint angle to 0; the View buttons snap the camera to preset angles.
Where each point sits. A leg joint is the joint between two segments, which is a NeuroMechFly body origin, so it sits exactly on the model. The pretarsus is the most distal vertex of the fifth tarsal segment's mesh. Each antenna sits at the pedicel-head joint, and the neck at the thorax-head pivot the head rotates about.
The abdomen is approximate. Its five points sit on the dorsal midline, each directly above an abdominal hinge, at the tergite stripes an annotator clicks. The model has no exact counterpart, so their heights were set by eye against the dorsal crest; the binding marks them approximate, and inverse kinematics reports their residuals apart from the exact points.
The model is rendered with MuJoCo compiled to WebAssembly, entirely in the browser. It is NeuroMechFly v2 from flygym (Apache-2.0). tools/keypoint_viewer.py writes the viewer's keypoint file from the skeleton and the binding; rerun it when either changes.