@convai/web-sdk 0.2.3 → 0.3.0-beta.0

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 (73) hide show
  1. package/README.md +529 -868
  2. package/dist/core/AudioManager.d.ts.map +1 -1
  3. package/dist/core/AudioManager.js +0 -5
  4. package/dist/core/AudioManager.js.map +1 -1
  5. package/dist/core/BlendshapeQueue.d.ts +128 -0
  6. package/dist/core/BlendshapeQueue.d.ts.map +1 -0
  7. package/dist/core/BlendshapeQueue.js +229 -0
  8. package/dist/core/BlendshapeQueue.js.map +1 -0
  9. package/dist/core/ConvaiClient.d.ts +19 -0
  10. package/dist/core/ConvaiClient.d.ts.map +1 -1
  11. package/dist/core/ConvaiClient.js +67 -29
  12. package/dist/core/ConvaiClient.js.map +1 -1
  13. package/dist/core/MessageHandler.d.ts +7 -0
  14. package/dist/core/MessageHandler.d.ts.map +1 -1
  15. package/dist/core/MessageHandler.js +35 -2
  16. package/dist/core/MessageHandler.js.map +1 -1
  17. package/dist/core/ScreenShareManager.d.ts.map +1 -1
  18. package/dist/core/ScreenShareManager.js +0 -3
  19. package/dist/core/ScreenShareManager.js.map +1 -1
  20. package/dist/core/VideoManager.d.ts.map +1 -1
  21. package/dist/core/VideoManager.js +0 -4
  22. package/dist/core/VideoManager.js.map +1 -1
  23. package/dist/core/index.d.ts +2 -0
  24. package/dist/core/index.d.ts.map +1 -1
  25. package/dist/core/index.js +2 -0
  26. package/dist/core/index.js.map +1 -1
  27. package/dist/core/types.d.ts +19 -0
  28. package/dist/core/types.d.ts.map +1 -1
  29. package/dist/index.d.ts +2 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +2 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/lipsync-helpers/arkitBlendshapeHelpers.d.ts +80 -0
  34. package/dist/lipsync-helpers/arkitBlendshapeHelpers.d.ts.map +1 -0
  35. package/dist/lipsync-helpers/arkitBlendshapeHelpers.js +201 -0
  36. package/dist/lipsync-helpers/arkitBlendshapeHelpers.js.map +1 -0
  37. package/dist/lipsync-helpers/arkitOrder61.d.ts +121 -0
  38. package/dist/lipsync-helpers/arkitOrder61.d.ts.map +1 -0
  39. package/dist/lipsync-helpers/arkitOrder61.js +287 -0
  40. package/dist/lipsync-helpers/arkitOrder61.js.map +1 -0
  41. package/dist/lipsync-helpers/arkitPhonemeReference.d.ts +155 -0
  42. package/dist/lipsync-helpers/arkitPhonemeReference.d.ts.map +1 -0
  43. package/dist/lipsync-helpers/arkitPhonemeReference.js +362 -0
  44. package/dist/lipsync-helpers/arkitPhonemeReference.js.map +1 -0
  45. package/dist/lipsync-helpers/index.d.ts +10 -0
  46. package/dist/lipsync-helpers/index.d.ts.map +1 -0
  47. package/dist/lipsync-helpers/index.js +21 -0
  48. package/dist/lipsync-helpers/index.js.map +1 -0
  49. package/dist/lipsync-helpers/metahumanOrder251.d.ts +115 -0
  50. package/dist/lipsync-helpers/metahumanOrder251.d.ts.map +1 -0
  51. package/dist/lipsync-helpers/metahumanOrder251.js +432 -0
  52. package/dist/lipsync-helpers/metahumanOrder251.js.map +1 -0
  53. package/dist/lipsync-helpers/neurosyncBlendshapeMapper.d.ts +30 -0
  54. package/dist/lipsync-helpers/neurosyncBlendshapeMapper.d.ts.map +1 -0
  55. package/dist/lipsync-helpers/neurosyncBlendshapeMapper.js +315 -0
  56. package/dist/lipsync-helpers/neurosyncBlendshapeMapper.js.map +1 -0
  57. package/dist/react/components/ConvaiWidget.d.ts.map +1 -1
  58. package/dist/react/components/ConvaiWidget.js +43 -3
  59. package/dist/react/components/ConvaiWidget.js.map +1 -1
  60. package/dist/react/hooks/useCharacterInfo.d.ts.map +1 -1
  61. package/dist/react/hooks/useCharacterInfo.js +1 -1
  62. package/dist/react/hooks/useCharacterInfo.js.map +1 -1
  63. package/dist/react/hooks/useConvaiClient.d.ts.map +1 -1
  64. package/dist/react/hooks/useConvaiClient.js +5 -0
  65. package/dist/react/hooks/useConvaiClient.js.map +1 -1
  66. package/dist/utils/speakerManagement.d.ts.map +1 -1
  67. package/dist/utils/speakerManagement.js +0 -5
  68. package/dist/utils/speakerManagement.js.map +1 -1
  69. package/dist/vanilla/AudioRenderer.d.ts +5 -0
  70. package/dist/vanilla/AudioRenderer.d.ts.map +1 -1
  71. package/dist/vanilla/AudioRenderer.js +27 -18
  72. package/dist/vanilla/AudioRenderer.js.map +1 -1
  73. package/package.json +4 -4
