@spatialwalk/avatarkit 1.0.0-beta.8 → 1.0.0-beta.81

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 (112) hide show
  1. package/CHANGELOG.md +652 -14
  2. package/README.md +596 -328
  3. package/dist/StreamingAudioPlayer-B7UiWDWa.js +708 -0
  4. package/dist/animation/AnimationWebSocketClient.d.ts +6 -50
  5. package/dist/animation/utils/eventEmitter.d.ts +1 -9
  6. package/dist/animation/utils/flameConverter.d.ts +3 -24
  7. package/dist/audio/AnimationPlayer.d.ts +6 -57
  8. package/dist/audio/StreamingAudioPlayer.d.ts +2 -118
  9. package/dist/avatar_core_wasm-Dv943JJl.js +2696 -0
  10. package/dist/{avatar_core_wasm.wasm → avatar_core_wasm-e68766db.wasm} +0 -0
  11. package/dist/config/app-config.d.ts +3 -4
  12. package/dist/config/constants.d.ts +10 -18
  13. package/dist/config/sdk-config-loader.d.ts +4 -10
  14. package/dist/core/Avatar.d.ts +2 -14
  15. package/dist/core/AvatarController.d.ts +96 -85
  16. package/dist/core/AvatarDownloader.d.ts +7 -92
  17. package/dist/core/AvatarManager.d.ts +31 -12
  18. package/dist/core/AvatarSDK.d.ts +35 -0
  19. package/dist/core/AvatarView.d.ts +86 -132
  20. package/dist/core/NetworkLayer.d.ts +7 -59
  21. package/dist/generated/common/v1/models.d.ts +36 -0
  22. package/dist/generated/driveningress/v1/driveningress.d.ts +0 -1
  23. package/dist/generated/driveningress/v2/driveningress.d.ts +82 -1
  24. package/dist/generated/google/protobuf/struct.d.ts +0 -1
  25. package/dist/generated/google/protobuf/timestamp.d.ts +0 -1
  26. package/dist/index-gUFUNqtF.js +19690 -0
  27. package/dist/index.d.ts +2 -4
  28. package/dist/index.js +17 -18
  29. package/dist/internal/constants.d.ts +102 -0
  30. package/dist/internal/index.d.ts +7 -0
  31. package/dist/next.d.ts +13 -0
  32. package/dist/renderer/RenderSystem.d.ts +9 -79
  33. package/dist/renderer/covariance.d.ts +3 -11
  34. package/dist/renderer/renderer.d.ts +6 -2
  35. package/dist/renderer/sortSplats.d.ts +3 -10
  36. package/dist/renderer/webgl/reorderData.d.ts +4 -11
  37. package/dist/renderer/webgl/webglRenderer.d.ts +34 -4
  38. package/dist/renderer/webgpu/flameGPUBuffers.d.ts +137 -0
  39. package/dist/renderer/webgpu/flamePipeline.d.ts +71 -0
  40. package/dist/renderer/webgpu/gpuRadixSort.d.ts +69 -0
  41. package/dist/renderer/webgpu/transformPipeline.d.ts +97 -0
  42. package/dist/renderer/webgpu/webgpuRenderer.d.ts +87 -5
  43. package/dist/types/character-settings.d.ts +1 -1
  44. package/dist/types/character.d.ts +3 -15
  45. package/dist/types/index.d.ts +123 -43
  46. package/dist/utils/animation-interpolation.d.ts +6 -15
  47. package/dist/utils/client-id.d.ts +6 -0
  48. package/dist/utils/conversationId.d.ts +10 -0
  49. package/dist/utils/error-utils.d.ts +0 -1
  50. package/dist/utils/id-manager.d.ts +34 -0
  51. package/dist/utils/log-sanitizer.d.ts +15 -0
  52. package/dist/utils/log-sink.d.ts +47 -0
  53. package/dist/utils/logger.d.ts +16 -26
  54. package/dist/utils/posthog-tracker.d.ts +8 -0
  55. package/dist/utils/pwa-cache-manager.d.ts +17 -0
  56. package/dist/utils/usage-tracker.d.ts +6 -0
  57. package/dist/vanilla/vite.config.d.ts +2 -0
  58. package/dist/vite.d.ts +19 -0
  59. package/dist/wasm/avatarCoreAdapter.d.ts +57 -119
  60. package/dist/wasm/avatarCoreMemory.d.ts +18 -2
  61. package/next.d.ts +14 -0
  62. package/next.js +97 -0
  63. package/package.json +40 -16
  64. package/vite.d.ts +20 -0
  65. package/vite.js +126 -0
  66. package/dist/StreamingAudioPlayer-fSZLLTe1.js +0 -319
  67. package/dist/StreamingAudioPlayer-fSZLLTe1.js.map +0 -1
  68. package/dist/animation/AnimationWebSocketClient.d.ts.map +0 -1
  69. package/dist/animation/utils/eventEmitter.d.ts.map +0 -1
  70. package/dist/animation/utils/flameConverter.d.ts.map +0 -1
  71. package/dist/audio/AnimationPlayer.d.ts.map +0 -1
  72. package/dist/audio/StreamingAudioPlayer.d.ts.map +0 -1
  73. package/dist/avatar_core_wasm-D4eEi7Eh.js +0 -1666
  74. package/dist/avatar_core_wasm-D4eEi7Eh.js.map +0 -1
  75. package/dist/config/app-config.d.ts.map +0 -1
  76. package/dist/config/constants.d.ts.map +0 -1
  77. package/dist/config/sdk-config-loader.d.ts.map +0 -1
  78. package/dist/core/Avatar.d.ts.map +0 -1
  79. package/dist/core/AvatarController.d.ts.map +0 -1
  80. package/dist/core/AvatarDownloader.d.ts.map +0 -1
  81. package/dist/core/AvatarKit.d.ts +0 -66
  82. package/dist/core/AvatarKit.d.ts.map +0 -1
  83. package/dist/core/AvatarManager.d.ts.map +0 -1
  84. package/dist/core/AvatarView.d.ts.map +0 -1
  85. package/dist/core/NetworkLayer.d.ts.map +0 -1
  86. package/dist/generated/driveningress/v1/driveningress.d.ts.map +0 -1
  87. package/dist/generated/driveningress/v2/driveningress.d.ts.map +0 -1
  88. package/dist/generated/google/protobuf/struct.d.ts.map +0 -1
  89. package/dist/generated/google/protobuf/timestamp.d.ts.map +0 -1
  90. package/dist/index-B-JbfZD-.js +0 -6026
  91. package/dist/index-B-JbfZD-.js.map +0 -1
  92. package/dist/index.d.ts.map +0 -1
  93. package/dist/index.js.map +0 -1
  94. package/dist/renderer/RenderSystem.d.ts.map +0 -1
  95. package/dist/renderer/covariance.d.ts.map +0 -1
  96. package/dist/renderer/renderer.d.ts.map +0 -1
  97. package/dist/renderer/sortSplats.d.ts.map +0 -1
  98. package/dist/renderer/webgl/reorderData.d.ts.map +0 -1
  99. package/dist/renderer/webgl/webglRenderer.d.ts.map +0 -1
  100. package/dist/renderer/webgpu/webgpuRenderer.d.ts.map +0 -1
  101. package/dist/types/character-settings.d.ts.map +0 -1
  102. package/dist/types/character.d.ts.map +0 -1
  103. package/dist/types/index.d.ts.map +0 -1
  104. package/dist/utils/animation-interpolation.d.ts.map +0 -1
  105. package/dist/utils/cls-tracker.d.ts +0 -17
  106. package/dist/utils/cls-tracker.d.ts.map +0 -1
  107. package/dist/utils/error-utils.d.ts.map +0 -1
  108. package/dist/utils/logger.d.ts.map +0 -1
  109. package/dist/utils/reqId.d.ts +0 -20
  110. package/dist/utils/reqId.d.ts.map +0 -1
  111. package/dist/wasm/avatarCoreAdapter.d.ts.map +0 -1
  112. package/dist/wasm/avatarCoreMemory.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -5,43 +5,681 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.0.0-beta.81] - 2026-02-09
