@liforma/client 0.4.1 → 0.4.3

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 (135) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/next/index.js +920 -701
  3. package/dist/next/index.js.map +1 -1
  4. package/dist/next/next/createLiformaSessionRouteHandler.d.ts +0 -1
  5. package/dist/next/next/createLiformaSessionRouteHandler.d.ts.map +1 -1
  6. package/dist/next/react/ExperienceThumbnail.d.ts +1 -0
  7. package/dist/next/react/ExperienceThumbnail.d.ts.map +1 -1
  8. package/dist/next/react/ExperienceWidget.d.ts +4 -0
  9. package/dist/next/react/ExperienceWidget.d.ts.map +1 -1
  10. package/dist/next/thumbnail/index.d.ts +1 -0
  11. package/dist/next/thumbnail/index.d.ts.map +1 -1
  12. package/dist/next/thumbnail/styles.d.ts.map +1 -1
  13. package/dist/next/thumbnail/toGalleryThumbUrl.d.ts.map +1 -1
  14. package/dist/next/thumbnail/types.d.ts +3 -0
  15. package/dist/next/thumbnail/types.d.ts.map +1 -1
  16. package/dist/next/v2/api/mintPublicSession.d.ts +2 -2
  17. package/dist/next/v2/api/mintPublicSession.d.ts.map +1 -1
  18. package/dist/next/v2/api/sessionEndpointRequest.d.ts +2 -2
  19. package/dist/next/v2/api/sessionEndpointRequest.d.ts.map +1 -1
  20. package/dist/next/v2/embed/iframeHost.d.ts +28 -4
  21. package/dist/next/v2/embed/iframeHost.d.ts.map +1 -1
  22. package/dist/next/v2/embed/protocol.d.ts +61 -1
  23. package/dist/next/v2/embed/protocol.d.ts.map +1 -1
  24. package/dist/next/v2/errors/LiformaError.d.ts +23 -0
  25. package/dist/next/v2/errors/LiformaError.d.ts.map +1 -0
  26. package/dist/next/v2/experience.d.ts +21 -9
  27. package/dist/next/v2/experience.d.ts.map +1 -1
  28. package/dist/next/v2/experienceEvents.d.ts +46 -15
  29. package/dist/next/v2/experienceEvents.d.ts.map +1 -1
  30. package/dist/next/v2/shims/embedBaseUrl.d.ts +1 -1
  31. package/dist/next/v2/shims/embedBaseUrl.d.ts.map +1 -1
  32. package/dist/next/v2/types/sessionInteraction.d.ts +3 -1
  33. package/dist/next/v2/types/sessionInteraction.d.ts.map +1 -1
  34. package/dist/next/v2/types/sessionLaunch.d.ts +28 -5
  35. package/dist/next/v2/types/sessionLaunch.d.ts.map +1 -1
  36. package/dist/next/v2/types/sessionManifest.d.ts +8 -0
  37. package/dist/next/v2/types/sessionManifest.d.ts.map +1 -1
  38. package/dist/next/widget/mountExperienceWidget.d.ts.map +1 -1
  39. package/dist/next/widget/types.d.ts +7 -0
  40. package/dist/next/widget/types.d.ts.map +1 -1
  41. package/dist/npm/index.js +851 -636
  42. package/dist/npm/index.js.map +1 -1
  43. package/dist/npm/thumbnail/index.d.ts +1 -0
  44. package/dist/npm/thumbnail/index.d.ts.map +1 -1
  45. package/dist/npm/thumbnail/styles.d.ts.map +1 -1
  46. package/dist/npm/thumbnail/toGalleryThumbUrl.d.ts.map +1 -1
  47. package/dist/npm/thumbnail/types.d.ts +3 -0
  48. package/dist/npm/thumbnail/types.d.ts.map +1 -1
  49. package/dist/npm/v2/api/mintPublicSession.d.ts +2 -2
  50. package/dist/npm/v2/api/mintPublicSession.d.ts.map +1 -1
  51. package/dist/npm/v2/api/sessionEndpointRequest.d.ts +2 -2
  52. package/dist/npm/v2/api/sessionEndpointRequest.d.ts.map +1 -1
  53. package/dist/npm/v2/embed/iframeHost.d.ts +28 -4
  54. package/dist/npm/v2/embed/iframeHost.d.ts.map +1 -1
  55. package/dist/npm/v2/embed/protocol.d.ts +61 -1
  56. package/dist/npm/v2/embed/protocol.d.ts.map +1 -1
  57. package/dist/npm/v2/errors/LiformaError.d.ts +23 -0
  58. package/dist/npm/v2/errors/LiformaError.d.ts.map +1 -0
  59. package/dist/npm/v2/experience.d.ts +21 -9
  60. package/dist/npm/v2/experience.d.ts.map +1 -1
  61. package/dist/npm/v2/experienceEvents.d.ts +46 -15
  62. package/dist/npm/v2/experienceEvents.d.ts.map +1 -1
  63. package/dist/npm/v2/index.d.ts +4 -2
  64. package/dist/npm/v2/index.d.ts.map +1 -1
  65. package/dist/npm/v2/liforma-experience-thumbnail.d.ts.map +1 -1
  66. package/dist/npm/v2/liforma-experience-widget.d.ts.map +1 -1
  67. package/dist/npm/v2/liforma-experience.d.ts.map +1 -1
  68. package/dist/npm/v2/npm.d.ts +7 -4
  69. package/dist/npm/v2/npm.d.ts.map +1 -1
  70. package/dist/npm/v2/shims/embedBaseUrl.d.ts +1 -1
  71. package/dist/npm/v2/shims/embedBaseUrl.d.ts.map +1 -1
  72. package/dist/npm/v2/types/index.d.ts +2 -2
  73. package/dist/npm/v2/types/index.d.ts.map +1 -1
  74. package/dist/npm/v2/types/sessionInteraction.d.ts +3 -1
  75. package/dist/npm/v2/types/sessionInteraction.d.ts.map +1 -1
  76. package/dist/npm/v2/types/sessionLaunch.d.ts +28 -5
  77. package/dist/npm/v2/types/sessionLaunch.d.ts.map +1 -1
  78. package/dist/npm/v2/types/sessionManifest.d.ts +8 -0
  79. package/dist/npm/v2/types/sessionManifest.d.ts.map +1 -1
  80. package/dist/npm/v2/types/sessionManifestSchema.d.ts +8 -1
  81. package/dist/npm/v2/types/sessionManifestSchema.d.ts.map +1 -1
  82. package/dist/npm/widget/mountExperienceWidget.d.ts.map +1 -1
  83. package/dist/npm/widget/types.d.ts +7 -0
  84. package/dist/npm/widget/types.d.ts.map +1 -1
  85. package/dist/react/component/experienceComponentRuntime.d.ts +4 -2
  86. package/dist/react/component/experienceComponentRuntime.d.ts.map +1 -1
  87. package/dist/react/component/experienceComponentTypes.d.ts +18 -6
  88. package/dist/react/component/experienceComponentTypes.d.ts.map +1 -1
  89. package/dist/react/index.js +995 -760
  90. package/dist/react/index.js.map +1 -1
  91. package/dist/react/react/Experience.d.ts.map +1 -1
  92. package/dist/react/react/ExperienceThumbnail.d.ts +1 -0
  93. package/dist/react/react/ExperienceThumbnail.d.ts.map +1 -1
  94. package/dist/react/react/ExperienceWidget.d.ts +4 -0
  95. package/dist/react/react/ExperienceWidget.d.ts.map +1 -1
  96. package/dist/react/thumbnail/index.d.ts +1 -0
  97. package/dist/react/thumbnail/index.d.ts.map +1 -1
  98. package/dist/react/thumbnail/styles.d.ts.map +1 -1
  99. package/dist/react/thumbnail/toGalleryThumbUrl.d.ts.map +1 -1
  100. package/dist/react/thumbnail/types.d.ts +3 -0
  101. package/dist/react/thumbnail/types.d.ts.map +1 -1
  102. package/dist/react/v2/api/mintPublicSession.d.ts +2 -2
  103. package/dist/react/v2/api/mintPublicSession.d.ts.map +1 -1
  104. package/dist/react/v2/api/sessionEndpointRequest.d.ts +2 -2
  105. package/dist/react/v2/api/sessionEndpointRequest.d.ts.map +1 -1
  106. package/dist/react/v2/embed/iframeHost.d.ts +28 -4
  107. package/dist/react/v2/embed/iframeHost.d.ts.map +1 -1
  108. package/dist/react/v2/embed/protocol.d.ts +61 -1
  109. package/dist/react/v2/embed/protocol.d.ts.map +1 -1
  110. package/dist/react/v2/errors/LiformaError.d.ts +23 -0
  111. package/dist/react/v2/errors/LiformaError.d.ts.map +1 -0
  112. package/dist/react/v2/experience.d.ts +21 -9
  113. package/dist/react/v2/experience.d.ts.map +1 -1
  114. package/dist/react/v2/experienceEvents.d.ts +46 -15
  115. package/dist/react/v2/experienceEvents.d.ts.map +1 -1
  116. package/dist/react/v2/shims/embedBaseUrl.d.ts +1 -1
  117. package/dist/react/v2/shims/embedBaseUrl.d.ts.map +1 -1
  118. package/dist/react/v2/types/sessionInteraction.d.ts +3 -1
  119. package/dist/react/v2/types/sessionInteraction.d.ts.map +1 -1
  120. package/dist/react/v2/types/sessionLaunch.d.ts +28 -5
  121. package/dist/react/v2/types/sessionLaunch.d.ts.map +1 -1
  122. package/dist/react/v2/types/sessionManifest.d.ts +8 -0
  123. package/dist/react/v2/types/sessionManifest.d.ts.map +1 -1
  124. package/dist/react/widget/mountExperienceWidget.d.ts.map +1 -1
  125. package/dist/react/widget/types.d.ts +7 -0
  126. package/dist/react/widget/types.d.ts.map +1 -1
  127. package/dist/sdk/v2/client.js +61 -13
  128. package/dist/sdk/v2/client.js.map +1 -1
  129. package/dist/svelte/Experience.svelte +29 -6
  130. package/dist/svelte/Experience.svelte.d.ts +2 -0
  131. package/dist/svelte/ExperienceThumbnail.svelte +9 -1
  132. package/dist/svelte/ExperienceThumbnail.svelte.d.ts +1 -0
  133. package/dist/svelte/ExperienceWidget.svelte +12 -1
  134. package/dist/svelte/ExperienceWidget.svelte.d.ts +3 -0
  135. package/package.json +16 -2
