talking-head-studio 0.4.10 → 0.4.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +299 -337
  2. package/dist/TalkingHead.d.ts +44 -28
  3. package/dist/TalkingHead.js +21 -2
  4. package/dist/TalkingHead.web.d.ts +37 -4
  5. package/dist/TalkingHead.web.js +28 -8
  6. package/dist/TalkingHeadVisualization.d.ts +22 -0
  7. package/dist/TalkingHeadVisualization.js +30 -10
  8. package/dist/api/studioApi.d.ts +12 -1
  9. package/dist/api/studioApi.js +41 -28
  10. package/dist/appearance/apply.js +2 -3
  11. package/dist/appearance/matchers.js +1 -2
  12. package/dist/appearance/schema.js +1 -2
  13. package/dist/contract.d.ts +14 -0
  14. package/dist/contract.js +30 -0
  15. package/dist/core/avatar/avatarCapabilities.d.ts +60 -0
  16. package/dist/core/avatar/avatarCapabilities.js +100 -0
  17. package/dist/core/avatar/backend.d.ts +130 -0
  18. package/dist/core/avatar/backend.js +4 -0
  19. package/dist/core/avatar/backends/gaussian.d.ts +49 -0
  20. package/dist/core/avatar/backends/gaussian.js +293 -0
  21. package/dist/core/avatar/backends/index.d.ts +3 -0
  22. package/dist/core/avatar/backends/index.js +7 -0
  23. package/dist/core/avatar/backends/morphTarget.d.ts +39 -0
  24. package/dist/core/avatar/backends/morphTarget.js +179 -0
  25. package/dist/core/avatar/faceControls.d.ts +40 -0
  26. package/dist/core/avatar/faceControls.js +138 -0
  27. package/dist/core/avatar/motion.d.ts +1713 -0
  28. package/dist/core/avatar/motion.js +550 -0
  29. package/dist/core/avatar/motionRuntime.d.ts +46 -0
  30. package/dist/core/avatar/motionRuntime.js +84 -0
  31. package/dist/core/avatar/schema.d.ts +78 -0
  32. package/dist/core/avatar/schema.js +134 -0
  33. package/dist/core/avatar/visemes.d.ts +47 -1
  34. package/dist/core/avatar/visemes.js +114 -1
  35. package/dist/editor/AvatarCanvas.js +93 -3
  36. package/dist/editor/AvatarEditor.native.js +19 -9
  37. package/dist/editor/AvatarModel.js +2 -2
  38. package/dist/editor/FaceSqueezeEditor.d.ts +3 -1
  39. package/dist/editor/FaceSqueezeEditor.js +195 -121
  40. package/dist/editor/FaceSqueezeEditor.web.d.ts +3 -1
  41. package/dist/editor/FaceSqueezeEditor.web.js +32 -30
  42. package/dist/editor/RigidAccessory.js +18 -4
  43. package/dist/editor/SkinnedClothing.js +19 -9
  44. package/dist/editor/boneLockedDrag.d.ts +11 -0
  45. package/dist/editor/boneLockedDrag.js +68 -0
  46. package/dist/editor/boneSnap.js +22 -12
  47. package/dist/editor/boneSnap.web.d.ts +27 -0
  48. package/dist/editor/boneSnap.web.js +99 -0
  49. package/dist/editor/index.web.d.ts +10 -0
  50. package/dist/editor/index.web.js +26 -0
  51. package/dist/editor/sounds/haha.wav +0 -0
  52. package/dist/editor/sounds/owie.wav +0 -0
  53. package/dist/editor/sounds/stop.wav +0 -0
  54. package/dist/editor/studioTheme.d.ts +14 -14
  55. package/dist/editor/studioTheme.js +19 -16
  56. package/dist/editor/types.d.ts +1 -0
  57. package/dist/html/accessories.d.ts +7 -0
  58. package/dist/html/accessories.js +149 -0
  59. package/dist/html/motion.d.ts +1 -0
  60. package/dist/html/motion.js +189 -0
  61. package/dist/html/visemes.d.ts +7 -0
  62. package/dist/html/visemes.js +348 -0
  63. package/dist/html.d.ts +1 -1
  64. package/dist/html.js +56 -734
  65. package/dist/index.d.ts +19 -1
  66. package/dist/index.js +44 -5
  67. package/dist/index.web.d.ts +18 -1
  68. package/dist/index.web.js +36 -3
  69. package/dist/platform/api/types.d.ts +10 -0
  70. package/dist/platform/api/types.js +2 -0
  71. package/dist/platform/marketplace/types.d.ts +32 -0
  72. package/dist/platform/marketplace/types.js +2 -0
  73. package/dist/platform/sdk/unity.d.ts +27 -0
  74. package/dist/platform/sdk/unity.js +2 -0
  75. package/dist/platform/sdk/unreal.d.ts +23 -0
  76. package/dist/platform/sdk/unreal.js +2 -0
  77. package/dist/platform/sdk/web.d.ts +16 -0
  78. package/dist/platform/sdk/web.js +2 -0
  79. package/dist/sketchfab/api.js +5 -5
  80. package/dist/sketchfab/glbInspect.d.ts +22 -0
  81. package/dist/sketchfab/glbInspect.js +58 -0
  82. package/dist/sketchfab/index.d.ts +3 -0
  83. package/dist/sketchfab/index.js +8 -1
  84. package/dist/sketchfab/inspectRemote.d.ts +13 -0
  85. package/dist/sketchfab/inspectRemote.js +77 -0
  86. package/dist/sketchfab/types.d.ts +10 -0
  87. package/dist/sketchfab/useSketchfabSearch.js +1 -2
  88. package/dist/studio/AccessoryBrowserScreen.d.ts +6 -0
  89. package/dist/studio/AccessoryBrowserScreen.js +626 -0
  90. package/dist/studio/AccessoryPanel.d.ts +10 -0
  91. package/dist/studio/AccessoryPanel.js +396 -0
  92. package/dist/studio/AppearancePanel.d.ts +9 -0
  93. package/dist/studio/AppearancePanel.js +77 -0
  94. package/dist/studio/AvatarCreatorScreen.d.ts +5 -0
  95. package/dist/studio/AvatarCreatorScreen.js +806 -0
  96. package/dist/studio/AvatarEditorScreen.d.ts +14 -0
  97. package/dist/studio/AvatarEditorScreen.js +510 -0
  98. package/dist/studio/AvatarGrid.d.ts +23 -0
  99. package/dist/studio/AvatarGrid.js +257 -0
  100. package/dist/studio/ColorSwatch.d.ts +8 -0
  101. package/dist/studio/ColorSwatch.js +100 -0
  102. package/dist/studio/CreateVoiceProfileSheet.d.ts +8 -0
  103. package/dist/studio/CreateVoiceProfileSheet.js +242 -0
  104. package/dist/studio/DetailsPanel.d.ts +15 -0
  105. package/dist/studio/DetailsPanel.js +239 -0
  106. package/dist/studio/FilamentEditor.d.ts +2 -0
  107. package/dist/studio/FilamentEditor.js +6 -0
  108. package/dist/studio/PrecisionPanel.d.ts +2 -0
  109. package/dist/studio/PrecisionPanel.js +7 -0
  110. package/dist/studio/PublicGalleryScreen.d.ts +5 -0
  111. package/dist/studio/PublicGalleryScreen.js +358 -0
  112. package/dist/studio/SketchfabModelCard.d.ts +20 -0
  113. package/dist/studio/SketchfabModelCard.js +104 -0
  114. package/dist/studio/StudioBrowseHeader.d.ts +9 -0
  115. package/dist/studio/StudioBrowseHeader.js +28 -0
  116. package/dist/studio/StudioEmptyState.d.ts +8 -0
  117. package/dist/studio/StudioEmptyState.js +29 -0
  118. package/dist/studio/StudioFloatingAction.d.ts +13 -0
  119. package/dist/studio/StudioFloatingAction.js +42 -0
  120. package/dist/studio/StudioSectionHeader.d.ts +7 -0
  121. package/dist/studio/StudioSectionHeader.js +27 -0
  122. package/dist/studio/StudioSurfaceCard.d.ts +8 -0
  123. package/dist/studio/StudioSurfaceCard.js +20 -0
  124. package/dist/studio/VoicePanel.d.ts +15 -0
  125. package/dist/studio/VoicePanel.js +305 -0
  126. package/dist/studio/constants.d.ts +3 -0
  127. package/dist/studio/constants.js +6 -0
  128. package/dist/studio/index.d.ts +29 -0
  129. package/dist/studio/index.js +54 -0
  130. package/dist/studio/useSketchfabCapabilities.d.ts +31 -0
  131. package/dist/studio/useSketchfabCapabilities.js +82 -0
  132. package/dist/tts/useDirectVisemeStream.d.ts +2 -6
  133. package/dist/tts/useDirectVisemeStream.js +16 -12
  134. package/dist/tts/useMotionMarkers.d.ts +0 -1
  135. package/dist/tts/useMotionMarkers.js +1 -2
  136. package/dist/utils/avatarUtils.js +94 -8
  137. package/dist/utils/faceLandmarkerToShapeWeights.js +21 -14
  138. package/dist/voice/convertToWav.js +1 -2
  139. package/dist/voice/index.d.ts +3 -0
  140. package/dist/voice/index.js +6 -1
  141. package/dist/voice/useAudioPlayer.js +18 -6
  142. package/dist/voice/useAudioRecording.js +1 -2
  143. package/dist/voice/useFaceControls.d.ts +14 -0
  144. package/dist/voice/useFaceControls.js +81 -0
  145. package/dist/voice/useVoicePreview.d.ts +7 -0
  146. package/dist/voice/useVoicePreview.js +83 -0
  147. package/dist/wardrobe/index.d.ts +3 -0
  148. package/dist/wardrobe/index.js +8 -1
  149. package/dist/wardrobe/useAccessoryGestures.d.ts +20 -0
  150. package/dist/wardrobe/useAccessoryGestures.js +94 -0
  151. package/dist/wardrobe/useAvatarWardrobeHydration.js +9 -4
  152. package/dist/wardrobe/useStudioAvatar.d.ts +29 -0
  153. package/dist/wardrobe/useStudioAvatar.js +186 -0
  154. package/dist/wardrobe/wardrobeStore.d.ts +2 -0
  155. package/dist/wardrobe/wardrobeStore.js +12 -2
  156. package/dist/wgpu/R3FWebGpuCanvas.d.ts +15 -0
  157. package/dist/wgpu/R3FWebGpuCanvas.js +176 -0
  158. package/dist/wgpu/WgpuAvatar.d.ts +26 -2
  159. package/dist/wgpu/WgpuAvatar.js +313 -46
  160. package/dist/wgpu/accessoryDefaults.d.ts +12 -0
  161. package/dist/wgpu/accessoryDefaults.js +19 -0
  162. package/dist/wgpu/blobShim.d.ts +2 -0
  163. package/dist/wgpu/blobShim.js +191 -0
  164. package/dist/wgpu/index.d.ts +1 -0
  165. package/dist/wgpu/index.js +4 -1
  166. package/dist/wgpu/loadGLTFFromUri.d.ts +2 -0
  167. package/dist/wgpu/loadGLTFFromUri.js +75 -0
  168. package/dist/wgpu/morphTables.js +21 -10
  169. package/dist/wgpu/motionState.d.ts +20 -0
  170. package/dist/wgpu/motionState.js +31 -0
  171. package/dist/wgpu/patchThreeForRN.d.ts +28 -0
  172. package/dist/wgpu/patchThreeForRN.js +292 -0
  173. package/dist/wgpu/scenePlacement.d.ts +5 -0
  174. package/dist/wgpu/scenePlacement.js +50 -0
  175. package/dist/wgpu/useAuthedModelUri.js +22 -11
  176. package/dist/wgpu/useNativeGLTF.d.ts +7 -0
  177. package/dist/wgpu/useNativeGLTF.js +36 -0
  178. package/package.json +102 -32
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ // src/core/avatar/faceControls.ts
3
+ // Canonical facial control space shared by all avatar backends.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.createNeutralExpression = createNeutralExpression;
6
+ exports.visemeToExpression = visemeToExpression;
7
+ exports.applyVisemeToExpression = applyVisemeToExpression;
8
+ function createNeutralExpression() {
9
+ return {
10
+ jawOpen: 0,
11
+ mouthSmile: 0,
12
+ mouthFunnel: 0,
13
+ mouthPucker: 0,
14
+ mouthWide: 0,
15
+ upperLipRaise: 0,
16
+ lowerLipDepress: 0,
17
+ cheekRaise: 0,
18
+ blinkLeft: 0,
19
+ blinkRight: 0,
20
+ browInnerUp: 0,
21
+ browDownLeft: 0,
22
+ browDownRight: 0,
23
+ eyeGazeLeft: { x: 0, y: 0 },
24
+ eyeGazeRight: { x: 0, y: 0 },
25
+ };
26
+ }
27
+ function clamp01(v) {
28
+ return v < 0 ? 0 : v > 1 ? 1 : v;
29
+ }
30
+ function scale(v, w) {
31
+ return clamp01(v * w);
32
+ }
33
+ // Map an Oculus viseme + weight into a sparse ExpressionState delta.
34
+ // These coefficients are intentionally simple and can be tuned per-avatar
35
+ // via a calibration layer.
36
+ function visemeToExpression(viseme, weight = 1) {
37
+ const w = clamp01(weight);
38
+ switch (viseme) {
39
+ case 'sil':
40
+ return { jawOpen: 0, mouthPucker: 0, mouthWide: 0 };
41
+ case 'PP':
42
+ return {
43
+ jawOpen: scale(0.05, w),
44
+ mouthPucker: scale(0.7, w),
45
+ };
46
+ case 'FF':
47
+ return {
48
+ jawOpen: scale(0.15, w),
49
+ upperLipRaise: scale(0.2, w),
50
+ lowerLipDepress: scale(0.25, w),
51
+ };
52
+ case 'TH':
53
+ return {
54
+ jawOpen: scale(0.2, w),
55
+ mouthWide: scale(0.15, w),
56
+ };
57
+ case 'DD':
58
+ return {
59
+ jawOpen: scale(0.25, w),
60
+ mouthWide: scale(0.1, w),
61
+ };
62
+ case 'kk':
63
+ return {
64
+ jawOpen: scale(0.3, w),
65
+ };
66
+ case 'CH':
67
+ return {
68
+ jawOpen: scale(0.35, w),
69
+ mouthPucker: scale(0.15, w),
70
+ mouthWide: scale(0.1, w),
71
+ };
72
+ case 'SS':
73
+ return {
74
+ jawOpen: scale(0.1, w),
75
+ mouthWide: scale(0.35, w),
76
+ };
77
+ case 'nn':
78
+ return {
79
+ jawOpen: scale(0.18, w),
80
+ };
81
+ case 'RR':
82
+ return {
83
+ jawOpen: scale(0.22, w),
84
+ mouthPucker: scale(0.2, w),
85
+ };
86
+ case 'aa':
87
+ return {
88
+ jawOpen: scale(0.95, w),
89
+ mouthWide: scale(0.1, w),
90
+ };
91
+ case 'ee':
92
+ return {
93
+ jawOpen: scale(0.45, w),
94
+ mouthWide: scale(0.8, w),
95
+ mouthSmile: scale(0.15, w),
96
+ };
97
+ case 'ih':
98
+ return {
99
+ jawOpen: scale(0.35, w),
100
+ mouthWide: scale(0.55, w),
101
+ };
102
+ case 'oh':
103
+ return {
104
+ jawOpen: scale(0.55, w),
105
+ mouthFunnel: scale(0.6, w),
106
+ mouthPucker: scale(0.2, w),
107
+ };
108
+ case 'ou':
109
+ return {
110
+ jawOpen: scale(0.25, w),
111
+ mouthFunnel: scale(0.85, w),
112
+ mouthPucker: scale(0.45, w),
113
+ };
114
+ default:
115
+ return {};
116
+ }
117
+ }
118
+ // Utility to accumulate a viseme delta into an existing ExpressionState.
119
+ function applyVisemeToExpression(base, viseme, weight = 1) {
120
+ const delta = visemeToExpression(viseme, weight);
121
+ return {
122
+ jawOpen: clamp01(base.jawOpen + (delta.jawOpen ?? 0)),
123
+ mouthSmile: clamp01(base.mouthSmile + (delta.mouthSmile ?? 0)),
124
+ mouthFunnel: clamp01(base.mouthFunnel + (delta.mouthFunnel ?? 0)),
125
+ mouthPucker: clamp01(base.mouthPucker + (delta.mouthPucker ?? 0)),
126
+ mouthWide: clamp01(base.mouthWide + (delta.mouthWide ?? 0)),
127
+ upperLipRaise: clamp01(base.upperLipRaise + (delta.upperLipRaise ?? 0)),
128
+ lowerLipDepress: clamp01(base.lowerLipDepress + (delta.lowerLipDepress ?? 0)),
129
+ cheekRaise: clamp01(base.cheekRaise + (delta.cheekRaise ?? 0)),
130
+ blinkLeft: clamp01(base.blinkLeft + (delta.blinkLeft ?? 0)),
131
+ blinkRight: clamp01(base.blinkRight + (delta.blinkRight ?? 0)),
132
+ browInnerUp: clamp01(base.browInnerUp + (delta.browInnerUp ?? 0)),
133
+ browDownLeft: clamp01(base.browDownLeft + (delta.browDownLeft ?? 0)),
134
+ browDownRight: clamp01(base.browDownRight + (delta.browDownRight ?? 0)),
135
+ eyeGazeLeft: base.eyeGazeLeft,
136
+ eyeGazeRight: base.eyeGazeRight,
137
+ };
138
+ }