@spatialwalk/avatarkit 1.0.0-beta.6 → 1.0.0-beta.60

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 (99) hide show
  1. package/CHANGELOG.md +490 -4
  2. package/README.md +266 -283
  3. package/dist/StreamingAudioPlayer-CH89JZHk.js +525 -0
  4. package/dist/animation/AnimationWebSocketClient.d.ts +9 -24
  5. package/dist/animation/utils/eventEmitter.d.ts +0 -4
  6. package/dist/animation/utils/flameConverter.d.ts +3 -11
  7. package/dist/audio/AnimationPlayer.d.ts +4 -32
  8. package/dist/audio/StreamingAudioPlayer.d.ts +14 -75
  9. package/dist/avatar_core_wasm-i0Ocpx6q.js +2693 -0
  10. package/dist/avatar_core_wasm.wasm +0 -0
  11. package/dist/config/app-config.d.ts +1 -6
  12. package/dist/config/constants.d.ts +11 -25
  13. package/dist/config/sdk-config-loader.d.ts +4 -9
  14. package/dist/core/Avatar.d.ts +0 -14
  15. package/dist/core/AvatarController.d.ts +44 -116
  16. package/dist/core/AvatarDownloader.d.ts +0 -95
  17. package/dist/core/AvatarManager.d.ts +10 -18
  18. package/dist/core/AvatarSDK.d.ts +21 -0
  19. package/dist/core/AvatarView.d.ts +29 -110
  20. package/dist/core/NetworkLayer.d.ts +1 -59
  21. package/dist/generated/common/v1/models.d.ts +29 -0
  22. package/dist/generated/driveningress/v1/driveningress.d.ts +1 -12
  23. package/dist/generated/driveningress/v2/driveningress.d.ts +81 -3
  24. package/dist/generated/google/protobuf/struct.d.ts +5 -39
  25. package/dist/generated/google/protobuf/timestamp.d.ts +1 -103
  26. package/dist/index-D9nprBw2.js +14786 -0
  27. package/dist/index.d.ts +1 -6
  28. package/dist/index.js +17 -18
  29. package/dist/renderer/RenderSystem.d.ts +1 -79
  30. package/dist/renderer/covariance.d.ts +0 -12
  31. package/dist/renderer/renderer.d.ts +6 -2
  32. package/dist/renderer/sortSplats.d.ts +0 -11
  33. package/dist/renderer/webgl/reorderData.d.ts +0 -13
  34. package/dist/renderer/webgl/webglRenderer.d.ts +19 -42
  35. package/dist/renderer/webgpu/webgpuRenderer.d.ts +18 -31
  36. package/dist/types/character-settings.d.ts +1 -5
  37. package/dist/types/character.d.ts +3 -21
  38. package/dist/types/index.d.ts +91 -36
  39. package/dist/utils/animation-interpolation.d.ts +3 -13
  40. package/dist/utils/client-id.d.ts +1 -0
  41. package/dist/utils/conversationId.d.ts +1 -0
  42. package/dist/utils/error-utils.d.ts +1 -25
  43. package/dist/utils/heartbeat-manager.d.ts +18 -0
  44. package/dist/utils/id-manager.d.ts +38 -0
  45. package/dist/utils/logger.d.ts +5 -11
  46. package/dist/utils/posthog-tracker.d.ts +11 -0
  47. package/dist/utils/pwa-cache-manager.d.ts +16 -0
  48. package/dist/utils/usage-tracker.d.ts +5 -0
  49. package/dist/vanilla/vite.config.d.ts +2 -0
  50. package/dist/wasm/avatarCoreAdapter.d.ts +14 -99
  51. package/dist/wasm/avatarCoreMemory.d.ts +5 -54
  52. package/package.json +15 -13
  53. package/dist/StreamingAudioPlayer-BKTD97fl.js +0 -319
  54. package/dist/StreamingAudioPlayer-BKTD97fl.js.map +0 -1
  55. package/dist/animation/AnimationWebSocketClient.d.ts.map +0 -1
  56. package/dist/animation/utils/eventEmitter.d.ts.map +0 -1
  57. package/dist/animation/utils/flameConverter.d.ts.map +0 -1
  58. package/dist/audio/AnimationPlayer.d.ts.map +0 -1
  59. package/dist/audio/StreamingAudioPlayer.d.ts.map +0 -1
  60. package/dist/avatar_core_wasm-D4eEi7Eh.js +0 -1666
  61. package/dist/avatar_core_wasm-D4eEi7Eh.js.map +0 -1
  62. package/dist/config/app-config.d.ts.map +0 -1
  63. package/dist/config/constants.d.ts.map +0 -1
  64. package/dist/config/sdk-config-loader.d.ts.map +0 -1
  65. package/dist/core/Avatar.d.ts.map +0 -1
  66. package/dist/core/AvatarController.d.ts.map +0 -1
  67. package/dist/core/AvatarDownloader.d.ts.map +0 -1
  68. package/dist/core/AvatarKit.d.ts +0 -66
  69. package/dist/core/AvatarKit.d.ts.map +0 -1
  70. package/dist/core/AvatarManager.d.ts.map +0 -1
  71. package/dist/core/AvatarView.d.ts.map +0 -1
  72. package/dist/core/NetworkLayer.d.ts.map +0 -1
  73. package/dist/generated/driveningress/v1/driveningress.d.ts.map +0 -1
  74. package/dist/generated/driveningress/v2/driveningress.d.ts.map +0 -1
  75. package/dist/generated/google/protobuf/struct.d.ts.map +0 -1
  76. package/dist/generated/google/protobuf/timestamp.d.ts.map +0 -1
  77. package/dist/index-CX8f1bzw.js +0 -5946
  78. package/dist/index-CX8f1bzw.js.map +0 -1
  79. package/dist/index.d.ts.map +0 -1
  80. package/dist/index.js.map +0 -1
  81. package/dist/renderer/RenderSystem.d.ts.map +0 -1
  82. package/dist/renderer/covariance.d.ts.map +0 -1
  83. package/dist/renderer/renderer.d.ts.map +0 -1
  84. package/dist/renderer/sortSplats.d.ts.map +0 -1
  85. package/dist/renderer/webgl/reorderData.d.ts.map +0 -1
  86. package/dist/renderer/webgl/webglRenderer.d.ts.map +0 -1
  87. package/dist/renderer/webgpu/webgpuRenderer.d.ts.map +0 -1
  88. package/dist/types/character-settings.d.ts.map +0 -1
  89. package/dist/types/character.d.ts.map +0 -1
  90. package/dist/types/index.d.ts.map +0 -1
  91. package/dist/utils/animation-interpolation.d.ts.map +0 -1
  92. package/dist/utils/cls-tracker.d.ts +0 -17
  93. package/dist/utils/cls-tracker.d.ts.map +0 -1
  94. package/dist/utils/error-utils.d.ts.map +0 -1
  95. package/dist/utils/logger.d.ts.map +0 -1
  96. package/dist/utils/reqId.d.ts +0 -20
  97. package/dist/utils/reqId.d.ts.map +0 -1
  98. package/dist/wasm/avatarCoreAdapter.d.ts.map +0 -1
  99. package/dist/wasm/avatarCoreMemory.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -2,20 +2,506 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [1.0.0-beta.60] - 2026-01-14
