@convai/web-sdk 1.7.0-beta.1 → 1.7.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 (70) hide show
  1. package/dist/core/AudioManager.js.map +1 -1
  2. package/dist/core/BlendshapeQueue.js.map +1 -1
  3. package/dist/core/ConnectionStateHandler.js.map +1 -1
  4. package/dist/core/ConvaiClient.js.map +1 -1
  5. package/dist/core/EventEmitter.js.map +1 -1
  6. package/dist/core/MemoryManager.js.map +1 -1
  7. package/dist/core/MessageHandler.js.map +1 -1
  8. package/dist/core/ScreenShareManager.js.map +1 -1
  9. package/dist/core/VideoManager.js.map +1 -1
  10. package/dist/core/connectRequest.js.map +1 -1
  11. package/dist/core/contextUpdateRequest.js.map +1 -1
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/core/types.js.map +1 -1
  14. package/dist/core/videoSourceState.js.map +1 -1
  15. package/dist/core/visionRequest.js.map +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/lipsync-helpers/arkitOrder61.js.map +1 -1
  18. package/dist/lipsync-helpers/createBlendshapeQueue.js.map +1 -1
  19. package/dist/lipsync-helpers/declarativeMapping.js.map +1 -1
  20. package/dist/lipsync-helpers/index.js.map +1 -1
  21. package/dist/lipsync-helpers/mappingTypes.js.map +1 -1
  22. package/dist/lipsync-helpers/metahumanOrder251.js.map +1 -1
  23. package/dist/lipsync-helpers/mhaLimitDrivers.js.map +1 -1
  24. package/dist/lipsync-helpers/naturalness/processor.js.map +1 -1
  25. package/dist/lipsync-helpers/naturalness/profiles/mha.js.map +1 -1
  26. package/dist/lipsync-helpers/naturalness/types.js.map +1 -1
  27. package/dist/lipsync-helpers/presetMappers.js.map +1 -1
  28. package/dist/react/components/ConvaiWidget.js.map +1 -1
  29. package/dist/react/components/index.js.map +1 -1
  30. package/dist/react/components/rtc-widget/components/AudioSettingsPanel.js.map +1 -1
  31. package/dist/react/components/rtc-widget/components/AudioVisualizer.js.map +1 -1
  32. package/dist/react/components/rtc-widget/components/ConviMessage.js.map +1 -1
  33. package/dist/react/components/rtc-widget/components/FloatingVideo.js.map +1 -1
  34. package/dist/react/components/rtc-widget/components/MarkdownRenderer.js.map +1 -1
  35. package/dist/react/components/rtc-widget/components/MessageBubble.js.map +1 -1
  36. package/dist/react/components/rtc-widget/components/MessageList.js.map +1 -1
  37. package/dist/react/components/rtc-widget/components/UserMessage.js.map +1 -1
  38. package/dist/react/components/rtc-widget/components/conviComponents/ConviButton.js.map +1 -1
  39. package/dist/react/components/rtc-widget/components/conviComponents/ConviFooter.js.map +1 -1
  40. package/dist/react/components/rtc-widget/components/conviComponents/ConviHeader.js.map +1 -1
  41. package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.js.map +1 -1
  42. package/dist/react/components/rtc-widget/components/conviComponents/VoiceModeOverlay.js.map +1 -1
  43. package/dist/react/components/rtc-widget/components/conviComponents/index.js.map +1 -1
  44. package/dist/react/components/rtc-widget/components/index.js.map +1 -1
  45. package/dist/react/components/rtc-widget/index.js.map +1 -1
  46. package/dist/react/components/rtc-widget/styles/framerConfig.js.map +1 -1
  47. package/dist/react/components/rtc-widget/styles/icons.js.map +1 -1
  48. package/dist/react/components/rtc-widget/styles/index.js.map +1 -1
  49. package/dist/react/components/rtc-widget/styles/styledComponents.js.map +1 -1
  50. package/dist/react/components/rtc-widget/styles/theme.js.map +1 -1
  51. package/dist/react/components/rtc-widget/types/index.js.map +1 -1
  52. package/dist/react/hooks/index.js.map +1 -1
  53. package/dist/react/hooks/useCharacterInfo.js.map +1 -1
  54. package/dist/react/hooks/useConvaiClient.js.map +1 -1
  55. package/dist/react/hooks/useLocalCameraTrack.js.map +1 -1
  56. package/dist/react/index.js.map +1 -1
  57. package/dist/utils/logger.js.map +1 -1
  58. package/dist/vanilla/AudioRenderer.js.map +1 -1
  59. package/dist/vanilla/ConvaiWidget.js.map +1 -1
  60. package/dist/vanilla/WebSocketSession.js.map +1 -1
  61. package/dist/vanilla/icons.js.map +1 -1
  62. package/dist/vanilla/index.js.map +1 -1
  63. package/dist/vanilla/styles.js.map +1 -1
  64. package/dist/vanilla/types.js.map +1 -1
  65. package/dist/vanilla/websocket.js.map +1 -1
  66. package/dist/version.d.ts +1 -1
  67. package/dist/version.d.ts.map +1 -1
  68. package/dist/version.js +1 -1
  69. package/dist/version.js.map +1 -1
  70. package/package.json +9 -3
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;AAExB,yBAAyB;AACzB,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,wFAAwF;AACxF,cAAc,SAAS,CAAC;AAExB,yBAAyB;AACzB,cAAc,mBAAmB,CAAC","sourcesContent":["// Default export: React version for backward compatibility\n// Existing users can continue using: import { useConvaiClient } from '@convai/web-sdk';\nexport * from './react';\n\n// Export lipsync helpers\nexport * from './lipsync-helpers';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"arkitOrder61.js","sourceRoot":"","sources":["../../src/lipsync-helpers/arkitOrder61.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arkitOrder61.js","sourceRoot":"","sources":["../../src/lipsync-helpers/arkitOrder61.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ARKit 61-Element Custom Order Mapper\n * Maps the custom 61-element ARKit blendshape array to standard ARKit indices\n * \n * This ordering includes:\n * - 52 standard ARKit facial blendshapes (in custom order)\n * - 9 additional values for head and eye rotations\n */\n\n/**\n * Custom ARKit 61-element ordering\n * This is the order in which blendshapes are received from the server\n */\nexport const ARKIT_ORDER_61: readonly string[] = [\n \"EyeBlinkLeft\", // 0\n \"EyeLookDownLeft\", // 1\n \"EyeLookInLeft\", // 2\n \"EyeLookOutLeft\", // 3\n \"EyeLookUpLeft\", // 4\n \"EyeSquintLeft\", // 5\n \"EyeWideLeft\", // 6\n \"EyeBlinkRight\", // 7\n \"EyeLookDownRight\", // 8\n \"EyeLookInRight\", // 9\n \"EyeLookOutRight\", // 10\n \"EyeLookUpRight\", // 11\n \"EyeSquintRight\", // 12\n \"EyeWideRight\", // 13\n \"JawForward\", // 14\n \"JawRight\", // 15\n \"JawLeft\", // 16\n \"JawOpen\", // 17 🔑 KEY for mouth opening\n \"MouthClose\", // 18 🔑 KEY for mouth closing\n \"MouthFunnel\", // 19 🔑 KEY for \"O\" sounds\n \"MouthPucker\", // 20 🔑 KEY for \"U\" sounds\n \"MouthRight\", // 21\n \"MouthLeft\", // 22\n \"MouthSmileLeft\", // 23 🔑 KEY for \"ee\" sounds\n \"MouthSmileRight\", // 24 🔑 KEY for \"ee\" sounds\n \"MouthFrownLeft\", // 25\n \"MouthFrownRight\", // 26\n \"MouthDimpleLeft\", // 27\n \"MouthDimpleRight\", // 28\n \"MouthStretchLeft\", // 29 🔑 KEY for wide mouth\n \"MouthStretchRight\", // 30 🔑 KEY for wide mouth\n \"MouthRollLower\", // 31\n \"MouthRollUpper\", // 32\n \"MouthShrugLower\", // 33\n \"MouthShrugUpper\", // 34\n \"MouthPressLeft\", // 35\n \"MouthPressRight\", // 36\n \"MouthLowerDownLeft\", // 37\n \"MouthLowerDownRight\", // 38\n \"MouthUpperUpLeft\", // 39\n \"MouthUpperUpRight\", // 40\n \"BrowDownLeft\", // 41\n \"BrowDownRight\", // 42\n \"BrowInnerUp\", // 43\n \"BrowOuterUpLeft\", // 44\n \"BrowOuterUpRight\", // 45\n \"CheekPuff\", // 46\n \"CheekSquintLeft\", // 47\n \"CheekSquintRight\", // 48\n \"NoseSneerLeft\", // 49\n \"NoseSneerRight\", // 50\n \"TongueOut\", // 51 🔑 KEY for \"th\" sounds\n \"HeadYaw\", // 52 - Head rotation left/right\n \"HeadPitch\", // 53 - Head rotation up/down\n \"HeadRoll\", // 54 - Head rotation tilt\n \"LeftEyeYaw\", // 55 - Left eye rotation left/right\n \"LeftEyePitch\", // 56 - Left eye rotation up/down\n \"LeftEyeRoll\", // 57 - Left eye rotation roll\n \"RightEyeYaw\", // 58 - Right eye rotation left/right\n \"RightEyePitch\", // 59 - Right eye rotation up/down\n \"RightEyeRoll\", // 60 - Right eye rotation roll\n] as const;\n\n/**\n * Standard ARKit blendshape order (52 elements)\n * This is Apple's official ordering\n */\nexport const STANDARD_ARKIT_ORDER: readonly string[] = [\n \"BrowDownLeft\", // 0\n \"BrowDownRight\", // 1\n \"BrowInnerUp\", // 2\n \"BrowOuterUpLeft\", // 3\n \"BrowOuterUpRight\", // 4\n \"CheekPuff\", // 5\n \"CheekSquintLeft\", // 6\n \"CheekSquintRight\", // 7\n \"EyeBlinkLeft\", // 8\n \"EyeBlinkRight\", // 9\n \"EyeLookDownLeft\", // 10\n \"EyeLookDownRight\", // 11\n \"EyeLookInLeft\", // 12\n \"EyeLookInRight\", // 13\n \"EyeLookOutLeft\", // 14\n \"EyeLookOutRight\", // 15\n \"EyeLookUpLeft\", // 16\n \"EyeLookUpRight\", // 17\n \"EyeSquintLeft\", // 18\n \"EyeSquintRight\", // 19\n \"EyeWideLeft\", // 20\n \"EyeWideRight\", // 21\n \"JawForward\", // 22\n \"JawLeft\", // 23\n \"JawOpen\", // 24\n \"JawRight\", // 25\n \"MouthClose\", // 26\n \"MouthDimpleLeft\", // 27\n \"MouthDimpleRight\", // 28\n \"MouthFrownLeft\", // 29\n \"MouthFrownRight\", // 30\n \"MouthFunnel\", // 31\n \"MouthLeft\", // 32\n \"MouthLowerDownLeft\", // 33\n \"MouthLowerDownRight\", // 34\n \"MouthPressLeft\", // 35\n \"MouthPressRight\", // 36\n \"MouthPucker\", // 37\n \"MouthRight\", // 38\n \"MouthRollLower\", // 39\n \"MouthRollUpper\", // 40\n \"MouthShrugLower\", // 41\n \"MouthShrugUpper\", // 42\n \"MouthSmileLeft\", // 43\n \"MouthSmileRight\", // 44\n \"MouthStretchLeft\", // 45\n \"MouthStretchRight\", // 46\n \"MouthUpperUpLeft\", // 47\n \"MouthUpperUpRight\", // 48\n \"NoseSneerLeft\", // 49\n \"NoseSneerRight\", // 50\n \"TongueOut\", // 51\n] as const;\n\n/**\n * Mapping from custom 61-order indices to standard ARKit indices\n * Maps ARKIT_ORDER_61[i] -> STANDARD_ARKIT_ORDER[j]\n */\nconst ORDER_61_TO_STANDARD_MAP = new Map<number, number>();\n\n// Build the mapping at module initialization\nfor (let i = 0; i < ARKIT_ORDER_61.length; i++) {\n const name = ARKIT_ORDER_61[i];\n // Only map the first 52 (standard ARKit blendshapes)\n if (i < 52) {\n const standardIndex = STANDARD_ARKIT_ORDER.indexOf(name as any);\n if (standardIndex !== -1) {\n ORDER_61_TO_STANDARD_MAP.set(i, standardIndex);\n }\n }\n}\n\n/**\n * Convert 61-element custom order array to standard 52-element ARKit array\n * @param values61 - 61-element array in custom order\n * @returns 52-element array in standard ARKit order\n */\nexport function convertOrder61ToStandard(values61: number[]): number[] {\n const standardArray = new Array(52).fill(0);\n \n for (let i = 0; i < Math.min(52, values61.length); i++) {\n const standardIndex = ORDER_61_TO_STANDARD_MAP.get(i);\n if (standardIndex !== undefined) {\n standardArray[standardIndex] = values61[i];\n }\n }\n \n return standardArray;\n}\n\n/**\n * Map 61-element array to named object (all 61 values)\n * @param values61 - 61-element array in custom order\n * @returns Object with blendshape/rotation names as keys\n */\nexport function mapOrder61ToNames(values61: number[]): Record<string, number> {\n const mapped: Record<string, number> = {};\n \n for (let i = 0; i < Math.min(values61.length, ARKIT_ORDER_61.length); i++) {\n // Convert to camelCase (lowercase first letter)\n const name = ARKIT_ORDER_61[i];\n const camelCaseName = name.charAt(0).toLowerCase() + name.slice(1);\n mapped[camelCaseName] = values61[i];\n }\n \n return mapped;\n}\n\n/**\n * Get specific blendshape value by name from 61-element array\n * @param values61 - 61-element array in custom order\n * @param name - Name of the blendshape (case-insensitive)\n * @returns The value, or 0 if not found\n */\nexport function getBlendshapeValueFromOrder61(\n values61: number[],\n name: string\n): number {\n const upperName = name.charAt(0).toUpperCase() + name.slice(1);\n const index = ARKIT_ORDER_61.indexOf(upperName as any);\n \n if (index !== -1 && index < values61.length) {\n return values61[index];\n }\n \n return 0;\n}\n\n/**\n * Extract head rotation values from 61-element array\n * @param values61 - 61-element array in custom order\n * @returns Object with head rotation values (yaw, pitch, roll)\n */\nexport function getHeadRotation(values61: number[]): {\n yaw: number;\n pitch: number;\n roll: number;\n} {\n return {\n yaw: values61[52] || 0,\n pitch: values61[53] || 0,\n roll: values61[54] || 0,\n };\n}\n\n/**\n * Extract eye rotation values from 61-element array\n * @param values61 - 61-element array in custom order\n * @returns Object with left and right eye rotation values\n */\nexport function getEyeRotations(values61: number[]): {\n left: { yaw: number; pitch: number; roll: number };\n right: { yaw: number; pitch: number; roll: number };\n} {\n return {\n left: {\n yaw: values61[55] || 0,\n pitch: values61[56] || 0,\n roll: values61[57] || 0,\n },\n right: {\n yaw: values61[58] || 0,\n pitch: values61[59] || 0,\n roll: values61[60] || 0,\n },\n };\n}\n\n/**\n * Get key lip-sync blendshapes from 61-element array\n * These are the most important values for facial animation\n */\nexport function getLipSyncValuesFromOrder61(values61: number[]): {\n jawOpen: number;\n mouthClose: number;\n mouthFunnel: number;\n mouthPucker: number;\n mouthSmileLeft: number;\n mouthSmileRight: number;\n mouthStretchLeft: number;\n mouthStretchRight: number;\n mouthRollLower: number;\n mouthRollUpper: number;\n tongueOut: number;\n} {\n return {\n jawOpen: values61[17] || 0,\n mouthClose: values61[18] || 0,\n mouthFunnel: values61[19] || 0,\n mouthPucker: values61[20] || 0,\n mouthSmileLeft: values61[23] || 0,\n mouthSmileRight: values61[24] || 0,\n mouthStretchLeft: values61[29] || 0,\n mouthStretchRight: values61[30] || 0,\n mouthRollLower: values61[31] || 0,\n mouthRollUpper: values61[32] || 0,\n tongueOut: values61[51] || 0,\n };\n}\n\n/**\n * Get active blendshapes from 61-element array (above threshold)\n * @param values61 - 61-element array in custom order\n * @param threshold - Minimum value to consider \"active\" (default: 0.01)\n * @returns Sorted array of active blendshapes\n */\nexport function getActiveBlendshapesFromOrder61(\n values61: number[],\n threshold: number = 0.01\n): Array<{ name: string; value: number; index: number }> {\n const active: Array<{ name: string; value: number; index: number }> = [];\n \n for (let i = 0; i < Math.min(values61.length, ARKIT_ORDER_61.length); i++) {\n if (Math.abs(values61[i]) > threshold) {\n const name = ARKIT_ORDER_61[i];\n const camelCaseName = name.charAt(0).toLowerCase() + name.slice(1);\n active.push({\n name: camelCaseName,\n value: values61[i],\n index: i,\n });\n }\n }\n \n // Sort by absolute value (descending)\n return active.sort((a, b) => Math.abs(b.value) - Math.abs(a.value));\n}\n\n/**\n * Format 61-element array for logging\n * @param values61 - 61-element array in custom order\n * @param threshold - Only show values above this (default: 0.01)\n * @param maxEntries - Maximum entries to show (default: 20)\n */\nexport function formatOrder61ForLogging(\n values61: number[],\n threshold: number = 0.01,\n maxEntries: number = 20\n): {\n active: Record<string, number>;\n total: number;\n activeCount: number;\n headRotation?: { yaw: number; pitch: number; roll: number };\n eyeRotations?: {\n left: { yaw: number; pitch: number; roll: number };\n right: { yaw: number; pitch: number; roll: number };\n };\n} {\n const active = getActiveBlendshapesFromOrder61(values61, threshold)\n .slice(0, maxEntries)\n .reduce(\n (acc, item) => {\n acc[item.name] = Number(item.value.toFixed(4));\n return acc;\n },\n {} as Record<string, number>\n );\n\n return {\n active,\n total: values61.length,\n activeCount: Object.keys(active).length,\n headRotation: getHeadRotation(values61),\n eyeRotations: getEyeRotations(values61),\n };\n}\n\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"createBlendshapeQueue.js","sourceRoot":"","sources":["../../src/lipsync-helpers/createBlendshapeQueue.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,cAAc,EACf,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA+B;IACnE,IAAI,MAAoC,CAAC;IAEzC,oCAAoC;IACpC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,oDAAoD;QACpD,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,IAAI,eAAe,CAAC,sBAAsB,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B;IAC5C,OAAO,IAAI,eAAe,CAAC,0BAA0B,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAwB;IAClE,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gCAAgC;IAC9C,OAAO,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CACzB,WAAmD,EACnD,YAAqD;IAErD,6CAA6C;IAC7C,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;QACjC,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO,sBAAsB,CAAC;QAChC,CAAC;QACD,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO,0BAA0B,CAAC;QACpC,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,gBAA+C;IAE/C,MAAM,MAAM,GAAG,gBAAgB,EAAE,MAAM,IAAI,KAAK,CAAC;IAEjD,OAAO;QACL,WAAW,EAAE,MAAM;QACnB,YAAY,EAAE,MAAM,EAAE,yBAAyB;KAChD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"createBlendshapeQueue.js","sourceRoot":"","sources":["../../src/lipsync-helpers/createBlendshapeQueue.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,cAAc,EACf,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA+B;IACnE,IAAI,MAAoC,CAAC;IAEzC,oCAAoC;IACpC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,oDAAoD;QACpD,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,IAAI,eAAe,CAAC,sBAAsB,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B;IAC5C,OAAO,IAAI,eAAe,CAAC,0BAA0B,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAwB;IAClE,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gCAAgC;IAC9C,OAAO,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CACzB,WAAmD,EACnD,YAAqD;IAErD,6CAA6C;IAC7C,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;QACjC,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO,sBAAsB,CAAC;QAChC,CAAC;QACD,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO,0BAA0B,CAAC;QACpC,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,gBAA+C;IAE/C,MAAM,MAAM,GAAG,gBAAgB,EAAE,MAAM,IAAI,KAAK,CAAC;IAEjD,OAAO;QACL,WAAW,EAAE,MAAM;QACnB,YAAY,EAAE,MAAM,EAAE,yBAAyB;KAChD,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Factory functions for creating BlendshapeQueue with preset mappings\n * \n * This provides a convenient API for creating queues with common configurations:\n * - ARKit passthrough\n * - MetaHuman passthrough\n * - Custom mapper\n */\n\nimport { BlendshapeQueue } from '../core/BlendshapeQueue';\nimport { BlendshapeMappingConfig, BlendshapeMapper } from './mappingTypes';\nimport { \n arkitPassthroughMapper, \n metahumanPassthroughMapper,\n identityMapper \n} from './presetMappers';\n\n/**\n * Create a BlendshapeQueue with the specified mapping configuration\n * \n * @param config - Blendshape mapping configuration\n * @returns Configured BlendshapeQueue instance\n * \n * @example\n * ```typescript\n * // ARKit passthrough (no mapping)\n * const queue = createBlendshapeQueue({\n * inputFormat: 'arkit',\n * outputFormat: 'arkit'\n * });\n * \n * // MetaHuman passthrough\n * const queue = createBlendshapeQueue({\n * inputFormat: 'mha',\n * outputFormat: 'mha'\n * });\n * \n * // Custom mapper\n * const queue = createBlendshapeQueue({\n * inputFormat: 'arkit',\n * outputFormat: 'custom',\n * mapper: (input) => {\n * // Your custom mapping logic\n * return new Float32Array(input);\n * }\n * });\n * ```\n */\nexport function createBlendshapeQueue(config: BlendshapeMappingConfig): BlendshapeQueue {\n let mapper: BlendshapeMapper | undefined;\n\n // If custom mapper provided, use it\n if (config.mapper) {\n mapper = config.mapper;\n } else {\n // Select preset mapper based on input/output format\n mapper = selectPresetMapper(config.inputFormat, config.outputFormat);\n }\n\n return new BlendshapeQueue(mapper);\n}\n\n/**\n * Create a BlendshapeQueue for ARKit format (61 elements)\n * Server sends 61-element array, queue stores 61-element array\n */\nexport function createARKitBlendshapeQueue(): BlendshapeQueue {\n return new BlendshapeQueue(arkitPassthroughMapper);\n}\n\n/**\n * Create a BlendshapeQueue for MetaHuman format (251 elements)\n * Server sends 251-element array, queue stores 251-element array\n */\nexport function createMetaHumanBlendshapeQueue(): BlendshapeQueue {\n return new BlendshapeQueue(metahumanPassthroughMapper);\n}\n\n/**\n * Create a BlendshapeQueue with a custom mapper function\n * \n * @param mapper - Custom mapping function\n * \n * @example\n * ```typescript\n * const queue = createCustomBlendshapeQueue((input) => {\n * // Map ARKit to your custom rig\n * const output = new Float32Array(30); // Your rig has 30 blendshapes\n * output[0] = input[17]; // Map JawOpen\n * output[1] = input[18]; // Map MouthClose\n * // ... more mappings\n * return output;\n * });\n * ```\n */\nexport function createCustomBlendshapeQueue(mapper: BlendshapeMapper): BlendshapeQueue {\n return new BlendshapeQueue(mapper);\n}\n\n/**\n * Create a BlendshapeQueue with no mapping (identity/passthrough)\n * Frames are stored as-is without transformation\n */\nexport function createPassthroughBlendshapeQueue(): BlendshapeQueue {\n return new BlendshapeQueue(identityMapper);\n}\n\n/**\n * Select the appropriate preset mapper based on input/output formats\n * @private\n */\nfunction selectPresetMapper(\n inputFormat: BlendshapeMappingConfig['inputFormat'],\n outputFormat: BlendshapeMappingConfig['outputFormat']\n): BlendshapeMapper | undefined {\n // Same input and output format = passthrough\n if (inputFormat === outputFormat) {\n if (inputFormat === 'arkit') {\n return arkitPassthroughMapper;\n }\n if (inputFormat === 'mha') {\n return metahumanPassthroughMapper;\n }\n }\n\n // No mapper needed for unknown combinations\n return undefined;\n}\n\n/**\n * Infer mapping config from ConvaiConfig blendshape settings\n * This is used internally by ConvaiClient to auto-configure the queue\n * \n * @param blendshapeConfig - Blendshape config from ConvaiConfig\n * @returns Mapping configuration for createBlendshapeQueue\n */\nexport function inferMappingFromConfig(\n blendshapeConfig?: { format?: 'arkit' | 'mha' }\n): BlendshapeMappingConfig {\n const format = blendshapeConfig?.format || 'mha';\n \n return {\n inputFormat: format,\n outputFormat: format, // Passthrough by default\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"declarativeMapping.js","sourceRoot":"","sources":["../../src/lipsync-helpers/declarativeMapping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"declarativeMapping.js","sourceRoot":"","sources":["../../src/lipsync-helpers/declarativeMapping.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Declarative Blendshape Mapping\n * \n * Create mappers using a simple name-based mapping configuration.\n * This is much easier than writing custom mapper functions!\n * \n * @example\n * ```typescript\n * const mapping = {\n * \"browDownLeft\": [\"Brow_Drop_L\"],\n * \"browInnerUp\": [\"Brow_Raise_Inner_L\", \"Brow_Raise_Inner_R\"],\n * \"jawOpen\": [\"Jaw_Open\"],\n * \"mouthSmileLeft\": [\"Mouth_Smile\"],\n * \"mouthSmileRight\": [\"Mouth_Smile\"], // Both map to same target (averaged)\n * };\n * ```\n */\n\nimport { ARKIT_ORDER_61 } from './arkitOrder61';\nimport { METAHUMAN_ORDER_251 } from './metahumanOrder251';\nimport type { BlendshapeMapper } from './mappingTypes';\n\n/**\n * Declarative mapping configuration\n * Maps source blendshape names to target blendshape names\n * \n * Format: { [sourceBlendshapeName]: [targetBlendshapeName1, targetBlendshapeName2, ...] }\n * \n * - If multiple source names map to same target, they will be averaged\n * - If one source maps to multiple targets, the value will be copied to all\n */\nexport type BlendshapeNameMapping = {\n [sourceBlendshapeName: string]: string[];\n};\n\n/**\n * Optimized output structure for fast morph target updates\n * Designed for maximum performance when applying to 3D models\n * \n * Use this format for fastest application to character:\n * ```typescript\n * const output = queue.getFrameAtTime(time).frame;\n * // Fast iteration - names and values are parallel arrays\n * for (let i = 0; i < output.names.length; i++) {\n * character.setMorphTarget(output.names[i], output.values[i]);\n * }\n * ```\n */\nexport interface OptimizedBlendshapeOutput {\n /** Array of blendshape names in order */\n names: readonly string[];\n /** Array of blendshape values (parallel to names) */\n values: Float32Array;\n /** Map from name to index for quick lookups */\n nameToIndex: ReadonlyMap<string, number>;\n /** Total number of blendshapes */\n length: number;\n}\n\n/**\n * Create a mapper from ARKit format using declarative name mapping\n * \n * @param mapping - Declarative mapping object\n * @param outputFormat - 'object' (default) or 'optimized'\n * \n * @example\n * ```typescript\n * const mapper = createARKitNameMapper({\n * \"browDownLeft\": [\"Brow_Drop_L\"],\n * \"browDownRight\": [\"Brow_Drop_R\"],\n * \"browInnerUp\": [\"Brow_Raise_Inner_L\", \"Brow_Raise_Inner_R\"],\n * \"jawOpen\": [\"Jaw_Open\"],\n * \"mouthSmileLeft\": [\"Mouth_Smile\"],\n * \"mouthSmileRight\": [\"Mouth_Smile\"], // Will be averaged with left\n * });\n * ```\n */\nexport function createARKitNameMapper(\n mapping: BlendshapeNameMapping,\n outputFormat: 'object' | 'optimized' = 'object'\n): BlendshapeMapper {\n // Build reverse mapping: source index -> target names\n const sourceIndexToTargets = new Map<number, string[]>();\n \n for (const [sourceName, targetNames] of Object.entries(mapping)) {\n // Convert source name to camelCase if needed\n const sourceNameVariations = [\n sourceName,\n sourceName.charAt(0).toUpperCase() + sourceName.slice(1),\n sourceName.charAt(0).toLowerCase() + sourceName.slice(1),\n ];\n \n let sourceIndex = -1;\n for (const variation of sourceNameVariations) {\n sourceIndex = ARKIT_ORDER_61.indexOf(variation as any);\n if (sourceIndex !== -1) break;\n }\n\n if (sourceIndex === -1) {\n console.warn(`[ARKit Name Mapper] Source blendshape \"${sourceName}\" not found in ARKit format`);\n continue;\n }\n \n sourceIndexToTargets.set(sourceIndex, targetNames);\n }\n \n // Build list of unique target names\n const uniqueTargets = new Set<string>();\n for (const targets of sourceIndexToTargets.values()) {\n targets.forEach(t => uniqueTargets.add(t));\n }\n const targetNames = Array.from(uniqueTargets);\n \n // Build accumulation structure: target name -> [source indices]\n const targetToSources = new Map<string, number[]>();\n for (const targetName of targetNames) {\n targetToSources.set(targetName, []);\n }\n \n for (const [sourceIndex, targets] of sourceIndexToTargets.entries()) {\n for (const targetName of targets) {\n targetToSources.get(targetName)?.push(sourceIndex);\n }\n }\n \n // Pre-allocate output structures\n const outputValues = new Float32Array(targetNames.length);\n const nameToIndex = new Map<string, number>();\n targetNames.forEach((name, index) => nameToIndex.set(name, index));\n \n if (outputFormat === 'optimized') {\n // Optimized format: return structured object for fast iteration\n const optimizedOutput: OptimizedBlendshapeOutput = {\n names: targetNames,\n values: outputValues,\n nameToIndex,\n length: targetNames.length,\n };\n \n return (input: number[] | Float32Array): any => {\n outputValues.fill(0);\n \n // Accumulate values for each target\n for (let i = 0; i < targetNames.length; i++) {\n const sourceIndices = targetToSources.get(targetNames[i])!;\n let sum = 0;\n for (const srcIndex of sourceIndices) {\n sum += input[srcIndex] || 0;\n }\n outputValues[i] = sum / sourceIndices.length; // Average if multiple sources\n }\n \n // Return same object reference (values are updated in place)\n return optimizedOutput;\n };\n } else {\n // Object format: return key-value object\n return (input: number[] | Float32Array): any => {\n const output: Record<string, number> = {};\n \n for (const targetName of targetNames) {\n const sourceIndices = targetToSources.get(targetName)!;\n let sum = 0;\n for (const srcIndex of sourceIndices) {\n sum += input[srcIndex] || 0;\n }\n output[targetName] = sum / sourceIndices.length;\n }\n \n // Convert to Float32Array representation (for compatibility)\n // Store as object in the array's properties (hack but works)\n const result = new Float32Array(0);\n (result as any).__blendshapeObject = output;\n return result;\n };\n }\n}\n\n/**\n * Create a mapper from MetaHuman format using declarative name mapping\n * \n * @param mapping - Declarative mapping object (uses MetaHuman blendshape names)\n * @param outputFormat - 'object' (default) or 'optimized'\n * \n * @example\n * ```typescript\n * const mapper = createMetaHumanNameMapper({\n * \"CTRL_expressions_browDownL\": [\"Brow_Drop_L\"],\n * \"CTRL_expressions_browDownR\": [\"Brow_Drop_R\"],\n * \"CTRL_expressions_jawOpen\": [\"Jaw_Open\"],\n * });\n * ```\n */\nexport function createMetaHumanNameMapper(\n mapping: BlendshapeNameMapping,\n outputFormat: 'object' | 'optimized' = 'object'\n): BlendshapeMapper {\n // Build reverse mapping: source index -> target names\n const sourceIndexToTargets = new Map<number, string[]>();\n \n for (const [sourceName, targetNames] of Object.entries(mapping)) {\n const sourceIndex = METAHUMAN_ORDER_251.indexOf(sourceName as any);\n \n if (sourceIndex === -1) {\n console.warn(`[MetaHuman Name Mapper] Source blendshape \"${sourceName}\" not found in MetaHuman format`);\n continue;\n }\n\n sourceIndexToTargets.set(sourceIndex, targetNames);\n }\n\n // Build list of unique target names\n const uniqueTargets = new Set<string>();\n for (const targets of sourceIndexToTargets.values()) {\n targets.forEach(t => uniqueTargets.add(t));\n }\n const targetNames = Array.from(uniqueTargets);\n \n // Build accumulation structure: target name -> [source indices]\n const targetToSources = new Map<string, number[]>();\n for (const targetName of targetNames) {\n targetToSources.set(targetName, []);\n }\n \n for (const [sourceIndex, targets] of sourceIndexToTargets.entries()) {\n for (const targetName of targets) {\n targetToSources.get(targetName)?.push(sourceIndex);\n }\n }\n \n // Pre-allocate output structures\n const outputValues = new Float32Array(targetNames.length);\n const nameToIndex = new Map<string, number>();\n targetNames.forEach((name, index) => nameToIndex.set(name, index));\n \n if (outputFormat === 'optimized') {\n // Optimized format: return structured object for fast iteration\n const optimizedOutput: OptimizedBlendshapeOutput = {\n names: targetNames,\n values: outputValues,\n nameToIndex,\n length: targetNames.length,\n };\n \n return (input: number[] | Float32Array): any => {\n outputValues.fill(0);\n \n // Accumulate values for each target\n for (let i = 0; i < targetNames.length; i++) {\n const sourceIndices = targetToSources.get(targetNames[i])!;\n let sum = 0;\n for (const srcIndex of sourceIndices) {\n sum += input[srcIndex] || 0;\n }\n outputValues[i] = sum / sourceIndices.length; // Average if multiple sources\n }\n \n // Return same object reference (values are updated in place)\n return optimizedOutput;\n };\n } else {\n // Object format: return key-value object\n return (input: number[] | Float32Array): any => {\n const output: Record<string, number> = {};\n \n for (const targetName of targetNames) {\n const sourceIndices = targetToSources.get(targetName)!;\n let sum = 0;\n for (const srcIndex of sourceIndices) {\n sum += input[srcIndex] || 0;\n }\n output[targetName] = sum / sourceIndices.length;\n }\n \n // Convert to Float32Array representation (for compatibility)\n const result = new Float32Array(0);\n (result as any).__blendshapeObject = output;\n return result;\n };\n }\n}\n\n/**\n * Helper to extract blendshape object from mapper output\n */\nexport function getBlendshapeObject(output: any): Record<string, number> {\n if (output.__blendshapeObject) {\n return output.__blendshapeObject;\n }\n if (output.names && output.values) {\n // Convert optimized format to object\n const obj: Record<string, number> = {};\n for (let i = 0; i < output.names.length; i++) {\n obj[output.names[i]] = output.values[i];\n }\n return obj;\n }\n return {};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lipsync-helpers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,iEAAiE;AACjE,+EAA+E;AAE/E,OAAO;AACL,+BAA+B;AAC/B,cAAc;AAEd,kCAAkC;AAClC,oBAAoB;AAEpB,mBAAmB;AACnB,wBAAwB,EACxB,iBAAiB,EACjB,6BAA6B,EAC7B,eAAe,EACf,eAAe,EACf,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AAExB,+EAA+E;AAC/E,wDAAwD;AACxD,+EAA+E;AAE/E,OAAO;AACL,oCAAoC;AACpC,mBAAmB;AAEnB,qBAAqB;AACrB,oBAAoB;AAEpB,0BAA0B;AAC1B,qBAAqB;AAErB,mBAAmB;AACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,iCAAiC,EACjC,oCAAoC,GACrC,MAAM,qBAAqB,CAAC;AAY7B,OAAO,EACL,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,8BAA8B,EAC9B,2BAA2B,EAC3B,gCAAgC,EAChC,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAWjC,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAE9B,sEAAsE;AACtE,oEAAoE;AACpE,gEAAgE;AAChE,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE1E,iEAAiE;AACjE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lipsync-helpers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,iEAAiE;AACjE,+EAA+E;AAE/E,OAAO;AACL,+BAA+B;AAC/B,cAAc;AAEd,kCAAkC;AAClC,oBAAoB;AAEpB,mBAAmB;AACnB,wBAAwB,EACxB,iBAAiB,EACjB,6BAA6B,EAC7B,eAAe,EACf,eAAe,EACf,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AAExB,+EAA+E;AAC/E,wDAAwD;AACxD,+EAA+E;AAE/E,OAAO;AACL,oCAAoC;AACpC,mBAAmB;AAEnB,qBAAqB;AACrB,oBAAoB;AAEpB,0BAA0B;AAC1B,qBAAqB;AAErB,mBAAmB;AACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,iCAAiC,EACjC,oCAAoC,GACrC,MAAM,qBAAqB,CAAC;AAY7B,OAAO,EACL,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,8BAA8B,EAC9B,2BAA2B,EAC3B,gCAAgC,EAChC,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAWjC,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAE9B,sEAAsE;AACtE,oEAAoE;AACpE,gEAAgE;AAChE,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE1E,iEAAiE;AACjE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC","sourcesContent":["/**\n * Lipsync Helpers\n * \n * Essential blendshape order arrays for ARKit and MetaHuman formats.\n * These define the order in which blendshape values are received from Convai's server.\n */\n\n// ============================================================================\n// ARKIT FORMAT (61 elements: 52 blendshapes + 9 rotation values)\n// ============================================================================\n\nexport {\n // ARKit 61-element order array\n ARKIT_ORDER_61,\n \n // Standard ARKit 52-element order\n STANDARD_ARKIT_ORDER,\n \n // Helper functions\n convertOrder61ToStandard,\n mapOrder61ToNames,\n getBlendshapeValueFromOrder61,\n getHeadRotation,\n getEyeRotations,\n getLipSyncValuesFromOrder61,\n getActiveBlendshapesFromOrder61,\n formatOrder61ForLogging,\n} from \"./arkitOrder61\";\n\n// ============================================================================\n// METAHUMAN FORMAT (251 CTRL_expressions_* blendshapes)\n// ============================================================================\n\nexport {\n // MetaHuman 251-element order array\n METAHUMAN_ORDER_251,\n \n // Category breakdown\n METAHUMAN_CATEGORIES,\n \n // Key lipsync blendshapes\n KEY_METAHUMAN_LIPSYNC,\n \n // Helper functions\n getMetaHumanBlendshapeName,\n getMetaHumanBlendshapeIndex,\n getMetaHumanBlendshapesByCategory,\n formatMetaHumanBlendshapesForLogging,\n} from \"./metahumanOrder251\";\n\n// ============================================================================\n// MAPPING SYSTEM\n// ============================================================================\n\nexport type {\n BlendshapeMapper,\n BlendshapeFormat,\n BlendshapeMappingConfig,\n} from \"./mappingTypes\";\n\nexport {\n PRESET_MAPPINGS,\n} from \"./mappingTypes\";\n\nexport {\n arkitPassthroughMapper,\n metahumanPassthroughMapper,\n identityMapper,\n} from \"./presetMappers\";\n\nexport {\n createBlendshapeQueue,\n createARKitBlendshapeQueue,\n createMetaHumanBlendshapeQueue,\n createCustomBlendshapeQueue,\n createPassthroughBlendshapeQueue,\n inferMappingFromConfig,\n} from \"./createBlendshapeQueue\";\n\n// ============================================================================\n// DECLARATIVE NAME-BASED MAPPING\n// ============================================================================\n\nexport type {\n BlendshapeNameMapping,\n OptimizedBlendshapeOutput,\n} from \"./declarativeMapping\";\n\nexport {\n createARKitNameMapper,\n createMetaHumanNameMapper,\n getBlendshapeObject,\n} from \"./declarativeMapping\";\n\n// Modular naturalness pipeline: format profiles + one-call processor.\n// createLipsyncProcessor('mha') wraps symmetrize → limits → gains →\n// envelope → mesh application; new formats plug in as profiles.\nexport {\n createLipsyncProcessor,\n getLipsyncProfile,\n} from \"./naturalness/processor\";\nexport type {\n LipsyncFormat,\n LipsyncFormatProfile,\n LipsyncProcessorOptions,\n LipsyncEnvelopeOptions,\n LipsyncMeshBinding,\n} from \"./naturalness/types\";\nexport { MHA_PROFILE, mhaChannelIndex } from \"./naturalness/profiles/mha\";\n\n// Flat MHA convenience wrappers over the profile (piecemeal use)\nexport {\n MHA_LIMIT_DRIVERS,\n applyMhaLimits,\n MHA_RECOMMENDED_GAINS,\n createMhaGainMask,\n MHA_EYE_CHANNEL_INDICES,\n symmetrizeMhaMouth,\n} from \"./mhaLimitDrivers\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mappingTypes.js","sourceRoot":"","sources":["../../src/lipsync-helpers/mappingTypes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2CH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B;;;OAGG;IACH,iBAAiB,EAAE;QACjB,WAAW,EAAE,OAAgB;QAC7B,YAAY,EAAE,OAAgB;KAC/B;IAED;;;OAGG;IACH,eAAe,EAAE;QACf,WAAW,EAAE,KAAc;QAC3B,YAAY,EAAE,KAAc;KAC7B;CACO,CAAC"}
1
+ {"version":3,"file":"mappingTypes.js","sourceRoot":"","sources":["../../src/lipsync-helpers/mappingTypes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2CH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B;;;OAGG;IACH,iBAAiB,EAAE;QACjB,WAAW,EAAE,OAAgB;QAC7B,YAAY,EAAE,OAAgB;KAC/B;IAED;;;OAGG;IACH,eAAe,EAAE;QACf,WAAW,EAAE,KAAc;QAC3B,YAAY,EAAE,KAAc;KAC7B;CACO,CAAC","sourcesContent":["/**\n * Blendshape Mapping Types\n *\n * Defines interfaces and types for mapping server blendshape data\n * to various target formats (ARKit, MetaHuman, custom rigs, etc.)\n */\n\n/**\n * Function that maps an input blendshape array to an output format\n * @param input - Raw blendshape data from server\n * @returns Mapped blendshape array in target format\n */\nexport type BlendshapeMapper = (input: number[] | Float32Array) => Float32Array;\n\n/**\n * Blendshape format types\n * - arkit: 61-element ARKit format (52 blendshapes + 9 rotation values)\n * - mha: 251-element MetaHuman format (CTRL_expressions_*)\n * - custom: User-defined format with custom mapper\n */\nexport type BlendshapeFormat = \"arkit\" | \"mha\" | \"custom\";\n\n/**\n * Configuration for blendshape mapping\n */\nexport interface BlendshapeMappingConfig {\n /**\n * Input format from server\n * - arkit: Server sends 61-element array\n * - mha: Server sends 251-element array\n */\n inputFormat: BlendshapeFormat;\n\n /**\n * Output format for application\n * - arkit: Map to 61-element ARKit format\n * - mha: Map to 251-element MetaHuman format\n * - custom: Use custom mapper function\n */\n outputFormat: BlendshapeFormat;\n\n /**\n * Custom mapper function (required if inputFormat or outputFormat is 'custom')\n * Takes raw server data and returns mapped blendshapes\n */\n mapper?: BlendshapeMapper;\n}\n\n/**\n * Preset mapping configurations\n */\nexport const PRESET_MAPPINGS = {\n /**\n * ARKit passthrough - no mapping needed\n * Server sends 61 elements, output 61 elements\n */\n ARKIT_PASSTHROUGH: {\n inputFormat: \"arkit\" as const,\n outputFormat: \"arkit\" as const,\n },\n\n /**\n * MetaHuman passthrough - no mapping needed\n * Server sends 251 elements, output 251 elements\n */\n MHA_PASSTHROUGH: {\n inputFormat: \"mha\" as const,\n outputFormat: \"mha\" as const,\n },\n} as const;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"metahumanOrder251.js","sourceRoot":"","sources":["../../src/lipsync-helpers/metahumanOrder251.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metahumanOrder251.js","sourceRoot":"","sources":["../../src/lipsync-helpers/metahumanOrder251.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MetaHuman 251-Element Blendshape Order\n * \n * This is the standard format sent by Convai's MetaHuman blendshape provider.\n * The server sends 251 CTRL_expressions_* values in this specific order.\n * \n * Based on Unreal Engine MetaHuman Control Rig specification.\n * \n * Source: UConvaiNeuroSyncComponent::CtrlExpressionNames[251]\n */\n\n/**\n * MetaHuman 251-element blendshape names (CTRL_expressions_*)\n * This is the order in which blendshapes are received from the server\n */\nexport const METAHUMAN_ORDER_251: readonly string[] = [\n // ============================================================================\n // BROWS (8 blendshapes)\n // ============================================================================\n \"CTRL_expressions_browDownL\", // 0\n \"CTRL_expressions_browDownR\", // 1\n \"CTRL_expressions_browLateralL\", // 2\n \"CTRL_expressions_browLateralR\", // 3\n \"CTRL_expressions_browRaiseInL\", // 4\n \"CTRL_expressions_browRaiseInR\", // 5\n \"CTRL_expressions_browRaiseOuterL\", // 6\n \"CTRL_expressions_browRaiseOuterR\", // 7\n \n // ============================================================================\n // EARS (2 blendshapes)\n // ============================================================================\n \"CTRL_expressions_earUpL\", // 8\n \"CTRL_expressions_earUpR\", // 9\n \n // ============================================================================\n // EYES (43 blendshapes)\n // ============================================================================\n \"CTRL_expressions_eyeBlinkL\", // 10 - 🔑 KEY\n \"CTRL_expressions_eyeBlinkR\", // 11 - 🔑 KEY\n \"CTRL_expressions_eyeCheekRaiseL\", // 12\n \"CTRL_expressions_eyeCheekRaiseR\", // 13\n \"CTRL_expressions_eyeFaceScrunchL\", // 14\n \"CTRL_expressions_eyeFaceScrunchR\", // 15\n \"CTRL_expressions_eyeLidPressL\", // 16\n \"CTRL_expressions_eyeLidPressR\", // 17\n \"CTRL_expressions_eyeLookDownL\", // 18 - 🔑 KEY\n \"CTRL_expressions_eyeLookDownR\", // 19 - 🔑 KEY\n \"CTRL_expressions_eyeLookLeftL\", // 20 - 🔑 KEY\n \"CTRL_expressions_eyeLookLeftR\", // 21 - 🔑 KEY\n \"CTRL_expressions_eyeLookRightL\", // 22 - 🔑 KEY\n \"CTRL_expressions_eyeLookRightR\", // 23 - 🔑 KEY\n \"CTRL_expressions_eyeLookUpL\", // 24 - 🔑 KEY\n \"CTRL_expressions_eyeLookUpR\", // 25 - 🔑 KEY\n \"CTRL_expressions_eyeLowerLidDownL\", // 26\n \"CTRL_expressions_eyeLowerLidDownR\", // 27\n \"CTRL_expressions_eyeLowerLidUpL\", // 28\n \"CTRL_expressions_eyeLowerLidUpR\", // 29\n \"CTRL_expressions_eyeParallelLookDirection\", // 30\n \"CTRL_expressions_eyePupilNarrowL\", // 31\n \"CTRL_expressions_eyePupilNarrowR\", // 32\n \"CTRL_expressions_eyePupilWideL\", // 33\n \"CTRL_expressions_eyePupilWideR\", // 34\n \"CTRL_expressions_eyeRelaxL\", // 35\n \"CTRL_expressions_eyeRelaxR\", // 36\n \"CTRL_expressions_eyeSquintInnerL\", // 37 - 🔑 KEY\n \"CTRL_expressions_eyeSquintInnerR\", // 38 - 🔑 KEY\n \"CTRL_expressions_eyeUpperLidUpL\", // 39\n \"CTRL_expressions_eyeUpperLidUpR\", // 40\n \"CTRL_expressions_eyeWidenL\", // 41 - 🔑 KEY\n \"CTRL_expressions_eyeWidenR\", // 42 - 🔑 KEY\n \n // ============================================================================\n // EYELASHES (8 blendshapes)\n // ============================================================================\n \"CTRL_expressions_eyelashesDownINL\", // 43\n \"CTRL_expressions_eyelashesDownINR\", // 44\n \"CTRL_expressions_eyelashesDownOUTL\", // 45\n \"CTRL_expressions_eyelashesDownOUTR\", // 46\n \"CTRL_expressions_eyelashesUpINL\", // 47\n \"CTRL_expressions_eyelashesUpINR\", // 48\n \"CTRL_expressions_eyelashesUpOUTL\", // 49\n \"CTRL_expressions_eyelashesUpOUTR\", // 50\n \n // ============================================================================\n // JAW (13 blendshapes)\n // ============================================================================\n \"CTRL_expressions_jawBack\", // 51\n \"CTRL_expressions_jawChinCompressL\", // 52\n \"CTRL_expressions_jawChinCompressR\", // 53\n \"CTRL_expressions_jawChinRaiseDL\", // 54\n \"CTRL_expressions_jawChinRaiseDR\", // 55\n \"CTRL_expressions_jawChinRaiseUL\", // 56\n \"CTRL_expressions_jawChinRaiseUR\", // 57\n \"CTRL_expressions_jawClenchL\", // 58\n \"CTRL_expressions_jawClenchR\", // 59\n \"CTRL_expressions_jawFwd\", // 60 - 🔑 KEY\n \"CTRL_expressions_jawLeft\", // 61 - 🔑 KEY\n \"CTRL_expressions_jawOpen\", // 62 - 🔑 KEY (most important!)\n \"CTRL_expressions_jawOpenExtreme\", // 63\n \"CTRL_expressions_jawRight\", // 64 - 🔑 KEY\n \n // ============================================================================\n // MOUTH (133 blendshapes) - Most important for lipsync!\n // ============================================================================\n \"CTRL_expressions_mouthCheekBlowL\", // 65\n \"CTRL_expressions_mouthCheekBlowR\", // 66\n \"CTRL_expressions_mouthCheekSuckL\", // 67\n \"CTRL_expressions_mouthCheekSuckR\", // 68\n \"CTRL_expressions_mouthCornerDepressL\", // 69\n \"CTRL_expressions_mouthCornerDepressR\", // 70\n \"CTRL_expressions_mouthCornerDownL\", // 71\n \"CTRL_expressions_mouthCornerDownR\", // 72\n \"CTRL_expressions_mouthCornerNarrowL\", // 73\n \"CTRL_expressions_mouthCornerNarrowR\", // 74\n \"CTRL_expressions_mouthCornerPullL\", // 75\n \"CTRL_expressions_mouthCornerPullR\", // 76\n \"CTRL_expressions_mouthCornerRounderDL\", // 77\n \"CTRL_expressions_mouthCornerRounderDR\", // 78\n \"CTRL_expressions_mouthCornerRounderUL\", // 79\n \"CTRL_expressions_mouthCornerRounderUR\", // 80\n \"CTRL_expressions_mouthCornerSharpenDL\", // 81\n \"CTRL_expressions_mouthCornerSharpenDR\", // 82\n \"CTRL_expressions_mouthCornerSharpenUL\", // 83\n \"CTRL_expressions_mouthCornerSharpenUR\", // 84\n \"CTRL_expressions_mouthCornerUpL\", // 85\n \"CTRL_expressions_mouthCornerUpR\", // 86\n \"CTRL_expressions_mouthCornerWideL\", // 87\n \"CTRL_expressions_mouthCornerWideR\", // 88\n \"CTRL_expressions_mouthDimpleL\", // 89\n \"CTRL_expressions_mouthDimpleR\", // 90\n \"CTRL_expressions_mouthDown\", // 91\n \"CTRL_expressions_mouthFunnelDL\", // 92 - 🔑 KEY\n \"CTRL_expressions_mouthFunnelDR\", // 93 - 🔑 KEY\n \"CTRL_expressions_mouthFunnelUL\", // 94 - 🔑 KEY\n \"CTRL_expressions_mouthFunnelUR\", // 95 - 🔑 KEY\n \"CTRL_expressions_mouthLeft\", // 96 - 🔑 KEY\n \"CTRL_expressions_mouthLipsBlowL\", // 97\n \"CTRL_expressions_mouthLipsBlowR\", // 98\n \"CTRL_expressions_mouthLipsPressL\", // 99\n \"CTRL_expressions_mouthLipsPressR\", // 100\n \"CTRL_expressions_mouthLipsPullDL\", // 101\n \"CTRL_expressions_mouthLipsPullDR\", // 102\n \"CTRL_expressions_mouthLipsPullUL\", // 103\n \"CTRL_expressions_mouthLipsPullUR\", // 104\n \"CTRL_expressions_mouthLipsPurseDL\", // 105\n \"CTRL_expressions_mouthLipsPurseDR\", // 106\n \"CTRL_expressions_mouthLipsPurseUL\", // 107\n \"CTRL_expressions_mouthLipsPurseUR\", // 108\n \"CTRL_expressions_mouthLipsPushDL\", // 109\n \"CTRL_expressions_mouthLipsPushDR\", // 110\n \"CTRL_expressions_mouthLipsPushUL\", // 111\n \"CTRL_expressions_mouthLipsPushUR\", // 112\n \"CTRL_expressions_mouthLipsStickyLPh1\", // 113\n \"CTRL_expressions_mouthLipsStickyLPh2\", // 114\n \"CTRL_expressions_mouthLipsStickyLPh3\", // 115\n \"CTRL_expressions_mouthLipsStickyRPh1\", // 116\n \"CTRL_expressions_mouthLipsStickyRPh2\", // 117\n \"CTRL_expressions_mouthLipsStickyRPh3\", // 118\n \"CTRL_expressions_mouthLipsThickDL\", // 119\n \"CTRL_expressions_mouthLipsThickDR\", // 120\n \"CTRL_expressions_mouthLipsThickInwardDL\", // 121\n \"CTRL_expressions_mouthLipsThickInwardDR\", // 122\n \"CTRL_expressions_mouthLipsThickInwardUL\", // 123\n \"CTRL_expressions_mouthLipsThickInwardUR\", // 124\n \"CTRL_expressions_mouthLipsThickUL\", // 125\n \"CTRL_expressions_mouthLipsThickUR\", // 126\n \"CTRL_expressions_mouthLipsThinDL\", // 127\n \"CTRL_expressions_mouthLipsThinDR\", // 128\n \"CTRL_expressions_mouthLipsThinInwardDL\", // 129\n \"CTRL_expressions_mouthLipsThinInwardDR\", // 130\n \"CTRL_expressions_mouthLipsThinInwardUL\", // 131\n \"CTRL_expressions_mouthLipsThinInwardUR\", // 132\n \"CTRL_expressions_mouthLipsThinUL\", // 133\n \"CTRL_expressions_mouthLipsThinUR\", // 134\n \"CTRL_expressions_mouthLipsTightenDL\", // 135\n \"CTRL_expressions_mouthLipsTightenDR\", // 136\n \"CTRL_expressions_mouthLipsTightenUL\", // 137\n \"CTRL_expressions_mouthLipsTightenUR\", // 138\n \"CTRL_expressions_mouthLipsTogetherDL\", // 139 - 🔑 KEY\n \"CTRL_expressions_mouthLipsTogetherDR\", // 140 - 🔑 KEY\n \"CTRL_expressions_mouthLipsTogetherUL\", // 141 - 🔑 KEY\n \"CTRL_expressions_mouthLipsTogetherUR\", // 142 - 🔑 KEY\n \"CTRL_expressions_mouthLipsTowardsDL\", // 143\n \"CTRL_expressions_mouthLipsTowardsDR\", // 144\n \"CTRL_expressions_mouthLipsTowardsUL\", // 145\n \"CTRL_expressions_mouthLipsTowardsUR\", // 146\n \"CTRL_expressions_mouthLowerLipBiteL\", // 147\n \"CTRL_expressions_mouthLowerLipBiteR\", // 148\n \"CTRL_expressions_mouthLowerLipDepressL\", // 149\n \"CTRL_expressions_mouthLowerLipDepressR\", // 150\n \"CTRL_expressions_mouthLowerLipRollInL\", // 151\n \"CTRL_expressions_mouthLowerLipRollInR\", // 152\n \"CTRL_expressions_mouthLowerLipRollOutL\", // 153\n \"CTRL_expressions_mouthLowerLipRollOutR\", // 154\n \"CTRL_expressions_mouthLowerLipShiftLeft\", // 155\n \"CTRL_expressions_mouthLowerLipShiftRight\", // 156\n \"CTRL_expressions_mouthLowerLipTowardsTeethL\", // 157\n \"CTRL_expressions_mouthLowerLipTowardsTeethR\", // 158\n \"CTRL_expressions_mouthPressDL\", // 159\n \"CTRL_expressions_mouthPressDR\", // 160\n \"CTRL_expressions_mouthPressUL\", // 161\n \"CTRL_expressions_mouthPressUR\", // 162\n \"CTRL_expressions_mouthRight\", // 163 - 🔑 KEY\n \"CTRL_expressions_mouthSharpCornerPullL\", // 164\n \"CTRL_expressions_mouthSharpCornerPullR\", // 165\n \"CTRL_expressions_mouthStickyDC\", // 166\n \"CTRL_expressions_mouthStickyDINL\", // 167\n \"CTRL_expressions_mouthStickyDINR\", // 168\n \"CTRL_expressions_mouthStickyDOUTL\", // 169\n \"CTRL_expressions_mouthStickyDOUTR\", // 170\n \"CTRL_expressions_mouthStickyUC\", // 171\n \"CTRL_expressions_mouthStickyUINL\", // 172\n \"CTRL_expressions_mouthStickyUINR\", // 173\n \"CTRL_expressions_mouthStickyUOUTL\", // 174\n \"CTRL_expressions_mouthStickyUOUTR\", // 175\n \"CTRL_expressions_mouthStretchL\", // 176 - 🔑 KEY\n \"CTRL_expressions_mouthStretchLipsCloseL\", // 177\n \"CTRL_expressions_mouthStretchLipsCloseR\", // 178\n \"CTRL_expressions_mouthStretchR\", // 179 - 🔑 KEY\n \"CTRL_expressions_mouthUp\", // 180\n \"CTRL_expressions_mouthUpperLipBiteL\", // 181\n \"CTRL_expressions_mouthUpperLipBiteR\", // 182\n \"CTRL_expressions_mouthUpperLipRaiseL\", // 183\n \"CTRL_expressions_mouthUpperLipRaiseR\", // 184\n \"CTRL_expressions_mouthUpperLipRollInL\", // 185\n \"CTRL_expressions_mouthUpperLipRollInR\", // 186\n \"CTRL_expressions_mouthUpperLipRollOutL\", // 187\n \"CTRL_expressions_mouthUpperLipRollOutR\", // 188\n \"CTRL_expressions_mouthUpperLipShiftLeft\", // 189\n \"CTRL_expressions_mouthUpperLipShiftRight\", // 190\n \"CTRL_expressions_mouthUpperLipTowardsTeethL\", // 191\n \"CTRL_expressions_mouthUpperLipTowardsTeethR\", // 192\n \n // ============================================================================\n // NECK (14 blendshapes)\n // ============================================================================\n \"CTRL_expressions_neckDigastricDown\", // 193\n \"CTRL_expressions_neckDigastricUp\", // 194\n \"CTRL_expressions_neckMastoidContractL\", // 195\n \"CTRL_expressions_neckMastoidContractR\", // 196\n \"CTRL_expressions_neckStretchL\", // 197\n \"CTRL_expressions_neckStretchR\", // 198\n \"CTRL_expressions_neckSwallowPh1\", // 199\n \"CTRL_expressions_neckSwallowPh2\", // 200\n \"CTRL_expressions_neckSwallowPh3\", // 201\n \"CTRL_expressions_neckSwallowPh4\", // 202\n \"CTRL_expressions_neckThroatDown\", // 203\n \"CTRL_expressions_neckThroatExhale\", // 204\n \"CTRL_expressions_neckThroatInhale\", // 205\n \"CTRL_expressions_neckThroatUp\", // 206\n \n // ============================================================================\n // NOSE (10 blendshapes)\n // ============================================================================\n \"CTRL_expressions_noseNasolabialDeepenL\", // 207\n \"CTRL_expressions_noseNasolabialDeepenR\", // 208\n \"CTRL_expressions_noseNostrilCompressL\", // 209\n \"CTRL_expressions_noseNostrilCompressR\", // 210\n \"CTRL_expressions_noseNostrilDepressL\", // 211\n \"CTRL_expressions_noseNostrilDepressR\", // 212\n \"CTRL_expressions_noseNostrilDilateL\", // 213\n \"CTRL_expressions_noseNostrilDilateR\", // 214\n \"CTRL_expressions_noseWrinkleL\", // 215\n \"CTRL_expressions_noseWrinkleR\", // 216\n \"CTRL_expressions_noseWrinkleUpperL\", // 217\n \"CTRL_expressions_noseWrinkleUpperR\", // 218\n \n // ============================================================================\n // TEETH (12 blendshapes)\n // ============================================================================\n \"CTRL_expressions_teethBackD\", // 219\n \"CTRL_expressions_teethBackU\", // 220\n \"CTRL_expressions_teethDownD\", // 221\n \"CTRL_expressions_teethDownU\", // 222\n \"CTRL_expressions_teethFwdD\", // 223\n \"CTRL_expressions_teethFwdU\", // 224\n \"CTRL_expressions_teethLeftD\", // 225\n \"CTRL_expressions_teethLeftU\", // 226\n \"CTRL_expressions_teethRightD\", // 227\n \"CTRL_expressions_teethRightU\", // 228\n \"CTRL_expressions_teethUpD\", // 229\n \"CTRL_expressions_teethUpU\", // 230\n \n // ============================================================================\n // TONGUE (20 blendshapes)\n // ============================================================================\n \"CTRL_expressions_tongueBendDown\", // 231\n \"CTRL_expressions_tongueBendUp\", // 232\n \"CTRL_expressions_tongueDown\", // 233\n \"CTRL_expressions_tongueIn\", // 234\n \"CTRL_expressions_tongueLeft\", // 235\n \"CTRL_expressions_tongueNarrow\", // 236\n \"CTRL_expressions_tongueOut\", // 237 - 🔑 KEY\n \"CTRL_expressions_tonguePress\", // 238\n \"CTRL_expressions_tongueRight\", // 239\n \"CTRL_expressions_tongueRoll\", // 240\n \"CTRL_expressions_tongueThick\", // 241\n \"CTRL_expressions_tongueThin\", // 242\n \"CTRL_expressions_tongueTipDown\", // 243\n \"CTRL_expressions_tongueTipLeft\", // 244\n \"CTRL_expressions_tongueTipRight\", // 245\n \"CTRL_expressions_tongueTipUp\", // 246\n \"CTRL_expressions_tongueTwistLeft\", // 247\n \"CTRL_expressions_tongueTwistRight\", // 248\n \"CTRL_expressions_tongueUp\", // 249\n \"CTRL_expressions_tongueWide\", // 250\n] as const;\n\n/**\n * Category breakdown for MetaHuman blendshapes\n */\nexport const METAHUMAN_CATEGORIES = {\n brows: {\n start: 0,\n end: 7,\n count: 8,\n },\n ears: {\n start: 8,\n end: 9,\n count: 2,\n },\n eyes: {\n start: 10,\n end: 52,\n count: 43,\n },\n eyelashes: {\n start: 43,\n end: 50,\n count: 8,\n },\n jaw: {\n start: 51,\n end: 64,\n count: 14,\n },\n mouth: {\n start: 65,\n end: 197,\n count: 133,\n },\n neck: {\n start: 193,\n end: 206,\n count: 14,\n },\n nose: {\n start: 207,\n end: 218,\n count: 12,\n },\n teeth: {\n start: 219,\n end: 230,\n count: 12,\n },\n tongue: {\n start: 231,\n end: 250,\n count: 20,\n },\n};\n\n/**\n * Key blendshapes for lip-sync (most important for speech animation)\n */\nexport const KEY_METAHUMAN_LIPSYNC = {\n // Eyes\n EYE_BLINK_L: 10,\n EYE_BLINK_R: 11,\n \n // Jaw\n JAW_FORWARD: 60,\n JAW_LEFT: 61,\n JAW_OPEN: 62, // Most important!\n JAW_RIGHT: 64,\n \n // Mouth - Funnel (O sounds)\n MOUTH_FUNNEL_DL: 92,\n MOUTH_FUNNEL_DR: 93,\n MOUTH_FUNNEL_UL: 94,\n MOUTH_FUNNEL_UR: 95,\n \n // Mouth - Movement\n MOUTH_LEFT: 96,\n MOUTH_RIGHT: 163,\n \n // Mouth - Stretch (wide mouth)\n MOUTH_STRETCH_L: 176,\n MOUTH_STRETCH_R: 179,\n \n // Mouth - Lips Together\n MOUTH_LIPS_TOGETHER_DL: 139,\n MOUTH_LIPS_TOGETHER_DR: 140,\n MOUTH_LIPS_TOGETHER_UL: 141,\n MOUTH_LIPS_TOGETHER_UR: 142,\n \n // Tongue\n TONGUE_OUT: 237,\n};\n\n/**\n * Get blendshape name by index\n */\nexport function getMetaHumanBlendshapeName(index: number): string | undefined {\n return METAHUMAN_ORDER_251[index];\n}\n\n/**\n * Get blendshape index by name\n */\nexport function getMetaHumanBlendshapeIndex(name: string): number {\n return METAHUMAN_ORDER_251.indexOf(name as any);\n}\n\n/**\n * Get blendshapes by category\n */\nexport function getMetaHumanBlendshapesByCategory(category: keyof typeof METAHUMAN_CATEGORIES): readonly string[] {\n const cat = METAHUMAN_CATEGORIES[category];\n return METAHUMAN_ORDER_251.slice(cat.start, cat.end + 1);\n}\n\n/**\n * Format MetaHuman blendshapes for logging\n */\nexport function formatMetaHumanBlendshapesForLogging(\n values: number[] | Float32Array,\n threshold: number = 0.01,\n maxEntries: number = 20\n): {\n active: Record<string, number>;\n total: number;\n activeCount: number;\n} {\n const active: Record<string, number> = {};\n const activeList: Array<{ name: string; value: number; index: number }> = [];\n \n for (let i = 0; i < Math.min(values.length, METAHUMAN_ORDER_251.length); i++) {\n const value = values[i];\n if (Math.abs(value) > threshold) {\n activeList.push({\n name: METAHUMAN_ORDER_251[i],\n value,\n index: i,\n });\n }\n }\n \n // Sort by absolute value (descending)\n activeList\n .sort((a, b) => Math.abs(b.value) - Math.abs(a.value))\n .slice(0, maxEntries)\n .forEach(item => {\n active[item.name] = Number(item.value.toFixed(4));\n });\n \n return {\n active,\n total: values.length,\n activeCount: activeList.length,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mhaLimitDrivers.js","sourceRoot":"","sources":["../../src/lipsync-helpers/mhaLimitDrivers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EACL,WAAW,EACX,0BAA0B,EAC1B,eAAe,GAChB,MAAM,4BAA4B,CAAC;AAEpC;;;;;GAKG;AAEH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAKxB,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;IACxD,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;IACxE,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;IACxE,SAAS;IACT,SAAS;CACV,CAAC,CAAC,CAAC;AAEJ;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,IAAI,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC,MAAM;QAAE,OAAO;IACtD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,MAAM,qBAAqB,GAChC,0BAA0B,CAAC;AAE7B,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB,CAC/B,YAAoC,EAAE;IAEtC,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,SAAS;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,GAAG,WAAW,CAAC,iBAAiB;CACjC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,IAAI,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC,MAAM;QAAE,OAAO;IACtD,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACtC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACd,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"mhaLimitDrivers.js","sourceRoot":"","sources":["../../src/lipsync-helpers/mhaLimitDrivers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EACL,WAAW,EACX,0BAA0B,EAC1B,eAAe,GAChB,MAAM,4BAA4B,CAAC;AAEpC;;;;;GAKG;AAEH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAKxB,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;IACxD,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;IACxE,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;IACxE,SAAS;IACT,SAAS;CACV,CAAC,CAAC,CAAC;AAEJ;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,IAAI,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC,MAAM;QAAE,OAAO;IACtD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,MAAM,qBAAqB,GAChC,0BAA0B,CAAC;AAE7B,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB,CAC/B,YAAoC,EAAE;IAEtC,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,SAAS;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,GAAG,WAAW,CAAC,iBAAiB;CACjC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,IAAI,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC,MAAM;QAAE,OAAO;IACtD,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACtC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACd,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;AACH,CAAC","sourcesContent":["import { METAHUMAN_ORDER_251 } from \"./metahumanOrder251\";\nimport {\n MHA_PROFILE,\n MHA_RECOMMENDED_GAIN_TABLE,\n mhaChannelIndex,\n} from \"./naturalness/profiles/mha\";\n\n/**\n * Flat MHA convenience helpers — thin wrappers over the modular\n * naturalness profile (see `naturalness/`). Prefer\n * `createLipsyncProcessor('mha')` for the full pipeline in one call;\n * these remain for piecemeal use.\n */\n\n/** Resolved limit couplings over the MHA-251 frame layout. */\nexport const MHA_LIMIT_DRIVERS: readonly {\n source: string;\n target: string;\n sourceIdx: number;\n targetIdx: number;\n}[] = MHA_PROFILE.limits.map(([sourceIdx, targetIdx]) => ({\n source: METAHUMAN_ORDER_251[sourceIdx].replace(/^CTRL_expressions_/, \"\"),\n target: METAHUMAN_ORDER_251[targetIdx].replace(/^CTRL_expressions_/, \"\"),\n sourceIdx,\n targetIdx,\n}));\n\n/**\n * Apply the MetaHuman limit drivers to a 251-dim frame IN PLACE:\n * each target channel becomes max(target, source). No-op for other formats.\n */\nexport function applyMhaLimits(frame: Float32Array): void {\n if (frame.length < METAHUMAN_ORDER_251.length) return;\n for (const [s, t] of MHA_PROFILE.limits) {\n if (frame[s] > frame[t]) frame[t] = frame[s];\n }\n}\n\n/** Production-tuned per-channel gains (short control name → gain). */\nexport const MHA_RECOMMENDED_GAINS: Record<string, number> =\n MHA_RECOMMENDED_GAIN_TABLE;\n\n/** Build a 251-length gain mask from MHA_RECOMMENDED_GAINS (+ overrides). */\nexport function createMhaGainMask(\n overrides: Record<string, number> = {},\n): Float32Array {\n const mask = new Float32Array(MHA_PROFILE.recommendedGains);\n for (const [name, gain] of Object.entries(overrides)) {\n const i = mhaChannelIndex(name);\n if (i !== undefined) mask[i] = gain;\n }\n return mask;\n}\n\n/**\n * MHA frame indices of the eye channels (blink, look, lids). If you run a\n * procedural blink or gaze system, SKIP these when applying stream frames.\n */\nexport const MHA_EYE_CHANNEL_INDICES: readonly number[] = [\n ...MHA_PROFILE.eyeChannelIndices,\n];\n\n/**\n * Average every sided mouth/jaw L/R pair IN PLACE — streams drive the two\n * sides unevenly (measured up to 1.5×), which reads as a lopsided mouth.\n */\nexport function symmetrizeMhaMouth(frame: Float32Array): void {\n if (frame.length < METAHUMAN_ORDER_251.length) return;\n for (const [li, ri] of MHA_PROFILE.mouthPairs) {\n const m = (frame[li] + frame[ri]) / 2;\n frame[li] = m;\n frame[ri] = m;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"processor.js","sourceRoot":"","sources":["../../../src/lipsync-helpers/naturalness/processor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processor.js","sourceRoot":"","sources":["../../../src/lipsync-helpers/naturalness/processor.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n LipsyncFormat,\n LipsyncFormatProfile,\n LipsyncMeshBinding,\n LipsyncProcessorOptions,\n} from \"./types\";\nimport { MHA_PROFILE } from \"./profiles/mha\";\n\n/**\n * createLipsyncProcessor — the one-call naturalness pipeline for a stream\n * format. Wraps every per-frame pattern from the lipsync docs:\n *\n * raw frame → symmetrize L/R → rig limit couplings → per-channel gains\n * → bloom/settle envelope → morph targets (eye channels\n * optionally left to your procedural blink/gaze)\n *\n * ```ts\n * const lipsync = createLipsyncProcessor('mha', { skipEyeChannels: true });\n * const bindings = lipsync.bindAll(gltf.scene); // repairs names, maps slots\n *\n * // per render tick:\n * lipsync.tick(getFrameOrNull(), delta, bindings);\n * ```\n */\n\nconst PROFILES: Partial<Record<LipsyncFormat, LipsyncFormatProfile>> = {\n mha: MHA_PROFILE,\n};\n\n/** Resolve a registered format profile; throws a helpful error otherwise. */\nexport function getLipsyncProfile(format: LipsyncFormat): LipsyncFormatProfile {\n const profile = PROFILES[format];\n if (!profile) {\n throw new Error(\n `[lipsync-helpers] no naturalness profile for format \"${format}\" yet — ` +\n `available: ${Object.keys(PROFILES).join(\", \")}. ` +\n `Pass a custom LipsyncFormatProfile to createLipsyncProcessor instead.`,\n );\n }\n return profile;\n}\n\nexport interface LipsyncProcessor {\n profile: LipsyncFormatProfile;\n /**\n * Shape a raw frame (pass null while the bot is silent). Returns the\n * envelope-weighted frame to write this tick, or null once fully\n * settled. The returned array is internal scratch — copy if you keep it.\n */\n process(frame: Float32Array | null, deltaSeconds: number): Float32Array | null;\n /** Resolve one mesh's morph slots (repairs known name mangling in place). */\n bindMesh(mesh: LipsyncMeshBinding[\"mesh\"]): LipsyncMeshBinding | null;\n /** Traverse a scene/root and bind every mesh with matching morphs. */\n bindAll(root: {\n traverse: (cb: (obj: unknown) => void) => void;\n }): LipsyncMeshBinding[];\n /** Write a processed frame onto bindings (no-op for null). */\n apply(out: Float32Array | null, bindings: LipsyncMeshBinding[]): void;\n /** process + apply in one call. */\n tick(\n frame: Float32Array | null,\n deltaSeconds: number,\n bindings: LipsyncMeshBinding[],\n ): void;\n}\n\nexport function createLipsyncProcessor(\n formatOrProfile: LipsyncFormat | LipsyncFormatProfile,\n options: LipsyncProcessorOptions = {},\n): LipsyncProcessor {\n const profile =\n typeof formatOrProfile === \"string\"\n ? getLipsyncProfile(formatOrProfile)\n : formatOrProfile;\n\n const {\n symmetrizeMouth = true,\n applyLimits = true,\n useRecommendedGains = true,\n gainOverrides = {},\n skipEyeChannels = false,\n envelope = {},\n } = options;\n\n const dim = profile.channelNames.length;\n\n // Effective per-channel gains: recommended table (or 1) + overrides.\n const gains = new Float32Array(dim).fill(1);\n if (useRecommendedGains) gains.set(profile.recommendedGains);\n const shortIndex = new Map<string, number>();\n profile.channelNames.forEach((name, i) => {\n shortIndex.set(name, i);\n // also register without common prefixes for override convenience\n shortIndex.set(name.replace(/^CTRL_expressions_/, \"\"), i);\n });\n for (const [name, gain] of Object.entries(gainOverrides)) {\n const i = shortIndex.get(name);\n if (i !== undefined) gains[i] = gain;\n }\n\n const attackTau = envelope === false ? 0 : envelope.attack ?? 0.09;\n const releaseTau = envelope === false ? 0 : envelope.release ?? 0.18;\n\n // Scratch state\n const work = new Float32Array(dim);\n let last: Float32Array | null = null;\n let env = envelope === false ? 1 : 0;\n\n const shape = (src: Float32Array): Float32Array => {\n work.set(src.subarray(0, dim));\n if (symmetrizeMouth) {\n for (const [li, ri] of profile.mouthPairs) {\n const m = (work[li] + work[ri]) / 2;\n work[li] = m;\n work[ri] = m;\n }\n }\n if (applyLimits) {\n for (const [s, t] of profile.limits) {\n if (work[s] > work[t]) work[t] = work[s];\n }\n }\n for (let i = 0; i < dim; i++) work[i] *= gains[i];\n return work;\n };\n\n const process: LipsyncProcessor[\"process\"] = (frame, delta) => {\n if (envelope !== false) {\n const target = frame ? 1 : 0;\n const tau = target > env ? attackTau : releaseTau;\n env += (target - env) * (1 - Math.exp(-delta / Math.max(tau, 1e-4)));\n }\n if (frame && frame.length >= dim) {\n last = shape(frame);\n } else if (!frame && (envelope === false || env < 0.005)) {\n last = null;\n return null;\n }\n if (!last) return null;\n if (envelope !== false && env < 1) {\n // weight the scratch in place (last === work)\n for (let i = 0; i < dim; i++) work[i] = last[i] * env;\n return work;\n }\n return last;\n };\n\n const bindMesh: LipsyncProcessor[\"bindMesh\"] = (mesh) => {\n const dict = mesh.morphTargetDictionary;\n if (!dict || !mesh.morphTargetInfluences) return null;\n // Repair known export name-mangling in place (idempotent).\n for (const key of Object.keys(dict)) {\n const fixed = profile.normalizeMorphName(key);\n if (fixed !== key) {\n dict[fixed] = dict[key];\n delete dict[key];\n }\n }\n const slots = new Int32Array(dim).fill(-1);\n let matched = 0;\n profile.channelNames.forEach((name, i) => {\n const slot = dict[name];\n if (slot !== undefined) {\n slots[i] = slot;\n matched++;\n }\n });\n return matched > 0 ? { mesh, slots, matched } : null;\n };\n\n const bindAll: LipsyncProcessor[\"bindAll\"] = (root) => {\n const bindings: LipsyncMeshBinding[] = [];\n root.traverse((obj) => {\n const m = obj as LipsyncMeshBinding[\"mesh\"] & { isMesh?: boolean };\n if (!m.isMesh) return;\n const b = bindMesh(m);\n if (b) bindings.push(b);\n });\n return bindings;\n };\n\n const apply: LipsyncProcessor[\"apply\"] = (out, bindings) => {\n if (!out) return;\n const eyes = profile.eyeChannelIndices;\n for (const b of bindings) {\n const infl = b.mesh.morphTargetInfluences!;\n for (let i = 0; i < dim; i++) {\n const slot = b.slots[i];\n if (slot < 0) continue;\n if (skipEyeChannels && eyes.has(i)) continue;\n infl[slot] = out[i];\n }\n }\n };\n\n return {\n profile,\n process,\n bindMesh,\n bindAll,\n apply,\n tick(frame, delta, bindings) {\n apply(process(frame, delta), bindings);\n },\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mha.js","sourceRoot":"","sources":["../../../../src/lipsync-helpers/naturalness/profiles/mha.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mha.js","sourceRoot":"","sources":["../../../../src/lipsync-helpers/naturalness/profiles/mha.ts"],"names":[],"mappings":"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","sourcesContent":["import { METAHUMAN_ORDER_251 } from \"../../metahumanOrder251\";\nimport type { LipsyncFormatProfile } from \"../types\";\n\n/**\n * MetaHuman (`mha`, 251-channel) format profile.\n *\n * The limit drivers are the couplings Unreal's MetaHuman rig applies\n * natively and the stream is authored against — most visibly jawOpen must\n * drive the four mouthLipsTogether* channels so the lips stay in contact\n * while the jaw moves. Without them every jaw opening bares the teeth.\n */\n\nconst MHA_INDEX: Record<string, number> = (() => {\n const m: Record<string, number> = {};\n METAHUMAN_ORDER_251.forEach((ctrl, i) => {\n m[ctrl.replace(/^CTRL_expressions_/, \"\")] = i;\n });\n return m;\n})();\n\n/** [source, target] short names — target becomes max(target, source). */\nconst LIMIT_DEFS: readonly (readonly [string, string])[] = [\n [\"eyeBlinkL\", \"eyeLidPressL\"],\n [\"eyeBlinkR\", \"eyeLidPressR\"],\n [\"noseWrinkleL\", \"noseWrinkleUpperL\"],\n [\"noseWrinkleR\", \"noseWrinkleUpperR\"],\n [\"mouthStretchL\", \"mouthStretchLipsCloseL\"],\n [\"mouthStretchR\", \"mouthStretchLipsCloseR\"],\n [\"jawOpen\", \"jawOpenExtreme\"],\n [\"jawOpen\", \"mouthLipsTogetherUL\"],\n [\"jawOpen\", \"mouthLipsTogetherUR\"],\n [\"jawOpen\", \"mouthLipsTogetherDL\"],\n [\"jawOpen\", \"mouthLipsTogetherDR\"],\n];\n\n/** Production-tuned per-channel gains (short name → gain). */\nexport const MHA_RECOMMENDED_GAIN_TABLE: Record<string, number> = {\n // Conversational aperture: 0.6 reads mumbled, raw bares the teeth.\n jawOpen: 0.72,\n jawOpenExtreme: 0.42,\n // Lateral shifts only ever read as a lopsided mouth once L/R pairs are\n // symmetrized.\n jawLeft: 0,\n jawRight: 0,\n mouthLeft: 0,\n mouthRight: 0,\n // Teeth exposure matched to real speech: upper teeth glimpsed on open\n // vowels, lower teeth mostly hidden.\n mouthUpperLipRaiseL: 0.6,\n mouthUpperLipRaiseR: 0.6,\n mouthLowerLipDepressL: 0.45,\n mouthLowerLipDepressR: 0.45,\n // Lips ride close to the teeth through normal speech.\n mouthLipsTogetherUL: 0.8,\n mouthLipsTogetherUR: 0.8,\n mouthLipsTogetherDL: 0.8,\n mouthLipsTogetherDR: 0.8,\n // Rounding on /u/ /w/ is under-driven by the stream. (Do NOT boost\n // cornerPull/stretch — amplified EE spread reads as a grimace.)\n mouthFunnelUL: 1.15,\n mouthFunnelUR: 1.15,\n mouthFunnelDL: 1.15,\n mouthFunnelDR: 1.15,\n mouthLipsPurseUL: 1.15,\n mouthLipsPurseUR: 1.15,\n mouthLipsPurseDL: 1.15,\n mouthLipsPurseDR: 1.15,\n};\n\nconst EYE_CHANNEL_NAMES = [\n \"eyeBlinkL\", \"eyeBlinkR\",\n \"eyeLookUpL\", \"eyeLookUpR\", \"eyeLookDownL\", \"eyeLookDownR\",\n \"eyeLookLeftL\", \"eyeLookLeftR\", \"eyeLookRightL\", \"eyeLookRightR\",\n \"eyeRelaxL\", \"eyeRelaxR\", \"eyeLowerLidUpL\", \"eyeLowerLidUpR\",\n];\n\nexport const MHA_PROFILE: LipsyncFormatProfile = {\n format: \"mha\",\n channelNames: METAHUMAN_ORDER_251,\n\n limits: LIMIT_DEFS.flatMap(([s, t]) =>\n MHA_INDEX[s] !== undefined && MHA_INDEX[t] !== undefined\n ? [[MHA_INDEX[s], MHA_INDEX[t]] as const]\n : [],\n ),\n\n recommendedGains: (() => {\n const g = new Float32Array(METAHUMAN_ORDER_251.length).fill(1);\n for (const [name, gain] of Object.entries(MHA_RECOMMENDED_GAIN_TABLE)) {\n const i = MHA_INDEX[name];\n if (i !== undefined) g[i] = gain;\n }\n return g;\n })(),\n\n eyeChannelIndices: new Set(\n EYE_CHANNEL_NAMES.flatMap((n) =>\n MHA_INDEX[n] !== undefined ? [MHA_INDEX[n]] : [],\n ),\n ),\n\n mouthPairs: (() => {\n const pairs: Array<[number, number]> = [];\n METAHUMAN_ORDER_251.forEach((name, li) => {\n if (!/^CTRL_expressions_(mouth|jaw)/.test(name) || !/L$/.test(name))\n return;\n const ri = METAHUMAN_ORDER_251.indexOf(name.replace(/L$/, \"R\"));\n if (ri >= 0) pairs.push([li, ri]);\n });\n return pairs;\n })(),\n\n // Some exports drop the underscore after the prefix\n // (CTRL_expressionsjawOpen) — repair so name lookups work.\n normalizeMorphName: (name) =>\n name.replace(/^CTRL_expressions(?!_)/, \"CTRL_expressions_\"),\n};\n\n/** Short channel name → MHA-251 frame index (e.g. \"jawOpen\" → 62). */\nexport function mhaChannelIndex(shortName: string): number | undefined {\n return MHA_INDEX[shortName];\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lipsync-helpers/naturalness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lipsync-helpers/naturalness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG","sourcesContent":["/**\n * Format-agnostic lipsync naturalness pipeline — shared types.\n *\n * A {@link LipsyncFormatProfile} describes everything format-specific\n * (channel names, rig couplings, tuned gains, eye channels, L/R pairs);\n * the processor in `processor.ts` consumes any profile. Adding a new\n * stream format (`arkit`, `visemes`, `cc4_extended`) means writing one\n * profile file — no processor changes.\n */\n\nexport type LipsyncFormat =\n | \"mha\"\n | \"arkit\"\n | \"visemes\"\n | \"cc4_extended\"\n | \"cc5_hd\";\n\nexport interface LipsyncFormatProfile {\n format: LipsyncFormat;\n /** Frame index → channel/morph name. Length = the stream's frame dim. */\n channelNames: readonly string[];\n /**\n * Rig couplings applied as target = max(target, source) — the\n * \"in-between\" drivers the stream is authored against (e.g. MetaHuman's\n * jawOpen → mouthLipsTogether*). Empty for formats without them.\n */\n limits: ReadonlyArray<readonly [sourceIdx: number, targetIdx: number]>;\n /** Per-channel production-tuned gains (length = frame dim, default 1). */\n recommendedGains: Float32Array;\n /** Channel indices owned by procedural blink/gaze systems. */\n eyeChannelIndices: ReadonlySet<number>;\n /** Sided L/R channel index pairs for mouth symmetrization. */\n mouthPairs: ReadonlyArray<readonly [number, number]>;\n /**\n * Repairs known export name-mangling for this format (e.g. MetaHuman\n * exports missing the underscore: CTRL_expressionsjawOpen). Identity\n * when a name is already correct.\n */\n normalizeMorphName: (name: string) => string;\n}\n\nexport interface LipsyncEnvelopeOptions {\n /** Bloom-in time constant in seconds (speech start). Default 0.09. */\n attack?: number;\n /** Settle-out time constant in seconds (speech end). Default 0.18. */\n release?: number;\n}\n\nexport interface LipsyncProcessorOptions {\n /** Average sided L/R mouth pairs (streams drive sides unevenly). Default true. */\n symmetrizeMouth?: boolean;\n /** Apply the profile's rig couplings. Default true — required for `mha`. */\n applyLimits?: boolean;\n /** Start from the profile's production gain table. Default true. */\n useRecommendedGains?: boolean;\n /** Per-channel gain overrides by SHORT channel name (profile naming). */\n gainOverrides?: Record<string, number>;\n /**\n * Leave the eye channels untouched — enable when you run a procedural\n * blink/gaze system (two writers race into flicker). Default false.\n */\n skipEyeChannels?: boolean;\n /** Bloom/settle envelope; pass `false` to disable. Default on. */\n envelope?: LipsyncEnvelopeOptions | false;\n}\n\n/** A mesh whose morph slots have been resolved against a profile. */\nexport interface LipsyncMeshBinding {\n mesh: {\n morphTargetDictionary?: Record<string, number>;\n morphTargetInfluences?: number[] | Float32Array;\n };\n /** slots[frameIndex] = morphTargetInfluences index, or -1. */\n slots: Int32Array;\n /** Number of matched channels. */\n matched: number;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"presetMappers.js","sourceRoot":"","sources":["../../src/lipsync-helpers/presetMappers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAqB,CAAC,KAAK,EAAE,EAAE;IAChE,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAqB,CAAC,KAAK,EAAE,EAAE;IACpE,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqB,CAAC,KAAK,EAAE,EAAE;IACxD,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC,CAAC"}
1
+ {"version":3,"file":"presetMappers.js","sourceRoot":"","sources":["../../src/lipsync-helpers/presetMappers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAqB,CAAC,KAAK,EAAE,EAAE;IAChE,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAqB,CAAC,KAAK,EAAE,EAAE;IACpE,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqB,CAAC,KAAK,EAAE,EAAE;IACxD,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC,CAAC","sourcesContent":["/**\n * Preset Blendshape Mappers\n * \n * Simple passthrough mappers for ARKit and MetaHuman formats\n */\n\nimport { BlendshapeMapper } from './mappingTypes';\n\n/**\n * ARKit Passthrough Mapper\n * Input: 61-element ARKit array from server\n * Output: Same 61-element array (no transformation)\n */\nexport const arkitPassthroughMapper: BlendshapeMapper = (input) => {\n if (input instanceof Float32Array) {\n return input;\n }\n return new Float32Array(input);\n};\n\n/**\n * MetaHuman Passthrough Mapper\n * Input: 251-element MetaHuman array from server\n * Output: Same 251-element array (no transformation)\n */\nexport const metahumanPassthroughMapper: BlendshapeMapper = (input) => {\n if (input instanceof Float32Array) {\n return input;\n }\n return new Float32Array(input);\n};\n\n/**\n * Identity Mapper\n * Returns input as-is (converts to Float32Array if needed)\n */\nexport const identityMapper: BlendshapeMapper = (input) => {\n if (input instanceof Float32Array) {\n return input;\n }\n return new Float32Array(input);\n};\n"]}