oxihuman-morph 0.1.2

Parametric morphology engine for human body generation — targets, blendshapes, FACS
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
// Auto-split part 3 of oxihuman-morph lib.rs
// Do not edit directly — generated by workstream B refactor

#[path = "eye_outer_corner.rs"]
pub mod eye_outer_corner;
pub use eye_outer_corner::{
    default_eye_outer_corner_config, eoc_average_depth, eoc_blend, eoc_is_neutral, eoc_reset,
    eoc_set_both_depth, eoc_set_depth, eoc_set_tilt, eoc_symmetry, eoc_to_json, eoc_to_weights,
    new_eye_outer_corner_state, EyeOuterCornerConfig, EyeOuterCornerState, EyeOuterSide,
};

#[path = "face_vertical_control.rs"]
pub mod face_vertical_control;
pub use face_vertical_control::{
    default_face_vertical_config, fv_blend as fvc_blend, fv_is_neutral as fvc_is_neutral,
    fv_reset as fvc_reset, fv_set_all, fv_set_lower, fv_set_middle, fv_set_upper,
    fv_to_json as fvc_to_json, fv_to_weights as fvc_to_weights, fv_total_scale,
    new_face_vertical_state, FaceVerticalConfig, FaceVerticalState,
};

#[path = "foot_ball_control.rs"]
pub mod foot_ball_control;
pub use foot_ball_control::{
    default_foot_ball_config, fb_average_width, fb_blend, fb_is_neutral, fb_reset, fb_set_both,
    fb_set_padding, fb_set_width, fb_symmetry, fb_to_json, fb_to_weights, new_foot_ball_state,
    FootBallConfig, FootBallSide, FootBallState,
};

#[path = "forehead_tension_control.rs"]
pub mod forehead_tension_control;
pub use forehead_tension_control::{
    default_forehead_tension_config, ften_average, ften_blend, ften_is_neutral, ften_reset,
    ften_set_all, ften_set_central, ften_set_compression, ften_set_lateral, ften_to_json,
    ften_to_weights, new_forehead_tension_state, ForeheadTensionConfig, ForeheadTensionState,
};

#[path = "hand_grip_control.rs"]
pub mod hand_grip_control;
pub use hand_grip_control::{
    default_hand_grip_config, hg_average_curl, hg_blend, hg_is_neutral, hg_reset, hg_set_both,
    hg_set_curl, hg_set_palm_compression, hg_symmetry, hg_to_json, hg_to_weights,
    new_hand_grip_state, HandGripConfig, HandGripSide, HandGripState,
};

#[path = "jaw_twist_control.rs"]
pub mod jaw_twist_control;
pub use jaw_twist_control::{
    default_jaw_twist_config, jtwist_blend, jtwist_is_neutral, jtwist_reset, jtwist_set_lateral,
    jtwist_set_twist, jtwist_to_json, jtwist_to_weights, jtwist_total_displacement,
    new_jaw_twist_state, JawTwistConfig, JawTwistState,
};

#[path = "lip_purse_control.rs"]
pub mod lip_purse_control;
pub use lip_purse_control::{
    default_lip_purse_config, lpur_blend, lpur_intensity, lpur_is_neutral, lpur_reset,
    lpur_set_both, lpur_set_lower, lpur_set_protrusion, lpur_set_upper, lpur_to_json,
    lpur_to_weights, new_lip_purse_state, LipPurseConfig, LipPurseState,
};

#[path = "nasal_spine_control.rs"]
pub mod nasal_spine_control;
pub use nasal_spine_control::{
    default_nasal_spine_config, new_nasal_spine_state, ns_blend as nsp_blend,
    ns_is_neutral as nsp_is_neutral, ns_prominence, ns_reset as nsp_reset, ns_set_angle,
    ns_set_projection, ns_set_width as nsp_set_width, ns_to_json as nsp_to_json,
    ns_to_weights as nsp_to_weights, NasalSpineConfig, NasalSpineState,
};

#[path = "neck_tilt_control.rs"]
pub mod neck_tilt_control;
pub use neck_tilt_control::{
    default_neck_tilt_config, new_neck_tilt_state, ntilt_blend, ntilt_is_neutral, ntilt_reset,
    ntilt_set_lateral, ntilt_set_sagittal, ntilt_to_json, ntilt_to_weights, ntilt_total_angle_rad,
    NeckTiltConfig, NeckTiltState,
};

#[path = "shoulder_pad_control.rs"]
pub mod shoulder_pad_control;
pub use shoulder_pad_control::{
    default_shoulder_pad_config, new_shoulder_pad_state, spad_average_bulk, spad_blend,
    spad_is_neutral, spad_reset, spad_set_acromion, spad_set_both, spad_set_bulk, spad_symmetry,
    spad_to_json, spad_to_weights, ShoulderPadConfig, ShoulderPadSide, ShoulderPadState,
};