@@ -55,15 +55,16 @@
55
55
  learningLocale,
56
56
  language,
57
57
  mode,
58
- responseMode,
59
58
  speechInputMode,
60
59
  startButton,
60
+ showFeedback,
61
61
  closeButton,
62
62
  conversationProcessor,
63
63
  speechOnly = false,
64
64
  fit,
65
65
  avatarId,
66
66
  locationId,
67
+ castSize,
67
68
  embedBaseUrl,
68
69
  debug = false,
69
70
  returnUrl,
@@ -74,11 +75,13 @@
74
75
  onUserSpeechEnded,
75
76
  onCharacterSpeechStarted,
76
77
  onCharacterSpeechEnded,
78
+ onCharacterFocusChanged,
77
79
  onConversationUpdate,
78
80
  onMessage,
79
81
  onListeningState,
80
82
  onActivityChange,
81
- onModeChange,
83
+ onFeedback,
84
+ onFeedbackFailed,
82
85
  onConversationProcessorError,
83
86
  onPlayerStatusChange,
84
87
  onStateUpdate,
@@ -103,12 +106,12 @@
103
106
  locale ?? language,
104
107
  secondaryLocale ?? learningLocale,
105
108
  mode,
106
- responseMode,
107
109
  speechInputMode,
108
110
  conversationProcessor ? identityKey(conversationProcessor) : 0,
