@streamoji/aitwin 0.3.0 → 0.3.1

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.
package/dist/index.d.ts CHANGED
@@ -79,6 +79,8 @@ export declare type AiTwinProps = {
79
79
  onBotOutput?: (text: string) => void;
80
80
  /** Voice lipsync debug (viseme segments, clock, queue). */
81
81
  onRealtimeLipsyncDebug?: (snapshot: RealtimeLipsyncDebugSnapshot) => void;
82
+ /** Canvas render skip stats (RIFE transitions, draw coalescing, visemes). */
83
+ onFrameRenderStats?: (stats: FrameRenderStatsSnapshot) => void;
82
84
  };
83
85
 
84
86
  export declare type AiTwinRecord = {
@@ -148,6 +150,55 @@ export declare function fetchAiTwin(id: string, baseUrl?: string): Promise<AiTwi
148
150
  /** Bearer token for /avatar_ttsWithPoses and /api/session-value. */
149
151
  export declare function fetchDevAuthToken(): Promise<string>;
150
152
 
153
+ export declare type FrameRenderDrawContext = {
154
+ label: string;
155
+ elapsedMs: number;
156
+ mouthPath: string | null;
157
+ transitionMeta?: FrameRenderTransitionMeta;
158
+ };
159
+
160
+ export declare type FrameRenderStatsSnapshot = {
161
+ rafTicksSpeaking: number;
162
+ /** Same draw key as previous RAF sample (healthy coalescing). */
163
+ rafTicksDeduped: number;
164
+ drawsRequested: number;
165
+ drawsDisplayed: number;
166
+ queueSuperseded: number;
167
+ workerStale: number;
168
+ /** Real drops: queue + worker stale + undisplayed requests. */
169
+ renderLoss: number;
170
+ visemeSlotsTotal: number;
171
+ visemeSlotsCovered: number;
172
+ visemeCoveragePct: number;
173
+ transitionFramesUniqueSampled: number;
174
+ transitionFramesUniquePainted: number;
175
+ transitionFramesMissed: number;
176
+ rifeFramesOmittedByGap: number;
177
+ transitionFramesSampled: number;
178
+ transitionFramesDisplayed: number;
179
+ /** @deprecated Use `rafTicksDeduped`. */
180
+ drawsDeduped: number;
181
+ /** @deprecated Use `renderLoss`. */
182
+ renderSkips: number;
183
+ /** @deprecated Use `visemeSlotsCovered`. */
184
+ visemesShown: number;
185
+ /** @deprecated Use `visemeSlotsTotal - visemeSlotsCovered`. */
186
+ visemesSkipped: number;
187
+ /** @deprecated Use `transitionFramesMissed`. */
188
+ rifeTransitionFramesSkipped: number;
189
+ };
190
+
191
+ declare type FrameRenderTransitionMeta = {
192
+ from: string;
193
+ to: string;
194
+ fromVtime: number;
195
+ toVtime: number;
196
+ frameIdx: number;
197
+ frameCount: number;
198
+ fullFrameCount: number;
199
+ omittedByGap: number;
200
+ };
201
+
151
202
  /** Public CDN original portrait for custom-faces/{faceId}/ (same id as pipeline avatarId). */
152
203
  export declare function getAiTwinSourceUrl(faceId: string, cdnBase?: string, extension?: string): string;
153
204
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@streamoji/aitwin",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Embeddable React AI twin face with TTS lipsync",
5
5
  "type": "module",
6
6
  "main": "./dist/aitwin.cjs",