#[path = "temple_control.rs"]
pub mod temple_control;
pub use temple_control::{
    apply_temple_control, default_temple_config, default_temple_control, new_temple_state,
    temple_blend, temple_mirror, temple_reset, temple_set_hollow, temple_set_prominence,
    temple_to_json, temple_to_weights, TempleConfig, TempleControl, TempleState,
};

#[path = "body_volume_control.rs"]
pub mod body_volume_control;
pub use body_volume_control::{
    bvc_blend, bvc_estimated_volume, bvc_is_neutral, bvc_reset, bvc_set_abdomen, bvc_set_chest,
    bvc_set_volume, bvc_to_json, bvc_to_weights, default_body_volume_config, new_body_volume_state,
    BodyVolumeConfig, BodyVolumeState, BodyVolumeWeights,
};

#[path = "brow_peak_control.rs"]
pub mod brow_peak_control;
pub use brow_peak_control::{
    bp_arch_at, bp_asymmetry, bp_average, bp_blend, bp_is_neutral, bp_reset, bp_set_peak,
    bp_set_position, bp_to_json, bp_to_weights, default_brow_peak_config, new_brow_peak_state,
    BrowPeakConfig, BrowPeakSide, BrowPeakState,
};

#[path = "cheek_tighten_control.rs"]
pub mod cheek_tighten_control;
pub use cheek_tighten_control::{
    ct_asymmetry, ct_average, ct_blend, ct_is_neutral, ct_reset, ct_set_both, ct_set_left,
    ct_set_right, ct_set_vertical_bias, ct_to_json, ct_to_weights, default_cheek_tighten_config,
    new_cheek_tighten_state, CheekTightenConfig, CheekTightenState,
};

#[path = "chin_pad_control.rs"]
pub mod chin_pad_control;
pub use chin_pad_control::{
    cpd_blend as cpd_pad_blend, cpd_is_neutral as cpd_pad_is_neutral, cpd_pad_size,
    cpd_reset as cpd_pad_reset, cpd_set_projection, cpd_set_spread, cpd_set_volume,
    cpd_to_json as cpd_pad_to_json, cpd_to_weights as cpd_pad_to_weights, default_chin_pad_config,
    new_chin_pad_state, ChinPadConfig, ChinPadState,
};

#[path = "ear_fold_control.rs"]
pub mod ear_fold_control;
pub use ear_fold_control::{
    default_ear_fold_config, ef2_average_fold, ef2_blend, ef2_is_neutral, ef2_reset, ef2_set_both,
    ef2_set_definition, ef2_set_fold, ef2_symmetry, ef2_to_json, ef2_to_weights,
    new_ear_fold_state, EarFoldConfig, EarFoldSide, EarFoldState,
};

#[path = "eye_squint_control.rs"]
pub mod eye_squint_control;
pub use eye_squint_control::{
    default_eye_squint_config, esq_asymmetry, esq_average, esq_blend, esq_compression_angle,
    esq_is_neutral, esq_reset, esq_set_both, esq_set_inner, esq_set_left, esq_set_right,
    esq_to_json, esq_to_weights, new_eye_squint_state, EyeSquintConfig, EyeSquintState,
};

#[path = "face_width_v2_control.rs"]
pub mod face_width_v2_control;
pub use face_width_v2_control::{
    default_face_width_v2_config, fw2_average_width, fw2_blend, fw2_is_neutral, fw2_reset,
    fw2_set_bigonial, fw2_set_bizygomatic, fw2_set_temporal, fw2_to_json, fw2_to_weights,
    new_face_width_v2_state, FaceWidthV2Config, FaceWidthV2State,
};

#[path = "foot_heel_control.rs"]
pub mod foot_heel_control;
pub use foot_heel_control::{
    default_foot_heel_config, fhc_is_neutral, fhc_pad, fhc_pad_asymmetry, fhc_reset,
    fhc_set_both_pad, fhc_set_calcaneus, fhc_set_pad, fhc_to_json, fhc_to_weights,
    new_foot_heel_state, FootHeelConfig, FootHeelEntry, FootHeelState, FootSide as HeelFootSide,
};

#[path = "glabella_depth_control.rs"]
pub mod glabella_depth_control;
pub use glabella_depth_control::{
    default_glabella_depth_config, gd_blend, gd_is_neutral, gd_reset, gd_set_depth, gd_set_v_shift,
    gd_set_width, gd_slope_angle_rad, gd_to_json, gd_to_weights, new_glabella_depth_state,
    GlabellaDepthConfig, GlabellaDepthState,
};

#[path = "hand_width_control.rs"]
pub mod hand_width_control;
pub use hand_width_control::{
    default_hand_width_config, hwc_asymmetry, hwc_blend, hwc_effective_width, hwc_is_neutral,
    hwc_reset, hwc_set_both, hwc_set_finger_spread, hwc_set_left, hwc_set_right, hwc_to_json,
    hwc_to_weights, new_hand_width_state, HandWidthConfig, HandWidthState,
};