109
111
  speechOnly,
110
112
  avatarId,
111
113
  locationId,
114
+ castSize,
112
115
  embedBaseUrl,
113
116
  debug
114
117
  ])
@@ -266,13 +269,17 @@
266
269
  subscribe(generation, session, 'characterSpeechEnded', (event) =>
267
270
  onCharacterSpeechEnded?.(event)
268
271
  );
272
+ subscribe(generation, session, 'characterFocusChanged', (event) =>
273
+ onCharacterFocusChanged?.(event)
274
+ );
269
275
  subscribe(generation, session, 'conversationUpdate', (event) =>
270
276
  onConversationUpdate?.(event)
271
277
  );
272
278
  subscribe(generation, session, 'message', (event) => onMessage?.(event));
273
279
  subscribe(generation, session, 'listeningState', (event) => onListeningState?.(event));
274
280
  subscribe(generation, session, 'activityChange', (event) => onActivityChange?.(event));
275
- subscribe(generation, session, 'modeChange', (event) => onModeChange?.(event));
281
+ subscribe(generation, session, 'feedback', (event) => onFeedback?.(event));
282
+ subscribe(generation, session, 'feedbackFailed', (event) => onFeedbackFailed?.(event));
276
283
  subscribe(generation, session, 'conversationProcessorError', (event) =>
277
284
  onConversationProcessorError?.(event)
278
285
  );
