@spatialwalk/avatarkit 1.0.0-beta.10 → 1.0.0-beta.101

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 +771 -4
  2. package/README.md +676 -365
  3. package/dist/StreamingAudioPlayer-BULgPjpe.js +643 -0
  4. package/dist/avatar_core_wasm-CQbUl6zN.js +2696 -0
  5. package/dist/avatar_core_wasm-bd762669.wasm +0 -0
  6. package/dist/core/Avatar.d.ts +5 -7
  7. package/dist/core/AvatarController.d.ts +99 -60
  8. package/dist/core/AvatarManager.d.ts +32 -12
  9. package/dist/core/AvatarSDK.d.ts +58 -0
  10. package/dist/core/AvatarView.d.ts +136 -128
  11. package/dist/index-C0A1HA8M.js +18427 -0
  12. package/dist/index.d.ts +2 -4
  13. package/dist/index.js +17 -17
  14. package/dist/next.d.ts +2 -0
  15. package/dist/performance/FrameRateMonitor.d.ts +85 -0
  16. package/dist/types/character-settings.d.ts +7 -1
  17. package/dist/types/character.d.ts +42 -16
  18. package/dist/types/index.d.ts +165 -45
  19. package/dist/vite.d.ts +19 -0
  20. package/next.d.ts +3 -0
  21. package/next.js +187 -0
  22. package/package.json +38 -8
  23. package/vite.d.ts +20 -0
  24. package/vite.js +126 -0
  25. package/dist/StreamingAudioPlayer-Bq2-bQiT.js +0 -319
  26. package/dist/StreamingAudioPlayer-Bq2-bQiT.js.map +0 -1
  27. package/dist/animation/AnimationWebSocketClient.d.ts +0 -50
  28. package/dist/animation/AnimationWebSocketClient.d.ts.map +0 -1
  29. package/dist/animation/utils/eventEmitter.d.ts +0 -13
  30. package/dist/animation/utils/eventEmitter.d.ts.map +0 -1
  31. package/dist/animation/utils/flameConverter.d.ts +0 -26
  32. package/dist/animation/utils/flameConverter.d.ts.map +0 -1
  33. package/dist/audio/AnimationPlayer.d.ts +0 -57
  34. package/dist/audio/AnimationPlayer.d.ts.map +0 -1
  35. package/dist/audio/StreamingAudioPlayer.d.ts +0 -123
  36. package/dist/audio/StreamingAudioPlayer.d.ts.map +0 -1
  37. package/dist/avatar_core_wasm-D4eEi7Eh.js +0 -1666
  38. package/dist/avatar_core_wasm-D4eEi7Eh.js.map +0 -1
  39. package/dist/avatar_core_wasm.wasm +0 -0
  40. package/dist/config/app-config.d.ts +0 -44
  41. package/dist/config/app-config.d.ts.map +0 -1
  42. package/dist/config/constants.d.ts +0 -29
  43. package/dist/config/constants.d.ts.map +0 -1
  44. package/dist/config/sdk-config-loader.d.ts +0 -12
  45. package/dist/config/sdk-config-loader.d.ts.map +0 -1
  46. package/dist/core/Avatar.d.ts.map +0 -1
  47. package/dist/core/AvatarController.d.ts.map +0 -1
  48. package/dist/core/AvatarDownloader.d.ts +0 -95
  49. package/dist/core/AvatarDownloader.d.ts.map +0 -1
  50. package/dist/core/AvatarKit.d.ts +0 -48
  51. package/dist/core/AvatarKit.d.ts.map +0 -1
  52. package/dist/core/AvatarManager.d.ts.map +0 -1
  53. package/dist/core/AvatarView.d.ts.map +0 -1
  54. package/dist/core/NetworkLayer.d.ts +0 -59
  55. package/dist/core/NetworkLayer.d.ts.map +0 -1
  56. package/dist/generated/driveningress/v1/driveningress.d.ts +0 -80
  57. package/dist/generated/driveningress/v1/driveningress.d.ts.map +0 -1
  58. package/dist/generated/driveningress/v2/driveningress.d.ts +0 -81
  59. package/dist/generated/driveningress/v2/driveningress.d.ts.map +0 -1
  60. package/dist/generated/google/protobuf/struct.d.ts +0 -108
  61. package/dist/generated/google/protobuf/struct.d.ts.map +0 -1
  62. package/dist/generated/google/protobuf/timestamp.d.ts +0 -129
  63. package/dist/generated/google/protobuf/timestamp.d.ts.map +0 -1
  64. package/dist/index-bQnEVIkT.js +0 -5999
  65. package/dist/index-bQnEVIkT.js.map +0 -1
  66. package/dist/index.d.ts.map +0 -1
  67. package/dist/index.js.map +0 -1
  68. package/dist/renderer/RenderSystem.d.ts +0 -79
  69. package/dist/renderer/RenderSystem.d.ts.map +0 -1
  70. package/dist/renderer/covariance.d.ts +0 -13
  71. package/dist/renderer/covariance.d.ts.map +0 -1
  72. package/dist/renderer/renderer.d.ts +0 -8
  73. package/dist/renderer/renderer.d.ts.map +0 -1
  74. package/dist/renderer/sortSplats.d.ts +0 -12
  75. package/dist/renderer/sortSplats.d.ts.map +0 -1
  76. package/dist/renderer/webgl/reorderData.d.ts +0 -14
  77. package/dist/renderer/webgl/reorderData.d.ts.map +0 -1
  78. package/dist/renderer/webgl/webglRenderer.d.ts +0 -66
  79. package/dist/renderer/webgl/webglRenderer.d.ts.map +0 -1
  80. package/dist/renderer/webgpu/webgpuRenderer.d.ts +0 -54
  81. package/dist/renderer/webgpu/webgpuRenderer.d.ts.map +0 -1
  82. package/dist/types/character-settings.d.ts.map +0 -1
  83. package/dist/types/character.d.ts.map +0 -1
  84. package/dist/types/index.d.ts.map +0 -1
  85. package/dist/utils/animation-interpolation.d.ts +0 -17
  86. package/dist/utils/animation-interpolation.d.ts.map +0 -1
  87. package/dist/utils/cls-tracker.d.ts +0 -17
  88. package/dist/utils/cls-tracker.d.ts.map +0 -1
  89. package/dist/utils/error-utils.d.ts +0 -27
  90. package/dist/utils/error-utils.d.ts.map +0 -1
  91. package/dist/utils/logger.d.ts +0 -35
  92. package/dist/utils/logger.d.ts.map +0 -1
  93. package/dist/utils/reqId.d.ts +0 -20
  94. package/dist/utils/reqId.d.ts.map +0 -1
  95. package/dist/wasm/avatarCoreAdapter.d.ts +0 -188
  96. package/dist/wasm/avatarCoreAdapter.d.ts.map +0 -1
  97. package/dist/wasm/avatarCoreMemory.d.ts +0 -141
  98. package/dist/wasm/avatarCoreMemory.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -5,13 +5,780 @@ 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.101]