#[path = "jaw_rest_control.rs"]
pub mod jaw_rest_control;
pub use jaw_rest_control::{
    default_jaw_rest_config, jr_blend, jr_gap_rad, jr_is_neutral, jr_reset, jr_set_gap,
    jr_set_lateral, jr_set_relaxation, jr_to_json, jr_to_weights, new_jaw_rest_state,
    JawRestConfig, JawRestState,
};

#[path = "lip_retract_control.rs"]
pub mod lip_retract_control;
pub use lip_retract_control::{
    default_lip_retract_config, lrc_angle_rad, lrc_average, lrc_blend, lrc_is_neutral, lrc_reset,
    lrc_set_both, lrc_set_corners, lrc_set_retract, lrc_to_json, lrc_to_weights,
    new_lip_retract_state, LipRetractConfig, LipRetractState, LipSide,
};

#[path = "nasal_width_control.rs"]
pub mod nasal_width_control;
pub use nasal_width_control::{
    default_nasal_width_config, new_nasal_width_state, nwc_blend, nwc_effective_width,
    nwc_is_neutral, nwc_reset, nwc_set_alar_flare, nwc_set_bridge, nwc_set_width, nwc_to_json,
    nwc_to_weights, NasalWidthConfig, NasalWidthState,
};

#[path = "neck_forward_control.rs"]
pub mod neck_forward_control;
pub use neck_forward_control::{
    default_neck_forward_config, new_neck_forward_state, nfc_angle_rad, nfc_blend, nfc_is_neutral,
    nfc_reset, nfc_set_forward, nfc_set_lateral, nfc_set_protrusion, nfc_to_json, nfc_to_weights,
    NeckForwardConfig, NeckForwardState,
};

#[path = "sternum_control.rs"]
pub mod sternum_control;
pub use sternum_control::{
    default_sternum_config, new_sternum_state, stc_blend, stc_is_neutral, stc_reset,
    stc_set_length, stc_set_manubrium, stc_set_xiphoid_angle, stc_to_json, stc_to_weights,
    stc_xiphoid_angle_rad, SternumConfig, SternumState,
};

#[path = "body_asymmetry_v2.rs"]
pub mod body_asymmetry_v2;
pub use body_asymmetry_v2::{
    bav2_angular_spread_rad, bav2_average_deviation, bav2_blend, bav2_is_neutral, bav2_reset,
    bav2_set_offset, bav2_to_json, bav2_to_weights, bav2_total_deviation,
    default_body_asymmetry_v2_config, new_body_asymmetry_v2_state, BodyAsymmetryV2Config,
    BodyAsymmetryV2State, REGION_COUNT as ASYM_REGION_COUNT,
};

#[path = "brow_arch_height.rs"]
pub mod brow_arch_height;
pub use brow_arch_height::{
    bah_arch_angle_rad, bah_asymmetry, bah_average, bah_blend, bah_is_neutral, bah_reset, bah_set,
    bah_set_both, bah_to_json, bah_to_weights, default_brow_arch_height_config,
    new_brow_arch_height_state, BrowArchHeightConfig, BrowArchHeightState,
    BrowSide as BrowArchSide,
};

#[path = "cheek_nasal_fold.rs"]
pub mod cheek_nasal_fold;
pub use cheek_nasal_fold::{
    cnf_asymmetry, cnf_average, cnf_blend, cnf_fold_angle_rad, cnf_is_neutral, cnf_reset, cnf_set,
    cnf_set_both, cnf_to_json, cnf_to_weights, default_cheek_nasal_fold_config,
    new_cheek_nasal_fold_state, CheekNasalFoldConfig, CheekNasalFoldState, FoldSide,
};

#[path = "chin_groove_control.rs"]
pub mod chin_groove_control;
pub use chin_groove_control::{
    cg_angle_rad, cg_blend, cg_groove_area, cg_is_neutral, cg_reset, cg_set_depth, cg_set_width,
    cg_to_json, cg_to_weights, default_chin_groove_config, new_chin_groove_state, ChinGrooveConfig,
    ChinGrooveState,
};

#[path = "ear_antihelix_control.rs"]
pub mod ear_antihelix_control;
pub use ear_antihelix_control::{
    default_ear_antihelix_config, eah_average, eah_blend, eah_is_neutral, eah_reset,
    eah_ridge_angle_rad, eah_set, eah_set_both, eah_symmetry, eah_to_json, eah_to_weights,
    new_ear_antihelix_state, EarAntihelixConfig, EarAntihelixState, EarSide as AntihelixEarSide,
};

#[path = "eye_fissure_control.rs"]
pub mod eye_fissure_control;
pub use eye_fissure_control::{
    default_eye_fissure_config, ef_asymmetry as fissure_ef_asymmetry,
    ef_average as fissure_ef_average, ef_blend as fissure_ef_blend,
    ef_is_neutral as fissure_ef_is_neutral, ef_opening_angle_rad, ef_reset as fissure_ef_reset,
    ef_set as fissure_ef_set, ef_set_both as fissure_ef_set_both, ef_to_json as fissure_ef_to_json,
    ef_to_weights as fissure_ef_to_weights, new_eye_fissure_state, EyeFissureConfig,
    EyeFissureState, EyeSide as FissureEyeSide,
};

