@happyvertical/smrt-video 0.51.32 → 0.51.33

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 (68) hide show
  1. package/dist/__smrt-register__.d.ts +2 -0
  2. package/dist/__smrt-register__.d.ts.map +1 -0
  3. package/dist/character-asset.d.ts +22 -0
  4. package/dist/character-asset.d.ts.map +1 -0
  5. package/dist/character-assets.d.ts +11 -0
  6. package/dist/character-assets.d.ts.map +1 -0
  7. package/dist/character-owned-asset.d.ts +19 -0
  8. package/dist/character-owned-asset.d.ts.map +1 -0
  9. package/dist/character.d.ts +152 -0
  10. package/dist/character.d.ts.map +1 -0
  11. package/dist/characters.d.ts +23 -0
  12. package/dist/characters.d.ts.map +1 -0
  13. package/dist/composite-job.d.ts +89 -0
  14. package/dist/composite-job.d.ts.map +1 -0
  15. package/dist/index.d.ts +58 -1283
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +1 -1
  18. package/dist/manifest.json +1 -1
  19. package/dist/media-bundle-persistence.d.ts +2 -0
  20. package/dist/media-bundle-persistence.d.ts.map +1 -0
  21. package/dist/owned-asset-utils.d.ts +24 -0
  22. package/dist/owned-asset-utils.d.ts.map +1 -0
  23. package/dist/performer-asset.d.ts +22 -0
  24. package/dist/performer-asset.d.ts.map +1 -0
  25. package/dist/performer-assets.d.ts +11 -0
  26. package/dist/performer-assets.d.ts.map +1 -0
  27. package/dist/performer-owned-asset.d.ts +19 -0
  28. package/dist/performer-owned-asset.d.ts.map +1 -0
  29. package/dist/performer.d.ts +117 -0
  30. package/dist/performer.d.ts.map +1 -0
  31. package/dist/personality-profile.d.ts +10 -0
  32. package/dist/personality-profile.d.ts.map +1 -0
  33. package/dist/scene-asset.d.ts +22 -0
  34. package/dist/scene-asset.d.ts.map +1 -0
  35. package/dist/scene-assets.d.ts +11 -0
  36. package/dist/scene-assets.d.ts.map +1 -0
  37. package/dist/scene-owned-asset.d.ts +19 -0
  38. package/dist/scene-owned-asset.d.ts.map +1 -0
  39. package/dist/scene.d.ts +179 -0
  40. package/dist/scene.d.ts.map +1 -0
  41. package/dist/smrt-knowledge.json +4 -4
  42. package/dist/video-composition-asset.d.ts +21 -0
  43. package/dist/video-composition-asset.d.ts.map +1 -0
  44. package/dist/video-composition.d.ts +77 -0
  45. package/dist/video-composition.d.ts.map +1 -0
  46. package/dist/video-compositions.d.ts +13 -0
  47. package/dist/video-compositions.d.ts.map +1 -0
  48. package/dist/video-content.d.ts +10 -0
  49. package/dist/video-content.d.ts.map +1 -0
  50. package/dist/video-sequence-asset.d.ts +21 -0
  51. package/dist/video-sequence-asset.d.ts.map +1 -0
  52. package/dist/video-sequence.d.ts +66 -0
  53. package/dist/video-sequence.d.ts.map +1 -0
  54. package/dist/video-sequences.d.ts +13 -0
  55. package/dist/video-sequences.d.ts.map +1 -0
  56. package/dist/video-shot-asset.d.ts +21 -0
  57. package/dist/video-shot-asset.d.ts.map +1 -0
  58. package/dist/video-shot-character.d.ts +56 -0
  59. package/dist/video-shot-character.d.ts.map +1 -0
  60. package/dist/video-shot-characters.d.ts +13 -0
  61. package/dist/video-shot-characters.d.ts.map +1 -0
  62. package/dist/video-shot.d.ts +142 -0
  63. package/dist/video-shot.d.ts.map +1 -0
  64. package/dist/video-shots.d.ts +15 -0
  65. package/dist/video-shots.d.ts.map +1 -0
  66. package/dist/video-workflow.d.ts +187 -0
  67. package/dist/video-workflow.d.ts.map +1 -0
  68. package/package.json +10 -10