6
+
7
+ ### 🔧 Configuration Changes
8
+ - **PostHog Configuration** - PostHog telemetry now always uses the international site regardless of environment configuration
9
+
10
+ ## [1.0.0-beta.59] - 2026-01-14
11
+
12
+ ### 🐛 Bugfixes
13
+ - **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
14
+ - **PostHog Instance Initialization** - Fixed PostHog named instance initialization to avoid conflicts with external PostHog instances
15
+
16
+ ## [1.0.0-beta.58] - 2026-01-14
17
+
18
+ ### ✨ New Features
19
+ - **Pure Rendering Mode APIs** - Added `renderFlame()` and `generateTransitionFromIdle()` methods to `AvatarView` for external-controlled rendering without audio synchronization
20
+
21
+ ## [1.0.0-beta.57] - 2026-01-09
22
+
23
+ ### 🐛 Bugfixes
24
+ - **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.
25
+
26
+ ## [1.0.0-beta.56] - 2026-01-09
27
+
5
28
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
29
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
30
 
31
+ ## [1.0.0-beta.56] - 2025-01-05
32
+
33
+ ### ✨ New Features
34
+ - **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.
35
+
36
+ ## [1.0.0-beta.55] - 2025-01-05
37
+
38
+ ### ✨ New Features
39
+ - **Eye Tracking Control** - Added `eyeTrackingEnabled` parameter to `PostProcessingConfig`, allowing external control of eye tracking enable/disable state in real-time
40
+ - **Point Count API** - Added `getPointCount()` method to `AvatarController` to get the point cloud count of the current character
41
+
42
+ ## [1.0.0-beta.54] - 2025-01-05
43
+
44
+ ### 🐛 Bugfix
45
+ - **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.
46
+
47
+ ## [1.0.0-beta.53] - 2025-01-05
48
+
49
+ ### 🐛 Bugfix
50
+ - **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.
51
+
52
+ ## [1.0.0-beta.52] - 2025-01-05
53
+
54
+ ### 🔧 Performance Improvements
55
+ - **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.
56
+
57
+ ## [1.0.0-beta.51] - 2025-01-05
58
+
59
+ ### 🐛 Bugfix
60
+ - **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.
61
+
62
+ ### ✨ New Features
63
+ - **Post-Processing Config Enhancement** - Added `translation` and `eyePose` fields to `PostProcessingConfig` interface:
64
+ - `translation`: Position offset (x, y, z)
65
+ - `eyePose`: Eye pose offset with bias and weights (x, y, z, weightX, weightY, weightZ), applied to both left and right eyes
66
+
67
+ ## [1.0.0-beta.50] - 2025-01-05
68
+
69
+ ### 🔧 Performance Improvements
70
+ - **Removed CORS Preflight for Meta API** - Removed authentication headers (`X-App-Id` and `Authorization`) and unnecessary `Content-Type` header from character metadata API requests. This eliminates CORS preflight requests for simple GET requests, improving loading performance.
71
+
72
+ ## [1.0.0-beta.49] - 2025-01-05
73
+
74
+ ### 🐛 Bugfix
75
+ - **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.
76
+
77
+ ## [1.0.0-beta.48] - 2025-01-05
78
+
79
+ ### ✨ New Features
80
+ - **PWA Cache Management** - Added automatic PWA cache management for character and template resources to improve loading performance
81
+
82
+ ### 🔧 Performance Improvements
83
+ - **Cache Hit Rate Metrics** - Resource downloads now report cache status for analytics
84
+
85
+ ## [1.0.0-beta.47] - 2025-12-29
86
+
87
+ ### 🐛 Bugfix
88
+ - **Avatar Meta Update** - Fixed issue where cached Avatar instances would return stale character metadata even when the latest metadata was fetched. Now the character metadata is always updated to the latest version when loading an avatar, even if the version number hasn't changed.
89
+
90
+ ## [1.0.0-beta.46] - 2025-12-29
91
+
92
+ ### 🐛 Bugfix
93
+ - Expose `getCharacterMeta()` method in `Avatar` class as public API
94
+
95
+ ## [1.0.0-beta.45] - 2025-12-29
96
+
97
+ ### ✨ New Features
98
+ - **Immediate Rendering on Pause** - When playback is paused, updating post-processing parameters or camera configuration will immediately re-render the current frame:
99
+ - Post-processing parameters (rotation, neck pose, jaw pose, eye blink, etc.) now apply immediately when updated during pause
100
+ - Camera configuration (position, target, FOV, etc.) now applies immediately when updated during pause
101
+ - During normal playback, these updates still apply on the next frame as before
102
+
103
+ ### 🔄 API Changes
104
+
105
+ ### 🔄 API Changes
106
+ - **AvatarView Ready Promise Replaced with Callback** - Replaced `ready: Promise<void>` property with `onFirstRendering?: () => void` callback for better async handling:
107
+ - Removed `ready` Promise property
108
+ - Added `onFirstRendering` optional callback that is called when the first frame is rendered
109
+ - Callback-based approach is more idiomatic and easier to use than Promise-based approach
110
+
111
+ ### 🗑️ Removed
112
+ - **Removed unused `seek()` method** - Removed unused and buggy `seek()` method from `StreamingAudioPlayer`
113
+
114
+ ## [1.0.0-beta.44] - 2025-12-29
115
+
116
+ ### 🔧 Performance Improvements
117
+ - **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
118
+
119
+ ## [1.0.0-beta.43] - 2025-12-29
120
+
121
+ ### 🔧 Improvements
122
+ - Remove some unnecessary telemetry reporting
123
+
124
+ ## [1.0.0-beta.42] - 2025-12-29
125
+
126
+ ### ✨ New Features
127
+ - **PostHog Telemetry Configuration** - PostHog telemetry reporting now supports separate configuration for domestic (CN) and international (INTL) environments:
128
+ - Separate PostHog hosts and API keys for CN and INTL environments
129
+ - Compression disabled for domestic self-hosted instance, enabled for international official PostHog
130
+ - Localhost domain filtering to avoid test data pollution
131
+
132
+ ## [1.0.0-beta.41] - 2025-12-29
133
+
134
+ ### 🔄 Breaking Changes
135
+ - **Background Image Support Removed** - Removed background image functionality from `AvatarView`:
136
+ - Removed `isOpaque` getter/setter property
137
+ - Removed `setBackgroundImage()` method
138
+ - Removed background image loading from `AvatarDownloader`
139
+ - Canvas now always uses transparent background
140
+
141
+ ## [1.0.0-beta.40] - 2025-12-27
142
+
143
+ ### 🔧 API Improvements
144
+ - Extended post-processing parameter configuration interface
145
+
146
+ ## [1.0.0-beta.39] - 2025-12-27
147
+
148
+ ### 🔧 Improvements
149
+ - Filter localhost domain from telemetry reporting to avoid test data pollution
150
+
151
+ ## [1.0.0-beta.38] - 2025-12-27
152
+
153
+ ### 🔄 Breaking Changes
154
+ - Migrated telemetry reporting from Tencent Cloud CLS to PostHog
155
+
156
+ ### ✨ New Features
157
+ - Implemented download queue for character resource loading
158
+
159
+ ## [1.0.0-beta.37] - 2025-12-24
160
+
161
+ ### 🐛 Bugfix
162
+ - Various bug fixes and improvements
163
+
164
+ ## [1.0.0-beta.36] - 2025-12-20
165
+
166
+ ### ✨ New Features
167
+ - **Audio Sample Rate Configuration** - Added configurable audio sample rate support in SDK initialization
168
+ - Added `audioFormat` configuration option with `channelCount` (fixed to 1) and `sampleRate` (supports: 8000, 16000, 22050, 24000, 32000, 44100, 48000 Hz, default: 16000)
169
+ - Audio recording and playback now automatically use the configured sample rate
170
+ - Vanilla demo updated with sample rate dropdown selector for easy testing
171
+
172
+ ## [1.0.0-beta.35] - 2025-12-16
173
+
174
+ ### 🔄 API Changes
175
+ - **Avatar Transform API** - Changed `setTransform` method to `transform` getter/setter property for more idiomatic JavaScript API. Now supports both reading and setting transform values.
176
+
177
+ ## [1.0.0-beta.34] - 2025-12-16
178
+
179
+ ### ✨ New Features
180
+ - **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.
181
+
182
+ ## [1.0.0-beta.32] - 2025-12-16
183
+
184
+ ### 🔄 Breaking Changes
185
+ - **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.
186
+
187
+ ## [1.0.0-beta.31] - 2025-12-16
188
+
189
+ ### 🐛 Bugfix
190
+ - **Environment CORS Issue** - Fixed CORS issues when requesting configuration and character data APIs. SDK now provides default configuration fallback when config requests fail, ensuring smooth operation across different environments.
191
+
192
+ ## [1.0.0-beta.30] - 2025-12-15
193
+
194
+ ### 🐛 Bugfix
195
+ - **Template Resources Duplicate Download** - Fixed issue where template resources were being re-downloaded for each new character load. Template resources are now only loaded once during SDK initialization and reused for all characters.
196
+
197
+ ## [1.0.0-beta.29] - 2025-12-15
198
+
199
+ ### 🔄 Breaking Changes
200
+ - **Environment Enum** - Removed `Environment.test`. Only `Environment.cn` and `Environment.intl` are now supported. Environment configuration must be explicitly provided.
201
+ - **Log Level Default** - Default log level changed from `LogLevel.all` to `LogLevel.off`. Set `logLevel: LogLevel.all` in configuration to enable all logs.
202
+
203
+ ### ✨ New Features
204
+ - **Avatar Caching** - Added avatar caching methods in `AvatarManager`:
205
+ - `retrieve(id: string): Avatar | undefined` - Get cached avatar by ID
206
+ - `clear(id: string): void` - Clear cached avatar for specific ID
207
+ - `clearAll(): void` - Clear all cached avatars
208
+ - `clearCache()` is now deprecated, use `clearAll()` instead
209
+ - **Background Image Support** - Added background image control in `AvatarView`:
210
+ - `isOpaque: boolean` - Getter/setter to control canvas background transparency
211
+ - `setBackgroundImage(image: HTMLImageElement | string | null): void` - Set or remove background image
212
+
213
+ ### 🔧 Improvements
214
+ - **Avatar Version Checking** - Avatar cache now automatically checks version and reloads if cached avatar version differs from latest metadata
215
+ - **Concurrent Loading** - Multiple concurrent `load()` calls for the same avatar ID now reuse the same loading promise
216
+
217
+ ## [1.0.0-beta.28] - 2025-12-08
218
+
219
+ ### 🔄 Breaking Changes
220
+ - **Class Renamed** - `AvatarKit` class has been renamed to `AvatarSDK` for better consistency
221
+ - Update all imports: `import { AvatarKit } from '@spatialwalk/avatarkit'` → `import { AvatarSDK } from '@spatialwalk/avatarkit'`
222
+ - Update all API calls: `AvatarKit.initialize()` → `AvatarSDK.initialize()`
223
+ - All static methods and properties remain the same, only the class name has changed
224
+
225
+ ### 🔧 Improvements
226
+ - **Rendering Optimizations** - Added fragment shader discard optimization to improve performance and edge quality
227
+ - **Shader Alignment** - Removed view matrix transpose to align with Android SDK implementation
228
+ - **Resource Cleanup** - Removed unused `frameMono` and `audioMono` resources from SDK and tests
229
+
230
+ ## [1.0.0-beta.27] - 2025-12-04
231
+
232
+ ### 🐛 Bugfix
233
+
234
+ ## [1.0.0-beta.26] - 2025-12-03
235
+
236
+ ### ✨ New Features
237
+ - **Log Level Configuration** - Added `logLevel` configuration option to control SDK logging verbosity
238
+ - `LogLevel.off` - Disable all logs
239
+ - `LogLevel.error` - Only error logs
240
+ - `LogLevel.warning` - Warning and error logs
241
+ - `LogLevel.all` - All logs (default)
242
+ - **Standardized CLS Logging Events** - All CLS logging events now use standardized field names for better querying
243
+ - 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`
244
+ - Standard fields: `req_id`, `con_id`, `avatar_id`, `description`
245
+ - **End-to-End Latency Tracking** - Added `driving_latency` event to track latency metrics for both SDK and Host modes
246
+ - Tracks: `start`, `tap2`, `tap4`, `end`, `first_frame` timestamps
247
+ - Automatically reported at key moments during audio/animation processing
248
+
249
+ ### 🔧 Improvements
250
+ - **CLS Configuration Alignment** - Updated CLS endpoints and Topic IDs to match iOS SDK configuration
251
+ - **Default API Endpoints** - Fixed default API endpoint for `intl` environment to `api.intl.spatialwalk.cloud`
252
+ - **Error Code Enum** - Added new error codes: `appIDUnrecognized`, `sessionTokenInvalid`, `sessionTokenExpired`, `failedToFetchAvatarMetadata`, `failedToDownloadAvatarAssets`
253
+
254
+ ### 🗑️ Removed
255
+ - **Redundant Log Events** - Removed unnecessary log events: `playback_paused`, `playback_resumed`, `reconnecting`, `connect_success`, `server_error`, `decode_failed`
256
+
257
+ ## [1.0.0-beta.25] - 2025-12-03
258
+
259
+ ### 🔧 Improvements
260
+ - **Removed Audio Buffer Limit** - Removed the 100 chunk limit on pending audio buffers to allow unlimited audio data buffering
261
+
262
+ ## [1.0.0-beta.24] - 2025-11-26
263
+
264
+ ### 🔧 API Changes
265
+ - **Backend Endpoints Updated** - Backend API endpoints have been updated for all environments
266
+
267
+ ## [1.0.0-beta.23] - 2025-11-26
268
+
269
+ ### 🔧 API Changes
270
+ - **Breaking Change** - `playback()` method is no longer supported and has been removed from public API
271
+
272
+ ## [1.0.0-beta.22] - 2025-11-26
273
+
274
+ ### 🔧 API Changes
275
+ - **State Callback Renamed** - `onAvatarState` has been renamed to `onConversationState` for better clarity
276
+ - The callback now uses `ConversationState` enum with states: `idle` and `playing`
277
+ - **Environment Enum Updated** - `Environment.us` has been renamed to `Environment.intl` for better internationalization support
278
+ - All references to `Environment.us` should be updated to `Environment.intl`
279
+ - Remote config endpoints now use `intl` instead of `us`
280
+
281
+ ### ✨ New Features
282
+ - **Volume Control** - Added volume control API for audio playback
283
+ - `setVolume(volume: number)` - Set audio volume (0.0 to 1.0)
284
+ - `getVolume(): number` - Get current audio volume
285
+ - Volume control only affects the avatar's audio player, not system volume
286
+ - Volume changes take effect immediately, including for currently playing audio
287
+
288
+ ## [1.0.0-beta.21] - 2025-11-25
289
+
290
+ ### ✨ New Features
291
+ - **SDK Mode Connection Timeout Fallback** - Enhanced fallback mechanism for SDK mode:
292
+ - If WebSocket connection fails to establish within 15 seconds, the SDK automatically enters fallback mode
293
+ - In fallback mode, audio data can still be sent and will play normally, even though no animation data will be received
294
+ - Connection failures also trigger this fallback mechanism
295
+ - `ConnectionState.connecting` and `ConnectionState.failed` events are emitted to notify external applications
296
+ - Concurrent connection attempts are prevented to avoid race conditions
297
+
298
+ ### 🔧 Improvements
299
+ - Improved connection state management: `isConnected` now accurately reflects actual connection status (false in fallback mode)
300
+ - Added `canSend()` method in `NetworkLayer` to check if audio can be sent (including fallback mode)
301
+ - Better separation of concerns: connection state checks are now handled by `NetworkLayer`, while playback logic remains in `AvatarController`
302
+
303
+ ## [1.0.0-beta.20] - 2025-11-25
304
+
305
+ ### 🔧 Improvements
306
+ - Removed 1-second audio buffer requirement for auto-starting playback in Host mode
307
+
308
+ ## [1.0.0-beta.19] - 2025-11-25
309
+
310
+ ### 📚 Documentation
311
+ - **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
312
+ - Removed misleading "after playback() is called" comments
313
+ - Clarified two ways to start a session: using `playback()` for existing data, or `yieldAudioData()` directly for streaming
314
+ - Updated all examples and workflow descriptions to reflect correct API usage
315
+
316
+ ## [1.0.0-beta.18] - 2025-11-25
317
+
318
+ ### 🔧 API Changes
319
+ - **Renamed `reqId` to `conversationId`** - Updated terminology for better clarity
320
+ - All methods and parameters that used `reqId` now use `conversationId`
321
+ - `getCurrentReqId()` → `getCurrentConversationId()`
322
+ - `generateReqId()` → `generateConversationId()`
323
+ - Updated all event logs and documentation to use `conversationId`
324
+ - Note: Protobuf protocol still uses `reqId` field name internally, but SDK API uses `conversationId`
325
+
326
+ ### 📚 Documentation
327
+ - Enhanced Host mode documentation to clearly emphasize the workflow: send audio data first to get conversationId, then use that conversationId to send animation data
328
+ - Updated Host Mode Example and Host Mode Flow sections with clearer step-by-step instructions
329
+
330
+ ## [1.0.0-beta.17] - 2025-11-24
331
+
332
+ ### ✨ New Features
333
+ - **Audio-Only Fallback Mechanism** - SDK now includes automatic fallback to audio-only playback when animation data is unavailable
334
+ - SDK mode: Automatically enters audio-only mode when server returns an error
335
+ - Host mode: Automatically enters audio-only mode when empty animation data is provided
336
+ - Once in audio-only mode, subsequent animation data for that session is ignored
337
+ - Fallback mode is interruptible, just like normal playback mode
338
+
339
+ ### 🔧 API Changes
340
+ - **Playback Mode Configuration** - Moved playback mode configuration from `AvatarView` constructor to `AvatarSDK.initialize()`
341
+ - Playback mode is now determined by `drivingServiceMode` in `AvatarSDK.initialize()` configuration
342
+ - `AvatarView` constructor now only requires `avatar` and `container` parameters
343
+ - Removed `AvatarViewOptions` interface
344
+ - `container` parameter is now required (no longer optional)
345
+ - **Method Renames** - Renamed methods in `AvatarController` for Host mode to better reflect their purpose
346
+ - `play()` → `playback()`: Renamed to better reflect that the method is used for playback of existing data (replay mode)
347
+ - Old API: `avatarController.play(initialAudioChunks, initialKeyframes)`
348
+ - New API: `avatarController.playback(initialAudioChunks, initialKeyframes)`
349
+ - `sendAudioChunk()` → `yieldAudioData()`: Renamed to better reflect that the method yields/streams audio data
350
+ - Old API: `avatarController.sendAudioChunk(data, isLast)`
351
+ - New API: `avatarController.yieldAudioData(data, isLast)`
352
+ - `sendKeyframes()` → `yieldFramesData()`: Renamed to better reflect that the method yields/streams animation keyframes
353
+ - Old API: `avatarController.sendKeyframes(keyframes, reqId)`
354
+ - New API: `avatarController.yieldFramesData(keyframes, conversationId)`
355
+
356
+ ### 🔧 Improvements
357
+ - Extended transition animation duration from 200ms to 400ms for smoother end-of-playback transitions
358
+
359
+ ### 📚 Documentation
360
+ - Updated README.md to use "SDK mode" and "Host mode" terminology instead of "Network mode" and "External data mode"
361
+ - Added fallback mechanism documentation
362
+ - Updated API reference to reflect new constructor signature
363
+
364
+ ## [1.0.0-beta.16] - 2025-11-21
365
+
366
+ ### ✨ New Features
367
+ - **Multi-AvatarView Support** - SDK now supports multiple `AvatarView` instances simultaneously
368
+ - Each `AvatarView` instance can manage its own character independently
369
+ - Multiple characters can be displayed and controlled at the same time
370
+ - Each instance maintains its own rendering context, playback state, and network connection
371
+ - Removed the previous limitation of "only one AvatarView instance at a time"
372
+
373
+ ### 📚 Documentation
374
+ - Updated README.md to reflect multi-character support capabilities
375
+ - Added multi-character usage examples
376
+ - Removed outdated limitation notes about single AvatarView instance
377
+
378
+ ---
379
+
380
+ ## [1.0.0-beta.15] - 2025-11-20
381
+
382
+ ### ✨ New Features
383
+ - Added authentication support for API requests
384
+ - `appId` is now automatically included in HTTP headers (`X-App-Id`) and WebSocket URL query parameters
385
+ - `sessionToken` is now automatically included in HTTP headers (`Authorization: Bearer {token}`) and WebSocket URL query parameters
386
+ - All network requests (character loading, resource downloads, WebSocket connections) now include authentication credentials
387
+
388
+ ### 🔧 Improvements
389
+ - Fixed canvas resize handling for different aspect ratios
390
+ - Projection matrix is now correctly updated when canvas aspect ratio changes
391
+ - Rendering system properly handles portrait (9:16) and landscape (16:9) aspect ratios
392
+ - Canvas automatically adapts to container size changes via ResizeObserver
393
+
394
+ ### 🐛 Bug Fixes
395
+ - Fixed `RenderSystem.handleResize()` to update projection matrix when canvas size changes
396
+ - Previously only updated aspect ratio, now also updates projection matrix for correct rendering
397
+
398
+ ---
399
+
400
+ ## [1.0.0-beta.14] - 2025-11-18
401
+
402
+ ### ✨ New Features
403
+ - Added pause and resume functionality for avatar playback
404
+ - New `pause()` method to pause audio and animation playback
405
+ - New `resume()` method to resume playback from paused state
406
+ - Added `paused` state to `AvatarState` enum
407
+ - State changes are communicated via `onAvatarState` callback
408
+ - Works in both network mode and external data mode
409
+
410
+ ### 🔧 Improvements
411
+ - Canvas now uses container's full dimensions instead of fixed 1:1 aspect ratio
412
+ - Canvas automatically adapts to container size (width and height)
413
+ - External developers can control canvas aspect ratio by setting container dimensions
414
+ - Rendering system correctly handles any aspect ratio without distortion
415
+
416
+ ---
417
+
418
+ ## [1.0.0-beta.13] - 2025-11-17
419
+
420
+ ### 🔒 API Improvements
421
+ - Reduced console noise by setting default log level to Warning
422
+ - Logger now only outputs warnings and errors by default
423
+ - Set `VITE_DEBUG_LOG=true` to enable all logs
424
+ - Simplified logger configuration using `setGlobalLogLevel(LogLevel.Warning)`
425
+
426
+ ### 🐛 Bug Fixes
427
+ - Fixed SDK config loader warning in non-debug mode
428
+ - Config loading failures are now silently handled in production
429
+ - Warnings only shown when `VITE_DEBUG_LOG=true`
430
+
431
+ ---
432
+
433
+ ## [1.0.0-beta.12] - 2025-11-17
434
+
435
+ ### 🔒 API Improvements
436
+ - Marked performance monitoring APIs as internal
437
+ - `RenderPerformanceStats` interface and `getPerformanceStats()` method are now marked with `@internal` tag
438
+ - These APIs are not exposed in the public TypeScript definitions
439
+ - Reverted performance monitoring implementation to simpler version (only `renderTime` and `sortTime`)
440
+
441
+ ---
442
+
443
+ ## [1.0.0-beta.11] - 2025-11-17
444
+
445
+ ### 📚 Documentation
446
+ - Updated demo repository link in README.md
447
+ - Changed example project link from `Avatarkit-web-demo` to `AvatarSDK-Web-Demo` to match the new repository name
448
+
449
+ ---
450
+
451
+ ## [1.0.0-beta.10] - 2025-11-16
452
+
453
+ ### 🔒 API Improvements
454
+ - Cleaned up public API to hide internal implementation details
455
+ - Marked internal methods with `@internal` JSDoc tag to exclude them from TypeScript declarations
456
+ - Removed unused environment configuration options (`realtimeApiBaseUrl`, `realtimeWsUrl`)
457
+ - Added `appId` getter to `AvatarSDK` for accessing initialized app ID
458
+ - Internal methods like `getEnvironmentConfig`, `logEvent`, `getCanvas`, `getCameraConfig`, `updateCameraConfig` are now properly hidden from public API
459
+
460
+ ### 🐛 Bug Fixes
461
+ - Fixed memory leaks when disposing AvatarView instances
462
+ - Improved resource cleanup to prevent memory leaks when switching or disposing avatar instances
463
+ - Properly clears all callbacks, event listeners, and large data buffers on disposal
464
+
465
+ ---
466
+ ## [1.0.0-beta.9] - 2025-11-15
467
+
468
+ ### 🐛 Bug Fixes
469
+ - Fixed memory leaks when disposing AvatarView instances
470
+ - Improved resource cleanup to prevent memory leaks when switching or disposing avatar instances
471
+ - Properly clears all callbacks, event listeners, and large data buffers on disposal
472
+
473
+ ---
474
+
475
+ ## [1.0.0-beta.8] - 2025-11-14
476
+
477
+ ### 🐛 Bug Fixes
478
+ - Fixed audio-animation synchronization issue after normal playback completion
479
+ - Playback state is now properly cleaned up when audio finishes normally, preventing synchronization issues in subsequent conversations
480
+
481
+ ---
482
+
483
+ ## [1.0.0-beta.7] - 2025-11-14
484
+
485
+ ### 🔄 Refactoring
486
+ - Improved rendering state management for better stability and maintainability
487
+
488
+ ### 🐛 Bug Fixes
489
+ - Fixed interrupt not generating transition animation when interrupting during playback
490
+ - Fixed transition animation being regenerated and reset in external data mode when sending keyframes after playback starts
491
+
492
+ ---
493
+
8
494
  ## [1.0.0-beta.6] - 2025-11-14
9
495
 
10
496
  ### 🐛 Bug Fixes
11
- - Fixed transition animation being regenerated and reset when `sendKeyframes()` is called after `play()` in external data mode, causing the transition to play twice
497
+ - Fixed transition animation being regenerated and reset in external data mode when sending keyframes after playback starts, causing the transition to play twice
12
498
 
13
499
  ---
14
500
 
15
501
  ## [1.0.0-beta.5] - 2025-11-14
16
502
 
17
503
  ### 🐛 Bug Fixes
18
- - Fixed missing `AvatarPlaybackMode` enum export in published package
504
+ - Fixed missing `DrivingServiceMode` enum export in published package
19
505
 
20
506
  ---
21
507
 
@@ -44,7 +530,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
44
530
  - **External Data Mode**:
45
531
  - External components fully control audio and animation data acquisition
46
532
  - SDK only responsible for synchronized playback of externally provided data
47
- - Use `controller.play()`, `controller.sendAudioChunk()` and `controller.sendKeyframes()` methods
533
+ - Use `controller.playback()`, `controller.yieldAudioData()` and `controller.yieldFramesData()` methods
48
534
 
49
535
  ### ✨ New Features
50
536
 
@@ -80,7 +566,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
80
566
  // New API
81
567
  new AvatarView(avatar, {
82
568
  container: container,
83
- playbackMode: AvatarPlaybackMode.network // or AvatarPlaybackMode.external
569
+ playbackMode: DrivingServiceMode.sdk // or DrivingServiceMode.host
84
570
  })
85
571
  ```
86
572