#[path = "face_depth_control.rs"]
pub mod face_depth_control;
pub use face_depth_control::{
    default_face_depth_config, fdc_average, fdc_blend, fdc_is_neutral, fdc_profile_angle_rad,
    fdc_range, fdc_reset, fdc_set_all, fdc_set_lower, fdc_set_middle, fdc_set_upper, fdc_to_json,
    fdc_to_weights, new_face_depth_state, FaceDepthConfig, FaceDepthState,
};

#[path = "foot_toe_shape.rs"]
pub mod foot_toe_shape;
pub use foot_toe_shape::{
    default_foot_toe_shape_config, fts_average_length, fts_curl_angle_rad,
    fts_is_neutral as toe_shape_is_neutral, fts_reset as toe_shape_reset,
    fts_set_all as toe_shape_set_all, fts_set_curl as toe_shape_set_curl,
    fts_set_toe as toe_shape_set_toe, fts_to_json as toe_shape_to_json,
    fts_to_weights as toe_shape_to_weights, new_foot_toe_shape_state, FootSide as ToeShapeFootSide,
    FootToeShapeConfig, FootToeShapeState, TOE_COUNT as FOOT_TOE_COUNT,
};

#[path = "forehead_globe_control.rs"]
pub mod forehead_globe_control;
pub use forehead_globe_control::{
    default_forehead_globe_config, fgl_average, fgl_blend, fgl_curvature_angle_rad, fgl_is_neutral,
    fgl_reset, fgl_set_both, fgl_set_central, fgl_set_lateral, fgl_to_json, fgl_to_weights,
    new_forehead_globe_state, ForeheadGlobeConfig, ForeheadGlobeState,
};

#[path = "hand_metacarpal_control.rs"]
pub mod hand_metacarpal_control;
pub use hand_metacarpal_control::{
    default_hand_metacarpal_config, hmc_average, hmc_is_neutral, hmc_reset, hmc_set, hmc_set_all,
    hmc_span_angle_rad, hmc_to_json, hmc_to_weights, new_hand_metacarpal_state,
    HandMetacarpalConfig, HandMetacarpalState, HandSide as MetacarpalHandSide, MC_COUNT,
};

#[path = "jaw_ramus_control.rs"]
pub mod jaw_ramus_control;
pub use jaw_ramus_control::{
    default_jaw_ramus_config, jram_blend, jram_flare_angle_rad, jram_is_neutral, jram_ramus_area,
    jram_reset, jram_set_flare, jram_set_height, jram_to_json, jram_to_weights,
    new_jaw_ramus_state, JawRamusConfig, JawRamusState,
};

#[path = "lip_cupid_control.rs"]
pub mod lip_cupid_control;
pub use lip_cupid_control::{
    default_lip_cupid_config, lc_blend, lc_bow_acuity, lc_is_neutral, lc_peak_angle_rad, lc_reset,
    lc_set_depth, lc_set_peak, lc_to_json, lc_to_weights, new_lip_cupid_state, LipCupidConfig,
    LipCupidState,
};

#[path = "nasal_ala_crease.rs"]
pub mod nasal_ala_crease;
pub use nasal_ala_crease::{
    default_nasal_ala_crease_config, nac_average, nac_blend, nac_crease_angle_rad, nac_is_neutral,
    nac_reset, nac_set, nac_set_both, nac_symmetry, nac_to_json, nac_to_weights,
    new_nasal_ala_crease_state, NasalAlaCreaseConfig, NasalAlaCreaseState, NasalSide,
};

#[path = "neck_wattle_control.rs"]
pub mod neck_wattle_control;
pub use neck_wattle_control::{
    default_neck_wattle_config, new_neck_wattle_state, nwat_blend, nwat_is_neutral, nwat_reset,
    nwat_sag_angle_rad, nwat_set_sag, nwat_set_spread, nwat_to_json, nwat_to_weights,
    nwat_volume_estimate, NeckWattleConfig, NeckWattleState,
};

#[path = "shoulder_acromion.rs"]
pub mod shoulder_acromion;
pub use shoulder_acromion::{
    default_shoulder_acromion_config, new_shoulder_acromion_state, sac_asymmetry, sac_average,
    sac_blend, sac_is_neutral, sac_prominence_angle_rad, sac_reset, sac_set, sac_set_both,
    sac_to_json, sac_to_weights, ShoulderAcromionConfig, ShoulderAcromionState,
    ShoulderSide as AcromionShoulderSide,
};

#[path = "toe_control.rs"]
pub mod toe_control;
pub use toe_control::{
    default_toe_control_config, new_toe_control_state, tc_average_length, tc_is_neutral, tc_reset,
    tc_set_length, tc_set_splay, tc_splay_angle_rad, tc_to_json, tc_to_weights, ToeControlConfig,
    ToeControlState, ToeFootSide, TOE_COUNT as TOE_CTRL_COUNT,
};

