@marlinjai/studio-mcp 0.1.1 → 0.3.0

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
@@ -33,12 +33,14 @@ declare const DocNodeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
33
33
  "multiview-to-3d": "multiview-to-3d";
34
34
  remesh: "remesh";
35
35
  texture: "texture";
36
+ rig: "rig";
36
37
  "text-to-audio": "text-to-audio";
37
38
  "text-to-speech": "text-to-speech";
38
39
  "speech-to-text": "speech-to-text";
39
40
  "speech-to-speech": "speech-to-speech";
40
41
  "image-to-text": "image-to-text";
41
42
  "image-to-json": "image-to-json";
43
+ "video-to-text": "video-to-text";
42
44
  judge: "judge";
43
45
  "text-generation": "text-generation";
44
46
  upscale: "upscale";
@@ -68,6 +70,13 @@ declare const DocNodeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
68
70
  assetId: z.ZodOptional<z.ZodString>;
69
71
  label: z.ZodOptional<z.ZodString>;
70
72
  collapsed: z.ZodOptional<z.ZodBoolean>;
73
+ }, z.core.$strip>, z.ZodObject<{
74
+ id: z.ZodString;
75
+ kind: z.ZodLiteral<"video-source">;
76
+ videoUrl: z.ZodDefault<z.ZodString>;
77
+ assetId: z.ZodOptional<z.ZodString>;
78
+ label: z.ZodOptional<z.ZodString>;
79
+ collapsed: z.ZodOptional<z.ZodBoolean>;
71
80
  }, z.core.$strip>, z.ZodObject<{
72
81
  id: z.ZodString;
73
82
  kind: z.ZodLiteral<"input">;
@@ -113,12 +122,14 @@ declare const WorkflowDocumentSchema: z.ZodObject<{
113
122
  "multiview-to-3d": "multiview-to-3d";
114
123
  remesh: "remesh";
115
124
  texture: "texture";
125
+ rig: "rig";
116
126
  "text-to-audio": "text-to-audio";
117
127
  "text-to-speech": "text-to-speech";
118
128
  "speech-to-text": "speech-to-text";
119
129
  "speech-to-speech": "speech-to-speech";
120
130
  "image-to-text": "image-to-text";
121
131
  "image-to-json": "image-to-json";
132
+ "video-to-text": "video-to-text";
122
133
  judge: "judge";
123
134
  "text-generation": "text-generation";
124
135
  upscale: "upscale";
@@ -148,6 +159,13 @@ declare const WorkflowDocumentSchema: z.ZodObject<{
148
159
  assetId: z.ZodOptional<z.ZodString>;
149
160
  label: z.ZodOptional<z.ZodString>;
150
161
  collapsed: z.ZodOptional<z.ZodBoolean>;
162
+ }, z.core.$strip>, z.ZodObject<{
163
+ id: z.ZodString;
164
+ kind: z.ZodLiteral<"video-source">;
165
+ videoUrl: z.ZodDefault<z.ZodString>;
166
+ assetId: z.ZodOptional<z.ZodString>;
167
+ label: z.ZodOptional<z.ZodString>;
168
+ collapsed: z.ZodOptional<z.ZodBoolean>;
151
169
  }, z.core.$strip>, z.ZodObject<{
152
170
  id: z.ZodString;
153
171
  kind: z.ZodLiteral<"input">;
@@ -233,12 +251,14 @@ declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
233
251
  "multiview-to-3d": "multiview-to-3d";
234
252
  remesh: "remesh";
235
253
  texture: "texture";
254
+ rig: "rig";
236
255
  "text-to-audio": "text-to-audio";
237
256
  "text-to-speech": "text-to-speech";
238
257
  "speech-to-text": "speech-to-text";
239
258
  "speech-to-speech": "speech-to-speech";
240
259
  "image-to-text": "image-to-text";
241
260
  "image-to-json": "image-to-json";
261
+ "video-to-text": "video-to-text";
242
262
  judge: "judge";
243
263
  "text-generation": "text-generation";
244
264
  upscale: "upscale";
@@ -268,6 +288,13 @@ declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
268
288
  assetId: z.ZodOptional<z.ZodString>;
269
289
  label: z.ZodOptional<z.ZodString>;
270
290
  collapsed: z.ZodOptional<z.ZodBoolean>;
291
+ }, z.core.$strip>, z.ZodObject<{
292
+ id: z.ZodString;
293
+ kind: z.ZodLiteral<"video-source">;
294
+ videoUrl: z.ZodDefault<z.ZodString>;
295
+ assetId: z.ZodOptional<z.ZodString>;
296
+ label: z.ZodOptional<z.ZodString>;
297
+ collapsed: z.ZodOptional<z.ZodBoolean>;
271
298
  }, z.core.$strip>, z.ZodObject<{
272
299
  id: z.ZodString;
273
300
  kind: z.ZodLiteral<"input">;
@@ -317,12 +344,14 @@ declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
317
344
  "multiview-to-3d": "multiview-to-3d";
318
345
  remesh: "remesh";
319
346
  texture: "texture";
347
+ rig: "rig";
320
348
  "text-to-audio": "text-to-audio";
321
349
  "text-to-speech": "text-to-speech";
322
350
  "speech-to-text": "speech-to-text";
323
351
  "speech-to-speech": "speech-to-speech";
324
352
  "image-to-text": "image-to-text";
325
353
  "image-to-json": "image-to-json";
354
+ "video-to-text": "video-to-text";
326
355
  judge: "judge";
327
356
  "text-generation": "text-generation";
328
357
  upscale: "upscale";
@@ -353,6 +382,16 @@ declare const OpSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
353
382
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
354
383
  collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
355
384
  }, z.core.$strict>;
385
+ }, z.core.$strip>, z.ZodObject<{
386
+ type: z.ZodLiteral<"setNodeProps">;
387
+ kind: z.ZodLiteral<"video-source">;
388
+ id: z.ZodString;
389
+ props: z.ZodObject<{
390
+ videoUrl: z.ZodOptional<z.ZodString>;
391
+ assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
392
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
393
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
394
+ }, z.core.$strict>;
356
395
  }, z.core.$strip>, z.ZodObject<{
357
396
  type: z.ZodLiteral<"setNodeProps">;
358
397
  kind: z.ZodLiteral<"input">;
@@ -508,12 +547,14 @@ declare const PatchSchema: z.ZodObject<{
508
547
  "multiview-to-3d": "multiview-to-3d";
509
548
  remesh: "remesh";
510
549
  texture: "texture";
550
+ rig: "rig";
511
551
  "text-to-audio": "text-to-audio";
512
552
  "text-to-speech": "text-to-speech";
513
553
  "speech-to-text": "speech-to-text";
514
554
  "speech-to-speech": "speech-to-speech";
515
555
  "image-to-text": "image-to-text";
516
556
  "image-to-json": "image-to-json";
557
+ "video-to-text": "video-to-text";
517
558
  judge: "judge";
518
559
  "text-generation": "text-generation";
519
560
  upscale: "upscale";
@@ -543,6 +584,13 @@ declare const PatchSchema: z.ZodObject<{
543
584
  assetId: z.ZodOptional<z.ZodString>;
544
585
  label: z.ZodOptional<z.ZodString>;
545
586
  collapsed: z.ZodOptional<z.ZodBoolean>;
587
+ }, z.core.$strip>, z.ZodObject<{
588
+ id: z.ZodString;
589
+ kind: z.ZodLiteral<"video-source">;
590
+ videoUrl: z.ZodDefault<z.ZodString>;
591
+ assetId: z.ZodOptional<z.ZodString>;
592
+ label: z.ZodOptional<z.ZodString>;
593
+ collapsed: z.ZodOptional<z.ZodBoolean>;
546
594
  }, z.core.$strip>, z.ZodObject<{
547
595
  id: z.ZodString;
548
596
  kind: z.ZodLiteral<"input">;
@@ -592,12 +640,14 @@ declare const PatchSchema: z.ZodObject<{
592
640
  "multiview-to-3d": "multiview-to-3d";
593
641
  remesh: "remesh";
594
642
  texture: "texture";
643
+ rig: "rig";
595
644
  "text-to-audio": "text-to-audio";
596
645
  "text-to-speech": "text-to-speech";
597
646
  "speech-to-text": "speech-to-text";
598
647
  "speech-to-speech": "speech-to-speech";
599
648
  "image-to-text": "image-to-text";
600
649
  "image-to-json": "image-to-json";
650
+ "video-to-text": "video-to-text";
601
651
  judge: "judge";
602
652
  "text-generation": "text-generation";
603
653
  upscale: "upscale";
@@ -628,6 +678,16 @@ declare const PatchSchema: z.ZodObject<{
628
678
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
629
679
  collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
630
680
  }, z.core.$strict>;
681
+ }, z.core.$strip>, z.ZodObject<{
682
+ type: z.ZodLiteral<"setNodeProps">;
683
+ kind: z.ZodLiteral<"video-source">;
684
+ id: z.ZodString;
685
+ props: z.ZodObject<{
686
+ videoUrl: z.ZodOptional<z.ZodString>;
687
+ assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
688
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
689
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
690
+ }, z.core.$strict>;
631
691
  }, z.core.$strip>, z.ZodObject<{
632
692
  type: z.ZodLiteral<"setNodeProps">;
633
693
  kind: z.ZodLiteral<"input">;
@@ -798,7 +858,7 @@ interface ApplyError {
798
858
  * Pure: no database, no provider, no DOM.
799
859
  */
800
860
 
801
- type ProjectionIssueCode = "no_task_nodes" | "not_runnable" | "no_model" | "prompt_required" | "source_uploading" | "no_inputs" | "param_unmappable" | "param_type_conflict" | "integrity";
861
+ type ProjectionIssueCode = "no_task_nodes" | "not_runnable" | "no_model" | "prompt_required" | "source_uploading" | "keyframe_positions" | "no_inputs" | "param_unmappable" | "param_type_conflict" | "integrity";
802
862
  interface ProjectionIssue {
803
863
  code: ProjectionIssueCode;
804
864
  /** The node the issue is about, when it is about one. */
@@ -911,6 +971,9 @@ interface NodeRun {
911
971
  mime?: string | null;
912
972
  text?: string;
913
973
  json?: unknown;
974
+ assetId?: string | null;
975
+ /** A name for one of several results, e.g. a rig's animation clip preset. */
976
+ label?: string;
914
977
  }>;
915
978
  costUsd?: number | null;
916
979
  errorMessage?: string | null;
@@ -993,7 +1056,11 @@ interface TenantUsageResponse {
993
1056
  tenantId?: string;
994
1057
  month: string;
995
1058
  plan: string;
1059
+ /** `null` = explicitly unlimited (only an operator-set plan can be). */
996
1060
  capUsd: number | null;
1061
+ /** `default`: no plan of its own, the default cap applies. `row`: an
1062
+ * operator-set plan. Absent from a Studio older than 2026-09-23. */
1063
+ capSource?: 'row' | 'default';
997
1064
  rpm: number | null;
998
1065
  /** Realized + in-flight estimated: the same total the quota guard checks
999
1066
  * against and a 402 body's `usedUsd` reports. */
@@ -1022,7 +1089,7 @@ interface TaskDescriptor {
1022
1089
  inputs: Array<{
1023
1090
  port: string;
1024
1091
  wireable: boolean;
1025
- cardinality: 'one' | 'none';
1092
+ cardinality: 'one' | 'two' | 'many' | 'none';
1026
1093
  binding: {
1027
1094
  key: string;
1028
1095
  path: string;
@@ -1144,6 +1211,25 @@ declare class StudioClient {
1144
1211
  jobId: string;
1145
1212
  kind: string;
1146
1213
  }>;
1214
+ /**
1215
+ * One 3D generation. `/api/generate` routes to its 3D branch on `?force=3d`
1216
+ * (a prompt alone would be classified by its words); the model and its flags
1217
+ * ride under `settings.model3d` and `settings.options3d`, an input image as
1218
+ * `images[0]`.
1219
+ */
1220
+ generate3d(body: {
1221
+ prompt: string;
1222
+ images?: string[];
1223
+ projectId?: string;
1224
+ brandSlug?: string;
1225
+ settings?: {
1226
+ model3d?: string;
1227
+ options3d?: Record<string, unknown>;
1228
+ };
1229
+ }): Promise<{
1230
+ jobId: string;
1231
+ kind: string;
1232
+ }>;
1147
1233
  getJob(jobId: string): Promise<JobResponse>;
1148
1234
  listCharacters(): Promise<{
1149
1235
  characters: CharacterSummary[];
@@ -1160,6 +1246,11 @@ declare class StudioClient {
1160
1246
  descriptorPrompt: string;
1161
1247
  negativePrompt?: string;
1162
1248
  defaultModel?: string;
1249
+ /** The likeness acknowledgement, confirmed by the human the agent acts
1250
+ * for. The literal `true` in the type is the point: a call site with no
1251
+ * confirmation to pass does not compile. The Studio answers 422
1252
+ * `likeness_rights_confirmation_required` without it. */
1253
+ likenessRightsConfirmed: true;
1163
1254
  }): Promise<{
1164
1255
  character: CharacterSummary;
1165
1256
  }>;
@@ -1262,6 +1353,10 @@ declare class StudioClient {
1262
1353
  budgetUsd?: number;
1263
1354
  /** Bypasses the $10 confirmation threshold for this one request. */
1264
1355
  confirm?: boolean;
1356
+ /** The likeness acknowledgement. Required by the Studio when the recipe
1357
+ * creates a character (422 `likeness_rights_confirmation_required`,
1358
+ * before anything is spent); ignored by a recipe that creates none. */
1359
+ likenessRightsConfirmed?: true;
1265
1360
  }): Promise<{
1266
1361
  runId: string;
1267
1362
  status: string;
@@ -1404,7 +1499,7 @@ declare function registerTools(server: McpServer, ctx: ToolContext): void;
1404
1499
  */
1405
1500
 
1406
1501
  declare const SERVER_NAME = "lumitra-studio";
1407
- declare const SERVER_VERSION = "0.1.1";
1502
+ declare const SERVER_VERSION = "0.3.0";
1408
1503
  interface CreateServerOptions {
1409
1504
  config?: StudioConfig;
1410
1505
  env?: NodeJS.ProcessEnv;
@@ -1476,12 +1571,14 @@ declare const studioWorkflowCreate: ToolDef<{
1476
1571
  "multiview-to-3d": "multiview-to-3d";
1477
1572
  remesh: "remesh";
1478
1573
  texture: "texture";
1574
+ rig: "rig";
1479
1575
  "text-to-audio": "text-to-audio";
1480
1576
  "text-to-speech": "text-to-speech";
1481
1577
  "speech-to-text": "speech-to-text";
1482
1578
  "speech-to-speech": "speech-to-speech";
1483
1579
  "image-to-text": "image-to-text";
1484
1580
  "image-to-json": "image-to-json";
1581
+ "video-to-text": "video-to-text";
1485
1582
  judge: "judge";
1486
1583
  "text-generation": "text-generation";
1487
1584
  upscale: "upscale";
@@ -1511,6 +1608,13 @@ declare const studioWorkflowCreate: ToolDef<{
1511
1608
  assetId: z.ZodOptional<z.ZodString>;
1512
1609
  label: z.ZodOptional<z.ZodString>;
1513
1610
  collapsed: z.ZodOptional<z.ZodBoolean>;
1611
+ }, z.core.$strip>, z.ZodObject<{
1612
+ id: z.ZodString;
1613
+ kind: z.ZodLiteral<"video-source">;
1614
+ videoUrl: z.ZodDefault<z.ZodString>;
1615
+ assetId: z.ZodOptional<z.ZodString>;
1616
+ label: z.ZodOptional<z.ZodString>;
1617
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1514
1618
  }, z.core.$strip>, z.ZodObject<{
1515
1619
  id: z.ZodString;
1516
1620
  kind: z.ZodLiteral<"input">;
@@ -1560,12 +1664,14 @@ declare const studioWorkflowCreate: ToolDef<{
1560
1664
  "multiview-to-3d": "multiview-to-3d";
1561
1665
  remesh: "remesh";
1562
1666
  texture: "texture";
1667
+ rig: "rig";
1563
1668
  "text-to-audio": "text-to-audio";
1564
1669
  "text-to-speech": "text-to-speech";
1565
1670
  "speech-to-text": "speech-to-text";
1566
1671
  "speech-to-speech": "speech-to-speech";
1567
1672
  "image-to-text": "image-to-text";
1568
1673
  "image-to-json": "image-to-json";
1674
+ "video-to-text": "video-to-text";
1569
1675
  judge: "judge";
1570
1676
  "text-generation": "text-generation";
1571
1677
  upscale: "upscale";
@@ -1596,6 +1702,16 @@ declare const studioWorkflowCreate: ToolDef<{
1596
1702
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1597
1703
  collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1598
1704
  }, z.core.$strict>;
1705
+ }, z.core.$strip>, z.ZodObject<{
1706
+ type: z.ZodLiteral<"setNodeProps">;
1707
+ kind: z.ZodLiteral<"video-source">;
1708
+ id: z.ZodString;
1709
+ props: z.ZodObject<{
1710
+ videoUrl: z.ZodOptional<z.ZodString>;
1711
+ assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1712
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1713
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1714
+ }, z.core.$strict>;
1599
1715
  }, z.core.$strip>, z.ZodObject<{
1600
1716
  type: z.ZodLiteral<"setNodeProps">;
1601
1717
  kind: z.ZodLiteral<"input">;
@@ -1753,12 +1869,14 @@ declare const studioWorkflowApply: ToolDef<{
1753
1869
  "multiview-to-3d": "multiview-to-3d";
1754
1870
  remesh: "remesh";
1755
1871
  texture: "texture";
1872
+ rig: "rig";
1756
1873
  "text-to-audio": "text-to-audio";
1757
1874
  "text-to-speech": "text-to-speech";
1758
1875
  "speech-to-text": "speech-to-text";
1759
1876
  "speech-to-speech": "speech-to-speech";
1760
1877
  "image-to-text": "image-to-text";
1761
1878
  "image-to-json": "image-to-json";
1879
+ "video-to-text": "video-to-text";
1762
1880
  judge: "judge";
1763
1881
  "text-generation": "text-generation";
1764
1882
  upscale: "upscale";
@@ -1788,6 +1906,13 @@ declare const studioWorkflowApply: ToolDef<{
1788
1906
  assetId: z.ZodOptional<z.ZodString>;
1789
1907
  label: z.ZodOptional<z.ZodString>;
1790
1908
  collapsed: z.ZodOptional<z.ZodBoolean>;
1909
+ }, z.core.$strip>, z.ZodObject<{
1910
+ id: z.ZodString;
1911
+ kind: z.ZodLiteral<"video-source">;
1912
+ videoUrl: z.ZodDefault<z.ZodString>;
1913
+ assetId: z.ZodOptional<z.ZodString>;
1914
+ label: z.ZodOptional<z.ZodString>;
1915
+ collapsed: z.ZodOptional<z.ZodBoolean>;
1791
1916
  }, z.core.$strip>, z.ZodObject<{
1792
1917
  id: z.ZodString;
1793
1918
  kind: z.ZodLiteral<"input">;
@@ -1837,12 +1962,14 @@ declare const studioWorkflowApply: ToolDef<{
1837
1962
  "multiview-to-3d": "multiview-to-3d";
1838
1963
  remesh: "remesh";
1839
1964
  texture: "texture";
1965
+ rig: "rig";
1840
1966
  "text-to-audio": "text-to-audio";
1841
1967
  "text-to-speech": "text-to-speech";
1842
1968
  "speech-to-text": "speech-to-text";
1843
1969
  "speech-to-speech": "speech-to-speech";
1844
1970
  "image-to-text": "image-to-text";
1845
1971
  "image-to-json": "image-to-json";
1972
+ "video-to-text": "video-to-text";
1846
1973
  judge: "judge";
1847
1974
  "text-generation": "text-generation";
1848
1975
  upscale: "upscale";
@@ -1873,6 +2000,16 @@ declare const studioWorkflowApply: ToolDef<{
1873
2000
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1874
2001
  collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
1875
2002
  }, z.core.$strict>;
2003
+ }, z.core.$strip>, z.ZodObject<{
2004
+ type: z.ZodLiteral<"setNodeProps">;
2005
+ kind: z.ZodLiteral<"video-source">;
2006
+ id: z.ZodString;
2007
+ props: z.ZodObject<{
2008
+ videoUrl: z.ZodOptional<z.ZodString>;
2009
+ assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2010
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2011
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
2012
+ }, z.core.$strict>;
1876
2013
  }, z.core.$strip>, z.ZodObject<{
1877
2014
  type: z.ZodLiteral<"setNodeProps">;
1878
2015
  kind: z.ZodLiteral<"input">;
@@ -2029,12 +2166,14 @@ declare const studioWorkflowValidate: ToolDef<{
2029
2166
  "multiview-to-3d": "multiview-to-3d";
2030
2167
  remesh: "remesh";
2031
2168
  texture: "texture";
2169
+ rig: "rig";
2032
2170
  "text-to-audio": "text-to-audio";
2033
2171
  "text-to-speech": "text-to-speech";
2034
2172
  "speech-to-text": "speech-to-text";
2035
2173
  "speech-to-speech": "speech-to-speech";
2036
2174
  "image-to-text": "image-to-text";
2037
2175
  "image-to-json": "image-to-json";
2176
+ "video-to-text": "video-to-text";
2038
2177
  judge: "judge";
2039
2178
  "text-generation": "text-generation";
2040
2179
  upscale: "upscale";
@@ -2064,6 +2203,13 @@ declare const studioWorkflowValidate: ToolDef<{
2064
2203
  assetId: z.ZodOptional<z.ZodString>;
2065
2204
  label: z.ZodOptional<z.ZodString>;
2066
2205
  collapsed: z.ZodOptional<z.ZodBoolean>;
2206
+ }, z.core.$strip>, z.ZodObject<{
2207
+ id: z.ZodString;
2208
+ kind: z.ZodLiteral<"video-source">;
2209
+ videoUrl: z.ZodDefault<z.ZodString>;
2210
+ assetId: z.ZodOptional<z.ZodString>;
2211
+ label: z.ZodOptional<z.ZodString>;
2212
+ collapsed: z.ZodOptional<z.ZodBoolean>;
2067
2213
  }, z.core.$strip>, z.ZodObject<{
2068
2214
  id: z.ZodString;
2069
2215
  kind: z.ZodLiteral<"input">;
@@ -2150,12 +2296,14 @@ declare const studioWorkflowValidate: ToolDef<{
2150
2296
  "multiview-to-3d": "multiview-to-3d";
2151
2297
  remesh: "remesh";
2152
2298
  texture: "texture";
2299
+ rig: "rig";
2153
2300
  "text-to-audio": "text-to-audio";
2154
2301
  "text-to-speech": "text-to-speech";
2155
2302
  "speech-to-text": "speech-to-text";
2156
2303
  "speech-to-speech": "speech-to-speech";
2157
2304
  "image-to-text": "image-to-text";
2158
2305
  "image-to-json": "image-to-json";
2306
+ "video-to-text": "video-to-text";
2159
2307
  judge: "judge";
2160
2308
  "text-generation": "text-generation";
2161
2309
  upscale: "upscale";
@@ -2185,6 +2333,13 @@ declare const studioWorkflowValidate: ToolDef<{
2185
2333
  assetId: z.ZodOptional<z.ZodString>;
2186
2334
  label: z.ZodOptional<z.ZodString>;
2187
2335
  collapsed: z.ZodOptional<z.ZodBoolean>;
2336
+ }, z.core.$strip>, z.ZodObject<{
2337
+ id: z.ZodString;
2338
+ kind: z.ZodLiteral<"video-source">;
2339
+ videoUrl: z.ZodDefault<z.ZodString>;
2340
+ assetId: z.ZodOptional<z.ZodString>;
2341
+ label: z.ZodOptional<z.ZodString>;
2342
+ collapsed: z.ZodOptional<z.ZodBoolean>;
2188
2343
  }, z.core.$strip>, z.ZodObject<{
2189
2344
  id: z.ZodString;
2190
2345
  kind: z.ZodLiteral<"input">;
@@ -2234,12 +2389,14 @@ declare const studioWorkflowValidate: ToolDef<{
2234
2389
  "multiview-to-3d": "multiview-to-3d";
2235
2390
  remesh: "remesh";
2236
2391
  texture: "texture";
2392
+ rig: "rig";
2237
2393
  "text-to-audio": "text-to-audio";
2238
2394
  "text-to-speech": "text-to-speech";
2239
2395
  "speech-to-text": "speech-to-text";
2240
2396
  "speech-to-speech": "speech-to-speech";
2241
2397
  "image-to-text": "image-to-text";
2242
2398
  "image-to-json": "image-to-json";
2399
+ "video-to-text": "video-to-text";
2243
2400
  judge: "judge";
2244
2401
  "text-generation": "text-generation";
2245
2402
  upscale: "upscale";
@@ -2270,6 +2427,16 @@ declare const studioWorkflowValidate: ToolDef<{
2270
2427
  label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2271
2428
  collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
2272
2429
  }, z.core.$strict>;
2430
+ }, z.core.$strip>, z.ZodObject<{
2431
+ type: z.ZodLiteral<"setNodeProps">;
2432
+ kind: z.ZodLiteral<"video-source">;
2433
+ id: z.ZodString;
2434
+ props: z.ZodObject<{
2435
+ videoUrl: z.ZodOptional<z.ZodString>;
2436
+ assetId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2437
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2438
+ collapsed: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
2439
+ }, z.core.$strict>;
2273
2440
  }, z.core.$strip>, z.ZodObject<{
2274
2441
  type: z.ZodLiteral<"setNodeProps">;
2275
2442
  kind: z.ZodLiteral<"input">;
@@ -2439,6 +2606,7 @@ interface NodeSummary {
2439
2606
  promptLength?: number;
2440
2607
  /** Image-source nodes: the url clipped; empty means still uploading. */
2441
2608
  imageUrl?: string;
2609
+ videoUrl?: string;
2442
2610
  /** Input nodes (declared run parameters). */
2443
2611
  name?: string;
2444
2612
  type?: string;
@@ -2597,14 +2765,60 @@ declare function characterSheetDefinition(overrides?: {
2597
2765
  declare const DEFAULT_SWAP_EDIT_MODEL = "fal/nano-banana-2-edit";
2598
2766
  /** Single start-frame animation. */
2599
2767
  declare const DEFAULT_SWAP_VIDEO_MODEL = "fal/seedance-pro-image-to-video";
2600
- declare const DEFAULT_SWAP_PROMPT = "Replace the person in the first image with the person from the second image. Keep the pose, framing, camera angle, clothing fit, lighting, background, and every other pixel of the scene identical. Match the face, hair, and body of the second image exactly. Photorealistic, no artifacts.";
2601
- declare const DEFAULT_MOTION_PROMPT = "Natural, subtle motion that continues the scene: gentle camera movement, realistic body motion, consistent lighting. Keep the person identical to the still.";
2768
+ /**
2769
+ * How much of the person a swap replaces. The rest of the shot always comes
2770
+ * from the footage: pose, expression, gaze, hands, clothing, lighting, focus,
2771
+ * framing and background.
2772
+ *
2773
+ * - `identity` (the default): face, head and hair come from the character; the
2774
+ * footage keeps its body. The smallest change, so the fewest things can break.
2775
+ * - `full_body`: the character's body proportions too. The silhouette changes,
2776
+ * so whatever the old body covered has to be reconstructed and every contact
2777
+ * point (a hand on a tool, a shoulder behind a door) re-derived; say so before
2778
+ * spending on it.
2779
+ *
2780
+ * Identity is the default because an unspecified scope should preserve the
2781
+ * source, never quietly widen the edit.
2782
+ */
2783
+ declare const SWAP_SCOPES: readonly ["identity", "full_body"];
2784
+ type SwapScope = (typeof SWAP_SCOPES)[number];
2785
+ interface SwapPromptOptions {
2786
+ scope?: SwapScope;
2787
+ /**
2788
+ * Shot-specific constraints most likely to fail here, as concrete
2789
+ * relationships from an analysis of this shot, e.g. "keep the open door in
2790
+ * front of his body". Each becomes its own sentence.
2791
+ */
2792
+ preserve?: string[];
2793
+ }
2794
+ /**
2795
+ * The still-swap edit prompt for a declared scope.
2796
+ *
2797
+ * Deliberately short and literal. It names what changes, which image supplies
2798
+ * it, and what the first image keeps. It carries no realism suffix
2799
+ * ("photorealistic, no artifacts") and no promise that every pixel stays
2800
+ * identical: an edit model cannot guarantee either, and the suffix is how a
2801
+ * deliberately soft, defocused subject came back tack-sharp on real footage.
2802
+ * Untouched pixels are kept by compositing after the edit, not by asking.
2803
+ */
2804
+ declare function composeSwapPrompt(options?: SwapPromptOptions): string;
2805
+ /** The identity-scope prompt, the one a swap gets when nothing is declared. */
2806
+ declare const DEFAULT_SWAP_PROMPT: string;
2807
+ /**
2808
+ * The motion prompt when none is given. It asks for NO camera move: in a
2809
+ * replacement the camera belongs to the original footage, and a model told to
2810
+ * add "gentle camera movement" invents one the edit then has to fight.
2811
+ */
2812
+ declare const DEFAULT_MOTION_PROMPT = "Continue the scene as photographed: keep the camera position and framing of the still, move the person naturally and continuously, and keep the lighting consistent. Add no camera movement.";
2602
2813
  interface CharacterSwapInput {
2603
2814
  sceneFrameUrl: string;
2604
2815
  characterImageUrl: string;
2605
2816
  /** A second, already-swapped keyframe for the END of the clip (Kling start+end). */
2606
2817
  endFrameUrl?: string;
2818
+ /** Replaces the composed prompt entirely; `scope` and `preserve` are then ignored. */
2607
2819
  swapPrompt?: string;
2820
+ scope?: SwapScope;
2821
+ preserve?: string[];
2608
2822
  motionPrompt?: string;
2609
2823
  editModel?: string;
2610
2824
  /** Explicit video model; when absent, Seedance for one frame, Kling when endFrameUrl is set. */
@@ -2645,4 +2859,4 @@ declare function parseArgs(argv: string[]): CliArgs;
2645
2859
  declare function createHttpHandler(): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
2646
2860
  declare function main(argv?: string[]): Promise<void>;
2647
2861
 
2648
- export { type AllTenantsUsageResponse, type Binding, CHARACTER_SHEET_DEFINITION, CHARACTER_SHEET_NODES, type CharacterReference, type CharacterSummary, type CharacterSwapInput, ConfigError, ContractError, type CreateServerOptions, DEFAULT_BASE_URL, DEFAULT_MOTION_PROMPT, DEFAULT_SWAP_EDIT_MODEL, DEFAULT_SWAP_PROMPT, DEFAULT_SWAP_VIDEO_MODEL, DEFAULT_TIMEOUT_MS, type DocumentSummary, type FetchLike, type JobResponse, type JobStatus, type JudgeCandidate, MINT_REFERENCE_CATEGORIES, type NodeResultResponse, type NodeRun, type NodeStatus, type NodeSummary, type NodeTypesResponse, type PollOptions, PollTimeoutError, type ProjectSummary, type Projection, type RemovedNode, type RunResponse, type RunStartResponse, type RunStatus, SERVER_NAME, SERVER_VERSION, SUMMARY_TEXT_CHARS, type SpendLedger, StudioApiError, StudioClient, type StudioClientOptions, type StudioConfig, type StudioMcp, type SummaryMeta, TOOLS, TOOL_NAMES, type TaskDescriptor, type TenantSpendSummary, type TenantUsageResponse, type ToolContext, type ToolDef, ToolInputError, type ToolResult, type TurnaroundView, type UploadFile, type UsageByModel, type UsageResponse, WORKFLOW_TOOLS, type WorkflowApplyResponse, type WorkflowCreateResponse, type WorkflowDefinition, type WorkflowDocumentResponse, type WorkflowNode, type WorkflowValidateResponse, affectedNodes, buildCharacterSheetParams, buildCharacterSwapDefinition, categoryForNode, characterSheetDefinition, createHttpHandler, createStudioMcpServer, extensionForMime, filenameFromUrl, invokeTool, main, mimeForFilename, parseArgs, parseDocument, parseOps, pollUntil, projectionOf, redactSecret, registerTools, resolveConfig, seedFacePrompt, studioWorkflowApply, studioWorkflowCreate, studioWorkflowDescribe, studioWorkflowGet, studioWorkflowScreenshot, studioWorkflowValidate, summarizeDocument, summarizeNode, touchedNodeIds, turnaroundViewPrompt, waitForJob, waitForRun };
2862
+ export { type AllTenantsUsageResponse, type Binding, CHARACTER_SHEET_DEFINITION, CHARACTER_SHEET_NODES, type CharacterReference, type CharacterSummary, type CharacterSwapInput, ConfigError, ContractError, type CreateServerOptions, DEFAULT_BASE_URL, DEFAULT_MOTION_PROMPT, DEFAULT_SWAP_EDIT_MODEL, DEFAULT_SWAP_PROMPT, DEFAULT_SWAP_VIDEO_MODEL, DEFAULT_TIMEOUT_MS, type DocumentSummary, type FetchLike, type JobResponse, type JobStatus, type JudgeCandidate, MINT_REFERENCE_CATEGORIES, type NodeResultResponse, type NodeRun, type NodeStatus, type NodeSummary, type NodeTypesResponse, type PollOptions, PollTimeoutError, type ProjectSummary, type Projection, type RemovedNode, type RunResponse, type RunStartResponse, type RunStatus, SERVER_NAME, SERVER_VERSION, SUMMARY_TEXT_CHARS, SWAP_SCOPES, type SpendLedger, StudioApiError, StudioClient, type StudioClientOptions, type StudioConfig, type StudioMcp, type SummaryMeta, type SwapPromptOptions, type SwapScope, TOOLS, TOOL_NAMES, type TaskDescriptor, type TenantSpendSummary, type TenantUsageResponse, type ToolContext, type ToolDef, ToolInputError, type ToolResult, type TurnaroundView, type UploadFile, type UsageByModel, type UsageResponse, WORKFLOW_TOOLS, type WorkflowApplyResponse, type WorkflowCreateResponse, type WorkflowDefinition, type WorkflowDocumentResponse, type WorkflowNode, type WorkflowValidateResponse, affectedNodes, buildCharacterSheetParams, buildCharacterSwapDefinition, categoryForNode, characterSheetDefinition, composeSwapPrompt, createHttpHandler, createStudioMcpServer, extensionForMime, filenameFromUrl, invokeTool, main, mimeForFilename, parseArgs, parseDocument, parseOps, pollUntil, projectionOf, redactSecret, registerTools, resolveConfig, seedFacePrompt, studioWorkflowApply, studioWorkflowCreate, studioWorkflowDescribe, studioWorkflowGet, studioWorkflowScreenshot, studioWorkflowValidate, summarizeDocument, summarizeNode, touchedNodeIds, turnaroundViewPrompt, waitForJob, waitForRun };