[
 {
  "id": "ABAUD_00_agreement_1speechw",
  "emotion": "agreement",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 215,
  "body_frames": 214,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_00_agreement_1speechw"
 },
 {
  "id": "ABAUD_00_agreement_2v4base",
  "emotion": "agreement",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 215,
  "body_frames": 214,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_00_agreement_2v4base"
 },
 {
  "id": "ABAUD_01_anger_1speechw",
  "emotion": "anger",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 190,
  "body_frames": 189,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_01_anger_1speechw"
 },
 {
  "id": "ABAUD_01_anger_2v4base",
  "emotion": "anger",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 190,
  "body_frames": 189,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_01_anger_2v4base"
 },
 {
  "id": "ABAUD_02_apology_1speechw",
  "emotion": "apology",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 316,
  "body_frames": 315,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_02_apology_1speechw"
 },
 {
  "id": "ABAUD_02_apology_2v4base",
  "emotion": "apology",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 316,
  "body_frames": 315,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_02_apology_2v4base"
 },
 {
  "id": "ABAUD_03_crying_1speechw",
  "emotion": "crying",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 237,
  "body_frames": 236,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_03_crying_1speechw"
 },
 {
  "id": "ABAUD_03_crying_2v4base",
  "emotion": "crying",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 237,
  "body_frames": 236,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_03_crying_2v4base"
 },
 {
  "id": "ABAUD_04_excitement_1speechw",
  "emotion": "excitement",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 198,
  "body_frames": 197,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_04_excitement_1speechw"
 },
 {
  "id": "ABAUD_04_excitement_2v4base",
  "emotion": "excitement",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 198,
  "body_frames": 197,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_04_excitement_2v4base"
 },
 {
  "id": "ABAUD_05_fluster_1speechw",
  "emotion": "fluster",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 245,
  "body_frames": 244,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_05_fluster_1speechw"
 },
 {
  "id": "ABAUD_05_fluster_2v4base",
  "emotion": "fluster",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 245,
  "body_frames": 244,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_05_fluster_2v4base"
 },
 {
  "id": "ABAUD_06_gratitude_1speechw",
  "emotion": "gratitude",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 217,
  "body_frames": 216,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_06_gratitude_1speechw"
 },
 {
  "id": "ABAUD_06_gratitude_2v4base",
  "emotion": "gratitude",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 217,
  "body_frames": 216,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_06_gratitude_2v4base"
 },
 {
  "id": "ABAUD_07_joy_1speechw",
  "emotion": "joy",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 216,
  "body_frames": 215,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_07_joy_1speechw"
 },
 {
  "id": "ABAUD_07_joy_2v4base",
  "emotion": "joy",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 216,
  "body_frames": 215,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_07_joy_2v4base"
 },
 {
  "id": "ABAUD_08_laughter_1speechw",
  "emotion": "laughter",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 164,
  "body_frames": 163,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_08_laughter_1speechw"
 },
 {
  "id": "ABAUD_08_laughter_2v4base",
  "emotion": "laughter",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 164,
  "body_frames": 163,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_08_laughter_2v4base"
 },
 {
  "id": "ABAUD_09_neutral_1speechw",
  "emotion": "neutral",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 417,
  "body_frames": 416,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_09_neutral_1speechw"
 },
 {
  "id": "ABAUD_09_neutral_2v4base",
  "emotion": "neutral",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 417,
  "body_frames": 416,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_09_neutral_2v4base"
 },
 {
  "id": "ABAUD_10_refusal_1speechw",
  "emotion": "refusal",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 261,
  "body_frames": 260,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_10_refusal_1speechw"
 },
 {
  "id": "ABAUD_10_refusal_2v4base",
  "emotion": "refusal",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 261,
  "body_frames": 260,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_10_refusal_2v4base"
 },
 {
  "id": "ABAUD_11_sadness_1speechw",
  "emotion": "sadness",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 211,
  "body_frames": 210,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_11_sadness_1speechw"
 },
 {
  "id": "ABAUD_11_sadness_2v4base",
  "emotion": "sadness",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 211,
  "body_frames": 210,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_11_sadness_2v4base"
 },
 {
  "id": "ABAUD_12_shy_1speechw",
  "emotion": "shy",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 238,
  "body_frames": 237,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_12_shy_1speechw"
 },
 {
  "id": "ABAUD_12_shy_2v4base",
  "emotion": "shy",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 238,
  "body_frames": 237,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_12_shy_2v4base"
 },
 {
  "id": "ABAUD_13_struggle_1speechw",
  "emotion": "struggle",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 335,
  "body_frames": 334,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_13_struggle_1speechw"
 },
 {
  "id": "ABAUD_13_struggle_2v4base",
  "emotion": "struggle",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 335,
  "body_frames": 334,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_13_struggle_2v4base"
 },
 {
  "id": "ABAUD_14_sulk_1speechw",
  "emotion": "sulk",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 272,
  "body_frames": 271,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_14_sulk_1speechw"
 },
 {
  "id": "ABAUD_14_sulk_2v4base",
  "emotion": "sulk",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 272,
  "body_frames": 271,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_14_sulk_2v4base"
 },
 {
  "id": "ABAUD_15_surprise_1speechw",
  "emotion": "surprise",
  "variant": "speechw",
  "fps": 30,
  "face_frames": 204,
  "body_frames": 203,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_15_surprise_1speechw"
 },
 {
  "id": "ABAUD_15_surprise_2v4base",
  "emotion": "surprise",
  "variant": "v4base",
  "fps": 30,
  "face_frames": 204,
  "body_frames": 203,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "note": "speech_w(발화가중) vs v4 baseline — 같은 오디오/시드, 바디 추종만 비교. face 중립.",
  "dir": "outputs/turns/ABAUD_15_surprise_2v4base"
 },
 {
  "id": "GT_14_restref_walk_seg053",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 295,
  "body_frames": 294,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "baked_vrma_direct (write_vrma 재조립이 upperChest 드랍으로 자세 파괴 -> 베이크 산출물 직송)",
  "rest_source": "/data/mocap-convertor/datasets/solo_20260722_body_v1/artifacts/templates/kemix.vrma",
  "root_translation": "carried",
  "dataset_id": "solo_20260722_body_v1",
  "dataset_split": "train",
  "source_npz": "/data/mocap-convertor/datasets/solo_20260722_body_v1/processed/npz/train/solo_20260722_174736_seg000053.npz",
  "segment_type": "speech_pause",
  "speech_ratio": 0.5,
  "timing": {
   "face_s": 1.58,
   "body_s": 0.0,
   "total_s": 1.59
  },
  "body_vrma_source": " | 2026-08-03 arm_ref(어깨 중립기준) 재베이크: scratchpad/armref_bake",
  "dir": "outputs/turns/GT_14_restref_walk_seg053"
 },
 {
  "id": "GT_15_restref_seg126",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 181,
  "body_frames": 180,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "baked_vrma_direct (write_vrma 재조립이 upperChest 드랍으로 자세 파괴 -> 베이크 산출물 직송)",
  "rest_source": "/data/mocap-convertor/datasets/solo_20260722_body_v1/artifacts/templates/kemix.vrma",
  "root_translation": "carried",
  "dataset_id": "solo_20260722_body_v1",
  "dataset_split": "test",
  "source_npz": "/data/mocap-convertor/datasets/solo_20260722_body_v1/processed/npz/test/solo_20260722_174736_seg000126.npz",
  "segment_type": "speech",
  "speech_ratio": 0.16666699945926666,
  "timing": {
   "face_s": 1.09,
   "body_s": 0.0,
   "total_s": 1.1
  },
  "body_vrma_source": " | 2026-08-03 arm_ref(어깨 중립기준) 재베이크: scratchpad/armref_bake",
  "dir": "outputs/turns/GT_15_restref_seg126"
 },
 {
  "id": "GT_16_restref_sit_seg041",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 415,
  "body_frames": 414,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "baked_vrma_direct (write_vrma 재조립이 upperChest 드랍으로 자세 파괴 -> 베이크 산출물 직송)",
  "rest_source": "/data/mocap-convertor/datasets/solo_20260722_body_v1/artifacts/templates/kemix.vrma",
  "root_translation": "carried",
  "dataset_id": "solo_20260722_body_v1",
  "dataset_split": "train",
  "source_npz": "/data/mocap-convertor/datasets/solo_20260722_body_v1/processed/npz/train/solo_20260722_174736_seg000041.npz",
  "segment_type": "speech_pause",
  "speech_ratio": 0.5611510276794434,
  "timing": {
   "face_s": 1.15,
   "body_s": 0.0,
   "total_s": 1.17
  },
  "body_vrma_source": " | 2026-08-03 arm_ref(어깨 중립기준) 재베이크: scratchpad/armref_bake",
  "dir": "outputs/turns/GT_16_restref_sit_seg041"
 },
 {
  "id": "GT_17_median_seg123",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 412,
  "body_frames": 411,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "preprocessed_gt_no_codec_no_generator",
  "body_vrma_source": "/data/mocap-convertor/datasets/solo_20260722_body_v1/processed/vrma/test/solo_20260722_174736_seg000123.vrma",
  "root_translation": "carried",
  "dataset_id": "solo_20260722_body_v1",
  "dataset_split": "test",
  "source_npz": "/data/mocap-convertor/datasets/solo_20260722_body_v1/processed/npz/test/solo_20260722_174736_seg000123.npz",
  "segment_type": "speech_pause",
  "speech_ratio": 0.2627739906311035,
  "timing": {
   "face_s": 1.17,
   "body_s": 0.0,
   "total_s": 1.21
  },
  "dir": "outputs/turns/GT_17_median_seg123"
 },
 {
  "id": "CODEC_14_roundtrip_seg053",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 295,
  "body_frames": 294,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "codec_roundtrip_continuous_no_generator",
  "body_writer": "baked_template_channel_rewrite",
  "writer_self_verify_max_component": 1.1920928955078125e-07,
  "body_vrma_template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/processed/vrma/train/solo_20260722_174736_seg000053.vrma",
  "run_id": "solo_body_v1__50b_vel__scratch__r02",
  "decode_mode": "continuous",
  "codec_sha256": {
   "spine": "568311e640f0a20b1997d7d840c0609a488b7581954054f8a3f1a682dd7c7efb",
   "arms": "06389ebf0e4026515d01bdd5b7c1934c037a7aa85548933fedba982e3e9cf6c1",
   "legs": "487f618cb1faae1fd6959fa77326dcec64c5b1f80725d602b5b97c027751d069",
   "fingers": "bdba6af4ec4bfe99002175cafb6063f5003ebc2bec65bb2783e6d06a91edaa07"
  },
  "compare_with": "GT_14_restref_walk_seg053",
  "clip_angle_error_deg": {
   "spine": {
    "mean_angle_deg": 1.1530715227127075,
    "p95_angle_deg": 3.8710174560546875
   },
   "arms": {
    "mean_angle_deg": 3.7346034049987793,
    "p95_angle_deg": 9.77206039428711
   },
   "legs": {
    "mean_angle_deg": 1.9167767763137817,
    "p95_angle_deg": 4.243434906005859
   },
   "fingers": {
    "mean_angle_deg": 1.9912623167037964,
    "p95_angle_deg": 5.414984703063965
   }
  },
  "root_translation": "codec velocity, integrated from the GT first frame",
  "translation_drift_cm": 13.49,
  "dataset_id": "solo_20260722_body_v1",
  "dataset_split": "train",
  "source_npz": "/data/mocap-convertor/datasets/solo_20260722_body_v1/processed/npz/train/solo_20260722_174736_seg000053.npz",
  "segment_type": "speech_pause",
  "speech_ratio": 0.5,
  "timing": {
   "face_s": 0.0,
   "body_s": 0.19,
   "total_s": 0.86
  },
  "dir": "outputs/turns/CODEC_14_roundtrip_seg053"
 },
 {
  "id": "CODEC_15_roundtrip_seg126",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 181,
  "body_frames": 180,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "codec_roundtrip_continuous_no_generator",
  "body_writer": "baked_template_channel_rewrite",
  "writer_self_verify_max_component": 1.1920928955078125e-07,
  "body_vrma_template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/processed/vrma/test/solo_20260722_174736_seg000126.vrma",
  "run_id": "solo_body_v1__50b_vel__scratch__r02",
  "decode_mode": "continuous",
  "codec_sha256": {
   "spine": "568311e640f0a20b1997d7d840c0609a488b7581954054f8a3f1a682dd7c7efb",
   "arms": "06389ebf0e4026515d01bdd5b7c1934c037a7aa85548933fedba982e3e9cf6c1",
   "legs": "487f618cb1faae1fd6959fa77326dcec64c5b1f80725d602b5b97c027751d069",
   "fingers": "bdba6af4ec4bfe99002175cafb6063f5003ebc2bec65bb2783e6d06a91edaa07"
  },
  "compare_with": "GT_15_restref_seg126",
  "clip_angle_error_deg": {
   "spine": {
    "mean_angle_deg": 1.6101535558700562,
    "p95_angle_deg": 4.819185733795166
   },
   "arms": {
    "mean_angle_deg": 14.709342002868652,
    "p95_angle_deg": 37.51741409301758
   },
   "legs": {
    "mean_angle_deg": 3.74475359916687,
    "p95_angle_deg": 7.427245616912842
   },
   "fingers": {
    "mean_angle_deg": 4.260639667510986,
    "p95_angle_deg": 11.89458179473877
   }
  },
  "root_translation": "codec velocity, integrated from the GT first frame",
  "translation_drift_cm": 22.04,
  "dataset_id": "solo_20260722_body_v1",
  "dataset_split": "test",
  "source_npz": "/data/mocap-convertor/datasets/solo_20260722_body_v1/processed/npz/test/solo_20260722_174736_seg000126.npz",
  "segment_type": "speech",
  "speech_ratio": 0.16666699945926666,
  "timing": {
   "face_s": 0.0,
   "body_s": 0.17,
   "total_s": 0.85
  },
  "dir": "outputs/turns/CODEC_15_roundtrip_seg126"
 },
 {
  "id": "CODEC_16_roundtrip_seg041",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 415,
  "body_frames": 414,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "codec_roundtrip_continuous_no_generator",
  "body_writer": "baked_template_channel_rewrite",
  "writer_self_verify_max_component": 1.1920928955078125e-07,
  "body_vrma_template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/processed/vrma/train/solo_20260722_174736_seg000041.vrma",
  "run_id": "solo_body_v1__50b_vel__scratch__r02",
  "decode_mode": "continuous",
  "codec_sha256": {
   "spine": "568311e640f0a20b1997d7d840c0609a488b7581954054f8a3f1a682dd7c7efb",
   "arms": "06389ebf0e4026515d01bdd5b7c1934c037a7aa85548933fedba982e3e9cf6c1",
   "legs": "487f618cb1faae1fd6959fa77326dcec64c5b1f80725d602b5b97c027751d069",
   "fingers": "bdba6af4ec4bfe99002175cafb6063f5003ebc2bec65bb2783e6d06a91edaa07"
  },
  "compare_with": "GT_16_restref_sit_seg041",
  "clip_angle_error_deg": {
   "spine": {
    "mean_angle_deg": 0.7872993350028992,
    "p95_angle_deg": 2.431225299835205
   },
   "arms": {
    "mean_angle_deg": 2.5551400184631348,
    "p95_angle_deg": 6.412369251251221
   },
   "legs": {
    "mean_angle_deg": 1.6559215784072876,
    "p95_angle_deg": 3.5761404037475586
   },
   "fingers": {
    "mean_angle_deg": 1.3403120040893555,
    "p95_angle_deg": 3.5737574100494385
   }
  },
  "root_translation": "codec velocity, integrated from the GT first frame",
  "translation_drift_cm": 13.94,
  "dataset_id": "solo_20260722_body_v1",
  "dataset_split": "train",
  "source_npz": "/data/mocap-convertor/datasets/solo_20260722_body_v1/processed/npz/train/solo_20260722_174736_seg000041.npz",
  "segment_type": "speech_pause",
  "speech_ratio": 0.5611510276794434,
  "timing": {
   "face_s": 0.0,
   "body_s": 0.2,
   "total_s": 0.84
  },
  "dir": "outputs/turns/CODEC_16_roundtrip_seg041"
 },
 {
  "id": "CODEC_17_roundtrip_seg123",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 412,
  "body_frames": 411,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "codec_roundtrip_continuous_no_generator",
  "body_writer": "baked_template_channel_rewrite",
  "writer_self_verify_max_component": 1.1920928955078125e-07,
  "body_vrma_template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/processed/vrma/test/solo_20260722_174736_seg000123.vrma",
  "run_id": "solo_body_v1__50b_vel__scratch__r02",
  "decode_mode": "continuous",
  "codec_sha256": {
   "spine": "568311e640f0a20b1997d7d840c0609a488b7581954054f8a3f1a682dd7c7efb",
   "arms": "06389ebf0e4026515d01bdd5b7c1934c037a7aa85548933fedba982e3e9cf6c1",
   "legs": "487f618cb1faae1fd6959fa77326dcec64c5b1f80725d602b5b97c027751d069",
   "fingers": "bdba6af4ec4bfe99002175cafb6063f5003ebc2bec65bb2783e6d06a91edaa07"
  },
  "compare_with": "GT_17_median_seg123",
  "clip_angle_error_deg": {
   "spine": {
    "mean_angle_deg": 1.8455621004104614,
    "p95_angle_deg": 9.27860164642334
   },
   "arms": {
    "mean_angle_deg": 7.172393798828125,
    "p95_angle_deg": 21.01362419128418
   },
   "legs": {
    "mean_angle_deg": 4.7498345375061035,
    "p95_angle_deg": 13.780721664428711
   },
   "fingers": {
    "mean_angle_deg": 3.0665054321289062,
    "p95_angle_deg": 8.075738906860352
   }
  },
  "root_translation": "codec velocity, integrated from the GT first frame",
  "translation_drift_cm": 26.78,
  "dataset_id": "solo_20260722_body_v1",
  "dataset_split": "test",
  "source_npz": "/data/mocap-convertor/datasets/solo_20260722_body_v1/processed/npz/test/solo_20260722_174736_seg000123.npz",
  "segment_type": "speech_pause",
  "speech_ratio": 0.2627739906311035,
  "timing": {
   "face_s": 0.0,
   "body_s": 0.2,
   "total_s": 0.87
  },
  "dir": "outputs/turns/CODEC_17_roundtrip_seg123"
 },
 {
  "id": "MIRROR_17_seg123",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 412,
  "body_frames": 411,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "left_right_mirror_of_GT (no codec)",
  "compare_with": "GT_17_median_seg123",
  "timing": {
   "face_s": 0.0,
   "body_s": 0.0,
   "total_s": 0.0
  },
  "dir": "outputs/turns/MIRROR_17_seg123"
 },
 {
  "id": "GEN_17_seg123  [ep2899]",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 412,
  "body_frames": 411,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "generator + codec decoder (continuous)",
  "body_writer": "baked_template_channel_write",
  "bones": 50,
  "run_id": "solo_body_v1__50b_vel__scratch__r03",
  "generator_ckpt": "/home/gglabs/Desktop/service/kemix-engine/package/motion-blender/experiments/wave-hands/outputs/gen_train/runs/solo_body_v1__50b_vel__scratch__r03/generator/best.pth",
  "guidance": 2.0,
  "rng_seed": 20260806,
  "compare_with": "GT_17_median_seg123",
  "root_translation": "codec velocity integrated from origin",
  "motion_stats": {
   "generated": {
    "speed_deg_per_frame": 1.1508502048552103,
    "speed_p95": 3.5054425721437594,
    "arms_speed": 1.524032968868244,
    "fingers_speed": 0.6548441257610144,
    "rest_frac": 0.0,
    "jerk_p99": 1.6431044487449074,
    "frames": 411,
    "travel_cm": 281.2812330201268,
    "net_travel_cm": 30.363431930541992
   },
   "ground_truth": {
    "speed_deg_per_frame": 1.239993775436027,
    "speed_p95": 4.91380225659432,
    "arms_speed": 1.9883894074950441,
    "fingers_speed": 0.38967421680331044,
    "rest_frac": 0.12926829268292683,
    "jerk_p99": 9.046834871628896,
    "frames": 411,
    "travel_cm": 200.5533605946652,
    "net_travel_cm": 70.67283915661568
   }
  },
  "writer_report": {
   "frames": 411,
   "skipped": [
    "upperChest"
   ],
   "root_translation": true,
   "template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/artifacts/templates/kemix.vrma"
  },
  "note": "생성기는 GT를 재현하지 않는다 — 오디오에 맞는 새 모션을 만든다. 프레임별 각도 차이는 의미가 없고 분포(속도·정지비율·이동)를 본다.",
  "timing": {
   "face_s": 0.0,
   "body_s": 0.75,
   "total_s": 3.19
  },
  "generator_epoch": 2899,
  "dir": "outputs/turns/GEN_17_seg123"
 },
 {
  "id": "GEN_A_r03_ep649_before  [ep649]",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 412,
  "body_frames": 411,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "generator + codec decoder (continuous)",
  "body_writer": "baked_template_channel_write",
  "bones": 50,
  "run_id": "solo_body_v1__50b_vel__scratch__r03",
  "generator_ckpt": "../motion-blender/experiments/wave-hands/outputs/gen_train/runs/solo_body_v1__50b_vel__scratch__r03/generator_1000ep_undertrained/best.pth",
  "generator_epoch": 649,
  "guidance": 2.0,
  "rng_seed": 20260806,
  "compare_with": "GT_17_median_seg123",
  "root_translation": "codec velocity integrated from origin",
  "motion_stats": {
   "generated": {
    "speed_deg_per_frame": 1.242014308026658,
    "speed_p95": 3.840901658947831,
    "arms_speed": 1.8890620643636622,
    "fingers_speed": 1.0696522715410188,
    "rest_frac": 0.0,
    "jerk_p99": 1.7709483796770844,
    "frames": 411,
    "travel_cm": 178.57989817857742,
    "net_travel_cm": 59.54008102416992
   },
   "ground_truth": {
    "speed_deg_per_frame": 1.239993775436027,
    "speed_p95": 4.91380225659432,
    "arms_speed": 1.9883894074950441,
    "fingers_speed": 0.38967421680331044,
    "rest_frac": 0.12926829268292683,
    "jerk_p99": 9.046834871628896,
    "frames": 411,
    "travel_cm": 200.5533605946652,
    "net_travel_cm": 70.67283915661568
   }
  },
  "writer_report": {
   "frames": 411,
   "skipped": [
    "upperChest"
   ],
   "root_translation": true,
   "template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/artifacts/templates/kemix.vrma"
  },
  "note": "생성기는 GT를 재현하지 않는다 — 오디오에 맞는 새 모션을 만든다. 프레임별 각도 차이는 의미가 없고 분포(속도·정지비율·이동)를 본다.",
  "timing": {
   "face_s": 0.0,
   "body_s": 0.87,
   "total_s": 3.19
  },
  "dir": "outputs/turns/GEN_A_r03_ep649_before"
 },
 {
  "id": "GEN_C_r04b_ep1000_arch  [ep999]",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 412,
  "body_frames": 411,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "generator + codec decoder (continuous)",
  "body_writer": "baked_template_channel_write",
  "bones": 50,
  "run_id": "solo_body_v1__50b_vel__scratch__r04b_arch",
  "generator_ckpt": "../motion-blender/experiments/wave-hands/outputs/gen_train/runs/solo_body_v1__50b_vel__scratch__r04b_arch/generator/epoch_1000.pth",
  "generator_epoch": 999,
  "guidance": 2.0,
  "rng_seed": 20260806,
  "compare_with": "GT_17_median_seg123",
  "root_translation": "codec velocity integrated from origin",
  "motion_stats": {
   "generated": {
    "speed_deg_per_frame": 0.8874596460876737,
    "speed_p95": 2.7299772982962667,
    "arms_speed": 1.2556563047382665,
    "fingers_speed": 0.5178328674680548,
    "rest_frac": 0.0,
    "jerk_p99": 1.0952661438631113,
    "frames": 411,
    "travel_cm": 183.10860767960548,
    "net_travel_cm": 36.7109375
   },
   "ground_truth": {
    "speed_deg_per_frame": 1.239993775436027,
    "speed_p95": 4.91380225659432,
    "arms_speed": 1.9883894074950441,
    "fingers_speed": 0.38967421680331044,
    "rest_frac": 0.12926829268292683,
    "jerk_p99": 9.046834871628896,
    "frames": 411,
    "travel_cm": 200.5533605946652,
    "net_travel_cm": 70.67283915661568
   }
  },
  "writer_report": {
   "frames": 411,
   "skipped": [
    "upperChest"
   ],
   "root_translation": true,
   "template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/artifacts/templates/kemix.vrma"
  },
  "note": "생성기는 GT를 재현하지 않는다 — 오디오에 맞는 새 모션을 만든다. 프레임별 각도 차이는 의미가 없고 분포(속도·정지비율·이동)를 본다.",
  "timing": {
   "face_s": 0.0,
   "body_s": 0.89,
   "total_s": 3.31
  },
  "dir": "outputs/turns/GEN_C_r04b_ep1000_arch"
 },
 {
  "id": "GEN_D_r04c_ep1000_both  [ep999]",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 412,
  "body_frames": 411,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "generator + codec decoder (continuous)",
  "body_writer": "baked_template_channel_write",
  "bones": 50,
  "run_id": "solo_body_v1__50b_vel__scratch__r04c_both",
  "generator_ckpt": "../motion-blender/experiments/wave-hands/outputs/gen_train/runs/solo_body_v1__50b_vel__scratch__r04c_both/generator/epoch_1000.pth",
  "generator_epoch": 999,
  "guidance": 2.0,
  "rng_seed": 20260806,
  "compare_with": "GT_17_median_seg123",
  "root_translation": "codec velocity integrated from origin",
  "motion_stats": {
   "generated": {
    "speed_deg_per_frame": 0.9907750296118234,
    "speed_p95": 3.0941199807833306,
    "arms_speed": 1.364572250038586,
    "fingers_speed": 0.61661135838063,
    "rest_frac": 0.0,
    "jerk_p99": 1.2510927179753886,
    "frames": 411,
    "travel_cm": 158.20111399516463,
    "net_travel_cm": 16.42702293395996
   },
   "ground_truth": {
    "speed_deg_per_frame": 1.239993775436027,
    "speed_p95": 4.91380225659432,
    "arms_speed": 1.9883894074950441,
    "fingers_speed": 0.38967421680331044,
    "rest_frac": 0.12926829268292683,
    "jerk_p99": 9.046834871628896,
    "frames": 411,
    "travel_cm": 200.5533605946652,
    "net_travel_cm": 70.67283915661568
   }
  },
  "writer_report": {
   "frames": 411,
   "skipped": [
    "upperChest"
   ],
   "root_translation": true,
   "template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/artifacts/templates/kemix.vrma"
  },
  "note": "생성기는 GT를 재현하지 않는다 — 오디오에 맞는 새 모션을 만든다. 프레임별 각도 차이는 의미가 없고 분포(속도·정지비율·이동)를 본다.",
  "timing": {
   "face_s": 0.0,
   "body_s": 0.9,
   "total_s": 3.34
  },
  "dir": "outputs/turns/GEN_D_r04c_ep1000_both"
 },
 {
  "id": "GEN_E_r04a_s8_g2  [ep1999]",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 412,
  "body_frames": 411,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "generator + codec decoder (continuous)",
  "body_writer": "baked_template_channel_write",
  "bones": 50,
  "run_id": "solo_body_v1__50b_vel__scratch__r04a_hygiene",
  "generator_ckpt": "../motion-blender/experiments/wave-hands/outputs/gen_train/runs/solo_body_v1__50b_vel__scratch__r04a_hygiene/generator/epoch_2000.pth",
  "generator_epoch": 1999,
  "guidance": 2.0,
  "steps": 8,
  "cond_time_zero": false,
  "rng_seed": 20260806,
  "compare_with": "GT_17_median_seg123",
  "root_translation": "codec velocity integrated from origin",
  "motion_stats": {
   "generated": {
    "speed_deg_per_frame": 0.9581664478848638,
    "speed_p95": 2.847703861021429,
    "arms_speed": 1.1214683898022535,
    "fingers_speed": 0.5274830298222813,
    "rest_frac": 0.0024390243902439024,
    "jerk_p99": 1.3276835335715964,
    "frames": 411,
    "travel_cm": 235.86961253604386,
    "net_travel_cm": 59.11432647705078
   },
   "ground_truth": {
    "speed_deg_per_frame": 1.239993775436027,
    "speed_p95": 4.91380225659432,
    "arms_speed": 1.9883894074950441,
    "fingers_speed": 0.38967421680331044,
    "rest_frac": 0.12926829268292683,
    "jerk_p99": 9.046834871628896,
    "frames": 411,
    "travel_cm": 200.5533605946652,
    "net_travel_cm": 70.67283915661568
   }
  },
  "writer_report": {
   "frames": 411,
   "skipped": [
    "upperChest"
   ],
   "root_translation": true,
   "template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/artifacts/templates/kemix.vrma"
  },
  "note": "생성기는 GT를 재현하지 않는다 — 오디오에 맞는 새 모션을 만든다. 프레임별 각도 차이는 의미가 없고 분포(속도·정지비율·이동)를 본다.",
  "timing": {
   "face_s": 0.0,
   "body_s": 0.91,
   "total_s": 4.71
  },
  "dir": "outputs/turns/GEN_E_r04a_s8_g2"
 },
 {
  "id": "GEN_F_r04a_s32_g2  [ep1999]",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 412,
  "body_frames": 411,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "generator + codec decoder (continuous)",
  "body_writer": "baked_template_channel_write",
  "bones": 50,
  "run_id": "solo_body_v1__50b_vel__scratch__r04a_hygiene",
  "generator_ckpt": "../motion-blender/experiments/wave-hands/outputs/gen_train/runs/solo_body_v1__50b_vel__scratch__r04a_hygiene/generator/epoch_2000.pth",
  "generator_epoch": 1999,
  "guidance": 2.0,
  "steps": 32,
  "cond_time_zero": false,
  "rng_seed": 20260806,
  "compare_with": "GT_17_median_seg123",
  "root_translation": "codec velocity integrated from origin",
  "motion_stats": {
   "generated": {
    "speed_deg_per_frame": 1.0363142964681404,
    "speed_p95": 3.157720002098626,
    "arms_speed": 1.213251703309043,
    "fingers_speed": 0.5871641990691923,
    "rest_frac": 0.0,
    "jerk_p99": 1.4442212336634506,
    "frames": 411,
    "travel_cm": 249.20518286526203,
    "net_travel_cm": 70.5608901977539
   },
   "ground_truth": {
    "speed_deg_per_frame": 1.239993775436027,
    "speed_p95": 4.91380225659432,
    "arms_speed": 1.9883894074950441,
    "fingers_speed": 0.38967421680331044,
    "rest_frac": 0.12926829268292683,
    "jerk_p99": 9.046834871628896,
    "frames": 411,
    "travel_cm": 200.5533605946652,
    "net_travel_cm": 70.67283915661568
   }
  },
  "writer_report": {
   "frames": 411,
   "skipped": [
    "upperChest"
   ],
   "root_translation": true,
   "template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/artifacts/templates/kemix.vrma"
  },
  "note": "생성기는 GT를 재현하지 않는다 — 오디오에 맞는 새 모션을 만든다. 프레임별 각도 차이는 의미가 없고 분포(속도·정지비율·이동)를 본다.",
  "timing": {
   "face_s": 0.0,
   "body_s": 1.42,
   "total_s": 5.19
  },
  "dir": "outputs/turns/GEN_F_r04a_s32_g2"
 },
 {
  "id": "GEN_G_r04a_s32_g2_d0  [ep1999]",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 412,
  "body_frames": 411,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "generator + codec decoder (continuous)",
  "body_writer": "baked_template_channel_write",
  "bones": 50,
  "run_id": "solo_body_v1__50b_vel__scratch__r04a_hygiene",
  "generator_ckpt": "../motion-blender/experiments/wave-hands/outputs/gen_train/runs/solo_body_v1__50b_vel__scratch__r04a_hygiene/generator/epoch_2000.pth",
  "generator_epoch": 1999,
  "guidance": 2.0,
  "steps": 32,
  "cond_time_zero": true,
  "rng_seed": 20260806,
  "compare_with": "GT_17_median_seg123",
  "root_translation": "codec velocity integrated from origin",
  "motion_stats": {
   "generated": {
    "speed_deg_per_frame": 1.0495332069516554,
    "speed_p95": 3.26971154645385,
    "arms_speed": 1.2135559833556018,
    "fingers_speed": 0.5841188349150656,
    "rest_frac": 0.0,
    "jerk_p99": 1.5167732798597378,
    "frames": 411,
    "travel_cm": 251.7531806603074,
    "net_travel_cm": 78.95158386230469
   },
   "ground_truth": {
    "speed_deg_per_frame": 1.239993775436027,
    "speed_p95": 4.91380225659432,
    "arms_speed": 1.9883894074950441,
    "fingers_speed": 0.38967421680331044,
    "rest_frac": 0.12926829268292683,
    "jerk_p99": 9.046834871628896,
    "frames": 411,
    "travel_cm": 200.5533605946652,
    "net_travel_cm": 70.67283915661568
   }
  },
  "writer_report": {
   "frames": 411,
   "skipped": [
    "upperChest"
   ],
   "root_translation": true,
   "template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/artifacts/templates/kemix.vrma"
  },
  "note": "생성기는 GT를 재현하지 않는다 — 오디오에 맞는 새 모션을 만든다. 프레임별 각도 차이는 의미가 없고 분포(속도·정지비율·이동)를 본다.",
  "timing": {
   "face_s": 0.0,
   "body_s": 1.42,
   "total_s": 4.15
  },
  "dir": "outputs/turns/GEN_G_r04a_s32_g2_d0"
 },
 {
  "id": "GEN_R01_seg123",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 412,
  "body_frames": 411,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "generator + codec decoder (continuous)",
  "body_writer": "baked_template_channel_write",
  "bones": 44,
  "run_id": "solo_body_v1__44b_vel__scratch__r01",
  "generator_ckpt": "/home/gglabs/Desktop/service/kemix-engine/package/motion-blender/experiments/wave-hands/outputs/gen_train/runs/solo_body_v1__44b_vel__scratch__r01/generator/best.pth",
  "compare_with": "GT_17_median_seg123",
  "root_translation": "codec velocity integrated from origin",
  "motion_stats": {
   "generated": {
    "speed_deg_per_frame": 1.3025682224014294,
    "speed_p95": 1.4510851088196048,
    "arms_speed": 2.810528467046472,
    "fingers_speed": 7.697038466580196,
    "rest_frac": 0.007317073170731708,
    "jerk_p99": 111.58556299714935,
    "frames": 411,
    "travel_cm": 387.6726821064949,
    "net_travel_cm": 117.98150634765625
   }
  },
  "writer_report": {
   "frames": 411,
   "skipped": [
    "upperChest"
   ],
   "root_translation": true,
   "template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/artifacts/templates/kemix.vrma"
  },
  "note": "생성기는 GT를 재현하지 않는다 — 오디오에 맞는 새 모션을 만든다. 프레임별 각도 차이는 의미가 없고 분포(속도·정지비율·이동)를 본다.",
  "timing": {
   "face_s": 0.0,
   "body_s": 0.74,
   "total_s": 3.2
  },
  "dir": "outputs/turns/GEN_R01_seg123"
 },
 {
  "id": "GEN_r04b_seg123  [ep699]",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 412,
  "body_frames": 411,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "generator + codec decoder (continuous)",
  "body_writer": "baked_template_channel_write",
  "bones": 50,
  "run_id": "solo_body_v1__50b_vel__scratch__r04b_arch",
  "generator_ckpt": "/home/gglabs/Desktop/service/kemix-engine/package/motion-blender/experiments/wave-hands/outputs/gen_train/runs/solo_body_v1__50b_vel__scratch__r04b_arch/generator/best.pth",
  "guidance": 2.0,
  "rng_seed": 20260806,
  "compare_with": "GT_17_median_seg123",
  "root_translation": "codec velocity integrated from origin",
  "motion_stats": {
   "generated": {
    "speed_deg_per_frame": 0.9150000162156918,
    "speed_p95": 2.8629210492727064,
    "arms_speed": 1.350468977333554,
    "fingers_speed": 0.5304691643266911,
    "rest_frac": 0.0,
    "jerk_p99": 1.1484362324838524,
    "frames": 411,
    "travel_cm": 166.04948388412595,
    "net_travel_cm": 22.543506622314453
   },
   "ground_truth": {
    "speed_deg_per_frame": 1.239993775436027,
    "speed_p95": 4.91380225659432,
    "arms_speed": 1.9883894074950441,
    "fingers_speed": 0.38967421680331044,
    "rest_frac": 0.12926829268292683,
    "jerk_p99": 9.046834871628896,
    "frames": 411,
    "travel_cm": 200.5533605946652,
    "net_travel_cm": 70.67283915661568
   }
  },
  "writer_report": {
   "frames": 411,
   "skipped": [
    "upperChest"
   ],
   "root_translation": true,
   "template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/artifacts/templates/kemix.vrma"
  },
  "note": "생성기는 GT를 재현하지 않는다 — 오디오에 맞는 새 모션을 만든다. 프레임별 각도 차이는 의미가 없고 분포(속도·정지비율·이동)를 본다.",
  "timing": {
   "face_s": 0.0,
   "body_s": 0.84,
   "total_s": 3.96
  },
  "generator_epoch": 699,
  "dir": "outputs/turns/GEN_r04b_seg123"
 },
 {
  "id": "GEN_r04c_seg123  [ep299]",
  "emotion": "neutral",
  "fps": 30,
  "face_frames": 412,
  "body_frames": 411,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "body_source": "generator + codec decoder (continuous)",
  "body_writer": "baked_template_channel_write",
  "bones": 50,
  "run_id": "solo_body_v1__50b_vel__scratch__r04c_both",
  "generator_ckpt": "/home/gglabs/Desktop/service/kemix-engine/package/motion-blender/experiments/wave-hands/outputs/gen_train/runs/solo_body_v1__50b_vel__scratch__r04c_both/generator/best.pth",
  "guidance": 2.0,
  "rng_seed": 20260806,
  "compare_with": "GT_17_median_seg123",
  "root_translation": "codec velocity integrated from origin",
  "motion_stats": {
   "generated": {
    "speed_deg_per_frame": 0.9114039141596875,
    "speed_p95": 2.852448842409644,
    "arms_speed": 1.1435165718901747,
    "fingers_speed": 0.550977976581345,
    "rest_frac": 0.0,
    "jerk_p99": 1.2506134811029659,
    "frames": 411,
    "travel_cm": 167.6898965612054,
    "net_travel_cm": 34.53806686401367
   },
   "ground_truth": {
    "speed_deg_per_frame": 1.239993775436027,
    "speed_p95": 4.91380225659432,
    "arms_speed": 1.9883894074950441,
    "fingers_speed": 0.38967421680331044,
    "rest_frac": 0.12926829268292683,
    "jerk_p99": 9.046834871628896,
    "frames": 411,
    "travel_cm": 200.5533605946652,
    "net_travel_cm": 70.67283915661568
   }
  },
  "writer_report": {
   "frames": 411,
   "skipped": [
    "upperChest"
   ],
   "root_translation": true,
   "template": "/data/mocap-convertor/datasets/solo_20260722_body_v1/artifacts/templates/kemix.vrma"
  },
  "note": "생성기는 GT를 재현하지 않는다 — 오디오에 맞는 새 모션을 만든다. 프레임별 각도 차이는 의미가 없고 분포(속도·정지비율·이동)를 본다.",
  "timing": {
   "face_s": 0.0,
   "body_s": 0.85,
   "total_s": 4.04
  },
  "generator_epoch": 299,
  "dir": "outputs/turns/GEN_r04c_seg123"
 },
 {
  "id": "AB_1_before",
  "emotion": "excitement",
  "fps": 30,
  "face_frames": 219,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0,
   "body_s": 0,
   "total_s": 0
  },
  "dir": "outputs/turns/AB_1_before"
 },
 {
  "id": "AB_2_after",
  "emotion": "excitement",
  "fps": 30,
  "face_frames": 219,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0,
   "body_s": 0,
   "total_s": 0
  },
  "dir": "outputs/turns/AB_2_after"
 },
 {
  "id": "EN_1_baseline",
  "emotion": "anger",
  "fps": 30,
  "face_frames": 219,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0,
   "body_s": 0,
   "total_s": 0
  },
  "dir": "outputs/turns/EN_1_baseline"
 },
 {
  "id": "EN_2_end_e4",
  "emotion": "anger",
  "fps": 30,
  "face_frames": 219,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0,
   "body_s": 0,
   "total_s": 0
  },
  "dir": "outputs/turns/EN_2_end_e4"
 },
 {
  "id": "EN_3_all_e3",
  "emotion": "anger",
  "fps": 30,
  "face_frames": 219,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0,
   "body_s": 0,
   "total_s": 0
  },
  "dir": "outputs/turns/EN_3_all_e3"
 },
 {
  "id": "ST_1_raw",
  "emotion": "anger",
  "fps": 30,
  "face_frames": 220,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0,
   "body_s": 0,
   "total_s": 0
  },
  "dir": "outputs/turns/ST_1_raw"
 },
 {
  "id": "ST_2_current_bad",
  "emotion": "anger",
  "fps": 30,
  "face_frames": 220,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0,
   "body_s": 0,
   "total_s": 0
  },
  "dir": "outputs/turns/ST_2_current_bad"
 },
 {
  "id": "ST_3_corrected",
  "emotion": "anger",
  "fps": 30,
  "face_frames": 220,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0,
   "body_s": 0,
   "total_s": 0
  },
  "dir": "outputs/turns/ST_3_corrected"
 },
 {
  "id": "convo_test",
  "emotion": "anger",
  "fps": 30,
  "face_frames": 221,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0.88,
   "body_s": 4.68,
   "total_s": 5.56
  },
  "dir": "outputs/turns/convo_test"
 },
 {
  "id": "demo1",
  "emotion": "excitement",
  "fps": 30,
  "face_frames": 221,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0.87,
   "body_s": 3.71,
   "total_s": 4.58
  },
  "dir": "outputs/turns/demo1"
 },
 {
  "id": "settle_test",
  "emotion": "anger",
  "fps": 30,
  "face_frames": 221,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 1.21,
   "body_s": 3.94,
   "total_s": 5.15
  },
  "dir": "outputs/turns/settle_test"
 },
 {
  "id": "turn_1784780532881",
  "emotion": "joy",
  "fps": 30,
  "face_frames": 67,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0.86,
   "body_s": 4.36,
   "total_s": 5.22
  },
  "dir": "outputs/turns/turn_1784780532881"
 },
 {
  "id": "turn_1784788055083",
  "emotion": "joy",
  "fps": 30,
  "face_frames": 103,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0.03,
   "body_s": 0.23,
   "total_s": 0.25
  },
  "dir": "outputs/turns/turn_1784788055083"
 },
 {
  "id": "turn_1784788098239",
  "emotion": "agreement",
  "fps": 30,
  "face_frames": 52,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0.03,
   "body_s": 0.16,
   "total_s": 0.18
  },
  "dir": "outputs/turns/turn_1784788098239"
 },
 {
  "id": "warm_1",
  "emotion": "excitement",
  "fps": 30,
  "face_frames": 221,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0.88,
   "body_s": 4.08,
   "total_s": 4.97
  },
  "dir": "outputs/turns/warm_1"
 },
 {
  "id": "warm_2",
  "emotion": "excitement",
  "fps": 30,
  "face_frames": 221,
  "level": 4,
  "steps": 8,
  "guidance": 3.0,
  "face": "face.json",
  "body": "body.vrma",
  "audio": "audio.wav",
  "timing": {
   "face_s": 0.03,
   "body_s": 0.42,
   "total_s": 0.46
  },
  "dir": "outputs/turns/warm_2"
 }
]