#[path = "trapezius_control.rs"]
pub mod trapezius_control;
pub use trapezius_control::{
    blend_trap_params, evaluate_trapezius, lower_trap_profile, middle_trap_profile,
    neck_slope_offset, shrug_corrective, upper_trap_profile, TrapeziusParams, TrapeziusResult,
};

#[path = "body_center_control.rs"]
pub mod body_center_control;
pub use body_center_control::{
    bcc_blend, bcc_displacement, bcc_is_neutral, bcc_lean_angle_rad, bcc_reset, bcc_set_ap,
    bcc_set_lateral, bcc_to_json, bcc_to_weights, default_body_center_config,
    new_body_center_state, BodyCenterConfig, BodyCenterState,
};

#[path = "brow_lateral_control.rs"]
pub mod brow_lateral_control;
pub use brow_lateral_control::{
    blat_asymmetry, blat_average, blat_blend, blat_is_neutral, blat_reset, blat_rotation_rad,
    blat_set, blat_set_both, blat_to_json, blat_to_weights, default_brow_lateral_config,
    new_brow_lateral_state, BrowLateralConfig, BrowLateralState, BrowSide as BrowLateralSide,
};

#[path = "cheek_sag_control.rs"]
pub mod cheek_sag_control;
pub use cheek_sag_control::{
    csag_asymmetry, csag_average, csag_blend, csag_is_neutral, csag_reset, csag_set, csag_set_both,
    csag_to_json, csag_to_weights, default_cheek_sag_config, new_cheek_sag_state, CheekSagConfig,
    CheekSagState, SagSide,
};

#[path = "chin_flat_control.rs"]
pub mod chin_flat_control;
pub use chin_flat_control::{
    cf_angle_rad, cf_blend as chin_flat_blend, cf_is_neutral as chin_flat_is_neutral,
    cf_reset as chin_flat_reset, cf_set_flatten, cf_set_v_bias, cf_to_json as chin_flat_to_json,
    cf_to_weights as chin_flat_to_weights, default_chin_flat_config, new_chin_flat_state,
    ChinFlatConfig, ChinFlatState,
};

#[path = "ear_lobe_size.rs"]
pub mod ear_lobe_size;
pub use ear_lobe_size::{
    default_ear_lobe_size_config, els_blend, els_is_neutral, els_reset, els_set_both_size,
    els_set_droop, els_set_size, els_symmetry, els_to_json, els_to_weights,
    new_ear_lobe_size_state, EarLobeSizeConfig, EarLobeSizeState, EarSide,
};

#[path = "eye_droop_control.rs"]
pub mod eye_droop_control;
pub use eye_droop_control::{
    default_eye_droop_config, edr_asymmetry, edr_blend, edr_is_neutral, edr_lid_angle_rad,
    edr_reset, edr_set, edr_set_both, edr_to_json, edr_to_weights, new_eye_droop_state,
    EyeDroopConfig, EyeDroopState, EyeSide,
};

#[path = "face_flatness_control.rs"]
pub mod face_flatness_control;
pub use face_flatness_control::{
    default_face_flatness_config, ffl_blend, ffl_depth_scale, ffl_is_neutral, ffl_reset,
    ffl_set_flatness, ffl_set_mid, ffl_to_json, ffl_to_weights, new_face_flatness_state,
    FaceFlatnessConfig, FaceFlatnessState,
};

#[path = "foot_instep_control.rs"]
pub mod foot_instep_control;
pub use foot_instep_control::{
    default_foot_instep_config, fi_arch_angle_rad, fi_average_arch, fi_blend, fi_is_neutral,
    fi_reset, fi_set_arch, fi_set_both, fi_to_json, fi_to_weights, new_foot_instep_state,
    FootInstepConfig, FootInstepSide, FootInstepState,
};

#[path = "forehead_crease_control.rs"]
pub mod forehead_crease_control;
pub use forehead_crease_control::{
    default_forehead_crease_config, fhc_blend, fhc_effective_depth, fhc_intensity,
    fhc_is_neutral as forehead_crease_is_neutral, fhc_reset as forehead_crease_reset,
    fhc_set_depth, fhc_set_lines, fhc_set_spread, fhc_to_json as forehead_crease_to_json,
    new_forehead_crease_state, ForeheadCreaseConfig, ForeheadCreaseState,
};

#[path = "hand_finger_splay.rs"]
pub mod hand_finger_splay;
pub use hand_finger_splay::{
    default_finger_splay_config, hfs_average_angle_rad, hfs_blend, hfs_finger_angle_rad,
    hfs_is_neutral, hfs_reset, hfs_set_all, hfs_set_finger, hfs_to_json, new_finger_splay_state,
    FingerSplayConfig, FingerSplayState, HandSide, FINGER_COUNT as FINGER_SPLAY_COUNT,
};

#[path = "jaw_clench_control.rs"]
pub mod jaw_clench_control;
pub use jaw_clench_control::{
    default_jaw_clench_config, jcl_asymmetry, jcl_bite_force, jcl_blend, jcl_is_neutral, jcl_reset,
    jcl_set, jcl_set_both, jcl_temporal_angle_rad, jcl_to_json, jcl_to_weights,
    new_jaw_clench_state, ClenchSide, JawClenchConfig, JawClenchState,
};