package/dist/index.d.ts CHANGED
@@ -1,1283 +1,58 @@
1
- import { Asset } from '@happyvertical/smrt-assets';
2
- import { AssetOptions } from '@happyvertical/smrt-assets';
3
- import { Content } from '@happyvertical/smrt-content';
4
- import { ContentOptions } from '@happyvertical/smrt-content';
5
- import { MediaBundleFileDescriptor } from '@happyvertical/smrt-assets';
6
- import { MediaBundleGpsTrackPoint } from '@happyvertical/smrt-assets';
7
- import { MediaBundleInspection } from '@happyvertical/smrt-assets';
8
- import { MediaBundleInspectionLike } from '@happyvertical/smrt-assets';
9
- import { MediaBundleNormalizedMetadata } from '@happyvertical/smrt-assets';
10
- import { MediaBundleSupportFileInspection } from '@happyvertical/smrt-assets';
11
- import { MediaSupportFileVisibility } from '@happyvertical/smrt-assets';
12
- import { PersistMediaBundleAssetInput } from '@happyvertical/smrt-assets';
13
- import { PersistMediaBundleAssociationInput } from '@happyvertical/smrt-assets';
14
- import { persistMediaBundleInspection } from '@happyvertical/smrt-assets';
15
- import { PersistMediaBundleInspectionOptions } from '@happyvertical/smrt-assets';
16
- import { PersistMediaBundleInspectionResult } from '@happyvertical/smrt-assets';
17
- import { PersistMediaBundleMetadataArtifactInput } from '@happyvertical/smrt-assets';
18
- import { SmrtCollection } from '@happyvertical/smrt-core';
19
- import { SmrtJunction } from '@happyvertical/smrt-core';
20
- import { SmrtMediaBundlePersistenceAdapter } from '@happyvertical/smrt-assets';
21
- import { SmrtObject } from '@happyvertical/smrt-core';
22
- import { SmrtObjectOptions } from '@happyvertical/smrt-core';
23
- import { WordTiming } from '@happyvertical/smrt-voice';
24
-
25
- /**
26
- * Anchor point for character placement in scene
27
- */
28
- export declare interface AnchorPoint {
29
- /** Anchor point identifier */
30
- id: string;
31
- /** Human-readable name */
32
- name: string;
33
- /** Position as normalized coordinates (0-1) */
34
- position: {
35
- x: number;
36
- y: number;
37
- };
38
- /** Suggested character scale at this point */
39
- suggestedScale: number;
40
- /** Ground plane Y coordinate for perspective */
41
- groundY: number;
42
- /** Optional viewpoint this anchor belongs to */
43
- viewpointId?: string;
44
- }
45
-
46
- /**
47
- * Branding configuration for video overlays
48
- */
49
- export declare interface BrandingConfig {
50
- /** Asset ID for logo overlay */
51
- logoAssetId?: string | null;
52
- /** Primary brand color (hex) */
53
- primaryColor?: string | null;
54
- /** Background color (hex) */
55
- backgroundColor?: string | null;
56
- /** Lower-third template name */
57
- lowerThirdTemplate?: string | null;
58
- /** Font family for text overlays */
59
- fontFamily?: string | null;
60
- /** Whether to show news ticker */
61
- tickerEnabled?: boolean;
62
- }
63
-
64
- /**
65
- * Virtual character for AI-powered video production
66
- *
67
- * Character represents a virtual persona combining:
68
- * - Visual identity: Seed image for I2V (image-to-video) generation
69
- * - Voice identity: Link to a VoiceProfile for TTS
70
- * - Branding: Logo overlays, lower-thirds, colors
71
- *
72
- * @example
73
- * ```typescript
74
- * import { Character } from '@happyvertical/smrt-video';
75
- *
76
- * const character = new Character({
77
- * name: 'Bentley News Anchor',
78
- * description: 'Professional news anchor for local broadcasts',
79
- * imageAssetId: 'asset-123',
80
- * voiceProfileId: 'voice-456',
81
- * brandingKit: {
82
- * logoAssetId: 'asset-789',
83
- * primaryColor: '#1a73e8',
84
- * lowerThirdTemplate: 'news-standard',
85
- * tickerEnabled: true,
86
- * },
87
- * });
88
- * await character.save();
89
- * ```
90
- */
91
- declare class Character extends SmrtObject {
92
- /** Tenant ID for multi-tenant isolation */
93
- tenantId: string | null;
94
- /** Human-readable name for the character */
95
- name: string;
96
- /** Description of the character persona */
97
- description: string | null;
98
- /** Asset ID of the seed image for I2V generation */
99
- imageAssetId: string | null;
100
- /** Asset ID of pre-baked base motion video */
101
- baseMotionAssetId: string | null;
102
- /** Voice profile ID for speech synthesis */
103
- voiceProfileId: string | null;
104
- /** Branding configuration for video overlays */
105
- brandingKit: BrandingConfig;
106
- /** Character status */
107
- status: CharacterStatus;
108
- /** Linked performer for IP-Adapter face consistency */
109
- performerId: string | null;
110
- /** Default scene for this character */
111
- defaultSceneId: string | null;
112
- /** Scene-specific configurations */
113
- sceneConfigs: CharacterSceneConfig[];
114
- /** 1-1 profile record for this character */
115
- profileId: string | null;
116
- constructor(options?: CharacterOptions);
117
- private getCharacterAssetCollection;
118
- private getLegacyFieldAssetIds;
119
- private setLegacyFieldAssetId;
120
- private clearLegacyFieldAssetId;
121
- getAssets(role?: CharacterAssetRole): Promise<Asset[]>;
122
- getAssetByRole(role: CharacterAssetRole): Promise<Asset | null>;
123
- addAsset(asset: Asset, role?: CharacterAssetRole, sortOrder?: number): Promise<void>;
124
- removeAsset(assetId: string, role?: CharacterAssetRole): Promise<void>;
125
- /**
126
- * Check if the character has a pre-baked base motion video
127
- * @deprecated Use getAssetByRole('base-motion') instead
128
- */
129
- get hasBaseMotion(): boolean;
130
- /** Check if the character is complete and ready for video generation */
131
- get isComplete(): boolean;
132
- }
133
- export { Character }
134
- export { Character as PersonalityProfile }
135
-
136
- export declare class CharacterAsset extends Asset {
137
- characterId: string | null;
138
- role: CharacterAssetRole;
139
- constructor(options?: CharacterAssetOptions);
140
- }
141
-
142
- export declare interface CharacterAssetOptions extends AssetOptions {
143
- /** Character this asset belongs to */
144
- characterId?: string | null;
145
- /** Role of this asset for the character */
146
- role?: CharacterAssetRole;
147
- }
148
-
149
- /** Roles a character asset can play */
150
- export declare type CharacterAssetRole = 'seed-image' | 'base-motion' | 'logo';
151
-
152
- export declare class CharacterCollection extends SmrtCollection<Character> {
153
- static readonly _itemClass: typeof Character;
154
- /** Find all characters belonging to a specific tenant */
155
- findByTenant(tenantId: string): Promise<Character[]>;
156
- /**
157
- * Find all global characters (no tenant association).
158
- *
159
- * Routes through the shared tenant-global helper so it does not throw under
160
- * an active tenant context (an explicit `tenant_id IS NULL` filter would be
161
- * flagged as an isolation violation). (#1600)
162
- */
163
- findGlobal(): Promise<Character[]>;
164
- /** Find characters by performer */
165
- findByPerformer(performerId: string): Promise<Character[]>;
166
- /** Find characters that are ready for video generation */
167
- findReady(): Promise<Character[]>;
168
- }
169
-
170
- /**
171
- * Character creation options
172
- */
173
- declare interface CharacterOptions extends SmrtObjectOptions {
174
- /** Human-readable name for the character */
175
- name?: string;
176
- /** Description of the character persona */
177
- description?: string | null;
178
- /** Asset ID of the seed image for image-to-video generation */
179
- imageAssetId?: string | null;
180
- /** Asset ID of pre-baked base motion video */
181
- baseMotionAssetId?: string | null;
182
- /** Voice profile ID for speech synthesis */
183
- voiceProfileId?: string | null;
184
- /** Branding configuration for video overlays */
185
- brandingKit?: BrandingConfig;
186
- /** Character status */
187
- status?: CharacterStatus;
188
- /** Linked performer for IP-Adapter face consistency */
189
- performerId?: string | null;
190
- /** Default scene for this character */
191
- defaultSceneId?: string | null;
192
- /** Scene-specific configurations */
193
- sceneConfigs?: CharacterSceneConfig[];
194
- /** 1-1 profile record for this character */
195
- profileId?: string | null;
196
- /** Tenant ID for multi-tenant isolation */
197
- tenantId?: string | null;
198
- }
199
- export { CharacterOptions }
200
- export { CharacterOptions as PersonalityProfileOptions }
201
-
202
- export declare class CharacterOwnedAsset extends SmrtObject {
203
- tenantId: string | null;
204
- characterId: string;
205
- assetId: string;
206
- role: CharacterAssetRole;
207
- sortOrder: number;
208
- constructor(options?: CharacterOwnedAssetOptions);
209
- }
210
-
211
- export declare class CharacterOwnedAssetCollection extends SmrtJunction<CharacterOwnedAsset> {
212
- static readonly _itemClass: typeof CharacterOwnedAsset;
213
- protected leftField: string;
214
- protected rightField: string;
215
- }
216
-
217
- export declare interface CharacterOwnedAssetOptions extends SmrtObjectOptions {
218
- characterId?: string;
219
- assetId?: string;
220
- role?: CharacterAssetRole;
221
- sortOrder?: number;
222
- tenantId?: string | null;
223
- }
224
-
225
- /**
226
- * Scene-specific configuration for a character
227
- */
228
- export declare interface CharacterSceneConfig {
229
- /** Scene ID */
230
- sceneId: string;
231
- /** Preferred viewpoint ID (for 360° scenes) */
232
- viewpointId?: string;
233
- /** Anchor point ID for placement */
234
- anchorPointId?: string;
235
- /** Character scale in this scene */
236
- scale: number;
237
- /** Character position in this scene (normalized 0-1) */
238
- position: {
239
- x: number;
240
- y: number;
241
- };
242
- }
243
-
244
- /**
245
- * Character status
246
- */
247
- declare type CharacterStatus = 'pending' | 'ready';
248
- export { CharacterStatus }
249
- export { CharacterStatus as PersonalityProfileStatus }
250
-
251
- /**
252
- * Composite job for tracking virtual production compositing
253
- *
254
- * @example
255
- * ```typescript
256
- * import { CompositeJob } from '@happyvertical/smrt-video';
257
- *
258
- * const job = new CompositeJob({
259
- * characterVideoAssetId: 'asset-video-123',
260
- * sceneId: 'scene-townhall',
261
- * scale: 0.8,
262
- * position: { x: 0.5, y: 0.7 },
263
- * });
264
- * await job.save();
265
- * ```
266
- */
267
- export declare class CompositeJob extends SmrtObject {
268
- tenantId: string | null;
269
- /** Character video asset ID (after lip-sync) */
270
- characterVideoAssetId: string | null;
271
- /** Scene ID to composite onto */
272
- sceneId: string | null;
273
- /** Viewpoint ID (for 360° scenes) */
274
- viewpointId: string | null;
275
- /** Anchor point ID for placement */
276
- anchorPointId: string | null;
277
- /** Character scale */
278
- scale: number;
279
- /** Character position (normalized 0-1) */
280
- position: {
281
- x: number;
282
- y: number;
283
- };
284
- /** Job status */
285
- status: CompositeJobStatus;
286
- /** Progress percentage (0-100) */
287
- progress: number;
288
- /** Output video asset ID */
289
- outputAssetId: string | null;
290
- /** Error message if failed */
291
- errorMessage: string | null;
292
- constructor(options?: CompositeJobOptions);
293
- /** Check if the job is complete */
294
- get isComplete(): boolean;
295
- /** Check if the job is in progress */
296
- get isProcessing(): boolean;
297
- }
298
-
299
- /**
300
- * Composite job creation options
301
- */
302
- export declare interface CompositeJobOptions extends SmrtObjectOptions {
303
- /** Character video asset ID (after lip-sync) */
304
- characterVideoAssetId?: string | null;
305
- /** Scene ID to composite onto */
306
- sceneId?: string | null;
307
- /** Viewpoint ID (for 360° scenes) */
308
- viewpointId?: string | null;
309
- /** Anchor point ID for placement */
310
- anchorPointId?: string | null;
311
- /** Character scale */
312
- scale?: number;
313
- /** Character position (normalized 0-1) */
314
- position?: {
315
- x: number;
316
- y: number;
317
- };
318
- /** Job status */
319
- status?: CompositeJobStatus;
320
- /** Progress percentage (0-100) */
321
- progress?: number;
322
- /** Output video asset ID */
323
- outputAssetId?: string | null;
324
- /** Error message if failed */
325
- errorMessage?: string | null;
326
- /** Tenant ID for multi-tenant isolation */
327
- tenantId?: string | null;
328
- }
329
-
330
- /**
331
- * Composite job status
332
- */
333
- export declare type CompositeJobStatus = 'pending' | 'removing_bg' | 'analyzing_light' | 'compositing' | 'complete' | 'failed';
334
-
335
- /**
336
- * Lighting profile for IC-Light matching
337
- */
338
- export declare interface LightingProfile {
339
- /** Dominant light direction (normalized vector) */
340
- direction?: {
341
- x: number;
342
- y: number;
343
- z: number;
344
- };
345
- /** Light color temperature (Kelvin) */
346
- colorTemperature?: number;
347
- /** Ambient light intensity (0-1) */
348
- ambientIntensity?: number;
349
- /** Key light intensity (0-1) */
350
- keyLightIntensity?: number;
351
- /** Shadow softness (0-1) */
352
- shadowSoftness?: number;
353
- /** Environment map asset ID for reflections */
354
- envMapAssetId?: string;
355
- }
356
-
357
- export { MediaBundleFileDescriptor }
358
-
359
- export { MediaBundleGpsTrackPoint }
360
-
361
- export { MediaBundleInspection }
362
-
363
- export { MediaBundleInspectionLike }
364
-
365
- export { MediaBundleNormalizedMetadata }
366
-
367
- export { MediaBundleSupportFileInspection }
368
-
369
- export { MediaSupportFileVisibility }
370
-
371
- /**
372
- * Node mapping for dynamic parameter injection
373
- */
374
- export declare interface NodeMapping {
375
- /**
376
- * Node ID for anchor seed image input
377
- */
378
- seedImage?: string;
379
- /**
380
- * Node ID for TTS audio input
381
- */
382
- audioFile?: string;
383
- /**
384
- * Node ID for base motion video input
385
- */
386
- baseVideo?: string;
387
- /**
388
- * Node ID for final video output
389
- */
390
- outputVideo?: string;
391
- /**
392
- * Node ID for text prompt input
393
- */
394
- prompt?: string;
395
- /**
396
- * Node ID for negative prompt input
397
- */
398
- negativePrompt?: string;
399
- /**
400
- * Node ID for sampler/scheduler settings
401
- */
402
- sampler?: string;
403
- /**
404
- * Node ID for video duration control
405
- */
406
- duration?: string;
407
- /**
408
- * Additional custom node mappings
409
- */
410
- [key: string]: string | undefined;
411
- }
412
-
413
- /**
414
- * Performer - The physical likeness/face DNA
415
- *
416
- * A Performer represents a person's visual identity for consistent
417
- * face generation across multiple Characters. One Performer can play
418
- * many Characters (e.g., same face as "Evening Anchor" and "Weekend Host").
419
- *
420
- * @example
421
- * ```typescript
422
- * import { Performer } from '@happyvertical/smrt-video';
423
- *
424
- * const performer = new Performer({
425
- * name: 'Alex Bentley',
426
- * dna: {
427
- * gender: 'male',
428
- * ageRange: 'adult',
429
- * ipAdapterWeight: 0.75,
430
- * },
431
- * referenceAssetIds: ['ref-img-1', 'ref-img-2'],
432
- * });
433
- * await performer.save();
434
- * ```
435
- */
436
- export declare class Performer extends SmrtObject {
437
- tenantId: string | null;
438
- /** Human-readable name */
439
- name: string;
440
- /** Description */
441
- description: string | null;
442
- /** Performer DNA for consistent face generation */
443
- dna: PerformerDNA;
444
- /** Reference images for IP-Adapter (multiple angles/expressions) */
445
- referenceAssetIds: string[];
446
- /** Generated seed image asset ID */
447
- seedImageAssetId: string | null;
448
- /** Default voice profile for this performer */
449
- voiceProfileId: string | null;
450
- /** Performer status */
451
- status: PerformerStatus;
452
- /** 1-1 profile record for this performer */
453
- profileId: string | null;
454
- constructor(options?: PerformerOptions);
455
- private getPerformerAssetCollection;
456
- private getLegacyFieldAssetIds;
457
- private setLegacyFieldAssetId;
458
- private clearLegacyFieldAssetId;
459
- getAssets(role?: PerformerAssetRole): Promise<Asset[]>;
460
- getAssetByRole(role: PerformerAssetRole): Promise<Asset | null>;
461
- addAsset(asset: Asset, role?: PerformerAssetRole, sortOrder?: number): Promise<void>;
462
- removeAsset(assetId: string, role?: PerformerAssetRole): Promise<void>;
463
- /** Check if the performer has reference images */
464
- get hasReferences(): boolean;
465
- /** Check if the performer has a face embedding */
466
- get hasFaceEmbedding(): boolean;
467
- /** Check if the performer is ready for generation */
468
- get isReady(): boolean;
469
- }
470
-
471
- export declare class PerformerAsset extends Asset {
472
- performerId: string | null;
473
- role: PerformerAssetRole;
474
- constructor(options?: PerformerAssetOptions);
475
- }
476
-
477
- export declare interface PerformerAssetOptions extends AssetOptions {
478
- /** Performer this asset belongs to */
479
- performerId?: string | null;
480
- /** Role of this asset for the performer */
481
- role?: PerformerAssetRole;
482
- }
483
-
484
- /** Roles a performer asset can play */
485
- export declare type PerformerAssetRole = 'reference' | 'seed';
486
-
487
- /**
488
- * Performer DNA for IP-Adapter FaceID consistency
489
- */
490
- export declare interface PerformerDNA {
491
- /** Gender */
492
- gender: 'male' | 'female' | 'neutral';
493
- /** Age range */
494
- ageRange: 'child' | 'teen' | 'young_adult' | 'adult' | 'middle_aged' | 'senior';
495
- /** Face embedding for IP-Adapter FaceID (512-dim vector) */
496
- faceEmbedding?: number[];
497
- /** Default clothing style (can be overridden per Character) */
498
- defaultClothing?: {
499
- style: 'business' | 'casual' | 'formal' | 'outdoor';
500
- colors?: string[];
501
- description?: string;
502
- };
503
- /** IP-Adapter weight for consistency (0.5-1.0) */
504
- ipAdapterWeight: number;
505
- /** FaceID weight for face consistency */
506
- faceIdWeight?: number;
507
- }
508
-
509
- /**
510
- * Performer creation options
511
- */
512
- export declare interface PerformerOptions extends SmrtObjectOptions {
513
- /** Human-readable name */
514
- name?: string;
515
- /** Description */
516
- description?: string | null;
517
- /** Performer DNA for consistent face generation */
518
- dna?: PerformerDNA;
519
- /** Reference images for IP-Adapter (multiple angles/expressions) */
520
- referenceAssetIds?: string[];
521
- /** Generated seed image asset ID */
522
- seedImageAssetId?: string | null;
523
- /** Default voice profile for this performer */
524
- voiceProfileId?: string | null;
525
- /** Performer status */
526
- status?: PerformerStatus;
527
- /** 1-1 profile record for this performer */
528
- profileId?: string | null;
529
- /** Tenant ID for multi-tenant isolation */
530
- tenantId?: string | null;
531
- }
532
-
533
- export declare class PerformerOwnedAsset extends SmrtObject {
534
- tenantId: string | null;
535
- performerId: string;
536
- assetId: string;
537
- role: PerformerAssetRole;
538
- sortOrder: number;
539
- constructor(options?: PerformerOwnedAssetOptions);
540
- }
541
-
542
- export declare class PerformerOwnedAssetCollection extends SmrtJunction<PerformerOwnedAsset> {
543
- static readonly _itemClass: typeof PerformerOwnedAsset;
544
- protected leftField: string;
545
- protected rightField: string;
546
- }
547
-
548
- export declare interface PerformerOwnedAssetOptions extends SmrtObjectOptions {
549
- performerId?: string;
550
- assetId?: string;
551
- role?: PerformerAssetRole;
552
- sortOrder?: number;
553
- tenantId?: string | null;
554
- }
555
-
556
- /**
557
- * Performer status
558
- */
559
- export declare type PerformerStatus = 'pending' | 'ready';
560
-
561
- export { PersistMediaBundleAssetInput }
562
-
563
- export { PersistMediaBundleAssociationInput }
564
-
565
- export { persistMediaBundleInspection }
566
-
567
- export { PersistMediaBundleInspectionOptions }
568
-
569
- export { PersistMediaBundleInspectionResult }
570
-
571
- export { PersistMediaBundleMetadataArtifactInput }
572
-
573
- /**
574
- * Render status for the composition
575
- */
576
- export declare type RenderStatus = 'draft' | 'rendering' | 'ready' | 'failed';
577
-
578
- /**
579
- * Scene for virtual production compositing
580
- *
581
- * Supports 360° panoramas, standard images, and video backgrounds
582
- * with viewpoint extraction, lighting analysis, and character placement.
583
- *
584
- * @example
585
- * ```typescript
586
- * import { Scene } from '@happyvertical/smrt-video';
587
- *
588
- * const scene = new Scene({
589
- * name: 'Town Hall Exterior',
590
- * sourceAssetId: 'asset-townhall-pano',
591
- * sourceType: 'panorama_360',
592
- * projection: 'equirectangular',
593
- * });
594
- * await scene.save();
595
- * ```
596
- */
597
- export declare class Scene extends SmrtObject {
598
- tenantId: string | null;
599
- /** Human-readable name */
600
- name: string;
601
- /** Description */
602
- description: string | null;
603
- /** Source media asset ID */
604
- sourceAssetId: string | null;
605
- /** Type of source media */
606
- sourceType: SceneSourceType;
607
- /** Projection type for panoramas */
608
- projection: SceneProjection | null;
609
- /** Extracted camera angles from 360° panoramas */
610
- viewpoints: SceneViewpoint[];
611
- /** Lighting analysis for IC-Light matching */
612
- lightingProfile: LightingProfile | null;
613
- /** Location metadata */
614
- location: {
615
- name: string;
616
- coordinates?: {
617
- lat: number;
618
- lng: number;
619
- };
620
- } | null;
621
- /** Anchor points for character placement */
622
- anchorPoints: AnchorPoint[];
623
- /** Scene status */
624
- status: SceneStatus;
625
- constructor(options?: SceneOptions);
626
- private getSceneAssetCollection;
627
- private getLegacyFieldAssetIds;
628
- private setLegacyFieldAssetId;
629
- private clearLegacyFieldAssetId;
630
- getAssets(role?: SceneAssetRole): Promise<Asset[]>;
631
- getAssetByRole(role: SceneAssetRole): Promise<Asset | null>;
632
- addAsset(asset: Asset, role?: SceneAssetRole, sortOrder?: number): Promise<void>;
633
- removeAsset(assetId: string, role?: SceneAssetRole): Promise<void>;
634
- /** Check if this is a 360° panorama */
635
- get isPanorama(): boolean;
636
- /** Check if the scene has viewpoints extracted */
637
- get hasViewpoints(): boolean;
638
- /** Check if the scene is ready for compositing */
639
- get isReady(): boolean;
640
- }
641
-
642
- export declare class SceneAsset extends Asset {
643
- sceneId: string | null;
644
- role: SceneAssetRole;
645
- constructor(options?: SceneAssetOptions);
646
- }
647
-
648
- export declare interface SceneAssetOptions extends AssetOptions {
649
- /** Scene this asset belongs to */
650
- sceneId?: string | null;
651
- /** Role of this asset for the scene */
652
- role?: SceneAssetRole;
653
- }
654
-
655
- /** Roles a scene asset can play */
656
- export declare type SceneAssetRole = 'source' | 'viewpoint-extract' | 'env-map';
657
-
658
- /**
659
- * Scene creation options
660
- */
661
- export declare interface SceneOptions extends SmrtObjectOptions {
662
- /** Human-readable name */
663
- name?: string;
664
- /** Description */
665
- description?: string | null;
666
- /** Source media asset ID */
667
- sourceAssetId?: string | null;
668
- /** Type of source media */
669
- sourceType?: SceneSourceType;
670
- /** Projection type for panoramas */
671
- projection?: SceneProjection | null;
672
- /** Extracted camera angles from 360° panoramas */
673
- viewpoints?: SceneViewpoint[];
674
- /** Lighting analysis for IC-Light matching */
675
- lightingProfile?: LightingProfile | null;
676
- /** Location metadata */
677
- location?: {
678
- name: string;
679
- coordinates?: {
680
- lat: number;
681
- lng: number;
682
- };
683
- } | null;
684
- /** Anchor points for character placement */
685
- anchorPoints?: AnchorPoint[];
686
- /** Scene status */
687
- status?: SceneStatus;
688
- /** Tenant ID for multi-tenant isolation */
689
- tenantId?: string | null;
690
- }
691
-
692
- export declare class SceneOwnedAsset extends SmrtObject {
693
- tenantId: string | null;
694
- sceneId: string;
695
- assetId: string;
696
- role: SceneAssetRole;
697
- sortOrder: number;
698
- constructor(options?: SceneOwnedAssetOptions);
699
- }
700
-
701
- export declare class SceneOwnedAssetCollection extends SmrtJunction<SceneOwnedAsset> {
702
- static readonly _itemClass: typeof SceneOwnedAsset;
703
- protected leftField: string;
704
- protected rightField: string;
705
- }
706
-
707
- export declare interface SceneOwnedAssetOptions extends SmrtObjectOptions {
708
- sceneId?: string;
709
- assetId?: string;
710
- role?: SceneAssetRole;
711
- sortOrder?: number;
712
- tenantId?: string | null;
713
- }
714
-
715
- /**
716
- * Scene projection type
717
- */
718
- export declare type SceneProjection = 'equirectangular' | 'cubemap';
719
-
720
- /**
721
- * Scene source type
722
- */
723
- export declare type SceneSourceType = 'image' | 'video' | 'panorama_360' | 'panorama_180';
724
-
725
- /**
726
- * Scene status
727
- */
728
- export declare type SceneStatus = 'pending' | 'processing' | 'ready' | 'failed';
729
-
730
- /**
731
- * Viewpoint extracted from 360° scene
732
- */
733
- export declare interface SceneViewpoint {
734
- /** Viewpoint identifier */
735
- id: string;
736
- /** Human-readable name */
737
- name: string;
738
- /** Horizontal rotation (-180 to 180°) */
739
- pan: number;
740
- /** Vertical rotation (-90 to 90°) */
741
- tilt: number;
742
- /** Field of view (60-120°) */
743
- fov: number;
744
- /** Generated rectilinear image asset ID */
745
- extractedAssetId?: string;
746
- /** Viewpoint-specific lighting profile */
747
- lightingProfile?: LightingProfile;
748
- }
749
-
750
- export { SmrtMediaBundlePersistenceAdapter }
751
-
752
- /**
753
- * Transition type to the next sequence
754
- */
755
- export declare type TransitionType = 'none' | 'fade' | 'slide' | 'wipe';
756
-
757
- /**
758
- * Publishable video composition
759
- *
760
- * VideoComposition is the top-level container for a rendered video.
761
- * It defines the render spec and contains ordered VideoSequences.
762
- *
763
- * @example
764
- * ```typescript
765
- * import { VideoComposition } from '@happyvertical/smrt-video';
766
- *
767
- * const composition = new VideoComposition({
768
- * title: 'Evening News - January 25, 2026',
769
- * fps: 30,
770
- * width: 1920,
771
- * height: 1080,
772
- * });
773
- * await composition.save();
774
- * ```
775
- */
776
- export declare class VideoComposition extends Content {
777
- /** Frames per second — everything downstream is in frames */
778
- fps: number;
779
- /** Render width in pixels */
780
- width: number;
781
- /** Render height in pixels */
782
- height: number;
783
- /** Computed total: sum of sequences minus transition overlaps */
784
- durationInFrames: number;
785
- /** Render status */
786
- renderStatus: RenderStatus;
787
- /** Render progress (0-100) */
788
- renderProgress: number;
789
- constructor(options?: VideoCompositionOptions);
790
- /** Duration in seconds */
791
- get durationInSeconds(): number;
792
- /** Check if the composition is ready for publishing */
793
- get isReady(): boolean;
794
- /** Check if the composition is currently rendering */
795
- get isRendering(): boolean;
796
- getAssets(relationship?: string): Promise<Asset[]>;
797
- getAssets(role?: VideoCompositionAssetRole): Promise<Asset[]>;
798
- getAssetByRole(role: VideoCompositionAssetRole): Promise<Asset | null>;
799
- }
800
-
801
- export declare class VideoCompositionAsset extends Asset {
802
- videoCompositionId: string | null;
803
- role: VideoCompositionAssetRole;
804
- constructor(options?: VideoCompositionAssetOptions);
805
- }
806
-
807
- export declare interface VideoCompositionAssetOptions extends AssetOptions {
808
- /** VideoComposition this asset belongs to */
809
- videoCompositionId?: string | null;
810
- /** Role of this asset for the composition */
811
- role?: VideoCompositionAssetRole;
812
- }
813
-
814
- /** Roles a video composition asset can play */
815
- export declare type VideoCompositionAssetRole = 'video' | 'audio' | 'thumbnail';
816
-
817
- export declare class VideoCompositionCollection extends SmrtCollection<VideoComposition> {
818
- static readonly _itemClass: typeof VideoComposition;
819
- /** Find compositions by render status */
820
- findByRenderStatus(renderStatus: RenderStatus): Promise<VideoComposition[]>;
821
- /** Find compositions that are ready for publishing */
822
- findReady(): Promise<VideoComposition[]>;
823
- }
824
-
825
- /**
826
- * VideoComposition creation options
827
- */
828
- export declare interface VideoCompositionOptions extends ContentOptions {
829
- /** Frames per second (e.g., 30) — everything downstream is in frames */
830
- fps?: number;
831
- /** Render width in pixels */
832
- width?: number;
833
- /** Render height in pixels */
834
- height?: number;
835
- /** Computed total: sum of sequences minus transition overlaps */
836
- durationInFrames?: number;
837
- /** Render status */
838
- renderStatus?: RenderStatus;
839
- /** Render progress (0-100) */
840
- renderProgress?: number;
841
- }
842
-
843
- /**
844
- * Video metadata
845
- */
846
- export declare interface VideoMetadata {
847
- /** Actual duration in seconds */
848
- duration?: number;
849
- /** Video resolution (e.g., "1920x1080") */
850
- resolution?: string;
851
- /** Aspect ratio (e.g., "16:9", "9:16") */
852
- aspectRatio?: string;
853
- /** Video codec (e.g., "h264", "h265") */
854
- codec?: string;
855
- /** Frames per second */
856
- fps?: number;
857
- /** File size in bytes */
858
- fileSize?: number;
859
- /** Word timing data from TTS for lip-sync */
860
- wordTimings?: WordTiming[];
861
- /** ComfyUI prompt ID for tracking */
862
- comfyPromptId?: string;
863
- }
864
-
865
- /**
866
- * Thematic section of a video composition
867
- *
868
- * VideoSequence groups VideoShots into a logical section. It can belong
869
- * to a VideoComposition or exist standalone (e.g., during long-video generation).
870
- *
871
- * @example
872
- * ```typescript
873
- * import { VideoSequence } from '@happyvertical/smrt-video';
874
- *
875
- * const sequence = new VideoSequence({
876
- * title: 'Top Story',
877
- * position: 0,
878
- * transitionType: 'fade',
879
- * transitionDurationFrames: 15,
880
- * });
881
- * await sequence.save();
882
- * ```
883
- */
884
- export declare class VideoSequence extends Content {
885
- /** Composition this sequence belongs to */
886
- compositionId: string | null;
887
- /** Order within composition */
888
- position: number;
889
- /** Computed duration: sum of shot frames */
890
- durationInFrames: number;
891
- /** Transition type to the next sequence */
892
- transitionType: TransitionType;
893
- /** Overlap frames with next sequence for transition */
894
- transitionDurationFrames: number;
895
- constructor(options?: VideoSequenceOptions);
896
- getAssets(relationship?: string): Promise<Asset[]>;
897
- getAssets(role?: VideoSequenceAssetRole): Promise<Asset[]>;
898
- getAssetByRole(role: VideoSequenceAssetRole): Promise<Asset | null>;
899
- }
900
-
901
- export declare class VideoSequenceAsset extends Asset {
902
- videoSequenceId: string | null;
903
- role: VideoSequenceAssetRole;
904
- constructor(options?: VideoSequenceAssetOptions);
905
- }
906
-
907
- export declare interface VideoSequenceAssetOptions extends AssetOptions {
908
- /** VideoSequence this asset belongs to */
909
- videoSequenceId?: string | null;
910
- /** Role of this asset for the sequence */
911
- role?: VideoSequenceAssetRole;
912
- }
913
-
914
- /** Roles a video sequence asset can play */
915
- export declare type VideoSequenceAssetRole = 'video' | 'audio' | 'thumbnail';
916
-
917
- export declare class VideoSequenceCollection extends SmrtCollection<VideoSequence> {
918
- static readonly _itemClass: typeof VideoSequence;
919
- /** Find sequences belonging to a composition, ordered by position */
920
- findByComposition(compositionId: string): Promise<VideoSequence[]>;
921
- /** Find standalone sequences (not in any composition) */
922
- findStandalone(): Promise<VideoSequence[]>;
923
- }
924
-
925
- /**
926
- * VideoSequence creation options
927
- */
928
- export declare interface VideoSequenceOptions extends ContentOptions {
929
- /** Composition this sequence belongs to (nullable — can exist standalone) */
930
- compositionId?: string | null;
931
- /** Order within composition */
932
- position?: number;
933
- /** Computed duration: sum of shot frames */
934
- durationInFrames?: number;
935
- /** Transition type to the next sequence */
936
- transitionType?: TransitionType;
937
- /** Overlap frames with next sequence for transition */
938
- transitionDurationFrames?: number;
939
- }
940
-
941
- /**
942
- * Atomic video generation unit
943
- *
944
- * VideoShot represents a single pipeline run producing one video clip.
945
- * It can belong to a VideoSequence (for multi-segment long videos) or
946
- * exist standalone. Characters are linked via the VideoShotCharacter join model.
947
- *
948
- * @example
949
- * ```typescript
950
- * import { VideoShot } from '@happyvertical/smrt-video';
951
- *
952
- * const shot = new VideoShot({
953
- * scriptText: 'Welcome to the evening news.',
954
- * targetDuration: 30,
955
- * title: 'Evening News - Opening',
956
- * });
957
- * await shot.save();
958
- * ```
959
- */
960
- declare class VideoShot extends Content {
961
- /** Sequence this shot belongs to */
962
- sequenceId: string | null;
963
- /** Scene for this shot */
964
- sceneId: string | null;
965
- /** Order within sequence */
966
- position: number;
967
- /** Actual frame count of generated clip */
968
- durationInFrames: number;
969
- /** Frames to skip at start (overlap handling) */
970
- trimBeforeFrames: number;
971
- /** Frames to skip at end */
972
- trimAfterFrames: number;
973
- /** Script text to be spoken */
974
- scriptText: string;
975
- /** Word count in the script */
976
- scriptWordCount: number;
977
- /** Target duration in seconds */
978
- targetDuration: number;
979
- /** Video generation status */
980
- shotStatus: VideoShotStatus;
981
- /** Generation progress (0-100) */
982
- progress: number;
983
- /** Error message if status is 'failed' */
984
- errorMessage: string | null;
985
- /** Detailed status message for progress tracking */
986
- statusMessage: string | null;
987
- /** Video metadata (duration, resolution, etc.) */
988
- videoMetadata: VideoMetadata;
989
- constructor(options?: VideoShotOptions);
990
- /** Estimate speech duration based on word count (2.7 words/sec) */
991
- get estimatedDuration(): number;
992
- /** Check if the script length matches target duration (+/- 15%) */
993
- get isScriptLengthValid(): boolean;
994
- /** Get the recommended word count for target duration */
995
- get recommendedWordCount(): {
996
- min: number;
997
- max: number;
998
- target: number;
999
- };
1000
- /** Effective frame count after trimming */
1001
- get effectiveFrames(): number;
1002
- /** Check if video generation is in progress */
1003
- get isGenerating(): boolean;
1004
- /** Check if video is ready for publishing */
1005
- get isReady(): boolean;
1006
- getAssets(relationship?: string): Promise<Asset[]>;
1007
- getAssets(role?: VideoShotAssetRole): Promise<Asset[]>;
1008
- getAssetByRole(role: VideoShotAssetRole): Promise<Asset | null>;
1009
- /** Update script text and recalculate word count */
1010
- setScript(text: string): void;
1011
- }
1012
- export { VideoShot as VideoContent }
1013
- export { VideoShot }
1014
-
1015
- export declare class VideoShotAsset extends Asset {
1016
- videoShotId: string | null;
1017
- role: VideoShotAssetRole;
1018
- constructor(options?: VideoShotAssetOptions);
1019
- }
1020
-
1021
- export declare interface VideoShotAssetOptions extends AssetOptions {
1022
- /** VideoShot this asset belongs to */
1023
- videoShotId?: string | null;
1024
- /** Role of this asset for the shot */
1025
- role?: VideoShotAssetRole;
1026
- }
1027
-
1028
- /** Roles a video shot asset can play */
1029
- export declare type VideoShotAssetRole = 'video' | 'audio' | 'thumbnail';
1030
-
1031
- /**
1032
- * Join model linking a VideoShot to a Character
1033
- *
1034
- * @example
1035
- * ```typescript
1036
- * import { VideoShotCharacter } from '@happyvertical/smrt-video';
1037
- *
1038
- * const link = new VideoShotCharacter({
1039
- * videoShotId: 'shot-123',
1040
- * characterId: 'char-456',
1041
- * role: 'primary',
1042
- * position: 0,
1043
- * });
1044
- * await link.save();
1045
- * ```
1046
- */
1047
- export declare class VideoShotCharacter extends SmrtObject {
1048
- tenantId: string | null;
1049
- /** Video shot ID */
1050
- videoShotId: string;
1051
- /** Character ID */
1052
- characterId: string;
1053
- /** Role of the character in this shot */
1054
- role: VideoShotCharacterRole;
1055
- /** Order/layer position within the shot */
1056
- position: number;
1057
- constructor(options: VideoShotCharacterOptions);
1058
- }
1059
-
1060
- export declare class VideoShotCharacterCollection extends SmrtCollection<VideoShotCharacter> {
1061
- static readonly _itemClass: typeof VideoShotCharacter;
1062
- /** Find all character links for a shot, ordered by position */
1063
- findByShot(videoShotId: string): Promise<VideoShotCharacter[]>;
1064
- /** Find all shot links for a character */
1065
- findByCharacter(characterId: string): Promise<VideoShotCharacter[]>;
1066
- }
1067
-
1068
- /**
1069
- * VideoShotCharacter creation options
1070
- */
1071
- export declare interface VideoShotCharacterOptions extends SmrtObjectOptions {
1072
- /** Video shot ID */
1073
- videoShotId: string;
1074
- /** Character ID */
1075
- characterId: string;
1076
- /** Role of the character in this shot */
1077
- role?: VideoShotCharacterRole;
1078
- /** Order/layer position within the shot */
1079
- position?: number;
1080
- /** Tenant ID for multi-tenant isolation */
1081
- tenantId?: string | null;
1082
- }
1083
-
1084
- /**
1085
- * Character role within a shot
1086
- */
1087
- export declare type VideoShotCharacterRole = 'primary' | 'secondary' | 'background';
1088
-
1089
- export declare class VideoShotCollection extends SmrtCollection<VideoShot> {
1090
- static readonly _itemClass: typeof VideoShot;
1091
- /** Find shots belonging to a specific sequence, ordered by position */
1092
- findBySequence(sequenceId: string): Promise<VideoShot[]>;
1093
- /** Find shots by status */
1094
- findByStatus(shotStatus: VideoShotStatus): Promise<VideoShot[]>;
1095
- /** Find standalone shots (not in any sequence) */
1096
- findStandalone(): Promise<VideoShot[]>;
1097
- }
1098
-
1099
- /**
1100
- * Video shot creation options
1101
- */
1102
- declare interface VideoShotOptions extends ContentOptions {
1103
- /** Sequence this shot belongs to (nullable — shots can exist standalone) */
1104
- sequenceId?: string | null;
1105
- /** Scene for this shot (nullable) */
1106
- sceneId?: string | null;
1107
- /** Order within sequence */
1108
- position?: number;
1109
- /** Actual frame count of generated clip */
1110
- durationInFrames?: number;
1111
- /** Frames to skip at start (overlap handling) */
1112
- trimBeforeFrames?: number;
1113
- /** Frames to skip at end */
1114
- trimAfterFrames?: number;
1115
- /** Script text to be spoken */
1116
- scriptText?: string;
1117
- /** Word count in the script */
1118
- scriptWordCount?: number;
1119
- /** Target duration in seconds */
1120
- targetDuration?: number;
1121
- /** Video generation status */
1122
- shotStatus?: VideoShotStatus;
1123
- /** Generation progress (0-100) */
1124
- progress?: number;
1125
- /** Error message if status is 'failed' */
1126
- errorMessage?: string | null;
1127
- /** Detailed status message for progress tracking */
1128
- statusMessage?: string | null;
1129
- /** Video metadata */
1130
- videoMetadata?: VideoMetadata;
1131
- }
1132
- export { VideoShotOptions as VideoContentOptions }
1133
- export { VideoShotOptions }
1134
-
1135
- /**
1136
- * Video shot status
1137
- */
1138
- declare type VideoShotStatus = 'draft' | 'queued' | 'processing' | 'ready' | 'failed' | 'published';
1139
- export { VideoShotStatus as VideoContentStatus }
1140
- export { VideoShotStatus }
1141
-
1142
- /**
1143
- * ComfyUI workflow template for video generation
1144
- *
1145
- * VideoWorkflow stores ComfyUI workflow definitions with node mappings
1146
- * for dynamic parameter injection. This allows the Histrio agent to
1147
- * inject anchor images, audio, and other inputs at runtime.
1148
- *
1149
- * @example
1150
- * ```typescript
1151
- * import { VideoWorkflow } from '@happyvertical/smrt-video';
1152
- *
1153
- * const workflow = new VideoWorkflow({
1154
- * name: 'Wan 2.6 + EchoMimic',
1155
- * description: 'Full broadcast generation with lip-sync',
1156
- * workflowType: 'broadcast',
1157
- * workflowJson: comfyuiWorkflowJson,
1158
- * nodeMapping: {
1159
- * seedImage: '1',
1160
- * audioFile: '5',
1161
- * outputVideo: '12',
1162
- * },
1163
- * estimatedTime: 600, // 10 minutes
1164
- * requiredModels: ['wan_2.6_t2v_14b_fp8', 'echomimic_v2'],
1165
- * });
1166
- * await workflow.save();
1167
- * ```
1168
- */
1169
- export declare class VideoWorkflow extends SmrtObject {
1170
- /**
1171
- * Tenant ID for multi-tenant isolation
1172
- */
1173
- tenantId: string | null;
1174
- /**
1175
- * Human-readable name for the workflow
1176
- */
1177
- name: string;
1178
- /**
1179
- * Description of what this workflow does
1180
- */
1181
- description: string | null;
1182
- /**
1183
- * Workflow type classification
1184
- * - prebake: Pre-generate base motion from seed image
1185
- * - broadcast: Full video generation pipeline
1186
- * - lipsync: Lip-sync only (requires base video + audio)
1187
- * - postprod: Post-production overlays and effects
1188
- * - custom: User-defined workflow
1189
- */
1190
- workflowType: WorkflowType;
1191
- /**
1192
- * ComfyUI API format JSON
1193
- * This is the workflow definition that will be sent to ComfyUI
1194
- */
1195
- workflowJson: object | null;
1196
- /**
1197
- * Node ID mappings for dynamic parameter injection
1198
- * Maps semantic names to ComfyUI node IDs
1199
- */
1200
- nodeMapping: NodeMapping;
1201
- /**
1202
- * Estimated processing time in seconds
1203
- * Used for progress estimation
1204
- */
1205
- estimatedTime: number;
1206
- /**
1207
- * Whether this workflow is active/usable
1208
- */
1209
- isActive: boolean;
1210
- /**
1211
- * ComfyUI models required by this workflow
1212
- * Used for validation before queuing
1213
- */
1214
- requiredModels: string[];
1215
- constructor(options?: VideoWorkflowOptions);
1216
- /**
1217
- * Check if the workflow has all required node mappings
1218
- */
1219
- get hasRequiredMappings(): boolean;
1220
- /**
1221
- * Get a copy of the workflow JSON with injected parameters
1222
- *
1223
- * Parameter injection follows ComfyUI node structure conventions:
1224
- * - seedImage, audioFile, baseVideo → node.inputs.image (file path)
1225
- * - prompt → node.inputs.text (string)
1226
- * - Other parameters → node.inputs[paramKey]
1227
- *
1228
- * @param params - Key-value pairs of parameters to inject
1229
- * @returns Modified workflow JSON or null if no workflowJson set
1230
- */
1231
- injectParameters(params: Record<string, unknown>): object | null;
1232
- }
1233
-
1234
- /**
1235
- * Video workflow creation options
1236
- */
1237
- export declare interface VideoWorkflowOptions extends SmrtObjectOptions {
1238
- /**
1239
- * Human-readable name for the workflow
1240
- */
1241
- name?: string;
1242
- /**
1243
- * Description of what this workflow does
1244
- */
1245
- description?: string | null;
1246
- /**
1247
- * Workflow type classification
1248
- * @default 'custom'
1249
- */
1250
- workflowType?: WorkflowType;
1251
- /**
1252
- * ComfyUI API format JSON
1253
- */
1254
- workflowJson?: object | null;
1255
- /**
1256
- * Node ID mappings for dynamic parameter injection
1257
- */
1258
- nodeMapping?: NodeMapping;
1259
- /**
1260
- * Estimated processing time in seconds
1261
- */
1262
- estimatedTime?: number;
1263
- /**
1264
- * Whether this workflow is active/usable
1265
- * @default true
1266
- */
1267
- isActive?: boolean;
1268
- /**
1269
- * ComfyUI models required by this workflow
1270
- */
1271
- requiredModels?: string[];
1272
- /**
1273
- * Tenant ID for multi-tenant isolation
1274
- */
1275
- tenantId?: string | null;
1276
- }
1277
-
1278
- /**
1279
- * Workflow type classification
1280
- */
1281
- export declare type WorkflowType = 'prebake' | 'broadcast' | 'lipsync' | 'postprod' | 'custom';
1282
-
1283
- export { }
1
+ /**
2
+ * @happyvertical/smrt-video
3
+ *
4
+ * Video content management for AI-powered video production.
5
+ *
6
+ * This package provides models for managing characters, video shots,
7
+ * sequences, compositions, performers, scenes, and ComfyUI workflows.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import {
12
+ * Character,
13
+ * VideoShot,
14
+ * VideoShotCharacter,
15
+ * VideoSequence,
16
+ * VideoComposition,
17
+ * Performer,
18
+ * Scene,
19
+ * } from '@happyvertical/smrt-video';
20
+ * ```
21
+ */
22
+ import './__smrt-register__.js';
23
+ export { type BrandingConfig, Character, type CharacterOptions, type CharacterSceneConfig, type CharacterStatus, } from './character.js';
24
+ export { CharacterCollection } from './characters.js';
25
+ export { CompositeJob, type CompositeJobOptions, type CompositeJobStatus, } from './composite-job.js';
26
+ export { Performer, type PerformerDNA, type PerformerOptions, type PerformerStatus, } from './performer.js';
27
+ export { type AnchorPoint, type LightingProfile, Scene, type SceneOptions, type SceneProjection, type SceneSourceType, type SceneStatus, type SceneViewpoint, } from './scene.js';
28
+ export { type RenderStatus, VideoComposition, type VideoCompositionOptions, } from './video-composition.js';
29
+ export { VideoCompositionCollection } from './video-compositions.js';
30
+ export { type TransitionType, VideoSequence, type VideoSequenceOptions, } from './video-sequence.js';
31
+ export { VideoSequenceCollection } from './video-sequences.js';
32
+ export { type VideoMetadata, VideoShot, type VideoShotOptions, type VideoShotStatus, } from './video-shot.js';
33
+ export { VideoShotCharacter, type VideoShotCharacterOptions, type VideoShotCharacterRole, } from './video-shot-character.js';
34
+ export { VideoShotCharacterCollection } from './video-shot-characters.js';
35
+ export { VideoShotCollection } from './video-shots.js';
36
+ export { type NodeMapping, VideoWorkflow, type VideoWorkflowOptions, type WorkflowType, } from './video-workflow.js';
37
+ export { CharacterAsset, type CharacterAssetOptions, type CharacterAssetRole, } from './character-asset.js';
38
+ export { CharacterOwnedAssetCollection } from './character-assets.js';
39
+ export { CharacterOwnedAsset, type CharacterOwnedAssetOptions, } from './character-owned-asset.js';
40
+ export { type MediaBundleFileDescriptor, type MediaBundleGpsTrackPoint, type MediaBundleInspection, type MediaBundleInspectionLike, type MediaBundleNormalizedMetadata, type MediaBundleSupportFileInspection, type MediaSupportFileVisibility, type PersistMediaBundleAssetInput, type PersistMediaBundleAssociationInput, type PersistMediaBundleInspectionOptions, type PersistMediaBundleInspectionResult, type PersistMediaBundleMetadataArtifactInput, persistMediaBundleInspection, type SmrtMediaBundlePersistenceAdapter, } from './media-bundle-persistence.js';
41
+ export { PerformerAsset, type PerformerAssetOptions, type PerformerAssetRole, } from './performer-asset.js';
42
+ export { PerformerOwnedAssetCollection } from './performer-assets.js';
43
+ export { PerformerOwnedAsset, type PerformerOwnedAssetOptions, } from './performer-owned-asset.js';
44
+ export { SceneAsset, type SceneAssetOptions, type SceneAssetRole, } from './scene-asset.js';
45
+ export { SceneOwnedAssetCollection } from './scene-assets.js';
46
+ export { SceneOwnedAsset, type SceneOwnedAssetOptions, } from './scene-owned-asset.js';
47
+ export { VideoCompositionAsset, type VideoCompositionAssetOptions, type VideoCompositionAssetRole, } from './video-composition-asset.js';
48
+ export { VideoSequenceAsset, type VideoSequenceAssetOptions, type VideoSequenceAssetRole, } from './video-sequence-asset.js';
49
+ export { VideoShotAsset, type VideoShotAssetOptions, type VideoShotAssetRole, } from './video-shot-asset.js';
50
+ /** @deprecated Use Character instead */
51
+ /** @deprecated Use CharacterOptions instead */
52
+ /** @deprecated Use CharacterStatus instead */
53
+ export { Character as PersonalityProfile, type CharacterOptions as PersonalityProfileOptions, type CharacterStatus as PersonalityProfileStatus, } from './character.js';
54
+ /** @deprecated Use VideoShot instead */
55
+ /** @deprecated Use VideoShotOptions instead */
56
+ /** @deprecated Use VideoShotStatus instead */
57
+ export { VideoShot as VideoContent, type VideoShotOptions as VideoContentOptions, type VideoShotStatus as VideoContentStatus, } from './video-shot.js';
58
+ //# sourceMappingURL=index.d.ts.map