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

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