#[path = "lip_line_control.rs"]
pub mod lip_line_control;
pub use lip_line_control::{
    default_lip_line_config, ll_blend, ll_bow_angle_rad, ll_is_neutral, ll_reset, ll_set_lower_def,
    ll_set_upper_bow, ll_set_width_scale, ll_to_json, ll_to_weights, new_lip_line_state,
    LipLineConfig, LipLineState,
};

#[path = "nasal_saddle_control.rs"]
pub mod nasal_saddle_control;
pub use nasal_saddle_control::{
    default_nasal_saddle_config, new_nasal_saddle_state, nsd_blend, nsd_is_neutral, nsd_reset,
    nsd_root_angle_rad, nsd_set_depth, nsd_set_v_shift, nsd_set_width, nsd_to_json, nsd_to_weights,
    NasalSaddleConfig, NasalSaddleState,
};

#[path = "neck_sterno_control.rs"]
pub mod neck_sterno_control;
pub use neck_sterno_control::{
    default_neck_sterno_config, new_neck_sterno_state, nst_asymmetry, nst_blend, nst_is_neutral,
    nst_pull_angle_rad, nst_reset, nst_set, nst_set_both, nst_set_head_rotation, nst_to_json,
    nst_to_weights, NeckSternoConfig, NeckSternoState, ScmSide,
};

#[path = "shoulder_roll_control.rs"]
pub mod shoulder_roll_control;
pub use shoulder_roll_control::{
    default_shoulder_roll_config, new_shoulder_roll_state, shr_angle_rad, shr_asymmetry, shr_blend,
    shr_is_neutral, shr_reset, shr_set, shr_set_both, shr_to_json, shr_to_weights, RollSide,
    ShoulderRollConfig, ShoulderRollState,
};

#[path = "thigh_girth_control.rs"]
pub mod thigh_girth_control;
pub use thigh_girth_control::{
    default_thigh_girth_config, new_thigh_girth_state, tg_blend, tg_circumference, tg_is_neutral,
    tg_reset, tg_set_both, tg_set_girth, tg_set_medial, tg_symmetry, tg_to_json, tg_to_weights,
    ThighGirthConfig, ThighGirthSide, ThighGirthState,
};

#[path = "finger_spread_control.rs"]
pub mod finger_spread_control;
pub use finger_spread_control::{
    blend_finger_spread, clamp_spread, effective_spread, evaluate_finger_spread, finger_from_index,
    max_spread, preset_relaxed, preset_wide, web_stretch_weight, Finger as FingerSpread,
    FingerSpreadParams, FingerSpreadResult,
};

#[path = "spine_curve_control.rs"]
pub mod spine_curve_control;
pub use spine_curve_control::{
    default_spine_curve_config, new_spine_curve_state, scc_blend, scc_is_neutral,
    scc_kyphosis_angle_rad, scc_lordosis_angle_rad, scc_reset, scc_scoliosis_angle_rad,
    scc_set_kyphosis, scc_set_lordosis, scc_set_scoliosis, scc_to_json, scc_to_weights,
    scc_total_curvature, SpineCurveConfig, SpineCurveState,
};

#[path = "pelvis_tilt_control.rs"]
pub mod pelvis_tilt_control;
pub use pelvis_tilt_control::{
    default_pelvis_tilt_config, new_pelvis_tilt_state, pt_blend, pt_frontal_angle_rad,
    pt_is_neutral, pt_magnitude, pt_reset, pt_sagittal_angle_rad, pt_set_frontal, pt_set_sagittal,
    pt_to_json, pt_to_weights, PelvisTiltConfig, PelvisTiltState,
};

#[path = "clavicle_control.rs"]
pub mod clavicle_control;
pub use clavicle_control::{
    blend_clavicle_states, clavicle_to_json, compute_clavicle_weights, default_clavicle_config,
    new_clavicle_state, set_clavicle_angle, set_clavicle_length, set_clavicle_offset,
    set_clavicle_prominence, ClavicleConfig, ClavicleMorphWeights, ClavicleState,
};

#[path = "wrist_control.rs"]
pub mod wrist_control;
pub use wrist_control::{
    blend_wrist_params, deviation_weight, evaluate_wrist, flexion_weight, styloid_bump,
    tendon_ridge, WristParams, WristResult,
};

#[path = "ankle_control.rs"]
pub mod ankle_control;
pub use ankle_control::{
    achilles_groove, blend_ankle_params, corrective_weight as ankle_corrective_weight,
    dorsiflexion_corrective, evaluate_ankle_morph, malleolus_bump, plantarflexion_corrective,
    thickness_scale, AnkleCorrective, AnkleParams,
};

#[path = "expression_randomizer.rs"]
pub mod expression_randomizer;
pub use expression_randomizer::{
    blend_sampled, dominant_channel, expression_energy as randomizer_expression_energy,
    expression_to_json as randomizer_expression_to_json,
    normalize_expression as randomizer_normalize_expression, sample_expression,
    sample_sparse_expression, ExpressionRandomizerConfig,
};