@@ -308,10 +315,10 @@
308
315
  language,
309
316
  locationId,
310
317
  avatarId,
318
+ castSize,
311
319
  embedBaseUrl,
312
320
  debug,
313
321
  mode,
314
- responseMode,
315
322
  speechInputMode,
316
323
  speechOnly,
317
324
  conversationProcessor
@@ -326,10 +333,10 @@
326
333
  language,
327
334
  locationId,
328
335
  avatarId,
336
+ castSize,
329
337
  embedBaseUrl,
330
338
  debug,
331
339
  mode,
332
- responseMode,
333
340
  speechInputMode,
334
341
  speechOnly,
335
342
  conversationProcessor
@@ -364,6 +371,7 @@
364
371
  container,
365
372
  fit: untrack(() => fit),
366
373
  startButton: untrack(() => startButton),
374
+ showFeedback: untrack(() => showFeedback),
367
375
  closeButton: untrack(() => closeButton),
368
376
  returnUrl: untrack(() => returnUrl),
369
377
  showClose: Boolean(onClose || returnUrl?.trim() || closeButton),
@@ -461,6 +469,14 @@
461
469
  return activeGeneration?.instance?.getConversation() ?? [];
462
470
  }
463
471
 
472
+ export function focusCharacter(characterId: string): Promise<void> {
473
+ return withSession((session) => session.focusCharacter(characterId));
474
+ }
475
+
476
+ export function setFit(nextFit: NonNullable<ExperienceProps['fit']>): Promise<void> {
477
+ return withSession((session) => session.setFit(nextFit));
478
+ }
479
+
464
480
  export function end(): Promise<void> {
465
481
  return withSession((session) => session.end());
466
482
  }
@@ -508,6 +524,13 @@
508
524
 
509
525
  $effect(restartSession);
510
526
 