@@ -1,5 +1,6 @@
1
1
  import { Room } from 'livekit-client';
2
2
  import { LatencyMonitor } from '../utils/LatencyMonitor';
3
+ import { BlendshapeQueue } from './BlendshapeQueue';
3
4
  /**
4
5
  * Audio processing settings for the microphone input.
5
6
  * These settings help optimize the audio quality and reduce interruptions.
@@ -70,6 +71,13 @@ export interface ConvaiConfig {
70
71
  startWithAudioOn?: boolean;
71
72
  /** Enable text-to-speech audio generation (default: true) */
72
73
  ttsEnabled?: boolean;
74
+ /** Blendshape provider for facial animation (optional, default: "neurosync") */
75
+ blendshapeProvider?: "neurosync";
76
+ /** Blendshape configuration for facial animation format */
77
+ blendshapeConfig?: {
78
+ /** Format of blendshapes: "arkit" or "mha" (Meta Human Animation, default: "mha") */
79
+ format?: "arkit" | "mha";
80
+ };
73
81
  /** Configuration for character actions and environmental context */
74
82
  actionConfig?: {
75
83
  /** List of action names the character can perform */
@@ -273,6 +281,8 @@ export interface IConvaiClient {
273
281
  readonly screenShareControls: ScreenShareControls;
274
282
  /** Latency monitoring (dev tool) */
275
283
  readonly latencyMonitor: LatencyMonitor;
284
+ /** Blendshape queue for time-based lipsync synchronization */
285
+ readonly blendshapeQueue: BlendshapeQueue;
276
286
  /**
277
287
  * Connect to a Convai character.
278
288
  */
@@ -315,6 +325,15 @@ export interface IConvaiClient {
315
325
  * When disabled, character responses won't be spoken aloud.
316
326
  */
317
327
  toggleTts: (enabled: boolean) => void;
328
+ /**
329
+ * Add a post-processor to modify blendshape frames during playback
330
+ * @param processor - Function that processes blendshape frames
331
+ */
332
+ addLipsyncPostProcessor: (processor: import('./BlendshapeQueue').BlendshapePostProcessor) => void;
333
+ /** Remove a post-processor */
334
+ removeLipsyncPostProcessor: (processor: import('./BlendshapeQueue').BlendshapePostProcessor) => void;
335
+ /** Clear all post-processors */
336
+ clearLipsyncPostProcessors: () => void;
318
337
  /**
319
338
  * Subscribe to an event
320
339
  * @param event Event name ('stateChange', 'message', 'connect', 'disconnect', 'error')
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  export * from './react';
2
+ export type { LatencyMonitor, LatencyMeasurement, LatencyStats } from "./utils/LatencyMonitor";
3
+ export * from './lipsync-helpers';
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,SAAS,CAAC;AAGxB,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG/F,cAAc,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
1
  // Default export: React version for backward compatibility
2
2
  // Existing users can continue using: import { useConvaiClient } from '@convai/web-sdk';
3
3
  export * from './react';
4
+ // Export lipsync helpers
5
+ export * from './lipsync-helpers';
4
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,wFAAwF;AACxF,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,wFAAwF;AACxF,cAAc,SAAS,CAAC;AAKxB,yBAAyB;AACzB,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * ARKit Blendshape Helpers
3
+ * Utilities for working with ARKit blendshape arrays (52-60 elements)
4
+ *
5
+ * ARKit Standard: 52 blendshapes (indices 0-51)
6
+ * ARKit Extended: Up to 60 blendshapes with additional facial features
7
+ */
8
+ /**
9
+ * ARKit Standard Blendshape Names (indices 0-51)
10
+ */
11
+ export declare const ARKIT_BLENDSHAPE_NAMES: readonly string[];
12
+ /**
13
+ * Extended blendshapes (indices 52-59) - if provided
14
+ * These are optional extensions beyond standard ARKit
15
+ */
16
+ export declare const ARKIT_EXTENDED_NAMES: readonly string[];
17
+ /**
18
+ * Map ARKit blendshape array to named object (ARKit standard only: 0-51)
19
+ * @param values - Array of blendshape values (length 52-60)
20
+ * @returns Object with blendshape names as keys
21
+ */
22
+ export declare function mapARKitBlendshapesToNames(values: number[]): Record<string, number>;
23
+ /**
24
+ * Get only active blendshapes (above threshold)
25
+ * @param values - Array of blendshape values
26
+ * @param threshold - Minimum value to consider "active" (default: 0.01)
27
+ * @returns Sorted array of active blendshapes
28
+ */
29
+ export declare function getActiveARKitBlendshapes(values: number[], threshold?: number): Array<{
30
+ name: string;
31
+ value: number;
32
+ index: number;
33
+ }>;
34
+ /**
35
+ * Get specific blendshape value by name
36
+ * @param values - Array of blendshape values
37
+ * @param name - Name of the blendshape
38
+ * @returns The value, or 0 if not found
39
+ */
40
+ export declare function getARKitBlendshapeValue(values: number[], name: string): number;
41
+ /**
42
+ * Format ARKit blendshapes for logging
43
+ * @param values - Array of blendshape values
44
+ * @param threshold - Only show values above this (default: 0.01)
45
+ * @param maxEntries - Maximum entries to show (default: 20)
46
+ */
47
+ export declare function formatARKitBlendshapesForLogging(values: number[], threshold?: number, maxEntries?: number): {
48
+ active: Record<string, number>;
49
+ total: number;
50
+ activeCount: number;
51
+ };
52
+ /**
53
+ * Get the most important facial features for speech
54
+ * These are the key blendshapes for lip-sync
55
+ */
56
+ export declare const KEY_LIPSYNC_BLENDSHAPES: {
57
+ readonly jaw: readonly [24];
58
+ readonly lips: readonly [26, 31, 37, 39, 40];
59
+ readonly smile: readonly [43, 44, 45, 46];
60
+ readonly tongue: readonly [51];
61
+ };
62
+ /**
63
+ * Extract only lip-sync relevant blendshapes
64
+ * @param values - Full blendshape array
65
+ * @returns Object with categorized lip-sync blendshapes
66
+ */
67
+ export declare function getLipSyncBlendshapes(values: number[]): {
68
+ jaw: number;
69
+ mouthClose: number;
70
+ mouthFunnel: number;
71
+ mouthPucker: number;
72
+ mouthRollLower: number;
73
+ mouthRollUpper: number;
74
+ mouthSmileLeft: number;
75
+ mouthSmileRight: number;
76
+ mouthStretchLeft: number;
77
+ mouthStretchRight: number;
78
+ tongueOut: number;
79
+ };
80
+ //# sourceMappingURL=arkitBlendshapeHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arkitBlendshapeHelpers.d.ts","sourceRoot":"","sources":["../../src/lipsync-helpers/arkitBlendshapeHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAqD1C,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EASxC,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EAAE,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBxB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,GAAE,MAAa,GACvB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAiCvD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,MAAM,GACX,MAAM,CAeR;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,GAAE,MAAa,EACxB,UAAU,GAAE,MAAW,GACtB;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAgBA;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB;;;;;CAK1B,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAcA"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * ARKit Blendshape Helpers
3
+ * Utilities for working with ARKit blendshape arrays (52-60 elements)
4
+ *
5
+ * ARKit Standard: 52 blendshapes (indices 0-51)
6
+ * ARKit Extended: Up to 60 blendshapes with additional facial features
7
+ */
8
+ /**
9
+ * ARKit Standard Blendshape Names (indices 0-51)
10
+ */
11
+ export const ARKIT_BLENDSHAPE_NAMES = [
12
+ "browDownLeft", // 0
13
+ "browDownRight", // 1
14
+ "browInnerUp", // 2
15
+ "browOuterUpLeft", // 3
16
+ "browOuterUpRight", // 4
17
+ "cheekPuff", // 5
18
+ "cheekSquintLeft", // 6
19
+ "cheekSquintRight", // 7
20
+ "eyeBlinkLeft", // 8
21
+ "eyeBlinkRight", // 9
22
+ "eyeLookDownLeft", // 10
23
+ "eyeLookDownRight", // 11
24
+ "eyeLookInLeft", // 12
25
+ "eyeLookInRight", // 13
26
+ "eyeLookOutLeft", // 14
27
+ "eyeLookOutRight", // 15
28
+ "eyeLookUpLeft", // 16
29
+ "eyeLookUpRight", // 17
30
+ "eyeSquintLeft", // 18
31
+ "eyeSquintRight", // 19
32
+ "eyeWideLeft", // 20
33
+ "eyeWideRight", // 21
34
+ "jawForward", // 22
35
+ "jawLeft", // 23
36
+ "jawOpen", // 24 🔑 KEY for mouth opening
37
+ "jawRight", // 25
38
+ "mouthClose", // 26 🔑 KEY for mouth closing
39
+ "mouthDimpleLeft", // 27
40
+ "mouthDimpleRight", // 28
41
+ "mouthFrownLeft", // 29
42
+ "mouthFrownRight", // 30
43
+ "mouthFunnel", // 31 🔑 KEY for "O" sounds
44
+ "mouthLeft", // 32
45
+ "mouthLowerDownLeft", // 33
46
+ "mouthLowerDownRight", // 34
47
+ "mouthPressLeft", // 35
48
+ "mouthPressRight", // 36
49
+ "mouthPucker", // 37 🔑 KEY for "U" sounds
50
+ "mouthRight", // 38
51
+ "mouthRollLower", // 39
52
+ "mouthRollUpper", // 40
53
+ "mouthShrugLower", // 41
54
+ "mouthShrugUpper", // 42
55
+ "mouthSmileLeft", // 43 🔑 KEY for "ee" sounds
56
+ "mouthSmileRight", // 44 🔑 KEY for "ee" sounds
57
+ "mouthStretchLeft", // 45 🔑 KEY for wide mouth
58
+ "mouthStretchRight", // 46 🔑 KEY for wide mouth
59
+ "mouthUpperUpLeft", // 47
60
+ "mouthUpperUpRight", // 48
61
+ "noseSneerLeft", // 49
62
+ "noseSneerRight", // 50
63
+ "tongueOut", // 51 🔑 KEY for "th" sounds
64
+ ];
65
+ /**
66
+ * Extended blendshapes (indices 52-59) - if provided
67
+ * These are optional extensions beyond standard ARKit
68
+ */
69
+ export const ARKIT_EXTENDED_NAMES = [
70
+ "eyeDilation", // 52 - Pupil dilation
71
+ "eyeConstriction", // 53 - Pupil constriction
72
+ "mouthShrug", // 54 - Combined mouth shrug
73
+ "lipSuckUpper", // 55 - Upper lip suck
74
+ "lipSuckLower", // 56 - Lower lip suck
75
+ "lipFunnel", // 57 - Lip funnel position
76
+ "lipPress", // 58 - Lip press together
77
+ "reserved", // 59 - Reserved for future use
78
+ ];
79
+ /**
80
+ * Map ARKit blendshape array to named object (ARKit standard only: 0-51)
81
+ * @param values - Array of blendshape values (length 52-60)
82
+ * @returns Object with blendshape names as keys
83
+ */
84
+ export function mapARKitBlendshapesToNames(values) {
85
+ const mapped = {};
86
+ // Map standard ARKit blendshapes (0-51)
87
+ for (let i = 0; i < Math.min(values.length, ARKIT_BLENDSHAPE_NAMES.length); i++) {
88
+ mapped[ARKIT_BLENDSHAPE_NAMES[i]] = values[i];
89
+ }
90
+ // Map extended blendshapes if available (52+)
91
+ if (values.length > 52) {
92
+ const extendedStart = 52;
93
+ for (let i = 0; i < Math.min(values.length - extendedStart, ARKIT_EXTENDED_NAMES.length); i++) {
94
+ mapped[ARKIT_EXTENDED_NAMES[i]] = values[extendedStart + i];
95
+ }
96
+ }
97
+ return mapped;
98
+ }
99
+ /**
100
+ * Get only active blendshapes (above threshold)
101
+ * @param values - Array of blendshape values
102
+ * @param threshold - Minimum value to consider "active" (default: 0.01)
103
+ * @returns Sorted array of active blendshapes
104
+ */
105
+ export function getActiveARKitBlendshapes(values, threshold = 0.01) {
106
+ const active = [];
107
+ // Check standard ARKit blendshapes
108
+ for (let i = 0; i < Math.min(values.length, ARKIT_BLENDSHAPE_NAMES.length); i++) {
109
+ if (Math.abs(values[i]) > threshold) {
110
+ active.push({
111
+ name: ARKIT_BLENDSHAPE_NAMES[i],
112
+ value: values[i],
113
+ index: i,
114
+ });
115
+ }
116
+ }
117
+ // Check extended blendshapes
118
+ if (values.length > 52) {
119
+ for (let i = 52; i < Math.min(values.length, 52 + ARKIT_EXTENDED_NAMES.length); i++) {
120
+ if (Math.abs(values[i]) > threshold) {
121
+ active.push({
122
+ name: ARKIT_EXTENDED_NAMES[i - 52],
123
+ value: values[i],
124
+ index: i,
125
+ });
126
+ }
127
+ }
128
+ }
129
+ // Sort by absolute value (descending)
130
+ return active.sort((a, b) => Math.abs(b.value) - Math.abs(a.value));
131
+ }
132
+ /**
133
+ * Get specific blendshape value by name
134
+ * @param values - Array of blendshape values
135
+ * @param name - Name of the blendshape
136
+ * @returns The value, or 0 if not found
137
+ */
138
+ export function getARKitBlendshapeValue(values, name) {
139
+ const index = ARKIT_BLENDSHAPE_NAMES.indexOf(name);
140
+ if (index !== -1 && index < values.length) {
141
+ return values[index];
142
+ }
143
+ const extendedIndex = ARKIT_EXTENDED_NAMES.indexOf(name);
144
+ if (extendedIndex !== -1) {
145
+ const actualIndex = 52 + extendedIndex;
146
+ if (actualIndex < values.length) {
147
+ return values[actualIndex];
148
+ }
149
+ }
150
+ return 0;
151
+ }
152
+ /**
153
+ * Format ARKit blendshapes for logging
154
+ * @param values - Array of blendshape values
155
+ * @param threshold - Only show values above this (default: 0.01)
156
+ * @param maxEntries - Maximum entries to show (default: 20)
157
+ */
158
+ export function formatARKitBlendshapesForLogging(values, threshold = 0.01, maxEntries = 20) {
159
+ const active = getActiveARKitBlendshapes(values, threshold)
160
+ .slice(0, maxEntries)
161
+ .reduce((acc, item) => {
162
+ acc[item.name] = Number(item.value.toFixed(4));
163
+ return acc;
164
+ }, {});
165
+ return {
166
+ active,
167
+ total: values.length,
168
+ activeCount: Object.keys(active).length,
169
+ };
170
+ }
171
+ /**
172
+ * Get the most important facial features for speech
173
+ * These are the key blendshapes for lip-sync
174
+ */
175
+ export const KEY_LIPSYNC_BLENDSHAPES = {
176
+ jaw: [24], // jawOpen
177
+ lips: [26, 31, 37, 39, 40], // mouthClose, mouthFunnel, mouthPucker, mouthRollLower, mouthRollUpper
178
+ smile: [43, 44, 45, 46], // mouthSmile*, mouthStretch*
179
+ tongue: [51], // tongueOut
180
+ };
181
+ /**
182
+ * Extract only lip-sync relevant blendshapes
183
+ * @param values - Full blendshape array
184
+ * @returns Object with categorized lip-sync blendshapes
185
+ */
186
+ export function getLipSyncBlendshapes(values) {
187
+ return {
188
+ jaw: values[24] || 0,
189
+ mouthClose: values[26] || 0,
190
+ mouthFunnel: values[31] || 0,
191
+ mouthPucker: values[37] || 0,
192
+ mouthRollLower: values[39] || 0,
193
+ mouthRollUpper: values[40] || 0,
194
+ mouthSmileLeft: values[43] || 0,
195
+ mouthSmileRight: values[44] || 0,
196
+ mouthStretchLeft: values[45] || 0,
197
+ mouthStretchRight: values[46] || 0,
198
+ tongueOut: values[51] || 0,
199
+ };
200
+ }
201
+ //# sourceMappingURL=arkitBlendshapeHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arkitBlendshapeHelpers.js","sourceRoot":"","sources":["../../src/lipsync-helpers/arkitBlendshapeHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * ARKit 61-Element Custom Order Mapper
3
+ * Maps the custom 61-element ARKit blendshape array to standard ARKit indices
4
+ *
5
+ * This ordering includes:
6
+ * - 52 standard ARKit facial blendshapes (in custom order)
7
+ * - 9 additional values for head and eye rotations
8
+ */
9
+ /**
10
+ * Custom ARKit 61-element ordering
11
+ * This is the order in which blendshapes are received from the server
12
+ */
13
+ export declare const ARKIT_ORDER_61: readonly string[];
14
+ /**
15
+ * Standard ARKit blendshape order (52 elements)
16
+ * This is Apple's official ordering
17
+ */
18
+ export declare const STANDARD_ARKIT_ORDER: readonly string[];
19
+ /**
20
+ * Convert 61-element custom order array to standard 52-element ARKit array
21
+ * @param values61 - 61-element array in custom order
22
+ * @returns 52-element array in standard ARKit order
23
+ */
24
+ export declare function convertOrder61ToStandard(values61: number[]): number[];
25
+ /**
26
+ * Map 61-element array to named object (all 61 values)
27
+ * @param values61 - 61-element array in custom order
28
+ * @returns Object with blendshape/rotation names as keys
29
+ */
30
+ export declare function mapOrder61ToNames(values61: number[]): Record<string, number>;
31
+ /**
32
+ * Get specific blendshape value by name from 61-element array
33
+ * @param values61 - 61-element array in custom order
34
+ * @param name - Name of the blendshape (case-insensitive)
35
+ * @returns The value, or 0 if not found
36
+ */
37
+ export declare function getBlendshapeValueFromOrder61(values61: number[], name: string): number;
38
+ /**
39
+ * Extract head rotation values from 61-element array
40
+ * @param values61 - 61-element array in custom order
41
+ * @returns Object with head rotation values (yaw, pitch, roll)
42
+ */
43
+ export declare function getHeadRotation(values61: number[]): {
44
+ yaw: number;
45
+ pitch: number;
46
+ roll: number;
47
+ };
48
+ /**
49
+ * Extract eye rotation values from 61-element array
50
+ * @param values61 - 61-element array in custom order
51
+ * @returns Object with left and right eye rotation values
52
+ */
53
+ export declare function getEyeRotations(values61: number[]): {
54
+ left: {
55
+ yaw: number;
56
+ pitch: number;
57
+ roll: number;
58
+ };
59
+ right: {
60
+ yaw: number;
61
+ pitch: number;
62
+ roll: number;
63
+ };
64
+ };
65
+ /**
66
+ * Get key lip-sync blendshapes from 61-element array
67
+ * These are the most important values for facial animation
68
+ */
69
+ export declare function getLipSyncValuesFromOrder61(values61: number[]): {
70
+ jawOpen: number;
71
+ mouthClose: number;
72
+ mouthFunnel: number;
73
+ mouthPucker: number;
74
+ mouthSmileLeft: number;
75
+ mouthSmileRight: number;
76
+ mouthStretchLeft: number;
77
+ mouthStretchRight: number;
78
+ mouthRollLower: number;
79
+ mouthRollUpper: number;
80
+ tongueOut: number;
81
+ };
82
+ /**
83
+ * Get active blendshapes from 61-element array (above threshold)
84
+ * @param values61 - 61-element array in custom order
85
+ * @param threshold - Minimum value to consider "active" (default: 0.01)
86
+ * @returns Sorted array of active blendshapes
87
+ */
88
+ export declare function getActiveBlendshapesFromOrder61(values61: number[], threshold?: number): Array<{
89
+ name: string;
90
+ value: number;
91
+ index: number;
92
+ }>;
93
+ /**
94
+ * Format 61-element array for logging
95
+ * @param values61 - 61-element array in custom order
96
+ * @param threshold - Only show values above this (default: 0.01)
97
+ * @param maxEntries - Maximum entries to show (default: 20)
98
+ */
99
+ export declare function formatOrder61ForLogging(values61: number[], threshold?: number, maxEntries?: number): {
100
+ active: Record<string, number>;
101
+ total: number;
102
+ activeCount: number;
103
+ headRotation?: {
104
+ yaw: number;
105
+ pitch: number;
106
+ roll: number;
107
+ };
108
+ eyeRotations?: {
109
+ left: {
110
+ yaw: number;
111
+ pitch: number;
112
+ roll: number;
113
+ };
114
+ right: {
115
+ yaw: number;
116
+ pitch: number;
117
+ roll: number;
118
+ };
119
+ };
120
+ };
121
+ //# sourceMappingURL=arkitOrder61.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arkitOrder61.d.ts","sourceRoot":"","sources":["../../src/lipsync-helpers/arkitOrder61.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EA8DlC,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAqDxC,CAAC;AAoBX;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAWrE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAW5E;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,EAAE,MAAM,GACX,MAAM,CASR;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAMA;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG;IACnD,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD,CAaA;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CAcA;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,GAAE,MAAa,GACvB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBvD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,GAAE,MAAa,EACxB,UAAU,GAAE,MAAW,GACtB;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,YAAY,CAAC,EAAE;QACb,IAAI,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QACnD,KAAK,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;KACrD,CAAC;CACH,CAkBA"}