#[path = "muscle_group_driver.rs"]
pub mod muscle_group_driver;
pub use muscle_group_driver::{
    mgd_active_count, mgd_blend, mgd_bulge_weight, mgd_get, mgd_reset, mgd_set, mgd_to_json,
    mgd_total_activation, new_muscle_group_driver, MuscleActivation,
    MuscleGroup as MuscleBodyGroup, MuscleGroupDriver,
};

#[path = "skin_fold_control.rs"]
pub mod skin_fold_control;
pub use skin_fold_control::{
    default_skin_fold_config, new_skin_fold_state, sf_active_count, sf_blend, sf_depth_m, sf_get,
    sf_is_neutral, sf_reset, sf_set, sf_to_json, sf_width_m, FoldSite, SkinFoldConfig,
    SkinFoldState,
};

#[path = "brow_asymmetry.rs"]
pub mod brow_asymmetry;
pub use brow_asymmetry::{
    ba_blend, ba_furrow_depth, ba_is_neutral, ba_lift_angle_rad, ba_lift_asymmetry, ba_reset,
    ba_set_furrow, ba_set_lift, ba_to_json, ba_to_weights, default_brow_asymmetry_config,
    new_brow_asymmetry_state, BrowAsymmetryConfig, BrowAsymmetryState, BrowSide as BrowAsymSide,
};

#[path = "cheek_hollow_control.rs"]
pub mod cheek_hollow_control;
pub use cheek_hollow_control::{
    blend_cheek_hollow, cheek_hollow_intensity, default_cheek_hollow, evaluate_cheek_hollow,
    is_valid_cheek_hollow, reset_cheek_hollow, set_cheek_hollow_depth, CheekHollowParams,
    CheekHollowResult,
};

#[path = "philtrum_control.rs"]
pub mod philtrum_control;
pub use philtrum_control::{
    apply_philtrum_control, default_philtrum_config, default_philtrum_control, new_philtrum_state,
    philtrum_blend, philtrum_clamp, philtrum_reset, philtrum_set_depth, philtrum_set_length,
    philtrum_set_width, philtrum_to_json, philtrum_to_weights, PhiltrumConfig, PhiltrumControl,
    PhiltrumState,
};

#[path = "nasolabial_fold_control.rs"]
pub mod nasolabial_fold_control;
pub use nasolabial_fold_control::{
    default_nasolabial_fold_config, new_nasolabial_fold_state, nlf_asymmetry, nlf_blend, nlf_depth,
    nlf_is_neutral, nlf_reset, nlf_set_both, nlf_set_depth, nlf_set_length, nlf_to_json,
    nlf_to_weights, NasolabialFoldConfig, NasolabialFoldState, NlSide,
};

#[path = "brow_ridge_control.rs"]
pub mod brow_ridge_control;
pub use brow_ridge_control::{
    blend_brow_ridge, clamp_morph, default_brow_ridge, evaluate_brow_ridge, is_valid_ridge,
    ridge_intensity, set_prominence, set_ridge_width, BrowRidgeParams, BrowRidgeResult,
};

#[path = "cheekbone_v2.rs"]
pub mod cheekbone_v2;
pub use cheekbone_v2::{
    blend_cheekbone_v2, cheekbone_v2_to_json, default_cheekbone_v2, evaluate_cheekbone_v2,
    is_valid_cheekbone_v2, reset_cheekbone_v2, set_arch_width, set_zygomatic_prominence,
    CheekboneV2Params, CheekboneV2Weights,
};

#[path = "alar_base_control.rs"]
pub mod alar_base_control;
pub use alar_base_control::{
    alar_base_to_json, blend_alar_base, default_alar_base, evaluate_alar_base, is_valid_alar_base,
    reset_alar_base, set_alar_flare, set_alar_width, AlarBaseParams, AlarBaseWeights,
};

#[path = "columella_control.rs"]
pub mod columella_control;
pub use columella_control::{
    blend_columella, columella_to_json, default_columella, evaluate_columella, is_valid_columella,
    reset_columella, set_columella_angle, set_columella_length, set_columella_width,
    ColumellaParams, ColumellaWeights,
};

#[path = "neck_thickness_control.rs"]
pub mod neck_thickness_control;
pub use neck_thickness_control::{
    default_neck_thickness_config, neck_clamp, neck_compute_volume, neck_reset, neck_set_depth,
    neck_set_length, neck_set_width, neck_to_json, neck_to_weights, new_neck_thickness_state,
    NeckThicknessConfig, NeckThicknessState,
};

#[path = "breast_shape_control.rs"]
pub mod breast_shape_control;
pub use breast_shape_control::{
    blend_breast_shape, breast_shape_to_json, default_breast_shape, evaluate_breast_shape,
    is_valid_breast_shape, reset_breast_shape, set_breast_ptosis, set_breast_volume,
    BreastShapeParams, BreastShapeWeights,
};