527
+ $effect(() => {
528
+ const nextFit = fit ?? 'full';
529
+ const session = untrack(() => activeGeneration?.instance ?? null);
530
+ if (!session) return;
531
+ void session.setFit(nextFit);
532
+ });
533
+
511
534
  $effect(() => {
512
535
  const container = errorHost;
513
536
  const presentation = loadError;
@@ -15,6 +15,8 @@ declare const Experience: import("svelte").Component<ExperienceProps, {
15
15
  getSession: () => Session | null;
16
16
  getManifest: () => SessionManifest | null;
17
17
  getConversation: () => ReturnType<ExperienceSession["getConversation"]>;
18
+ focusCharacter: (characterId: string) => Promise<void>;
19
+ setFit: (nextFit: NonNullable<ExperienceProps["fit"]>) => Promise<void>;
18
20
  end: () => Promise<void>;
19
21
  }, "">;
20
22
  type Experience = ReturnType<typeof Experience>;
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { onMount } from 'svelte';
2
+ import { onMount, untrack } from 'svelte';
3
3
  import type { Attachment } from 'svelte/attachments';
4
4
 
5
5
  import {
@@ -12,6 +12,7 @@
12
12
  resolveThumbnailHref,
13
13
  resolveThumbnailInteraction,
14
14
  resolveThumbnailLayers,
15
+ thumbnailFitClass,
15
16
  type GalleryThumb
16
17
  } from '@liforma/client';
17
18
 
@@ -29,6 +30,7 @@
29
30
  returnUrl,
30
31
  playerBaseUrl,
31
32
  parallax = true,
33
+ fit = 'full',
32
34
  lazy = true,
33
35
  class: className = '',
34
36
  fallbackImage
@@ -46,6 +48,7 @@
46
48
  returnUrl?: string;
47
49
  playerBaseUrl?: string;
48
50
  parallax?: boolean;
51
+ fit?: 'full' | 'face' | 'medium';
49
52
  lazy?: boolean;
50
53
  class?: string;
51
54
  fallbackImage?: string;
@@ -126,6 +129,10 @@
126
129
  void layers?.backgroundImage;
127
130
  void layers?.foregroundImage;
128
131
  void resolvedAvatarImage;
132
+ const alreadyShown = untrack(
133
+ () => backgroundReady || avatarReady || foregroundReady
134
+ );
135
+ if (alreadyShown) return;
129
136
  backgroundReady = false;
130
137
  avatarReady = false;
131
138
  foregroundReady = false;
@@ -257,6 +264,7 @@
257
264
  [
258
265
  'liforma-et',
259
266
  hasScene ? 'liforma-et--scene' : '',
267
+ thumbnailFitClass(fit),
260
268
  parallaxLayersActive ? 'liforma-et--parallax' : '',
261
269
  scrollParallax ? 'liforma-et--scroll-parallax' : '',
262
270
  shouldLoad && !revealThumb ? 'liforma-et--loading' : '',
@@ -13,6 +13,7 @@ type $$ComponentProps = {
13
13
  returnUrl?: string;
14
14
  playerBaseUrl?: string;
15
15
  parallax?: boolean;
16
+ fit?: 'full' | 'face' | 'medium';
16
17
  lazy?: boolean;
17
18
  class?: string;
18
19
  fallbackImage?: string;
@@ -35,13 +35,16 @@
35
35
  expandedMaxHeight,
36
36
  startButtonLabel,
37
37
  startButton,
38
+ showFeedback,
38
39
  class: className = '',
39
40
  onExpanded,
40
41
  onCollapsed,
41
42
  onStarted,
42
43
  onClose,
43
44
  onError,
44
- onPrefetchReady
45
+ onPrefetchReady,
46
+ onFeedback,
47
+ onFeedbackFailed
45
48
  }: {
46
49
  experienceId: string;
47
50
  alt: string;
@@ -65,6 +68,7 @@
65
68
  expandedMaxHeight?: string;
66
69
  startButtonLabel?: string;
67
70
  startButton?: StartButtonOptions;
71
+ showFeedback?: boolean;
68
72
  class?: string;
69
73
  onExpanded?: () => void;
70
74
  onCollapsed?: () => void;
@@ -72,6 +76,10 @@
72
76
  onClose?: () => void;
73
77
  onError?: (error: Error) => void;
74
78
  onPrefetchReady?: () => void;
79
+ onFeedback?: (event: import('@liforma/client').ExperienceEvents['feedback']) => void;
80
+ onFeedbackFailed?: (
81
+ event: import('@liforma/client').ExperienceEvents['feedbackFailed']
82
+ ) => void;
75
83
  } = $props();
76
84
 
77
85
  let hostEl: HTMLDivElement | undefined = $state();
@@ -107,6 +115,9 @@
107
115
  expandedMaxHeight,
108
116
  startButtonLabel,
109
117
  startButton,
118
+ showFeedback,
119
+ onFeedback,
120
+ onFeedbackFailed,
110
121
  onExpanded,
111
122
  onCollapsed,
112
123
  onStarted,
@@ -22,6 +22,7 @@ type $$ComponentProps = {
22
22
  expandedMaxHeight?: string;
23
23
  startButtonLabel?: string;
24
24
  startButton?: StartButtonOptions;
25
+ showFeedback?: boolean;
25
26
  class?: string;
26
27
  onExpanded?: () => void;
27
28
  onCollapsed?: () => void;
@@ -29,6 +30,8 @@ type $$ComponentProps = {
29
30
  onClose?: () => void;
30
31
  onError?: (error: Error) => void;
31
32
  onPrefetchReady?: () => void;
33
+ onFeedback?: (event: import('@liforma/client').ExperienceEvents['feedback']) => void;
34
+ onFeedbackFailed?: (event: import('@liforma/client').ExperienceEvents['feedbackFailed']) => void;
32
35
  };
33
36
  declare const ExperienceWidget: import("svelte").Component<$$ComponentProps, {}, "">;
34
37
  type ExperienceWidget = ReturnType<typeof ExperienceWidget>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liforma/client",
3
- "version": "0.4.1",
3
+ "version": "0.4.3",
4
4
  "type": "module",
5
5
  "description": "Liforma browser SDK — Experience sessions, speech API, and Svelte embed component.",
6
6
  "license": "MIT",
@@ -137,7 +137,11 @@
137
137
  "test:parse-composite-filename": "node scripts/test-parse-composite-filename.mjs",
138
138
  "test:avatar-composite-rendered-path": "node scripts/test-avatar-composite-rendered-path.mjs",
139
139
  "test:avatar-compose-worker-cors": "node scripts/test-avatar-compose-worker-cors.mjs",
140
+ "test:experience-thumb-url": "node scripts/test-experience-thumb-url.mjs",
141
+ "test:compose-experience-thumb": "node scripts/test-compose-experience-thumb.mjs",
140
142
  "test:location-depth-paths": "node scripts/test-location-depth-paths.mjs",
143
+ "test:location-binary-assets": "node scripts/test-location-binary-assets.mjs",
144
+ "test:location-da3-depth": "node scripts/test-location-da3-depth.mjs",
141
145
  "test:location-interactions": "node scripts/test-location-interactions.mjs",
142
146
  "test:render-plate-chroma-key": "node scripts/test-render-plate-chroma-key.mjs",
143
147
  "test:sparse-plate": "node scripts/test-sparse-plate.mjs",
@@ -149,25 +153,34 @@
149
153
  "catalogue:locations": "node scripts/catalogue-locations.mjs",
150
154
  "generate:location-interactions": "node scripts/generate-location-interactions.mjs",
151
155
  "generate:location-depth": "node scripts/generate-location-depth.mjs",
156
+ "generate:location-depth16-da3": "node scripts/generate-location-depth16-da3.mjs",
157
+ "generate:location-discontinuities": "node scripts/generate-location-discontinuities.mjs",
152
158
  "build:locations": "node scripts/build-locations.mjs",
153
159
  "publish:locations": "node scripts/publish-locations.mjs",
154
160
  "verify:locations": "node scripts/verify-location-sources.mjs",
155
161
  "publish:models": "node scripts/publish-models.mjs",
162
+ "publish:models:krea-int8": "node scripts/_upload-model-prefix.mjs text-to-image/lf-t2i-turbo-int8",
163
+ "publish:models:ltx-int8": "node scripts/_upload-model-prefix.mjs text-to-video/lf-t2v-distill-int8",
164
+ "publish:models:video-omni": "node scripts/_upload-model-prefix.mjs text-to-video/lf-video-omni-v1",
156
165
  "fetch:depth-anything-v2": "node scripts/fetch-depth-anything-v2.mjs",
157
166
  "fetch:video-depth-anything": "node scripts/fetch-video-depth-anything.mjs",
158
167
  "fetch:depth-pro": "node scripts/fetch-depth-pro.mjs",
159
168
  "fetch:face-landmarker": "node scripts/fetch-face-landmarker.mjs",
160
169
  "fetch:anime-face-detector": "node scripts/fetch-anime-face-detector.mjs",
161
170
  "fetch:face-parsing": "node scripts/fetch-face-parsing.mjs",
171
+ "fetch:vitmatte": "node scripts/fetch-vitmatte.mjs",
172
+ "fetch:liveportrait-mlx": "node scripts/fetch-liveportrait-mlx.mjs",
162
173
  "fetch:wav2vec-phoneme-ctc": "node scripts/fetch-wav2vec-phoneme-ctc.mjs",
163
174
  "fetch:lf-sta": "node scripts/fetch-wav2vec-phoneme-ctc.mjs",
164
175
  "fetch:supertonic-3": "node scripts/fetch-supertonic-3.mjs",
165
176
  "fetch:lf-tts": "node scripts/fetch-supertonic-3.mjs",
166
- "fetch:models": "npm run fetch:depth-anything-v2 && npm run fetch:video-depth-anything && npm run fetch:depth-pro && npm run fetch:face-landmarker && npm run fetch:anime-face-detector && npm run fetch:face-parsing && npm run fetch:lf-sta && npm run fetch:lf-tts",
177
+ "fetch:lf-t2i-turbo": "python3 ../tools/krea-2-salad/scripts/fetch_cdn_snapshot.py",
178
+ "fetch:models": "npm run fetch:depth-anything-v2 && npm run fetch:video-depth-anything && npm run fetch:depth-pro && npm run fetch:face-landmarker && npm run fetch:anime-face-detector && npm run fetch:face-parsing && npm run fetch:vitmatte && npm run fetch:lf-sta && npm run fetch:lf-tts",
167
179
  "locations": "npm run catalogue:locations && npm run build:locations",
168
180
  "configure:cors": "node scripts/configure-r2-cors.mjs",
169
181
  "verify:cors": "node scripts/verify-cdn-cors.mjs",
170
182
  "deploy:worker:avatar-compose": "node scripts/deploy-avatar-compose-worker.mjs",
183
+ "deploy:worker:experience-thumb": "node scripts/deploy-experience-thumb-worker.mjs",
171
184
  "deploy": "npm run build && npm run publish:sdk",
172
185
  "verify": "npm run build && node scripts/check-sdk-size.mjs && node scripts/test-embed-protocol.mjs && node scripts/test-manifest-embed-url.mjs && node scripts/test-player-reachability.mjs && node scripts/test-session-endpoint.mjs && node scripts/verify-package.mjs",
173
186
  "preview:test": "npm run build && npm run preview"
@@ -178,6 +191,7 @@
178
191
  },
179
192
  "devDependencies": {
180
193
  "@aws-sdk/client-s3": "^3.1000.0",
194
+ "@aws-sdk/lib-storage": "^3.1110.0",
181
195
  "@elevenlabs/client": "^1.17.0",
182
196
  "@sveltejs/package": "^2.5.8",
183
197
  "@sveltejs/vite-plugin-svelte": "^7.0.0",