9
+
10
+ ### ⚡ Performance
11
+
12
+ - **Template loading optimization** — Consolidated 4 template files into a single compressed model, reducing template download from ~53 MB to ~28 MB (gzip). Automatic fallback to legacy multi-file mode if the new format is unavailable.
13
+
14
+ ## [1.0.0-beta.100]
15
+
16
+ ### ✨ Features
17
+
18
+ - **RTC rendering support** — Added protobuf-based rendering methods to `AvatarView` for RTC mode integration.
19
+
20
+ ### 🐛 Bugfixes
21
+
22
+ - **Transform Y-axis direction** — Fixed `avatarTransform.y` direction being inverted compared to iOS/Android. Positive Y now moves avatar upward on all platforms.
23
+
24
+ ## [1.0.0-beta.99]
25
+
26
+ ### ✨ Features
27
+
28
+ - **Playback diagnostics** — Added telemetry events for audio buffer stall and frame starvation detection, improving visibility into playback interruption issues.
29
+
30
+ ## [1.0.0-beta.98]
31
+
32
+ ### 🐛 Bugfixes
33
+
34
+ - **Build artifact fix** — beta.97 npm package contained stale build artifacts. This release contains the correct build with all beta.97 changes.
35
+
36
+ ### ⚡ Breaking Changes
37
+
38
+ - **`setVolume()` / `getVolume()` replaced by `volume` property** — `controller.setVolume(0.5)` is now `controller.volume = 0.5`. Aligned with Android and iOS SDKs.
39
+
40
+ ## [1.0.0-beta.97]
41
+
42
+ ### ⚡ Breaking Changes
43
+
44
+ - **`transform` renamed to `avatarTransform`** — `avatarView.transform` is now `avatarView.avatarTransform`. Aligned naming across Web, Android, and iOS SDKs.
45
+
46
+ ### ✨ Features
47
+
48
+ - **Avatar transform from character settings** — Avatar automatically applies position and scale from character settings. User-set `avatarTransform` stacks on top of the base values.
49
+
50
+ ### 🐛 Bugfixes
51
+
52
+ - **Rendering quality improvement** — Improved color accuracy for avatar rendering.
53
+
54
+ ### 📝 Documentation
55
+
56
+ - **send() byte alignment** — Documented PCM S16LE byte alignment requirement for `send()`.
57
+
58
+ ## [1.0.0-beta.96]
59
+
60
+ ### 🐛 Bugfixes
61
+
62
+ - **WASM Loading in Vite Dev Mode** — Fixed WASM pre-validation failing when consumed via Vite dev server. The WASM URL was mangled by the bundler, causing HTTP 431 errors. Now skips pre-validation when the resolved URL is not a valid `.wasm` path, falling back to Emscripten's built-in loader.
63
+
64
+ ## [1.0.0-beta.95]
65
+
66
+ ### 🐛 Bugfixes
67
+
68
+ - **WebGPU Jacobian Matrix Fix** — Fixed incorrect Jacobian matrix column order in `calcCovariance2D` (WebGPU renderer). The `mat3x3f` constructor takes column vectors, but values were passed in row order, causing transposed 2D covariance and blurry splat edges (especially visible on arms/hands). Android (Vulkan GLSL) and iOS (Metal) were not affected.
69
+
70
+ ### ⚡ Performance
71
+
72
+ - **WASM Download Integrity & Retry** — Added binary integrity validation (magic number + Content-Length check) and automatic retry (up to 3 attempts) for WASM module loading. Also added Content-Length validation for all resource downloads. Prevents cryptic `CompileError` from truncated or corrupted downloads (e.g. in WeChat browser).
73
+
74
+ ## [1.0.0-beta.94]
75
+
76
+ ### 🐛 Bugfixes
77
+
78
+ - **WebGPU Tab Switch Rendering Fix** — Fixed avatar rendering corruption (split/misaligned) when switching back to a tab. Root cause: WebGPU context was not reconfigured after canvas resize, causing surface size and screenSize mismatch in the shader.
79
+
80
+ ### ✨ Features
81
+
82
+ - **WebSocket Close Code Handling** — Server-defined custom close codes (4010 auth failure, 4001 insufficient balance, 4002 session timeout, 4003 concurrent limit) are now properly recognized and mapped to `ErrorCode`. Non-recoverable errors (4010/4001/4003) no longer trigger reconnection attempts.
83
+ - **Error Transparency** — All non-normal WebSocket close events are now propagated to `onError` callback and reported to PostHog telemetry. Previously, some close codes (e.g. 1006) were only logged internally without notifying the application.
84
+ - **New ErrorCode Values** — Added `insufficientBalance`, `sessionTimeout`, `concurrentLimitExceeded` to the `ErrorCode` enum.
85
+
86
+ ## [1.0.0-beta.92]
87
+
88
+ ### ✨ Features
89
+
90
+ - **Host Mode Animation End Signal** — `yieldFramesData()` now returns a `boolean` indicating whether the server has sent all animation data for the current conversation (`end` flag from protobuf). Non-breaking: callers that ignore the return value are unaffected.
91
+
92
+ ## [1.0.0-beta.91] - 2026-03-19
93
+
94
+ ### 🐛 Bugfixes
95
+
96
+ - **Inline CPU Benchmark Worker** — Consumers using Vite could not build: `Could not resolve entry module "public/assets/cpu-benchmark-worker-*.js"`. Root cause: `new URL()` worker pattern in Vite library mode compiles to absolute path that downstream bundlers cannot resolve. Fixed by replacing with inline Blob URL worker.
97
+
98
+ ## [1.0.0-beta.90] - 2026-03-18
99
+
100
+ ### 🐛 Bugfixes
101
+
102
+ - **WASM Core Update** — Updated WASM binary to include CSPLAT v4 compressed point cloud decoder; `useCompressedModel` previously failed with `avatar_core_load_character returned NULL` because the WASM build predated the CSPLAT decoder addition
103
+
104
+ ## [Unreleased]
105
+
106
+ ### ⚡ Breaking Changes
107
+
108
+ - **Enum Rename** — `ConversationState.pausing` renamed to `ConversationState.paused` for cross-SDK consistency
109
+ - **FrameRateInfo** — Unified as pre-computed fields; sub-stage data (decode/render/present) now available via `FrameRenderInfo`
110
+
111
+ ### ✨ Features
112
+
113
+ - **FrameRateMonitor** — Unified public API for frame rate monitoring with enable/disable switch
114
+ - **Device Benchmark** — `deviceScore` and `isDeviceSupported` APIs for runtime device capability assessment
115
+ - **Telemetry Enhancements** — `avatar_playback_fps` now reports `cpu_score`, `gpu_score`, and `renderer_backend` (webgl/webgpu)
116
+ - **Deprecation Reset** — Deprecation warnings reset on `initialize()` to avoid stale state across re-init cycles
117
+ - **Compressed Model (Beta)** — `load()` accepts optional `useCompressedModel` parameter (default `false`); when `true`, prefers compressed model resource (~30% of original size, minor quality degradation), falls back to standard resource if unavailable。此功能目前为 Beta,请务必验证渲染效果后再用于生产环境
118
+
119
+ ### ⚡ Performance
120
+
121
+ - **Audio-Clock-Driven Scheduling** — Speaking playback now uses audio clock for tick scheduling, replacing RAF-based timing for more accurate frame pacing
122
+ - **Idle Present Frame Resubmission** — Idle state uses `presentFrameOnly()` to resubmit the current frame, reducing GPU re-computation
123
+
124
+ ### 🐛 Bugfixes
125
+
126
+ - **Build Packaging** — WASM binary missing from dist in beta.87; added benchmark-demo and marble-test to dts exclude
127
+ - **Deprecation State** — Fixed stale deprecation warnings persisting across SDK re-initialization
128
+
129
+ ## [1.0.0-beta.88] - 2026-03-10
130
+
131
+ ### 🐛 Bugfixes
132
+
133
+ - **Build Packaging Fix** - WASM binary was missing from dist in beta.87 npm package; added `benchmark-demo` and `marble-test` to dts exclude to prevent type declaration leakage
134
+ - **Release Workflow** - Added build artifact verification step (WASM presence + no leaked directories)
135
+
136
+ ## [1.0.0-beta.87] - 2026-03-09
137
+
138
+ ### 🔧 Performance
139
+
140
+ - **Playback Cadence Stabilization** - Replaced RAF + `Math.floor(audioTime*25)` frame dispatch with fixed 25fps tick scheduler and bounded async queue, eliminating bursty frame production
141
+ - **Display Decoupling** - Speaking state uses RAF-driven `presentFrameOnly()` to present latest computed frame (WebGPU only), reducing display-side pacing jitter
142
+ - **WebGL Speaking-State Loop Suspension** - WebGL backend pauses realtime animation loop during Speaking state to avoid redundant `reorderPackedData` CPU work and RAF callback competition
143
+
144
+ ### 🐛 Bugfixes
145
+
146
+ - **Frame Index Floating-Point Precision** - Added epsilon tolerance (`+1e-6`) to `Math.floor(audioTime * fps)` to prevent IEEE 754 precision errors from producing duplicate frame indices at frame boundaries
147
+ - **WebGL Regression Fix** - Fixed severe WebGL performance regression (jank 9.47%→0.16%) caused by WebGPU-only optimization that triggered 60fps `reorderPackedData` calls on WebGL path
148
+ - **SDK Duplicate Initialize** - Deduplicated SDK initialization to prevent repeated setup when `initialize()` is called multiple times
149
+
150
+ ### ✅ Tests
151
+
152
+ - **Android Init Coverage** - Added Android duplicate-initialize regression coverage
153
+
154
+ ### 📊 Benchmark
155
+
156
+ - **beta.86 vs beta.87 Baseline** - Full cross-backend performance comparison (WebGPU + WebGL), 1 warmup + 10 measure rounds, 10s/round. Jank rate reduced 94.6% (WebGPU) and 93.9% (WebGL); frame interval stability improved 64-67%
157
+
158
+ ## [1.0.0-beta.86] - 2026-03-03
159
+
160
+ ### 🐛 Bugfixes
161
+ - **Transition Continuity** - Fixed start transition source frame selection to use the currently displayed idle frame, reducing first-frame jump.
162
+ - **Transition Robustness** - Added frame index clamping for realtime callback and speaking->idle transition source lookup, preventing end-transition fallback jumps caused by out-of-range indices.
163
+
164
+ ### ✅ Tests
165
+ - **State Machine Coverage** - Updated `AvatarView` rendering state tests to align with current dual-transition flow, and added boundary tests for start/end transition frame selection.
166
+
167
+ ## [1.0.0-beta.82] - 2026-02-12
168
+
169
+ ### 🔧 Improvements
170
+ - **Proto V2 协议更新** - 更新解码协议
171
+
172
+ ## [1.0.0-beta.80] - 2026-02-08
173
+
174
+ ### ✨ New Features
175
+ - **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
176
+
177
+ ## [1.0.0-beta.79] - 2026-02-08
178
+
179
+ ### ✨ New Features
180
+ - **Camera API** - Exposed `getCameraConfig()` and `updateCameraConfig()` on AvatarView for external real-time camera control
181
+
182
+ ## [1.0.0-beta.78] - 2026-02-04
183
+
184
+ ### 🐛 Bugfixes
185
+ - **Telemetry Accuracy** - Fixed environment field reporting issue in analytics events
186
+
187
+ ### ✨ New Features
188
+ - **Performance Monitoring** - Added loading performance metrics for avatar resources
189
+ - `fetch_avatar_latency` - Total loading time
190
+ - `fetch_avatar_metadata_latency` - Metadata fetch time
191
+ - `download_avatar_assets_latency` - Asset download time
192
+
193
+ ### 🔧 Improvements
194
+ - **Internal Architecture** - Unified configuration constants across platforms for better maintainability
195
+
196
+ ## [1.0.0-beta.74] - 2026-01-22
197
+
198
+ ### 🔧 Improvements
199
+ - **Transition API** - Replaced `generateTransitionFromIdle` with `generateTransition` (options-based API: `from`, `to`, `frameCount`, `useLinear`)
200
+
201
+ ## [1.0.0-beta.73] - 2026-01-22
202
+
203
+ ### ✨ New Features
204
+ - **Local Log Upload** - Automatic local log upload functionality
205
+
206
+ ## [1.0.0-beta.72] - 2026-01-17
207
+
208
+ ### 📚 Documentation
209
+ - **README Optimization** - Enhanced README with authentication section and improved API documentation
210
+
211
+ ## [1.0.0-beta.71] - 2026-01-17
212
+
213
+ ### 🔧 Improvements
214
+ - **Internal API** - Marked all audio and animation internal classes with `@internal` to prevent public API exposure
215
+ - **Type Safety** - Hidden `AnimationPlayer`, `StreamingAudioPlayer`, `AnimationWebSocketClient`, and related utilities from public API
216
+ - **Internal Documentation** - Fixed missing English translations in `AnimationWebSocketClient.ts`
217
+
218
+ ## [1.0.0-beta.70] - 2026-01-17
219
+
220
+ ### 🔧 Improvements
221
+ - **Code Cleanup** - Removed unused `FlatSplatData` interface from public API
222
+ - **Internal Documentation** - Translated all internal code comments to English for consistency
223
+
224
+ ## [1.0.0-beta.69] - 2026-01-17
225
+
226
+ ### 🔧 Improvements
227
+ - **API Documentation** - All public API comments are now in English with JSDoc support for better IDE IntelliSense
228
+ - **Type Safety** - Removed internal types from public API exports
229
+ - **Build Configuration** - JSDoc comments are now preserved in generated `.d.ts` files
230
+
231
+ ### 📚 Documentation
232
+ - Enhanced audio data format documentation with WAV and MP3 processing examples
233
+
234
+ ## [1.0.0-beta.68] - 2026-01-17
235
+
236
+ ### 🐛 Bugfixes
237
+ - **Vite Plugin WASM File Detection** - Fixed Vite plugin not finding WASM files with hash in consuming projects
238
+ - Plugin now reads JS glue file to extract referenced WASM filename (including hash)
239
+ - Ensures correct WASM file is copied to match JS glue file references
240
+ - Prevents 404 errors when WASM files have content-based hashes
241
+ - Fixes issue where `avatar_core_wasm.wasm` was not found after adding hash support
242
+
243
+ ## [1.0.0-beta.67] - 2026-01-17
244
+
245
+ ### 🐛 Bugfixes
246
+ - **WASM File Hash Support** - Fixed critical issue where WASM files were not being hashed during SDK build
247
+ - WASM files now automatically get content-based hash (e.g., `avatar_core_wasm-{hash}.wasm`)
248
+ - JS glue files are automatically updated to reference the hashed WASM filename
249
+ - Prevents browser cache issues when WASM files are updated
250
+ - Ensures proper version management and cache invalidation
251
+
252
+ ### 🔧 Improvements
253
+ - **Build Process** - Enhanced SDK build process to automatically handle WASM file hashing
254
+ - Hash is calculated based on WASM file content (SHA256, first 8 characters)
255
+ - Build logs now show hash generation progress
256
+ - Compatible with existing Vite plugin for consuming projects
257
+
258
+ ## [1.0.0-beta.65] - 2026-01-14
259
+
260
+ ### 🐛 Bugfixes
261
+ - **Transition Frame Reset Logic** - Fixed issue where `currentPlayingFrame` was not reset after generating transitions, causing jump artifacts on second conversation
262
+ - Reset `currentPlayingFrame` to `null` after generating idle->speaking transitions
263
+ - Reset `currentPlayingFrame` to `null` after generating speaking->idle transitions
264
+ - Reset `currentPlayingFrame` to `null` when entering Idle state
265
+ - Ensures each transition starts from the correct current frame by re-fetching the current state frame when needed
266
+
267
+ ## [1.0.0-beta.64] - 2026-01-14
268
+
269
+ ### ✨ New Features
270
+ - **Vite Plugin for WASM Configuration** - Added `avatarkitVitePlugin` to automate WASM file configuration
271
+ - Automatically handles WASM MIME types in dev server
272
+ - Copies WASM files to dist/assets/ during build
273
+ - Generates `_headers` file for Cloudflare Pages deployment
274
+ - Configures Vite's optimizeDeps, assetsInclude, and assetsInlineLimit
275
+
276
+ ### 🔧 Improvements
277
+ - **Unified Transition Logic** - All transitions now start from the current playing frame, ensuring smooth transitions from any state (Idle, Speaking, or Transitioning)
278
+ - **Idle State Performance** - Optimized idle state to avoid unnecessary frame parameter fetching on every frame
279
+ - **Transition Animation** - Idle->Speaking uses linear interpolation, Speaking->Idle uses Bezier curve easing
280
+
281
+ ### 🐛 Bugfixes
282
+ - Fixed vanilla demo audio context initialization issue
283
+ - Fixed recording button only working once in vanilla demo
284
+ - Fixed host mode data loading to use local files instead of API endpoint
285
+
286
+ ### 📚 Documentation
287
+ - Added transition animation technical specification document for cross-platform alignment
288
+
289
+ ## [1.0.0-beta.63] - 2026-01-14
290
+
291
+ ### ✨ New Features
292
+ - **Audio Context Initialization API** - Added `initializeAudioContext()` method to `AvatarController`
293
+ - Must be called in a user gesture context (click, touchstart, etc.) before any audio operations
294
+ - Ensures AudioContext is created and initialized in a user gesture context, preventing browser security policy issues
295
+ - All audio operations (`send()`, `yieldAudioData()`, `start()`, `playback()`, etc.) now require prior initialization
296
+
297
+ ### 🔧 Improvements
298
+ - **Initialization Flow** - Removed all lazy initialization logic for audio context
299
+ - Audio context initialization is now centralized in `initializeAudioContext()` method
300
+ - All audio operations check for initialization before proceeding
301
+ - Clear error messages when audio operations are attempted without initialization
302
+
303
+ ### 🐛 Bugfixes
304
+ - **Audio Context User Gesture Requirement** - Fixed issue where AudioContext could not be properly initialized when external applications request recording permissions
305
+ - Audio context must now be initialized in user gesture context, ensuring browser security policies are satisfied
306
+
307
+ ## [1.0.0-beta.62] - 2026-01-14
308
+
309
+ ### ✨ New Features
310
+ - **Bezier Curve Transition Animation** - Implemented Bezier curve easing functions for smoother transitions
311
+ - Added Bezier curve interpolation with different curves for different facial components (jaw, expression, eye, neck, global)
312
+ - Replaced linear interpolation with Bezier curve interpolation for more natural animation
313
+ - Split transition duration into start (200ms) and end (1600ms) for different transition types
314
+
315
+ ### 🔧 Improvements
316
+ - **Transition API Enhancement** - Updated `generateTransitionFromIdle()` to support both start and end transitions
317
+ - Added `transitionType` parameter: `'start'` for idle-to-speaking, `'end'` for speaking-to-idle
318
+ - Removed deprecated linear interpolation code and unused easing functions
319
+
320
+ ## [1.0.0-beta.61] - 2026-01-14
321
+
322
+ ### 🔧 Improvements
323
+ - **Telemetry Events Update** - Updated telemetry events with new parameters and structure
324
+ - `sdk_initialized`: Added `env` and `dsm` parameters
325
+ - `driving_service_latency`: Replaced `driving_latency`, now tracks `tap_0`, `tap_1`, `tap_2`, `tap_f` timestamps (Number type, milliseconds)
326
+ - `avatar_active`: New event for avatar view activity tracking with `env` and `dsm` parameters, reported on first render and every 10 minutes
327
+ - **Heartbeat Refactoring** - Removed `HeartbeatManager`, integrated heartbeat functionality into `NetworkLayer` (driving service heartbeat) and `AvatarView` (avatar active heartbeat)
328
+
329
+ ## [1.0.0-beta.60] - 2026-01-14
330
+
331
+ ### 🔧 Configuration Changes
332
+ - **PostHog Configuration** - PostHog telemetry now always uses the international site regardless of environment configuration
333
+
334
+ ## [1.0.0-beta.59] - 2026-01-14
335
+
336
+ ### 🐛 Bugfixes
337
+ - **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
338
+ - **PostHog Instance Initialization** - Fixed PostHog named instance initialization to avoid conflicts with external PostHog instances
339
+
340
+ ## [1.0.0-beta.58] - 2026-01-14
341
+
342
+ ### ✨ New Features
343
+ - **Pure Rendering Mode APIs** - Added `renderFrame()` and `generateTransitionFromIdle()` methods to `AvatarView` for external-controlled rendering without audio synchronization
344
+
345
+ ## [1.0.0-beta.57] - 2026-01-09
346
+
347
+ ### 🐛 Bugfixes
348
+ - **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.
349
+
350
+ ## [1.0.0-beta.56] - 2026-01-09
351
+
352
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
353
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
354
+
355
+ ## [1.0.0-beta.56] - 2025-01-05
356
+
357
+ ### ✨ New Features
358
+ - **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.
359
+
360
+ ## [1.0.0-beta.55] - 2025-01-05
361
+
362
+ ### ✨ New Features
363
+ - **Eye Tracking Control** - Added `eyeTrackingEnabled` parameter to `PostProcessingConfig`, allowing external control of eye tracking enable/disable state in real-time
364
+ - **Point Count API** - Added `getPointCount()` method to `AvatarController` to get the point cloud count of the current avatar
365
+
366
+ ## [1.0.0-beta.54] - 2025-01-05
367
+
368
+ ### 🐛 Bugfix
369
+ - **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.
370
+
371
+ ## [1.0.0-beta.53] - 2025-01-05
372
+
373
+ ### 🐛 Bugfix
374
+ - **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.
375
+
376
+ ## [1.0.0-beta.52] - 2025-01-05
377
+
378
+ ### 🔧 Performance Improvements
379
+ - **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.
380
+
381
+ ## [1.0.0-beta.51] - 2025-01-05
382
+
383
+ ### 🐛 Bugfix
384
+ - **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.
385
+
386
+ ### ✨ New Features
387
+ - **Post-Processing Config Enhancement** - Added `translation` and `eyePose` fields to `PostProcessingConfig` interface:
388
+ - `translation`: Position offset (x, y, z)
389
+ - `eyePose`: Eye pose offset with bias and weights (x, y, z, weightX, weightY, weightZ), applied to both left and right eyes
390
+
391
+ ## [1.0.0-beta.50] - 2025-01-05
392
+
393
+ ### 🔧 Performance Improvements
394
+ - **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.
395
+
396
+ ## [1.0.0-beta.49] - 2025-01-05
397
+
398
+ ### 🐛 Bugfix
399
+ - **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.
400
+
401
+ ## [1.0.0-beta.48] - 2025-01-05
402
+
403
+ ### ✨ New Features
404
+ - **PWA Cache Management** - Added automatic PWA cache management for avatar and template resources to improve loading performance
405
+
406
+ ### 🔧 Performance Improvements
407
+ - **Cache Hit Rate Metrics** - Resource downloads now report cache status for analytics
408
+
409
+ ## [1.0.0-beta.47] - 2025-12-29
410
+
411
+ ### 🐛 Bugfix
412
+ - **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.
413
+
414
+ ## [1.0.0-beta.46] - 2025-12-29
415
+
416
+ ### 🐛 Bugfix
417
+ - Expose `getCharacterMeta()` method in `Avatar` class as public API
418
+
419
+ ## [1.0.0-beta.45] - 2025-12-29
420
+
421
+ ### ✨ New Features
422
+ - **Immediate Rendering on Pause** - When playback is paused, updating post-processing parameters or camera configuration will immediately re-render the current frame:
423
+ - Post-processing parameters (rotation, neck pose, jaw pose, eye blink, etc.) now apply immediately when updated during pause
424
+ - Camera configuration (position, target, FOV, etc.) now applies immediately when updated during pause
425
+ - During normal playback, these updates still apply on the next frame as before
426
+
427
+ ### 🔄 API Changes
428
+
429
+ ### 🔄 API Changes
430
+ - **AvatarView Ready Promise Replaced with Callback** - Replaced `ready: Promise<void>` property with `onFirstRendering?: () => void` callback for better async handling:
431
+ - Removed `ready` Promise property
432
+ - Added `onFirstRendering` optional callback that is called when the first frame is rendered
433
+ - Callback-based approach is more idiomatic and easier to use than Promise-based approach
434
+
435
+ ### 🗑️ Removed
436
+ - **Removed unused `seek()` method** - Removed unused and buggy `seek()` method from `StreamingAudioPlayer`
437
+
438
+ ## [1.0.0-beta.44] - 2025-12-29
439
+
440
+ ### 🔧 Performance Improvements
441
+ - **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
442
+
443
+ ## [1.0.0-beta.43] - 2025-12-29
444
+
445
+ ### 🔧 Improvements
446
+ - Remove some unnecessary telemetry reporting
447
+
448
+ ## [1.0.0-beta.42] - 2025-12-29
449
+
450
+ ### ✨ New Features
451
+ - **PostHog Telemetry Configuration** - PostHog telemetry reporting now supports separate configuration for domestic (CN) and international (INTL) environments:
452
+ - Separate PostHog hosts and API keys for CN and INTL environments
453
+ - Compression disabled for domestic self-hosted instance, enabled for international official PostHog
454
+ - Localhost domain filtering to avoid test data pollution
455
+
456
+ ## [1.0.0-beta.41] - 2025-12-29
457
+
458
+ ### 🔄 Breaking Changes
459
+ - **Background Image Support Removed** - Removed background image functionality from `AvatarView`:
460
+ - Removed `isOpaque` getter/setter property
461
+ - Removed `setBackgroundImage()` method
462
+ - Removed background image loading from `AvatarDownloader`
463
+ - Canvas now always uses transparent background
464
+
465
+ ## [1.0.0-beta.40] - 2025-12-27
466
+
467
+ ### 🔧 API Improvements
468
+ - Extended post-processing parameter configuration interface
469
+
470
+ ## [1.0.0-beta.39] - 2025-12-27
471
+
472
+ ### 🔧 Improvements
473
+ - Filter localhost domain from telemetry reporting to avoid test data pollution
474
+
475
+ ## [1.0.0-beta.38] - 2025-12-27
476
+
477
+ ### 🔄 Breaking Changes
478
+ - Migrated telemetry reporting from Tencent Cloud CLS to PostHog
479
+
480
+ ### ✨ New Features
481
+ - Implemented download queue for character resource loading
482
+
483
+ ## [1.0.0-beta.37] - 2025-12-24
484
+
485
+ ### 🐛 Bugfix
486
+ - Various bug fixes and improvements
487
+
488
+ ## [1.0.0-beta.36] - 2025-12-20
489
+
490
+ ### ✨ New Features
491
+ - **Audio Sample Rate Configuration** - Added configurable audio sample rate support in SDK initialization
492
+ - Added `audioFormat` configuration option with `channelCount` (fixed to 1) and `sampleRate` (supports: 8000, 16000, 22050, 24000, 32000, 44100, 48000 Hz, default: 16000)
493
+ - Audio recording and playback now automatically use the configured sample rate
494
+ - Vanilla demo updated with sample rate dropdown selector for easy testing
495
+
496
+ ## [1.0.0-beta.35] - 2025-12-16
497
+
498
+ ### 🔄 API Changes
499
+ - **Avatar Transform API** - Changed `setTransform` method to `transform` getter/setter property for more idiomatic JavaScript API. Now supports both reading and setting transform values.
500
+
501
+ ## [1.0.0-beta.34] - 2025-12-16
502
+
503
+ ### ✨ New Features
504
+ - **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.
505
+
506
+ ## [1.0.0-beta.32] - 2025-12-16
507
+
508
+ ### 🔄 Breaking Changes
509
+ - **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.
510
+
511
+ ## [1.0.0-beta.31] - 2025-12-16
512
+
513
+ ### 🐛 Bugfix
514
+ - **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.
515
+
516
+ ## [1.0.0-beta.30] - 2025-12-15
517
+
518
+ ### 🐛 Bugfix
519
+ - **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.
520
+
521
+ ## [1.0.0-beta.29] - 2025-12-15
522
+
523
+ ### 🔄 Breaking Changes
524
+ - **Environment Enum** - Removed `Environment.test`. Only `Environment.cn` and `Environment.intl` are now supported. Environment configuration must be explicitly provided.
525
+ - **Log Level Default** - Default log level changed from `LogLevel.all` to `LogLevel.off`. Set `logLevel: LogLevel.all` in configuration to enable all logs.
526
+
527
+ ### ✨ New Features
528
+ - **Avatar Caching** - Added avatar caching methods in `AvatarManager`:
529
+ - `retrieve(id: string): Avatar | undefined` - Get cached avatar by ID
530
+ - `clear(id: string): void` - Clear cached avatar for specific ID
531
+ - `clearAll(): void` - Clear all cached avatars
532
+ - `clearCache()` is now deprecated, use `clearAll()` instead
533
+ - **Background Image Support** - Added background image control in `AvatarView`:
534
+ - `isOpaque: boolean` - Getter/setter to control canvas background transparency
535
+ - `setBackgroundImage(image: HTMLImageElement | string | null): void` - Set or remove background image
536
+
537
+ ### 🔧 Improvements
538
+ - **Avatar Version Checking** - Avatar cache now automatically checks version and reloads if cached avatar version differs from latest metadata
539
+ - **Concurrent Loading** - Multiple concurrent `load()` calls for the same avatar ID now reuse the same loading promise
540
+
541
+ ## [1.0.0-beta.28] - 2025-12-08
542
+
543
+ ### 🔄 Breaking Changes
544
+ - **Class Renamed** - `AvatarKit` class has been renamed to `AvatarSDK` for better consistency
545
+ - Update all imports: `import { AvatarKit } from '@spatialwalk/avatarkit'` → `import { AvatarSDK } from '@spatialwalk/avatarkit'`
546
+ - Update all API calls: `AvatarKit.initialize()` → `AvatarSDK.initialize()`
547
+ - All static methods and properties remain the same, only the class name has changed
548
+
549
+ ### 🔧 Improvements
550
+ - **Rendering Optimizations** - Added fragment shader discard optimization to improve performance and edge quality
551
+ - **Shader Alignment** - Removed view matrix transpose to align with Android SDK implementation
552
+ - **Resource Cleanup** - Removed unused `frameMono` and `audioMono` resources from SDK and tests
553
+
554
+ ## [1.0.0-beta.27] - 2025-12-04
555
+
556
+ ### 🐛 Bugfix
557
+
558
+ ## [1.0.0-beta.26] - 2025-12-03
559
+
560
+ ### ✨ New Features
561
+ - **Log Level Configuration** - Added `logLevel` configuration option to control SDK logging verbosity
562
+ - `LogLevel.off` - Disable all logs
563
+ - `LogLevel.error` - Only error logs
564
+ - `LogLevel.warning` - Warning and error logs
565
+ - `LogLevel.all` - All logs (default)
566
+ - **Standardized CLS Logging Events** - All CLS logging events now use standardized field names for better querying
567
+ - 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`
568
+ - Standard fields: `req_id`, `con_id`, `avatar_id`, `description`
569
+ - **End-to-End Latency Tracking** - Added `driving_service_latency` event to track latency metrics for both SDK and Host modes
570
+ - Tracks: `tap_0`, `tap_1`, `tap_2`, `tap_f` timestamps (Number type, milliseconds)
571
+ - Automatically reported once per conversation when first frame is received
572
+
573
+ ### 🔧 Improvements
574
+ - **CLS Configuration Alignment** - Updated CLS endpoints and Topic IDs to match iOS SDK configuration
575
+ - **Default API Endpoints** - Fixed default API endpoint for `intl` environment to `api.intl.spatialwalk.cloud`
576
+ - **Error Code Enum** - Added new error codes: `appIDUnrecognized`, `sessionTokenInvalid`, `sessionTokenExpired`, `failedToFetchAvatarMetadata`, `failedToDownloadAvatarAssets`
577
+
578
+ ### 🗑️ Removed
579
+ - **Redundant Log Events** - Removed unnecessary log events: `playback_paused`, `playback_resumed`, `reconnecting`, `connect_success`, `server_error`, `decode_failed`
580
+
581
+ ## [1.0.0-beta.25] - 2025-12-03
582
+
583
+ ### 🔧 Improvements
584
+ - **Removed Audio Buffer Limit** - Removed the 100 chunk limit on pending audio buffers to allow unlimited audio data buffering
585
+
586
+ ## [1.0.0-beta.24] - 2025-11-26
587
+
588
+ ### 🔧 API Changes
589
+ - **Backend Endpoints Updated** - Backend API endpoints have been updated for all environments
590
+
591
+ ## [1.0.0-beta.23] - 2025-11-26
592
+
593
+ ### 🔧 API Changes
594
+ - **Breaking Change** - `playback()` method is no longer supported and has been removed from public API
595
+
596
+ ## [1.0.0-beta.22] - 2025-11-26
597
+
598
+ ### 🔧 API Changes
599
+ - **State Callback Renamed** - `onAvatarState` has been renamed to `onConversationState` for better clarity
600
+ - The callback now uses `ConversationState` enum with states: `idle` and `playing`
601
+ - **Environment Enum Updated** - `Environment.us` has been renamed to `Environment.intl` for better internationalization support
602
+ - All references to `Environment.us` should be updated to `Environment.intl`
603
+ - Remote config endpoints now use `intl` instead of `us`
604
+
605
+ ### ✨ New Features
606
+ - **Volume Control** - Added volume control API for audio playback
607
+ - `setVolume(volume: number)` - Set audio volume (0.0 to 1.0)
608
+ - `getVolume(): number` - Get current audio volume
609
+ - Volume control only affects the avatar's audio player, not system volume
610
+ - Volume changes take effect immediately, including for currently playing audio
611
+
612
+ ## [1.0.0-beta.21] - 2025-11-25
613
+
614
+ ### ✨ New Features
615
+ - **SDK Mode Connection Timeout Fallback** - Enhanced fallback mechanism for SDK mode:
616
+ - If WebSocket connection fails to establish within 15 seconds, the SDK automatically enters fallback mode
617
+ - In fallback mode, audio data can still be sent and will play normally, even though no animation data will be received
618
+ - Connection failures also trigger this fallback mechanism
619
+ - `ConnectionState.connecting` and `ConnectionState.failed` events are emitted to notify external applications
620
+ - Concurrent connection attempts are prevented to avoid race conditions
621
+
622
+ ### 🔧 Improvements
623
+ - Improved connection state management: `isConnected` now accurately reflects actual connection status (false in fallback mode)
624
+ - Added `canSend()` method in `NetworkLayer` to check if audio can be sent (including fallback mode)
625
+ - Better separation of concerns: connection state checks are now handled by `NetworkLayer`, while playback logic remains in `AvatarController`
626
+
627
+ ## [1.0.0-beta.20] - 2025-11-25
628
+
629
+ ### 🔧 Improvements
630
+ - Removed 1-second audio buffer requirement for auto-starting playback in Host mode
631
+
632
+ ## [1.0.0-beta.19] - 2025-11-25
633
+
634
+ ### 📚 Documentation
635
+ - **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
636
+ - Removed misleading "after playback() is called" comments
637
+ - Clarified two ways to start a session: using `playback()` for existing data, or `yieldAudioData()` directly for streaming
638
+ - Updated all examples and workflow descriptions to reflect correct API usage
639
+
640
+ ## [1.0.0-beta.18] - 2025-11-25
641
+
642
+ ### 🔧 API Changes
643
+ - **Renamed `reqId` to `conversationId`** - Updated terminology for better clarity
644
+ - All methods and parameters that used `reqId` now use `conversationId`
645
+ - `getCurrentReqId()` → `getCurrentConversationId()`
646
+ - `generateReqId()` → `generateConversationId()`
647
+ - Updated all event logs and documentation to use `conversationId`
648
+ - Note: Protobuf protocol still uses `reqId` field name internally, but SDK API uses `conversationId`
649
+
650
+ ### 📚 Documentation
651
+ - Enhanced Host mode documentation to clearly emphasize the workflow: send audio data first to get conversationId, then use that conversationId to send animation data
652
+ - Updated Host Mode Example and Host Mode Flow sections with clearer step-by-step instructions
653
+
654
+ ## [1.0.0-beta.17] - 2025-11-24
655
+
656
+ ### ✨ New Features
657
+ - **Audio-Only Fallback Mechanism** - SDK now includes automatic fallback to audio-only playback when animation data is unavailable
658
+ - SDK mode: Automatically enters audio-only mode when server returns an error
659
+ - Host mode: Automatically enters audio-only mode when empty animation data is provided
660
+ - Once in audio-only mode, subsequent animation data for that session is ignored
661
+ - Fallback mode is interruptible, just like normal playback mode
662
+
663
+ ### 🔧 API Changes
664
+ - **Playback Mode Configuration** - Moved playback mode configuration from `AvatarView` constructor to `AvatarSDK.initialize()`
665
+ - Playback mode is now determined by `drivingServiceMode` in `AvatarSDK.initialize()` configuration
666
+ - `AvatarView` constructor now only requires `avatar` and `container` parameters
667
+ - Removed `AvatarViewOptions` interface
668
+ - `container` parameter is now required (no longer optional)
669
+ - **Method Renames** - Renamed methods in `AvatarController` for Host mode to better reflect their purpose
670
+ - `play()` → `playback()`: Renamed to better reflect that the method is used for playback of existing data (replay mode)
671
+ - Old API: `avatarController.play(initialAudioChunks, initialKeyframes)`
672
+ - New API: `avatarController.playback(initialAudioChunks, initialKeyframes)`
673
+ - `sendAudioChunk()` → `yieldAudioData()`: Renamed to better reflect that the method yields/streams audio data
674
+ - Old API: `avatarController.sendAudioChunk(data, isLast)`
675
+ - New API: `avatarController.yieldAudioData(data, isLast)`
676
+ - `sendKeyframes()` → `yieldFramesData()`: Renamed to better reflect that the method yields/streams animation keyframes
677
+ - Old API: `avatarController.sendKeyframes(keyframes, reqId)`
678
+ - New API: `avatarController.yieldFramesData(keyframes, conversationId)`
679
+
680
+ ### 🔧 Improvements
681
+ - Extended transition animation duration from 200ms to 400ms for smoother end-of-playback transitions
682
+
683
+ ### 📚 Documentation
684
+ - Updated README.md to use "SDK mode" and "Host mode" terminology instead of "Network mode" and "External data mode"
685
+ - Added fallback mechanism documentation
686
+ - Updated API reference to reflect new constructor signature
687
+
688
+ ## [1.0.0-beta.16] - 2025-11-21
689
+
690
+ ### ✨ New Features
691
+ - **Multi-AvatarView Support** - SDK now supports multiple `AvatarView` instances simultaneously
692
+ - Each `AvatarView` instance can manage its own avatar independently
693
+ - Multiple avatars can be displayed and controlled at the same time
694
+ - Each instance maintains its own rendering context, playback state, and network connection
695
+ - Removed the previous limitation of "only one AvatarView instance at a time"
696
+
697
+ ### 📚 Documentation
698
+ - Updated README.md to reflect multi-avatar support capabilities
699
+ - Added multi-avatar usage examples
700
+ - Removed outdated limitation notes about single AvatarView instance
701
+
702
+ ---
703
+
704
+ ## [1.0.0-beta.15] - 2025-11-20
705
+
706
+ ### ✨ New Features
707
+ - Added authentication support for API requests
708
+ - `appId` is now automatically included in HTTP headers (`X-App-Id`) and WebSocket URL query parameters
709
+ - `sessionToken` is now automatically included in HTTP headers (`Authorization: Bearer {token}`) and WebSocket URL query parameters
710
+ - All network requests (avatar loading, resource downloads, WebSocket connections) now include authentication credentials
711
+
712
+ ### 🔧 Improvements
713
+ - Fixed canvas resize handling for different aspect ratios
714
+ - Projection matrix is now correctly updated when canvas aspect ratio changes
715
+ - Rendering system properly handles portrait (9:16) and landscape (16:9) aspect ratios
716
+ - Canvas automatically adapts to container size changes via ResizeObserver
717
+
718
+ ### 🐛 Bug Fixes
719
+ - Fixed `RenderSystem.handleResize()` to update projection matrix when canvas size changes
720
+ - Previously only updated aspect ratio, now also updates projection matrix for correct rendering
721
+
722
+ ---
723
+
724
+ ## [1.0.0-beta.14] - 2025-11-18
725
+
726
+ ### ✨ New Features
727
+ - Added pause and resume functionality for avatar playback
728
+ - New `pause()` method to pause audio and animation playback
729
+ - New `resume()` method to resume playback from paused state
730
+ - Added `paused` state to `AvatarState` enum
731
+ - State changes are communicated via `onAvatarState` callback
732
+ - Works in both network mode and external data mode
733
+
734
+ ### 🔧 Improvements
735
+ - Canvas now uses container's full dimensions instead of fixed 1:1 aspect ratio
736
+ - Canvas automatically adapts to container size (width and height)
737
+ - External developers can control canvas aspect ratio by setting container dimensions
738
+ - Rendering system correctly handles any aspect ratio without distortion
739
+
740
+ ---
741
+
742
+ ## [1.0.0-beta.13] - 2025-11-17
743
+
744
+ ### 🔒 API Improvements
745
+ - Reduced console noise by setting default log level to Warning
746
+ - Logger now only outputs warnings and errors by default
747
+ - Set `VITE_DEBUG_LOG=true` to enable all logs
748
+ - Simplified logger configuration using `setGlobalLogLevel(LogLevel.Warning)`
749
+
750
+ ### 🐛 Bug Fixes
751
+ - Fixed SDK config loader warning in non-debug mode
752
+ - Config loading failures are now silently handled in production
753
+ - Warnings only shown when `VITE_DEBUG_LOG=true`
754
+
755
+ ---
756
+
757
+ ## [1.0.0-beta.12] - 2025-11-17
758
+
759
+ ### 🔒 API Improvements
760
+ - Marked performance monitoring APIs as internal
761
+ - `RenderPerformanceStats` interface and `getPerformanceStats()` method are now marked with `@internal` tag
762
+ - These APIs are not exposed in the public TypeScript definitions
763
+ - Reverted performance monitoring implementation to simpler version (only `renderTime` and `sortTime`)
764
+
765
+ ---
766
+
767
+ ## [1.0.0-beta.11] - 2025-11-17
768
+
769
+ ### 📚 Documentation
770
+ - Updated demo repository link in README.md
771
+ - Changed example project link from `Avatarkit-web-demo` to `AvatarSDK-Web-Demo` to match the new repository name
772
+
773
+ ---
774
+
8
775
  ## [1.0.0-beta.10] - 2025-11-16
9
776
 
10
777
  ### 🔒 API Improvements
11
778
  - Cleaned up public API to hide internal implementation details
12
779
  - Marked internal methods with `@internal` JSDoc tag to exclude them from TypeScript declarations
13
780
  - Removed unused environment configuration options (`realtimeApiBaseUrl`, `realtimeWsUrl`)
14
- - Added `appId` getter to `AvatarKit` for accessing initialized app ID
781
+ - Added `appId` getter to `AvatarSDK` for accessing initialized app ID
15
782
  - Internal methods like `getEnvironmentConfig`, `logEvent`, `getCanvas`, `getCameraConfig`, `updateCameraConfig` are now properly hidden from public API
16
783
 
17
784
  ### 🐛 Bug Fixes
@@ -58,7 +825,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
58
825
  ## [1.0.0-beta.5] - 2025-11-14
59
826
 
60
827
  ### 🐛 Bug Fixes
61
- - Fixed missing `AvatarPlaybackMode` enum export in published package
828
+ - Fixed missing `DrivingServiceMode` enum export in published package
62
829
 
63
830
  ---
64
831
 
@@ -87,7 +854,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
87
854
  - **External Data Mode**:
88
855
  - External components fully control audio and animation data acquisition
89
856
  - SDK only responsible for synchronized playback of externally provided data
90
- - Use `controller.play()`, `controller.sendAudioChunk()` and `controller.sendKeyframes()` methods
857
+ - Use `controller.playback()`, `controller.yieldAudioData()` and `controller.yieldFramesData()` methods
91
858
 
92
859
  ### ✨ New Features
93
860
 
@@ -123,7 +890,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
123
890
  // New API
124
891
  new AvatarView(avatar, {
125
892
  container: container,
126
- playbackMode: AvatarPlaybackMode.network // or AvatarPlaybackMode.external
893
+ playbackMode: DrivingServiceMode.sdk // or DrivingServiceMode.host
127
894
  })
128
895
  ```
129
896