9
+
10
+ ### 🔧 Performance Improvements
11
+ - **GPU Compute Mobile Compatibility** - Reduced all compute shader workgroup sizes from 256 to 128 for broader mobile GPU support
12
+ - FLAME pipeline shaders: ShapeBlend, PoseDeform, JointRegress, LBS, FaceGeometry
13
+ - Transform compute shader and Radix Sort shaders
14
+ - Fixes avatar not displaying on mobile devices with `maxComputeWorkgroupSizeX` = 128
15
+ - **GPU Radix Sort Single Submission** - Rewrote GPU Radix Sort to use a single `CommandEncoder` submission per frame
16
+ - Pre-allocated per-pass params buffers (static, no per-frame `writeBuffer` calls)
17
+ - Pre-created bind groups at initialization time
18
+ - Reduced GPU submit overhead from 12+ `device.queue.submit()` to 1 per frame
19
+
20
+ ### 🐛 Bugfixes
21
+ - **GPU Error Reporting** - GPU compute errors are now properly reported to cloud analytics (PostHog)
22
+ - Added `device.onuncapturederror` and `device.lost` listeners for native WebGPU error capture
23
+ - GPU-related warnings now use `loggerWithUnknown` to ensure PostHog reporting
24
+ - All GPU error messages prefixed with `[WebGPU]` for easy filtering
25
+
26
+ ## [1.0.0-beta.80] - 2026-02-08
27
+
28
+ ### ✨ New Features
29
+ - **Next.js Plugin** - Added `@spatialwalk/avatarkit/next` plugin for Next.js (webpack) projects, automatically handles WASM file configuration, Emscripten scriptDirectory fix, and Content-Type headers
30
+
31
+ ## [1.0.0-beta.79] - 2026-02-08
32
+
33
+ ### ✨ New Features
34
+ - **Camera API** - Exposed `getCameraConfig()` and `updateCameraConfig()` on AvatarView for external real-time camera control
35
+
36
+ ## [1.0.0-beta.78] - 2026-02-04
37
+
38
+ ### 🐛 Bugfixes
39
+ - **Telemetry Accuracy** - Fixed environment field reporting issue in analytics events
40
+
41
+ ### ✨ New Features
42
+ - **Performance Monitoring** - Added loading performance metrics for avatar resources
43
+ - `fetch_avatar_latency` - Total loading time
44
+ - `fetch_avatar_metadata_latency` - Metadata fetch time
45
+ - `download_avatar_assets_latency` - Asset download time
46
+
47
+ ### 🔧 Improvements
48
+ - **Internal Architecture** - Unified configuration constants across platforms for better maintainability
49
+
50
+ ## [1.0.0-beta.74] - 2026-01-22
51
+
52
+ ### 🔧 Improvements
53
+ - **Transition API** - Replaced `generateTransitionFromIdle` with `generateTransition` (options-based API: `from`, `to`, `frameCount`, `useLinear`)
54
+
55
+ ## [1.0.0-beta.73] - 2026-01-22
56
+
57
+ ### ✨ New Features
58
+ - **Local Log Upload** - Automatic local log upload functionality
59
+
60
+ ## [1.0.0-beta.72] - 2026-01-17
61
+
62
+ ### 📚 Documentation
63
+ - **README Optimization** - Enhanced README with authentication section and improved API documentation
64
+
65
+ ## [1.0.0-beta.71] - 2026-01-17
66
+
67
+ ### 🔧 Improvements
68
+ - **Internal API** - Marked all audio and animation internal classes with `@internal` to prevent public API exposure
69
+ - **Type Safety** - Hidden `AnimationPlayer`, `StreamingAudioPlayer`, `AnimationWebSocketClient`, and related utilities from public API
70
+ - **Internal Documentation** - Fixed missing English translations in `AnimationWebSocketClient.ts`
71
+
72
+ ## [1.0.0-beta.70] - 2026-01-17
73
+
74
+ ### 🔧 Improvements
75
+ - **Code Cleanup** - Removed unused `FlatSplatData` interface from public API
76
+ - **Internal Documentation** - Translated all internal code comments to English for consistency
77
+
78
+ ## [1.0.0-beta.69] - 2026-01-17
79
+
80
+ ### 🔧 Improvements
81
+ - **API Documentation** - All public API comments are now in English with JSDoc support for better IDE IntelliSense
82
+ - **Type Safety** - Removed internal types from public API exports, using `KeyframeData` instead of `Flame`
83
+ - **Build Configuration** - JSDoc comments are now preserved in generated `.d.ts` files
84
+
85
+ ### 📚 Documentation
86
+ - Enhanced audio data format documentation with WAV and MP3 processing examples
87
+
88
+ ## [1.0.0-beta.68] - 2026-01-17
89
+
90
+ ### 🐛 Bugfixes
91
+ - **Vite Plugin WASM File Detection** - Fixed Vite plugin not finding WASM files with hash in consuming projects
92
+ - Plugin now reads JS glue file to extract referenced WASM filename (including hash)
93
+ - Ensures correct WASM file is copied to match JS glue file references
94
+ - Prevents 404 errors when WASM files have content-based hashes
95
+ - Fixes issue where `avatar_core_wasm.wasm` was not found after adding hash support
96
+
97
+ ## [1.0.0-beta.67] - 2026-01-17
98
+
99
+ ### 🐛 Bugfixes
100
+ - **WASM File Hash Support** - Fixed critical issue where WASM files were not being hashed during SDK build
101
+ - WASM files now automatically get content-based hash (e.g., `avatar_core_wasm-{hash}.wasm`)
102
+ - JS glue files are automatically updated to reference the hashed WASM filename
103
+ - Prevents browser cache issues when WASM files are updated
104
+ - Ensures proper version management and cache invalidation
105
+
106
+ ### 🔧 Improvements
107
+ - **Build Process** - Enhanced SDK build process to automatically handle WASM file hashing
108
+ - Hash is calculated based on WASM file content (SHA256, first 8 characters)
109
+ - Build logs now show hash generation progress
110
+ - Compatible with existing Vite plugin for consuming projects
111
+
112
+ ## [1.0.0-beta.65] - 2026-01-14
113
+
114
+ ### 🐛 Bugfixes
115
+ - **Transition Frame Reset Logic** - Fixed issue where `currentPlayingFrame` was not reset after generating transitions, causing jump artifacts on second conversation
116
+ - Reset `currentPlayingFrame` to `null` after generating idle->speaking transitions
117
+ - Reset `currentPlayingFrame` to `null` after generating speaking->idle transitions
118
+ - Reset `currentPlayingFrame` to `null` when entering Idle state
119
+ - Ensures each transition starts from the correct current frame by re-fetching the current state frame when needed
120
+
121
+ ## [1.0.0-beta.64] - 2026-01-14
122
+
123
+ ### ✨ New Features
124
+ - **Vite Plugin for WASM Configuration** - Added `avatarkitVitePlugin` to automate WASM file configuration
125
+ - Automatically handles WASM MIME types in dev server
126
+ - Copies WASM files to dist/assets/ during build
127
+ - Generates `_headers` file for Cloudflare Pages deployment
128
+ - Configures Vite's optimizeDeps, assetsInclude, and assetsInlineLimit
129
+
130
+ ### 🔧 Improvements
131
+ - **Unified Transition Logic** - All transitions now start from the current playing frame, ensuring smooth transitions from any state (Idle, Speaking, or Transitioning)
132
+ - **Idle State Performance** - Optimized idle state to avoid unnecessary frame parameter fetching on every frame
133
+ - **Transition Animation** - Idle->Speaking uses linear interpolation, Speaking->Idle uses Bezier curve easing
134
+
135
+ ### 🐛 Bugfixes
136
+ - Fixed vanilla demo audio context initialization issue
137
+ - Fixed recording button only working once in vanilla demo
138
+ - Fixed host mode data loading to use local files instead of API endpoint
139
+
140
+ ### 📚 Documentation
141
+ - Added transition animation technical specification document for cross-platform alignment
142
+
143
+ ## [1.0.0-beta.63] - 2026-01-14
144
+
145
+ ### ✨ New Features
146
+ - **Audio Context Initialization API** - Added `initializeAudioContext()` method to `AvatarController`
147
+ - Must be called in a user gesture context (click, touchstart, etc.) before any audio operations
148
+ - Ensures AudioContext is created and initialized in a user gesture context, preventing browser security policy issues
149
+ - All audio operations (`send()`, `yieldAudioData()`, `start()`, `playback()`, etc.) now require prior initialization
150
+
151
+ ### 🔧 Improvements
152
+ - **Initialization Flow** - Removed all lazy initialization logic for audio context
153
+ - Audio context initialization is now centralized in `initializeAudioContext()` method
154
+ - All audio operations check for initialization before proceeding
155
+ - Clear error messages when audio operations are attempted without initialization
156
+
157
+ ### 🐛 Bugfixes
158
+ - **Audio Context User Gesture Requirement** - Fixed issue where AudioContext could not be properly initialized when external applications request recording permissions
159
+ - Audio context must now be initialized in user gesture context, ensuring browser security policies are satisfied
160
+
161
+ ## [1.0.0-beta.62] - 2026-01-14
162
+
163
+ ### ✨ New Features
164
+ - **Bezier Curve Transition Animation** - Implemented Bezier curve easing functions for smoother transitions
165
+ - Added Bezier curve interpolation with different curves for different facial components (jaw, expression, eye, neck, global)
166
+ - Replaced linear interpolation with Bezier curve interpolation for more natural animation
167
+ - Split transition duration into start (200ms) and end (1600ms) for different transition types
168
+
169
+ ### 🔧 Improvements
170
+ - **Transition API Enhancement** - Updated `generateTransitionFromIdle()` to support both start and end transitions
171
+ - Added `transitionType` parameter: `'start'` for Idle -> Flame, `'end'` for Flame -> Idle
172
+ - Removed deprecated linear interpolation code and unused easing functions
173
+
174
+ ## [1.0.0-beta.61] - 2026-01-14
175
+
176
+ ### 🔧 Improvements
177
+ - **Telemetry Events Update** - Updated telemetry events with new parameters and structure
178
+ - `sdk_initialized`: Added `env` and `dsm` parameters
179
+ - `driving_service_latency`: Replaced `driving_latency`, now tracks `tap_0`, `tap_1`, `tap_2`, `tap_f` timestamps (Number type, milliseconds)
180
+ - `avatar_active`: New event for avatar view activity tracking with `env` and `dsm` parameters, reported on first render and every 10 minutes
181
+ - **Heartbeat Refactoring** - Removed `HeartbeatManager`, integrated heartbeat functionality into `NetworkLayer` (driving service heartbeat) and `AvatarView` (avatar active heartbeat)
182
+
183
+ ## [1.0.0-beta.60] - 2026-01-14
184
+
185
+ ### 🔧 Configuration Changes
186
+ - **PostHog Configuration** - PostHog telemetry now always uses the international site regardless of environment configuration
187
+
188
+ ## [1.0.0-beta.59] - 2026-01-14
189
+
190
+ ### 🐛 Bugfixes
191
+ - **AudioContext Auto-Resume** - Fixed issue where audio playback would get stuck after external applications request recording permissions. AudioContext now automatically resumes when suspended during playback
192
+ - **PostHog Instance Initialization** - Fixed PostHog named instance initialization to avoid conflicts with external PostHog instances
193
+
194
+ ## [1.0.0-beta.58] - 2026-01-14
195
+
196
+ ### ✨ New Features
197
+ - **Pure Rendering Mode APIs** - Added `renderFlame()` and `generateTransitionFromIdle()` methods to `AvatarView` for external-controlled rendering without audio synchronization
198
+
199
+ ## [1.0.0-beta.57] - 2026-01-09
200
+
201
+ ### 🐛 Bugfixes
202
+ - **Idle Animation Jiggle Fix** - Fixed issue where idle animation would "jiggle" before transitioning to speaking when external audio and animation data were sent. The `handleInterrupt()` method now correctly skips processing when already in `Idle` state, preventing unnecessary idle loop restarts.
203
+
204
+ ## [1.0.0-beta.56] - 2026-01-09
205
+
206
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
207
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
208
+
209
+ ## [1.0.0-beta.56] - 2025-01-05
210
+
211
+ ### ✨ New Features
212
+ - **Eye Tracking Config API** - Changed `eyeTrackingEnabled` to complete `eyefocus` configuration object in `PostProcessingConfig`. External callers must provide full `eyefocus` configuration (enabled, auto_eyelid_adjustment, eyelid_threshold, targets) instead of just a boolean flag.
213
+
214
+ ## [1.0.0-beta.55] - 2025-01-05
215
+
216
+ ### ✨ New Features
217
+ - **Eye Tracking Control** - Added `eyeTrackingEnabled` parameter to `PostProcessingConfig`, allowing external control of eye tracking enable/disable state in real-time
218
+ - **Point Count API** - Added `getPointCount()` method to `AvatarController` to get the point cloud count of the current avatar
219
+
220
+ ## [1.0.0-beta.54] - 2025-01-05
221
+
222
+ ### 🐛 Bugfix
223
+ - **Transition Animation Completion** - Fixed issue where `onTransitionComplete()` was not called when `transitionKeyframes` was empty, causing audio playback to freeze after transition animations. Now, when there are no transition frames, the state correctly transitions to `Speaking` and `onTransitionComplete()` is called to start audio playback.
224
+
225
+ ## [1.0.0-beta.53] - 2025-01-05
226
+
227
+ ### 🐛 Bugfix
228
+ - **Race Condition Fix** - Fixed race condition where `startStreamingPlaybackInternal()` could be called multiple times when `yieldKeyframes` received data rapidly, causing audio chunks to be cleared and playback to freeze after transition animations. Added `isStartingPlayback` flag to prevent concurrent execution.
229
+
230
+ ## [1.0.0-beta.52] - 2025-01-05
231
+
232
+ ### 🔧 Performance Improvements
233
+ - **Telemetry Optimization** - Consolidated resource download telemetry: removed individual `resource_download` events and added cache information (`cache_hit`, `cache_type`) to total duration metrics (`template_resources_load_measure` and `download_avatar_assets_total_measure`). This enables analysis of download times for cache misses while reducing telemetry overhead.
234
+
235
+ ## [1.0.0-beta.51] - 2025-01-05
236
+
237
+ ### 🐛 Bugfix
238
+ - **Character Settings Update** - Fixed issue where cached Avatar instances would not update `characterSettings` in resources when `characterMeta` was updated. Now `resources.characterSettings` is synchronized when `characterMeta` changes, ensuring new `AvatarView` instances use the latest configuration.
239
+
240
+ ### ✨ New Features
241
+ - **Post-Processing Config Enhancement** - Added `translation` and `eyePose` fields to `PostProcessingConfig` interface:
242
+ - `translation`: Position offset (x, y, z)
243
+ - `eyePose`: Eye pose offset with bias and weights (x, y, z, weightX, weightY, weightZ), applied to both left and right eyes
244
+
245
+ ## [1.0.0-beta.50] - 2025-01-05
246
+
247
+ ### 🔧 Performance Improvements
248
+ - **Removed CORS Preflight for Meta API** - Removed authentication headers (`X-App-Id` and `Authorization`) and unnecessary `Content-Type` header from avatar metadata API requests. This eliminates CORS preflight requests for simple GET requests, improving loading performance.
249
+
250
+ ## [1.0.0-beta.49] - 2025-01-05
251
+
252
+ ### 🐛 Bugfix
253
+ - **Template Cache Version** - Fixed issue where template cache would be incorrectly cleared when switching between different SDK versions. Now uses independent template resource version (1.0.0) instead of SDK version, allowing different SDK versions to share the same template cache when template resources are identical.
254
+
255
+ ## [1.0.0-beta.48] - 2025-01-05
256
+
257
+ ### ✨ New Features
258
+ - **PWA Cache Management** - Added automatic PWA cache management for avatar and template resources to improve loading performance
259
+
260
+ ### 🔧 Performance Improvements
261
+ - **Cache Hit Rate Metrics** - Resource downloads now report cache status for analytics
262
+
263
+ ## [1.0.0-beta.47] - 2025-12-29
264
+
265
+ ### 🐛 Bugfix
266
+ - **Avatar Meta Update** - Fixed issue where cached Avatar instances would return stale avatar metadata even when the latest metadata was fetched. Now the avatar metadata is always updated to the latest version when loading an avatar, even if the version number hasn't changed.
267
+
268
+ ## [1.0.0-beta.46] - 2025-12-29
269
+
270
+ ### 🐛 Bugfix
271
+ - Expose `getCharacterMeta()` method in `Avatar` class as public API
272
+
273
+ ## [1.0.0-beta.45] - 2025-12-29
274
+
275
+ ### ✨ New Features
276
+ - **Immediate Rendering on Pause** - When playback is paused, updating post-processing parameters or camera configuration will immediately re-render the current frame:
277
+ - Post-processing parameters (rotation, neck pose, jaw pose, eye blink, etc.) now apply immediately when updated during pause
278
+ - Camera configuration (position, target, FOV, etc.) now applies immediately when updated during pause
279
+ - During normal playback, these updates still apply on the next frame as before
280
+
281
+ ### 🔄 API Changes
282
+
283
+ ### 🔄 API Changes
284
+ - **AvatarView Ready Promise Replaced with Callback** - Replaced `ready: Promise<void>` property with `onFirstRendering?: () => void` callback for better async handling:
285
+ - Removed `ready` Promise property
286
+ - Added `onFirstRendering` optional callback that is called when the first frame is rendered
287
+ - Callback-based approach is more idiomatic and easier to use than Promise-based approach
288
+
289
+ ### 🗑️ Removed
290
+ - **Removed unused `seek()` method** - Removed unused and buggy `seek()` method from `StreamingAudioPlayer`
291
+
292
+ ## [1.0.0-beta.44] - 2025-12-29
293
+
294
+ ### 🔧 Performance Improvements
295
+ - **Removed unnecessary headers from static resource requests** - Removed `X-App-Id` and `Authorization` headers from static resource downloads (shape.pb, point_cloud.ply, camera.json, etc.) to avoid CORS preflight requests and improve loading performance
296
+
297
+ ## [1.0.0-beta.43] - 2025-12-29
298
+
299
+ ### 🔧 Improvements
300
+ - Remove some unnecessary telemetry reporting
301
+
302
+ ## [1.0.0-beta.42] - 2025-12-29
303
+
304
+ ### ✨ New Features
305
+ - **PostHog Telemetry Configuration** - PostHog telemetry reporting now supports separate configuration for domestic (CN) and international (INTL) environments:
306
+ - Separate PostHog hosts and API keys for CN and INTL environments
307
+ - Compression disabled for domestic self-hosted instance, enabled for international official PostHog
308
+ - Localhost domain filtering to avoid test data pollution
309
+
310
+ ## [1.0.0-beta.41] - 2025-12-29
311
+
312
+ ### 🔄 Breaking Changes
313
+ - **Background Image Support Removed** - Removed background image functionality from `AvatarView`:
314
+ - Removed `isOpaque` getter/setter property
315
+ - Removed `setBackgroundImage()` method
316
+ - Removed background image loading from `AvatarDownloader`
317
+ - Canvas now always uses transparent background
318
+
319
+ ## [1.0.0-beta.40] - 2025-12-27
320
+
321
+ ### 🔧 API Improvements
322
+ - Extended post-processing parameter configuration interface
323
+
324
+ ## [1.0.0-beta.39] - 2025-12-27
325
+
326
+ ### 🔧 Improvements
327
+ - Filter localhost domain from telemetry reporting to avoid test data pollution
328
+
329
+ ## [1.0.0-beta.38] - 2025-12-27
330
+
331
+ ### 🔄 Breaking Changes
332
+ - Migrated telemetry reporting from Tencent Cloud CLS to PostHog
333
+
334
+ ### ✨ New Features
335
+ - Implemented download queue for character resource loading
336
+
337
+ ## [1.0.0-beta.37] - 2025-12-24
338
+
339
+ ### 🐛 Bugfix
340
+ - Various bug fixes and improvements
341
+
342
+ ## [1.0.0-beta.36] - 2025-12-20
343
+
344
+ ### ✨ New Features
345
+ - **Audio Sample Rate Configuration** - Added configurable audio sample rate support in SDK initialization
346
+ - Added `audioFormat` configuration option with `channelCount` (fixed to 1) and `sampleRate` (supports: 8000, 16000, 22050, 24000, 32000, 44100, 48000 Hz, default: 16000)
347
+ - Audio recording and playback now automatically use the configured sample rate
348
+ - Vanilla demo updated with sample rate dropdown selector for easy testing
349
+
350
+ ## [1.0.0-beta.35] - 2025-12-16
351
+
352
+ ### 🔄 API Changes
353
+ - **Avatar Transform API** - Changed `setTransform` method to `transform` getter/setter property for more idiomatic JavaScript API. Now supports both reading and setting transform values.
354
+
355
+ ## [1.0.0-beta.34] - 2025-12-16
356
+
357
+ ### ✨ New Features
358
+ - **Avatar Transform API** - Added `setTransform` method to `AvatarView` for controlling avatar position and scale within the canvas. Supports normalized coordinates (-1 to 1) for position and scale factor.
359
+
360
+ ## [1.0.0-beta.32] - 2025-12-16
361
+
362
+ ### 🔄 Breaking Changes
363
+ - **Host Mode Interface** - Updated `yieldFramesData` method to accept binary data array instead of single binary data. The method now processes multiple protobuf-encoded Message objects in a single call.
364
+
365
+ ## [1.0.0-beta.31] - 2025-12-16
366
+
367
+ ### 🐛 Bugfix
368
+ - **Environment CORS Issue** - Fixed CORS issues when requesting configuration and avatar data APIs. SDK now provides default configuration fallback when config requests fail, ensuring smooth operation across different environments.
369
+
370
+ ## [1.0.0-beta.30] - 2025-12-15
371
+
372
+ ### 🐛 Bugfix
373
+ - **Template Resources Duplicate Download** - Fixed issue where template resources were being re-downloaded for each new avatar load. Template resources are now only loaded once during SDK initialization and reused for all avatars.
374
+
375
+ ## [1.0.0-beta.29] - 2025-12-15
376
+
377
+ ### 🔄 Breaking Changes
378
+ - **Environment Enum** - Removed `Environment.test`. Only `Environment.cn` and `Environment.intl` are now supported. Environment configuration must be explicitly provided.
379
+ - **Log Level Default** - Default log level changed from `LogLevel.all` to `LogLevel.off`. Set `logLevel: LogLevel.all` in configuration to enable all logs.
380
+
381
+ ### ✨ New Features
382
+ - **Avatar Caching** - Added avatar caching methods in `AvatarManager`:
383
+ - `retrieve(id: string): Avatar | undefined` - Get cached avatar by ID
384
+ - `clear(id: string): void` - Clear cached avatar for specific ID
385
+ - `clearAll(): void` - Clear all cached avatars
386
+ - `clearCache()` is now deprecated, use `clearAll()` instead
387
+ - **Background Image Support** - Added background image control in `AvatarView`:
388
+ - `isOpaque: boolean` - Getter/setter to control canvas background transparency
389
+ - `setBackgroundImage(image: HTMLImageElement | string | null): void` - Set or remove background image
390
+
391
+ ### 🔧 Improvements
392
+ - **Avatar Version Checking** - Avatar cache now automatically checks version and reloads if cached avatar version differs from latest metadata
393
+ - **Concurrent Loading** - Multiple concurrent `load()` calls for the same avatar ID now reuse the same loading promise
394
+
395
+ ## [1.0.0-beta.28] - 2025-12-08
396
+
397
+ ### 🔄 Breaking Changes
398
+ - **Class Renamed** - `AvatarKit` class has been renamed to `AvatarSDK` for better consistency
399
+ - Update all imports: `import { AvatarKit } from '@spatialwalk/avatarkit'` → `import { AvatarSDK } from '@spatialwalk/avatarkit'`
400
+ - Update all API calls: `AvatarKit.initialize()` → `AvatarSDK.initialize()`
401
+ - All static methods and properties remain the same, only the class name has changed
402
+
403
+ ### 🔧 Improvements
404
+ - **Rendering Optimizations** - Added fragment shader discard optimization to improve performance and edge quality
405
+ - **Shader Alignment** - Removed view matrix transpose to align with Android SDK implementation
406
+ - **Resource Cleanup** - Removed unused `frameMono` and `audioMono` resources from SDK and tests
407
+
408
+ ## [1.0.0-beta.27] - 2025-12-04
409
+
410
+ ### 🐛 Bugfix
411
+
412
+ ## [1.0.0-beta.26] - 2025-12-03
413
+
414
+ ### ✨ New Features
415
+ - **Log Level Configuration** - Added `logLevel` configuration option to control SDK logging verbosity
416
+ - `LogLevel.off` - Disable all logs
417
+ - `LogLevel.error` - Only error logs
418
+ - `LogLevel.warning` - Warning and error logs
419
+ - `LogLevel.all` - All logs (default)
420
+ - **Standardized CLS Logging Events** - All CLS logging events now use standardized field names for better querying
421
+ - Standard events: `sdk_initialized`, `send_audio_failed`, `message_error`, `heartbeat_failed`, `service_restarted`, `session_token_invalid`, `session_token_expired`, `yield_animation_failed`, `fetch_avatar_metadata_failed`, `download_avatar_assets_failed`, `avatar_active`
422
+ - Standard fields: `req_id`, `con_id`, `avatar_id`, `description`
423
+ - **End-to-End Latency Tracking** - Added `driving_service_latency` event to track latency metrics for both SDK and Host modes
424
+ - Tracks: `tap_0`, `tap_1`, `tap_2`, `tap_f` timestamps (Number type, milliseconds)
425
+ - Automatically reported once per conversation when first frame is received
426
+
427
+ ### 🔧 Improvements
428
+ - **CLS Configuration Alignment** - Updated CLS endpoints and Topic IDs to match iOS SDK configuration
429
+ - **Default API Endpoints** - Fixed default API endpoint for `intl` environment to `api.intl.spatialwalk.cloud`
430
+ - **Error Code Enum** - Added new error codes: `appIDUnrecognized`, `sessionTokenInvalid`, `sessionTokenExpired`, `failedToFetchAvatarMetadata`, `failedToDownloadAvatarAssets`
431
+
432
+ ### 🗑️ Removed
433
+ - **Redundant Log Events** - Removed unnecessary log events: `playback_paused`, `playback_resumed`, `reconnecting`, `connect_success`, `server_error`, `decode_failed`
434
+
435
+ ## [1.0.0-beta.25] - 2025-12-03
436
+
437
+ ### 🔧 Improvements
438
+ - **Removed Audio Buffer Limit** - Removed the 100 chunk limit on pending audio buffers to allow unlimited audio data buffering
439
+
440
+ ## [1.0.0-beta.24] - 2025-11-26
441
+
442
+ ### 🔧 API Changes
443
+ - **Backend Endpoints Updated** - Backend API endpoints have been updated for all environments
444
+
445
+ ## [1.0.0-beta.23] - 2025-11-26
446
+
447
+ ### 🔧 API Changes
448
+ - **Breaking Change** - `playback()` method is no longer supported and has been removed from public API
449
+
450
+ ## [1.0.0-beta.22] - 2025-11-26
451
+
452
+ ### 🔧 API Changes
453
+ - **State Callback Renamed** - `onAvatarState` has been renamed to `onConversationState` for better clarity
454
+ - The callback now uses `ConversationState` enum with states: `idle` and `playing`
455
+ - **Environment Enum Updated** - `Environment.us` has been renamed to `Environment.intl` for better internationalization support
456
+ - All references to `Environment.us` should be updated to `Environment.intl`
457
+ - Remote config endpoints now use `intl` instead of `us`
458
+
459
+ ### ✨ New Features
460
+ - **Volume Control** - Added volume control API for audio playback
461
+ - `setVolume(volume: number)` - Set audio volume (0.0 to 1.0)
462
+ - `getVolume(): number` - Get current audio volume
463
+ - Volume control only affects the avatar's audio player, not system volume
464
+ - Volume changes take effect immediately, including for currently playing audio
465
+
466
+ ## [1.0.0-beta.21] - 2025-11-25
467
+
468
+ ### ✨ New Features
469
+ - **SDK Mode Connection Timeout Fallback** - Enhanced fallback mechanism for SDK mode:
470
+ - If WebSocket connection fails to establish within 15 seconds, the SDK automatically enters fallback mode
471
+ - In fallback mode, audio data can still be sent and will play normally, even though no animation data will be received
472
+ - Connection failures also trigger this fallback mechanism
473
+ - `ConnectionState.connecting` and `ConnectionState.failed` events are emitted to notify external applications
474
+ - Concurrent connection attempts are prevented to avoid race conditions
475
+
476
+ ### 🔧 Improvements
477
+ - Improved connection state management: `isConnected` now accurately reflects actual connection status (false in fallback mode)
478
+ - Added `canSend()` method in `NetworkLayer` to check if audio can be sent (including fallback mode)
479
+ - Better separation of concerns: connection state checks are now handled by `NetworkLayer`, while playback logic remains in `AvatarController`
480
+
481
+ ## [1.0.0-beta.20] - 2025-11-25
482
+
483
+ ### 🔧 Improvements
484
+ - Removed 1-second audio buffer requirement for auto-starting playback in Host mode
485
+
486
+ ## [1.0.0-beta.19] - 2025-11-25
487
+
488
+ ### 📚 Documentation
489
+ - **Fixed misleading documentation** - Corrected Host mode API documentation to accurately reflect that `yieldAudioData()` can be called directly to start a new session without requiring `playback()` first
490
+ - Removed misleading "after playback() is called" comments
491
+ - Clarified two ways to start a session: using `playback()` for existing data, or `yieldAudioData()` directly for streaming
492
+ - Updated all examples and workflow descriptions to reflect correct API usage
493
+
494
+ ## [1.0.0-beta.18] - 2025-11-25
495
+
496
+ ### 🔧 API Changes
497
+ - **Renamed `reqId` to `conversationId`** - Updated terminology for better clarity
498
+ - All methods and parameters that used `reqId` now use `conversationId`
499
+ - `getCurrentReqId()` → `getCurrentConversationId()`
500
+ - `generateReqId()` → `generateConversationId()`
501
+ - Updated all event logs and documentation to use `conversationId`
502
+ - Note: Protobuf protocol still uses `reqId` field name internally, but SDK API uses `conversationId`
503
+
504
+ ### 📚 Documentation
505
+ - Enhanced Host mode documentation to clearly emphasize the workflow: send audio data first to get conversationId, then use that conversationId to send animation data
506
+ - Updated Host Mode Example and Host Mode Flow sections with clearer step-by-step instructions
507
+
508
+ ## [1.0.0-beta.17] - 2025-11-24
509
+
510
+ ### ✨ New Features
511
+ - **Audio-Only Fallback Mechanism** - SDK now includes automatic fallback to audio-only playback when animation data is unavailable
512
+ - SDK mode: Automatically enters audio-only mode when server returns an error
513
+ - Host mode: Automatically enters audio-only mode when empty animation data is provided
514
+ - Once in audio-only mode, subsequent animation data for that session is ignored
515
+ - Fallback mode is interruptible, just like normal playback mode
516
+
517
+ ### 🔧 API Changes
518
+ - **Playback Mode Configuration** - Moved playback mode configuration from `AvatarView` constructor to `AvatarSDK.initialize()`
519
+ - Playback mode is now determined by `drivingServiceMode` in `AvatarSDK.initialize()` configuration
520
+ - `AvatarView` constructor now only requires `avatar` and `container` parameters
521
+ - Removed `AvatarViewOptions` interface
522
+ - `container` parameter is now required (no longer optional)
523
+ - **Method Renames** - Renamed methods in `AvatarController` for Host mode to better reflect their purpose
524
+ - `play()` → `playback()`: Renamed to better reflect that the method is used for playback of existing data (replay mode)
525
+ - Old API: `avatarController.play(initialAudioChunks, initialKeyframes)`
526
+ - New API: `avatarController.playback(initialAudioChunks, initialKeyframes)`
527
+ - `sendAudioChunk()` → `yieldAudioData()`: Renamed to better reflect that the method yields/streams audio data
528
+ - Old API: `avatarController.sendAudioChunk(data, isLast)`
529
+ - New API: `avatarController.yieldAudioData(data, isLast)`
530
+ - `sendKeyframes()` → `yieldFramesData()`: Renamed to better reflect that the method yields/streams animation keyframes
531
+ - Old API: `avatarController.sendKeyframes(keyframes, reqId)`
532
+ - New API: `avatarController.yieldFramesData(keyframes, conversationId)`
533
+
534
+ ### 🔧 Improvements
535
+ - Extended transition animation duration from 200ms to 400ms for smoother end-of-playback transitions
536
+
537
+ ### 📚 Documentation
538
+ - Updated README.md to use "SDK mode" and "Host mode" terminology instead of "Network mode" and "External data mode"
539
+ - Added fallback mechanism documentation
540
+ - Updated API reference to reflect new constructor signature
541
+
542
+ ## [1.0.0-beta.16] - 2025-11-21
543
+
544
+ ### ✨ New Features
545
+ - **Multi-AvatarView Support** - SDK now supports multiple `AvatarView` instances simultaneously
546
+ - Each `AvatarView` instance can manage its own avatar independently
547
+ - Multiple avatars can be displayed and controlled at the same time
548
+ - Each instance maintains its own rendering context, playback state, and network connection
549
+ - Removed the previous limitation of "only one AvatarView instance at a time"
550
+
551
+ ### 📚 Documentation
552
+ - Updated README.md to reflect multi-avatar support capabilities
553
+ - Added multi-avatar usage examples
554
+ - Removed outdated limitation notes about single AvatarView instance
555
+
556
+ ---
557
+
558
+ ## [1.0.0-beta.15] - 2025-11-20
559
+
560
+ ### ✨ New Features
561
+ - Added authentication support for API requests
562
+ - `appId` is now automatically included in HTTP headers (`X-App-Id`) and WebSocket URL query parameters
563
+ - `sessionToken` is now automatically included in HTTP headers (`Authorization: Bearer {token}`) and WebSocket URL query parameters
564
+ - All network requests (avatar loading, resource downloads, WebSocket connections) now include authentication credentials
565
+
566
+ ### 🔧 Improvements
567
+ - Fixed canvas resize handling for different aspect ratios
568
+ - Projection matrix is now correctly updated when canvas aspect ratio changes
569
+ - Rendering system properly handles portrait (9:16) and landscape (16:9) aspect ratios
570
+ - Canvas automatically adapts to container size changes via ResizeObserver
571
+
572
+ ### 🐛 Bug Fixes
573
+ - Fixed `RenderSystem.handleResize()` to update projection matrix when canvas size changes
574
+ - Previously only updated aspect ratio, now also updates projection matrix for correct rendering
575
+
576
+ ---
577
+
578
+ ## [1.0.0-beta.14] - 2025-11-18
579
+
580
+ ### ✨ New Features
581
+ - Added pause and resume functionality for avatar playback
582
+ - New `pause()` method to pause audio and animation playback
583
+ - New `resume()` method to resume playback from paused state
584
+ - Added `paused` state to `AvatarState` enum
585
+ - State changes are communicated via `onAvatarState` callback
586
+ - Works in both network mode and external data mode
587
+
588
+ ### 🔧 Improvements
589
+ - Canvas now uses container's full dimensions instead of fixed 1:1 aspect ratio
590
+ - Canvas automatically adapts to container size (width and height)
591
+ - External developers can control canvas aspect ratio by setting container dimensions
592
+ - Rendering system correctly handles any aspect ratio without distortion
593
+
594
+ ---
595
+
596
+ ## [1.0.0-beta.13] - 2025-11-17
597
+
598
+ ### 🔒 API Improvements
599
+ - Reduced console noise by setting default log level to Warning
600
+ - Logger now only outputs warnings and errors by default
601
+ - Set `VITE_DEBUG_LOG=true` to enable all logs
602
+ - Simplified logger configuration using `setGlobalLogLevel(LogLevel.Warning)`
603
+
604
+ ### 🐛 Bug Fixes
605
+ - Fixed SDK config loader warning in non-debug mode
606
+ - Config loading failures are now silently handled in production
607
+ - Warnings only shown when `VITE_DEBUG_LOG=true`
608
+
609
+ ---
610
+
611
+ ## [1.0.0-beta.12] - 2025-11-17
612
+
613
+ ### 🔒 API Improvements
614
+ - Marked performance monitoring APIs as internal
615
+ - `RenderPerformanceStats` interface and `getPerformanceStats()` method are now marked with `@internal` tag
616
+ - These APIs are not exposed in the public TypeScript definitions
617
+ - Reverted performance monitoring implementation to simpler version (only `renderTime` and `sortTime`)
618
+
619
+ ---
620
+
621
+ ## [1.0.0-beta.11] - 2025-11-17
622
+
623
+ ### 📚 Documentation
624
+ - Updated demo repository link in README.md
625
+ - Changed example project link from `Avatarkit-web-demo` to `AvatarSDK-Web-Demo` to match the new repository name
626
+
627
+ ---
628
+
629
+ ## [1.0.0-beta.10] - 2025-11-16
630
+
631
+ ### 🔒 API Improvements
632
+ - Cleaned up public API to hide internal implementation details
633
+ - Marked internal methods with `@internal` JSDoc tag to exclude them from TypeScript declarations
634
+ - Removed unused environment configuration options (`realtimeApiBaseUrl`, `realtimeWsUrl`)
635
+ - Added `appId` getter to `AvatarSDK` for accessing initialized app ID
636
+ - Internal methods like `getEnvironmentConfig`, `logEvent`, `getCanvas`, `getCameraConfig`, `updateCameraConfig` are now properly hidden from public API
637
+
638
+ ### 🐛 Bug Fixes
639
+ - Fixed memory leaks when disposing AvatarView instances
640
+ - Improved resource cleanup to prevent memory leaks when switching or disposing avatar instances
641
+ - Properly clears all callbacks, event listeners, and large data buffers on disposal
642
+
643
+ ---
644
+ ## [1.0.0-beta.9] - 2025-11-15
645
+
646
+ ### 🐛 Bug Fixes
647
+ - Fixed memory leaks when disposing AvatarView instances
648
+ - Improved resource cleanup to prevent memory leaks when switching or disposing avatar instances
649
+ - Properly clears all callbacks, event listeners, and large data buffers on disposal
650
+
651
+ ---
652
+
8
653
  ## [1.0.0-beta.8] - 2025-11-14