#[path = "waist_control.rs"]
pub mod waist_control;
pub use waist_control::{
    apply_waist_control, default_waist_config, default_waist_control, new_waist_control,
    new_waist_state, set_waist_depth, set_waist_width, waist_circumference_approx, waist_clamp,
    waist_compute_circumference, waist_control_blend, waist_from_param, waist_ratio_to_hip,
    waist_reset, waist_set_depth, waist_set_width, waist_to_json, waist_to_param, waist_to_weights,
    WaistConfig, WaistControl, WaistState,
};

#[path = "hip_width_control.rs"]
pub mod hip_width_control;
pub use hip_width_control::{
    apply_hip_width, default_hip_width, hip_circumference_approx, hip_ratio, hip_width_blend,
    HipWidth,
};

#[path = "belly_shape_control.rs"]
pub mod belly_shape_control;
pub use belly_shape_control::{
    belly_shape_to_json, belly_volume_factor, blend_belly_shape, default_belly_shape,
    evaluate_belly_shape, is_valid_belly_shape, reset_belly_shape, set_belly_bloat,
    set_belly_convexity, BellyShapeParams, BellyShapeWeights,
};

#[path = "gluteal_control.rs"]
pub mod gluteal_control;
pub use gluteal_control::{
    blend_gluteal, default_gluteal, evaluate_gluteal, gluteal_area_index, gluteal_to_json,
    is_valid_gluteal, reset_gluteal, set_gluteal_lift, set_gluteal_projection, set_gluteal_volume,
    GlutealParams, GlutealWeights,
};

#[path = "calf_control.rs"]
pub mod calf_control;
pub use calf_control::{
    apply_calf_control, calf_control_blend, calf_mirror, calf_reset, calf_set_definition,
    calf_set_muscle, calf_to_json, calf_to_weights, default_calf_config, default_calf_control,
    new_calf_state, CalfConfig, CalfControl, CalfState,
};

#[path = "bicep_control.rs"]
pub mod bicep_control;
pub use bicep_control::{
    belly_profile, blend_bicep_params, evaluate_bicep, flexion_corrective, head_separation_groove,
    mirror_bicep, peak_profile, vein_displacement, BicepParams, BicepResult,
};

#[path = "forearm_control.rs"]
pub mod forearm_control;
pub use forearm_control::{
    blend_forearm_states, compute_forearm_weights, default_forearm_config, forearm_to_json,
    new_forearm_state, set_forearm_muscle, set_forearm_pronation, set_forearm_taper,
    set_vein_visibility, ForearmConfig, ForearmMorphWeights, ForearmState,
};

#[path = "finger_length_control.rs"]
pub mod finger_length_control;
pub use finger_length_control::{
    blend_finger_lengths, compute_finger_length_weights, default_finger_length_config,
    finger_length_to_json, new_finger_length_state, set_finger_knuckle_size,
    set_finger_overall_length, set_finger_taper, set_finger_thickness, FingerLengthConfig,
    FingerLengthState, FingerLengthWeights,
};

#[path = "knee_control.rs"]
pub mod knee_control;
pub use knee_control::{
    blend_knee_params, evaluate_knee, fat_pad_profile,
    flexion_corrective as knee_flexion_corrective, patella_profile, popliteal_profile,
    skin_fold_weight, KneeParams, KneeResult,
};

#[path = "foot_arch_control.rs"]
pub mod foot_arch_control;
pub use foot_arch_control::{
    blend_foot_arches, compute_foot_arch_weights, default_foot_arch_config, foot_arch_to_json,
    new_foot_arch_state, set_foot_arch_height, set_foot_arch_length, set_foot_arch_stiffness,
    set_foot_pronation, FootArchConfig, FootArchState, FootArchWeights,
};

#[path = "eye_depth_control.rs"]
pub mod eye_depth_control;
pub use eye_depth_control::{
    default_eye_depth_config, ed_clamp, ed_mirror, ed_reset, ed_set_depth_both, ed_set_depth_left,
    ed_set_depth_right, ed_to_json, ed_to_weights, new_eye_depth_state, EyeDepthConfig,
    EyeDepthState,
};

#[path = "eye_spacing_control.rs"]
pub mod eye_spacing_control;
pub use eye_spacing_control::{
    blend_eye_spacings, compute_eye_spacing_weights, default_eye_spacing_config,
    eye_spacing_to_json, new_eye_spacing_state, set_eye_convergence, set_eye_depth,
    set_eye_distance, set_eye_vertical_offset, EyeSpacingConfig, EyeSpacingState,
    EyeSpacingWeights,
};

#[path = "gum_line_control.rs"]
pub mod gum_line_control;
pub use gum_line_control::{
    blend_gum_line_controls, compute_gum_line_control_weights, default_gum_line_control_config,
    gum_line_control_to_json, new_gum_line_control_state, set_gum_line_control_curvature,
    set_gum_line_control_exposure, set_gum_line_control_recession, set_gum_line_control_width,
    GumLineControlConfig, GumLineControlState, GumLineControlWeights,
};