feat(profiling): add dance motion profiler + beat-energy profiles for adopted dances

tools/dance_profile.py samples world-space bone positions per frame in
Blender headless and emits a per-beat motion-energy timeline (accents,
phrases, totals) at a given BPM. Profiles generated for war_dance_01,
fertility_dance_01, taming_dance_01.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-21 09:52:06 -07:00
parent 7b44019c9a
commit f468d148bc
4 changed files with 1002 additions and 0 deletions
@@ -0,0 +1,193 @@
{
"name": "fertility_dance_01",
"glb": "exchange/converted-glb/fertility_dance_01.glb",
"duration_s": 30.0,
"fps": 24,
"frames": 720,
"bpm": 100,
"beats": 50,
"energy_per_beat": [
0.0671,
0.1187,
0.066,
0.0813,
0.1161,
0.234,
0.3293,
0.4352,
0.4132,
0.3849,
0.4206,
0.4606,
0.4989,
0.4251,
0.4806,
0.4737,
0.5986,
0.5101,
0.2858,
0.6089,
0.5596,
0.6887,
0.8083,
0.5382,
0.4154,
0.9773,
1.034,
0.5643,
1.1262,
0.4652,
0.4643,
0.9822,
1.2955,
0.6826,
0.9628,
1.3345,
0.9006,
0.5145,
0.6956,
0.6763,
0.3807,
0.4143,
0.4418,
0.489,
0.5304,
0.6733,
0.5457,
0.7964,
0.5111,
0.3799
],
"energy_norm": [
0.0009,
0.0415,
0.0,
0.012,
0.0395,
0.1325,
0.2075,
0.2911,
0.2737,
0.2514,
0.2795,
0.3111,
0.3413,
0.2831,
0.3269,
0.3214,
0.4199,
0.3501,
0.1733,
0.428,
0.3891,
0.4909,
0.5852,
0.3722,
0.2755,
0.7184,
0.7631,
0.3928,
0.8358,
0.3147,
0.314,
0.7223,
0.9693,
0.4861,
0.707,
1.0,
0.6579,
0.3535,
0.4963,
0.4811,
0.248,
0.2745,
0.2962,
0.3335,
0.3661,
0.4788,
0.3782,
0.5758,
0.3509,
0.2475
],
"accent_beats": [
6,
10,
11,
19,
20,
22,
23,
24,
25,
26,
28,
29,
30,
31,
32,
33,
34,
35,
36,
38,
39,
40,
44,
45,
47
],
"pelvis_drop_beats": [
6,
10,
11,
23,
24,
25,
26,
28,
29,
30,
31,
34,
39,
40,
44,
47
],
"hand_peak_beats": [
19,
20,
22,
25,
26,
28,
32,
33,
34,
35,
36,
38,
39,
45,
47
],
"phrase_beats": 3,
"totals": {
"hands_m": 26.653432767023645,
"forearms_m": 21.23157808829689,
"upper_arms_m": 13.863015059740327,
"feet_m": 9.769735456958077,
"shins_m": 13.50568795659558,
"pelvis_m": 10.606148213798214,
"head_m": 11.129225506410268,
"lr_symmetry_hands": 0.9986419895043533,
"lr_symmetry_feet": 0.9833129850891342,
"pelvis_vertical_range_m": 0.41678035259246826,
"footprint_m": [
0.536299467086792,
0.8529399633407593
]
},
"warnings": []
}
@@ -0,0 +1,200 @@
{
"name": "taming_dance_01",
"glb": "exchange/converted-glb/taming_dance_01.glb",
"duration_s": 30.0,
"fps": 24,
"frames": 720,
"bpm": 100,
"beats": 50,
"energy_per_beat": [
0.9916,
0.7155,
0.7886,
1.0957,
2.4134,
1.3599,
1.4711,
0.5712,
0.885,
0.9835,
2.12,
0.73,
0.3254,
0.9716,
1.4584,
0.8395,
0.368,
1.2858,
0.6909,
1.0359,
1.7734,
0.7137,
0.976,
1.7173,
1.3732,
0.6937,
0.444,
0.9441,
0.9548,
0.8954,
1.6452,
0.5804,
0.2176,
0.3835,
0.9297,
0.45,
0.4495,
1.0133,
0.8501,
0.9266,
1.2257,
1.0999,
0.338,
0.7127,
1.1935,
0.3326,
0.7522,
1.4484,
2.0448,
2.5482
],
"energy_norm": [
0.3321,
0.2137,
0.245,
0.3768,
0.9422,
0.4901,
0.5378,
0.1517,
0.2864,
0.3287,
0.8162,
0.2199,
0.0463,
0.3235,
0.5324,
0.2669,
0.0646,
0.4584,
0.2031,
0.3511,
0.6676,
0.2129,
0.3254,
0.6435,
0.4959,
0.2043,
0.0972,
0.3117,
0.3163,
0.2908,
0.6126,
0.1557,
0.0,
0.0712,
0.3055,
0.0998,
0.0995,
0.3414,
0.2714,
0.3042,
0.4326,
0.3786,
0.0517,
0.2124,
0.4187,
0.0494,
0.2294,
0.5281,
0.784,
1.0
],
"accent_beats": [
0,
1,
3,
4,
6,
9,
10,
11,
13,
14,
15,
17,
19,
20,
22,
23,
24,
27,
34,
36,
37,
40,
41,
43,
44,
47,
48,
49
],
"pelvis_drop_beats": [
1,
11,
14,
15,
22,
34,
36,
37,
48,
49
],
"hand_peak_beats": [
0,
1,
3,
4,
6,
9,
10,
13,
15,
17,
19,
20,
22,
23,
24,
27,
34,
37,
40,
41,
43,
44,
47,
48,
49
],
"phrase_beats": 10,
"totals": {
"hands_m": 49.32286386602802,
"forearms_m": 32.85868643786276,
"upper_arms_m": 20.531188024591692,
"feet_m": 18.62118179928407,
"shins_m": 25.7590113640975,
"pelvis_m": 16.053067387300725,
"head_m": 17.234514413654498,
"lr_symmetry_hands": 0.9871641314548004,
"lr_symmetry_feet": 0.8839844668246384,
"pelvis_vertical_range_m": 0.9356732368469238,
"footprint_m": [
1.2194406312191859,
1.6680276617407799
]
},
"warnings": []
}
@@ -0,0 +1,208 @@
{
"name": "war_dance_01",
"glb": "exchange/converted-glb/war_dance_01.glb",
"duration_s": 30.0,
"fps": 24,
"frames": 720,
"bpm": 100,
"beats": 50,
"energy_per_beat": [
0.1161,
0.0602,
0.0763,
0.0628,
0.6339,
0.7965,
0.8297,
0.6782,
0.1496,
0.0932,
0.1334,
0.8858,
0.9878,
0.8822,
0.2595,
0.1081,
0.1336,
0.2622,
0.2088,
0.232,
0.1623,
0.1525,
0.1841,
0.4061,
0.4191,
0.4014,
0.3346,
0.3014,
0.6334,
0.4097,
0.6412,
0.3384,
0.1109,
0.5587,
0.2789,
0.132,
0.588,
0.2621,
0.5738,
0.399,
0.4924,
0.4509,
0.6284,
0.3405,
0.0878,
0.0258,
0.026,
0.0,
0.0,
0.0
],
"energy_norm": [
0.1176,
0.0609,
0.0772,
0.0635,
0.6418,
0.8063,
0.84,
0.6866,
0.1514,
0.0944,
0.1351,
0.8967,
1.0,
0.8931,
0.2627,
0.1094,
0.1352,
0.2654,
0.2114,
0.2348,
0.1643,
0.1544,
0.1863,
0.4111,
0.4242,
0.4064,
0.3387,
0.3051,
0.6413,
0.4147,
0.6491,
0.3426,
0.1122,
0.5656,
0.2823,
0.1336,
0.5952,
0.2654,
0.5809,
0.404,
0.4985,
0.4564,
0.6361,
0.3447,
0.0889,
0.0261,
0.0263,
0.0,
0.0,
0.0
],
"accent_beats": [
4,
5,
6,
7,
11,
12,
13,
17,
20,
22,
23,
25,
26,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
44,
46,
48,
49
],
"pelvis_drop_beats": [
6,
11,
13,
17,
20,
22,
23,
25,
26,
28,
29,
31,
32,
34,
35,
37,
38,
40,
41,
42,
44,
46,
48,
49
],
"hand_peak_beats": [
4,
5,
6,
7,
11,
12,
13,
28,
30,
33,
36,
38,
39,
40,
42
],
"phrase_beats": null,
"totals": {
"hands_m": 21.006407802644276,
"forearms_m": 12.905461711283007,
"upper_arms_m": 6.91306398100012,
"feet_m": 1.521721729225423,
"shins_m": 5.302736997519221,
"pelvis_m": 5.633388137876223,
"head_m": 6.2322590229562564,
"lr_symmetry_hands": 0.9744965493013217,
"lr_symmetry_feet": 0.6518710884905415,
"pelvis_vertical_range_m": 0.19754374027252197,
"footprint_m": [
0.2731027752161026,
0.1643172651529312
]
},
"warnings": []
}