9
654
 
10
655
  ### 🐛 Bug Fixes
11
656
  - Fixed audio-animation synchronization issue after normal playback completion
12
- - Added state cleanup when playback ends normally (previously only cleaned up on interrupt)
13
- - Clears `currentKeyframes`, `pendingAudioChunks`, and `lastRenderedFrameIndex` on playback end
14
- - Resets `reqId` in network mode to prevent state residue affecting next conversation
15
- - Ensures consistent state cleanup behavior between normal completion and interruption
657
+ - Playback state is now properly cleaned up when audio finishes normally, preventing synchronization issues in subsequent conversations
16
658
 
17
659
  ---
18
660
 
19
661
  ## [1.0.0-beta.7] - 2025-11-14
20
662
 
21
663
  ### 🔄 Refactoring
22
- - Refactored rendering state management using state machine pattern
23
- - Replaced multiple boolean flags (`isRealtimePlaying`, `isTransitioning`, `endToIdleAfterTransition`) with a single `RenderingState` enum
24
- - Unified state transitions through `setState()` method
25
- - Simplified state checks and reduced code complexity
26
- - Improved maintainability and clarity of state transitions
664
+ - Improved rendering state management for better stability and maintainability
27
665
 
28
666
  ### 🐛 Bug Fixes
29
667
  - Fixed interrupt not generating transition animation when interrupting during playback
30
- - Fixed transition animation being regenerated and reset when `sendKeyframes()` is called after `play()` in external data mode
668
+ - Fixed transition animation being regenerated and reset in external data mode when sending keyframes after playback starts
31
669
 
32
670
  ---
33
671
 
34
672
  ## [1.0.0-beta.6] - 2025-11-14
35
673
 
36
674
  ### 🐛 Bug Fixes
37
- - Fixed transition animation being regenerated and reset when `sendKeyframes()` is called after `play()` in external data mode, causing the transition to play twice
675
+ - Fixed transition animation being regenerated and reset in external data mode when sending keyframes after playback starts, causing the transition to play twice
38
676
 
39
677
  ---
40
678
 
41
679
  ## [1.0.0-beta.5] - 2025-11-14
42
680
 
43
681
  ### 🐛 Bug Fixes
44
- - Fixed missing `AvatarPlaybackMode` enum export in published package
682
+ - Fixed missing `DrivingServiceMode` enum export in published package
45
683
 
46
684
  ---
47
685
 
@@ -70,7 +708,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
70
708
  - **External Data Mode**:
71
709
  - External components fully control audio and animation data acquisition
72
710
  - SDK only responsible for synchronized playback of externally provided data
73
- - Use `controller.play()`, `controller.sendAudioChunk()` and `controller.sendKeyframes()` methods
711
+ - Use `controller.playback()`, `controller.yieldAudioData()` and `controller.yieldFramesData()` methods
74
712
 
75
713
  ### ✨ New Features
76
714
 
@@ -106,7 +744,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
106
744
  // New API
107
745
  new AvatarView(avatar, {
108
746
  container: container,
109
- playbackMode: AvatarPlaybackMode.network // or AvatarPlaybackMode.external
747
+ playbackMode: DrivingServiceMode.sdk // or DrivingServiceMode.host
110
748
  })
111
749
  ```
112
750