@melius-ai/cli 0.10.1 → 0.12.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/README.md +15 -0
- package/THIRD-PARTY-NOTICES.md +93 -0
- package/dist/bin/mel.js +1 -1
- package/dist/{chunk-NNJE574V.js → chunk-2PWVQ3PC.js} +341 -40
- package/dist/src/index.js +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -228,6 +228,21 @@ mel template apply <canvasId> <templateId> \
|
|
|
228
228
|
mel bulk-run start <canvasId> --node-ids <groupId> --wait
|
|
229
229
|
```
|
|
230
230
|
|
|
231
|
+
Each `--inputs` entry targets an input `portId` from `mel template list`. Three kinds are supported (`mediaType` is `image`, `video`, `audio`, or `pdf`):
|
|
232
|
+
|
|
233
|
+
| Kind | Shape | Use for |
|
|
234
|
+
| ---------- | --------------------------------- | ------------------------------------------------------------ |
|
|
235
|
+
| `text` | `{kind,portId,text}` | A text prompt/value |
|
|
236
|
+
| `asset` | `{kind,portId,assetId,mediaType}` | A stored library asset (from `mel asset search`) |
|
|
237
|
+
| `assetUrl` | `{kind,portId,url,mediaType}` | A remote media URL — fetched and stored server-side on apply |
|
|
238
|
+
|
|
239
|
+
`assetUrl` lets you wire an image already hosted on your own site (e.g. a product image) without a separate upload round-trip:
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
mel template apply <canvasId> <templateId> \
|
|
243
|
+
--inputs '[{"kind":"assetUrl","portId":"<portId>","url":"https://example.com/image.jpg","mediaType":"image"}]'
|
|
244
|
+
```
|
|
245
|
+
|
|
231
246
|
### Models
|
|
232
247
|
|
|
233
248
|
| Command | Description |
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
`@melius-ai/cli` is distributed as a bundle: the source of the packages below
|
|
4
|
+
is compiled into `dist` and redistributed inside the npm tarball. Their
|
|
5
|
+
licenses and copyright notices are reproduced here as those licenses require.
|
|
6
|
+
|
|
7
|
+
Generated by `pnpm --filter @melius-ai/cli run notices` from the build output —
|
|
8
|
+
do not edit by hand. `test/bundle-licenses.test.ts` fails when it drifts.
|
|
9
|
+
|
|
10
|
+
## @ts-rest/core@3.52.1
|
|
11
|
+
|
|
12
|
+
License: MIT
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
MIT License
|
|
16
|
+
|
|
17
|
+
Copyright (c) 2022 Oliver Butler
|
|
18
|
+
|
|
19
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
20
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
21
|
+
in the Software without restriction, including without limitation the rights
|
|
22
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
23
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
24
|
+
furnished to do so, subject to the following conditions:
|
|
25
|
+
|
|
26
|
+
The above copyright notice and this permission notice shall be included in all
|
|
27
|
+
copies or substantial portions of the Software.
|
|
28
|
+
|
|
29
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
30
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
31
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
32
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
33
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
34
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
35
|
+
SOFTWARE.
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## commander@13.1.0
|
|
39
|
+
|
|
40
|
+
License: MIT
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
(The MIT License)
|
|
44
|
+
|
|
45
|
+
Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
|
|
46
|
+
|
|
47
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
48
|
+
a copy of this software and associated documentation files (the
|
|
49
|
+
'Software'), to deal in the Software without restriction, including
|
|
50
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
51
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
52
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
53
|
+
the following conditions:
|
|
54
|
+
|
|
55
|
+
The above copyright notice and this permission notice shall be
|
|
56
|
+
included in all copies or substantial portions of the Software.
|
|
57
|
+
|
|
58
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
59
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
60
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
61
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
62
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
63
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
64
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## zod@3.25.76
|
|
68
|
+
|
|
69
|
+
License: MIT
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
MIT License
|
|
73
|
+
|
|
74
|
+
Copyright (c) 2025 Colin McDonnell
|
|
75
|
+
|
|
76
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
77
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
78
|
+
in the Software without restriction, including without limitation the rights
|
|
79
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
80
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
81
|
+
furnished to do so, subject to the following conditions:
|
|
82
|
+
|
|
83
|
+
The above copyright notice and this permission notice shall be included in all
|
|
84
|
+
copies or substantial portions of the Software.
|
|
85
|
+
|
|
86
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
87
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
88
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
89
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
90
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
91
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
92
|
+
SOFTWARE.
|
|
93
|
+
```
|
package/dist/bin/mel.js
CHANGED
|
@@ -7740,6 +7740,7 @@ var MAX_VARIATIONS = 10;
|
|
|
7740
7740
|
|
|
7741
7741
|
// ../api-contract/src/common.ts
|
|
7742
7742
|
var MessageResponseSchema = external_exports.object({ message: external_exports.string() });
|
|
7743
|
+
var ShareVisibilitySchema = external_exports.enum(["team", "anyone"]);
|
|
7743
7744
|
var CompletedPartSchema = external_exports.object({
|
|
7744
7745
|
partNumber: external_exports.number().int().positive(),
|
|
7745
7746
|
etag: external_exports.string()
|
|
@@ -7912,7 +7913,7 @@ var FileTypeSchema = external_exports.enum([
|
|
|
7912
7913
|
"pdf",
|
|
7913
7914
|
"text"
|
|
7914
7915
|
]);
|
|
7915
|
-
var AssetShareModeSchema =
|
|
7916
|
+
var AssetShareModeSchema = ShareVisibilitySchema;
|
|
7916
7917
|
var TAG_COLOR_PALETTE = [
|
|
7917
7918
|
"hsl(189deg, 72%, 46%)",
|
|
7918
7919
|
"hsl(280deg, 60%, 50%)",
|
|
@@ -7979,7 +7980,14 @@ var FileCardSchema = external_exports.object({
|
|
|
7979
7980
|
var FileGenerationSchema = external_exports.object({
|
|
7980
7981
|
prompt: external_exports.string().nullable(),
|
|
7981
7982
|
modelDisplayName: external_exports.string().nullable(),
|
|
7982
|
-
aspectRatio: external_exports.string().nullable()
|
|
7983
|
+
aspectRatio: external_exports.string().nullable(),
|
|
7984
|
+
/** The node tool that produced the asset (e.g. `video-background-removal`),
|
|
7985
|
+
* when it came from a tool run rather than a plain model generation. The
|
|
7986
|
+
* viewer labels the row "Tool used" instead of "Model" when set.
|
|
7987
|
+
*
|
|
7988
|
+
* Optional so a client that ships ahead of the server keeps validating —
|
|
7989
|
+
* absent reads the same as "not a tool run". */
|
|
7990
|
+
sourceToolName: external_exports.string().nullable().optional()
|
|
7983
7991
|
});
|
|
7984
7992
|
var FileDetailSchema = FileCardSchema.extend({
|
|
7985
7993
|
width: external_exports.number().int().nullable(),
|
|
@@ -8216,6 +8224,18 @@ var CompleteFilesUploadBodySchema = external_exports.object({
|
|
|
8216
8224
|
var CompleteFilesUploadResponseSchema = external_exports.object({
|
|
8217
8225
|
file: FileCardSchema
|
|
8218
8226
|
});
|
|
8227
|
+
var ImportUploadcareFileBodySchema = external_exports.object({
|
|
8228
|
+
uuid: external_exports.string().uuid(),
|
|
8229
|
+
folderId: external_exports.string().uuid().nullable().optional()
|
|
8230
|
+
});
|
|
8231
|
+
var ImportUploadcareFileResponseSchema = external_exports.object({
|
|
8232
|
+
file: FileCardSchema
|
|
8233
|
+
});
|
|
8234
|
+
var UploadcareUploadSignatureResponseSchema = external_exports.object({
|
|
8235
|
+
signature: external_exports.string(),
|
|
8236
|
+
/** Unix seconds, as a string — the exact bytes that were signed. */
|
|
8237
|
+
expire: external_exports.string()
|
|
8238
|
+
});
|
|
8219
8239
|
var EmbeddingStorageUsageResponseSchema = external_exports.object({
|
|
8220
8240
|
usedBytes: external_exports.number(),
|
|
8221
8241
|
limitBytes: external_exports.number()
|
|
@@ -8601,6 +8621,28 @@ var filesContract = c2.router({
|
|
|
8601
8621
|
403: ErrorBodySchema
|
|
8602
8622
|
},
|
|
8603
8623
|
summary: "Complete a Files upload"
|
|
8624
|
+
},
|
|
8625
|
+
createUploadcareUploadSignature: {
|
|
8626
|
+
method: "POST",
|
|
8627
|
+
path: "/files/import/uploadcare/signature",
|
|
8628
|
+
body: external_exports.object({}),
|
|
8629
|
+
responses: {
|
|
8630
|
+
200: UploadcareUploadSignatureResponseSchema,
|
|
8631
|
+
403: ErrorBodySchema
|
|
8632
|
+
},
|
|
8633
|
+
summary: "Mint short-lived credentials for a signed Uploadcare upload"
|
|
8634
|
+
},
|
|
8635
|
+
importUploadcareFile: {
|
|
8636
|
+
method: "POST",
|
|
8637
|
+
path: "/files/import/uploadcare",
|
|
8638
|
+
body: ImportUploadcareFileBodySchema,
|
|
8639
|
+
responses: {
|
|
8640
|
+
200: ImportUploadcareFileResponseSchema,
|
|
8641
|
+
400: ErrorBodySchema,
|
|
8642
|
+
403: ErrorBodySchema,
|
|
8643
|
+
404: ErrorBodySchema
|
|
8644
|
+
},
|
|
8645
|
+
summary: "Import a file picked from a cloud source through Uploadcare"
|
|
8604
8646
|
}
|
|
8605
8647
|
});
|
|
8606
8648
|
|
|
@@ -8613,7 +8655,12 @@ var AgentMessageFeedbackTypeSchema = external_exports.enum(["positive", "negativ
|
|
|
8613
8655
|
var AgentClarificationQuestionSchema = external_exports.object({
|
|
8614
8656
|
id: external_exports.string().min(1),
|
|
8615
8657
|
prompt: external_exports.string().min(1),
|
|
8616
|
-
|
|
8658
|
+
// Tolerates an explicit null and normalizes it to absent: models write
|
|
8659
|
+
// `"suggestedAnswers": null` for no-suggestion questions, and a
|
|
8660
|
+
// present-but-undefined key survives some JSON serializers as null in
|
|
8661
|
+
// persisted metadata. Rejecting it here silently dropped the whole
|
|
8662
|
+
// clarification form for the turn.
|
|
8663
|
+
suggestedAnswers: external_exports.array(external_exports.string().min(1)).min(1).max(3).nullish().transform((value) => value ?? void 0),
|
|
8617
8664
|
/**
|
|
8618
8665
|
* Marks the Slack project/canvas routing question so the Slack renderer
|
|
8619
8666
|
* can offer a "Last used canvas" shortcut + "Select other" instead of a
|
|
@@ -8873,7 +8920,22 @@ var agentContract = c3.router({
|
|
|
8873
8920
|
enabledSources: external_exports.array(AgentMessageSourceSchema).optional(),
|
|
8874
8921
|
// Per-turn override for the persisted profile setting.
|
|
8875
8922
|
// Omitted = use the user's saved preference.
|
|
8876
|
-
agentAutoRunOverride: external_exports.boolean().optional()
|
|
8923
|
+
agentAutoRunOverride: external_exports.boolean().optional(),
|
|
8924
|
+
// Plan mode (flag `agent-plan-mode`): run this turn on the
|
|
8925
|
+
// execution model with high reasoning and a read-only toolset
|
|
8926
|
+
// so the agent drafts or refines a plan instead of executing.
|
|
8927
|
+
// Ignored (normal turn) when the flag is off for the caller.
|
|
8928
|
+
planMode: external_exports.boolean().optional(),
|
|
8929
|
+
// First planning send after the member scrapped a plan: the
|
|
8930
|
+
// server skips the current-plan injection so the planning
|
|
8931
|
+
// model drafts fresh instead of reviving the dead plan.
|
|
8932
|
+
// Ignored when `planMode` is not set.
|
|
8933
|
+
discardPlan: external_exports.boolean().optional(),
|
|
8934
|
+
// Execution handoff from plan mode: the server injects the
|
|
8935
|
+
// session's latest agreed plan into this (normal-mode) turn
|
|
8936
|
+
// so the execution model implements exactly what was
|
|
8937
|
+
// approved. Ignored when the flag is off or no plan exists.
|
|
8938
|
+
implementPlan: external_exports.boolean().optional()
|
|
8877
8939
|
}).refine(
|
|
8878
8940
|
(b) => b.content.trim().length > 0 || (b.imageUrls?.length ?? 0) > 0 || (b.images?.length ?? 0) > 0 || (b.videoUrls?.length ?? 0) > 0 || (b.videos?.length ?? 0) > 0 || (b.documents?.length ?? 0) > 0,
|
|
8879
8941
|
{
|
|
@@ -9299,6 +9361,29 @@ var audioContract = c5.router({
|
|
|
9299
9361
|
}
|
|
9300
9362
|
});
|
|
9301
9363
|
|
|
9364
|
+
// ../api-contract/src/heygen.ts
|
|
9365
|
+
var HeygenAvatarSettingsSchema = external_exports.object({
|
|
9366
|
+
backgroundColor: external_exports.string().regex(/^#[0-9a-f]{6}$/i, "Background color must be a hex color").optional(),
|
|
9367
|
+
removeBackground: external_exports.boolean().optional(),
|
|
9368
|
+
fit: external_exports.enum(["cover", "contain"]).optional(),
|
|
9369
|
+
caption: external_exports.boolean().optional()
|
|
9370
|
+
});
|
|
9371
|
+
var HeygenAvatarVariantSchema = external_exports.object({
|
|
9372
|
+
avatar: external_exports.string().describe(
|
|
9373
|
+
"Raw avatar id. Pass this exact value as modelConfig.heygenAvatar"
|
|
9374
|
+
),
|
|
9375
|
+
description: external_exports.string().describe("Pose, setting, and framing, e.g. 'Standing office front'")
|
|
9376
|
+
});
|
|
9377
|
+
var HeygenAvatarPersonSchema = external_exports.object({
|
|
9378
|
+
name: external_exports.string().describe("The presenter's first name, e.g. 'Abigail'"),
|
|
9379
|
+
variants: external_exports.array(HeygenAvatarVariantSchema).describe("Every pose available for this presenter")
|
|
9380
|
+
});
|
|
9381
|
+
var HeygenAvatarCatalogSchema = external_exports.object({
|
|
9382
|
+
people: external_exports.array(HeygenAvatarPersonSchema),
|
|
9383
|
+
totalPeople: external_exports.number(),
|
|
9384
|
+
totalAvatars: external_exports.number()
|
|
9385
|
+
});
|
|
9386
|
+
|
|
9302
9387
|
// ../api-contract/src/auto-model-proxy.ts
|
|
9303
9388
|
var AUTO_MODEL_REGISTRY = [
|
|
9304
9389
|
// ── Video ───────────────────────────────────────────────────────────
|
|
@@ -9414,6 +9499,12 @@ var AUTO_MODEL_REGISTRY = [
|
|
|
9414
9499
|
model: "elevenlabs-sfx",
|
|
9415
9500
|
variant: "text-to-sfx"
|
|
9416
9501
|
},
|
|
9502
|
+
{
|
|
9503
|
+
nodeType: "audio",
|
|
9504
|
+
inputPattern: "video-to-sfx",
|
|
9505
|
+
model: "sonilo-video-sfx",
|
|
9506
|
+
variant: "video-to-sfx"
|
|
9507
|
+
},
|
|
9417
9508
|
{
|
|
9418
9509
|
nodeType: "audio",
|
|
9419
9510
|
inputPattern: "text-to-music",
|
|
@@ -9656,6 +9747,7 @@ var GENERATION_MODES = [
|
|
|
9656
9747
|
"text-to-speech",
|
|
9657
9748
|
"audio-to-audio",
|
|
9658
9749
|
"text-to-sfx",
|
|
9750
|
+
"video-to-sfx",
|
|
9659
9751
|
"text-to-music",
|
|
9660
9752
|
"speech-to-text",
|
|
9661
9753
|
"voice-isolator"
|
|
@@ -10445,6 +10537,8 @@ var ModelConfigSchema = external_exports.object({
|
|
|
10445
10537
|
tier: external_exports.string().nullable().optional(),
|
|
10446
10538
|
/** HeyGen Avatar V only: the Runware avatar id for this node. */
|
|
10447
10539
|
heygenAvatar: external_exports.string().optional(),
|
|
10540
|
+
/** HeyGen Avatar V presentation, speech, and output controls. */
|
|
10541
|
+
heygenSettings: HeygenAvatarSettingsSchema.optional(),
|
|
10448
10542
|
// Magic-resize stores its per-run config here so each version carries the
|
|
10449
10543
|
// ratios + resolution that produced it.
|
|
10450
10544
|
ratios: external_exports.array(external_exports.string()).optional(),
|
|
@@ -10471,6 +10565,8 @@ var ModelConfigInputSchema = external_exports.object({
|
|
|
10471
10565
|
tier: external_exports.string().nullable().optional(),
|
|
10472
10566
|
/** HeyGen Avatar V only: the Runware avatar id for this node. */
|
|
10473
10567
|
heygenAvatar: external_exports.string().trim().min(1).optional(),
|
|
10568
|
+
/** HeyGen Avatar V presentation, speech, and output controls. */
|
|
10569
|
+
heygenSettings: HeygenAvatarSettingsSchema.optional(),
|
|
10474
10570
|
/** better-font-32b only: the font the model renders the requested text in (supplied to the model as a rendered reference image). */
|
|
10475
10571
|
font: external_exports.object({
|
|
10476
10572
|
source: external_exports.enum(["custom", "google"]),
|
|
@@ -10595,8 +10691,8 @@ var NodeVersionResponseSchema = external_exports.object({
|
|
|
10595
10691
|
* back to a kebab/snake → title-case rendering of the key when the
|
|
10596
10692
|
* model isn't in the registry (newly added or since-removed).
|
|
10597
10693
|
*
|
|
10598
|
-
* Optional + nullable so historical
|
|
10599
|
-
*
|
|
10694
|
+
* Optional + nullable so historical snapshots that pre-date this
|
|
10695
|
+
* field keep validating; the snapshot viewer falls back to the
|
|
10600
10696
|
* client-side `formatModelLabel` helper when this is missing.
|
|
10601
10697
|
*/
|
|
10602
10698
|
modelDisplayName: external_exports.string().nullable().optional(),
|
|
@@ -10662,6 +10758,8 @@ var NodeResponseSchema = external_exports.object({
|
|
|
10662
10758
|
outputResolution: OutputResolutionSchema.nullable().optional(),
|
|
10663
10759
|
/** Current seed on the node (from CRDT). */
|
|
10664
10760
|
seed: external_exports.number().int().nonnegative().max(MAX_SEED).nullable().optional(),
|
|
10761
|
+
/** Current variation count on the node (from CRDT). */
|
|
10762
|
+
numVariations: external_exports.number().int().min(1).max(MAX_VARIATIONS).nullable().optional(),
|
|
10665
10763
|
/** Current audio toggle on the node (from CRDT). */
|
|
10666
10764
|
generateAudio: external_exports.boolean().nullable().optional(),
|
|
10667
10765
|
/** Selected video model supports start/end image inputs (from CRDT). */
|
|
@@ -11116,6 +11214,7 @@ var CreateDirectNodeBodyObjectSchema = external_exports.object({
|
|
|
11116
11214
|
outputResolution: OutputResolutionSchema.nullable().optional(),
|
|
11117
11215
|
matchAudioToVideoDuration: external_exports.boolean().nullable().optional(),
|
|
11118
11216
|
seed: external_exports.number().int().nonnegative().max(MAX_SEED).nullable().optional(),
|
|
11217
|
+
numVariations: external_exports.number().int().min(1).max(MAX_VARIATIONS).nullable().optional(),
|
|
11119
11218
|
negativePrompt: external_exports.string().nullable().optional(),
|
|
11120
11219
|
stitchClipOrder: StitchClipOrderSchema.nullable().optional(),
|
|
11121
11220
|
stitchScaleFit: StitchScaleFitSchema.nullable().optional(),
|
|
@@ -11165,6 +11264,7 @@ var UpdateDirectNodeBodySchema = external_exports.object({
|
|
|
11165
11264
|
outputResolution: OutputResolutionSchema.nullable().optional(),
|
|
11166
11265
|
matchAudioToVideoDuration: external_exports.boolean().nullable().optional(),
|
|
11167
11266
|
seed: external_exports.number().int().nonnegative().max(MAX_SEED).nullable().optional(),
|
|
11267
|
+
numVariations: external_exports.number().int().min(1).max(MAX_VARIATIONS).nullable().optional(),
|
|
11168
11268
|
negativePrompt: external_exports.string().nullable().optional(),
|
|
11169
11269
|
stitchClipOrder: StitchClipOrderSchema.nullable().optional(),
|
|
11170
11270
|
stitchScaleFit: StitchScaleFitSchema.nullable().optional(),
|
|
@@ -11199,6 +11299,7 @@ var DirectNodeResponseSchema = external_exports.object({
|
|
|
11199
11299
|
outputResolution: OutputResolutionSchema.nullable(),
|
|
11200
11300
|
matchAudioToVideoDuration: external_exports.boolean().nullable().optional(),
|
|
11201
11301
|
seed: external_exports.number().int().nonnegative().max(MAX_SEED).nullable(),
|
|
11302
|
+
numVariations: external_exports.number().int().min(1).max(MAX_VARIATIONS).nullable(),
|
|
11202
11303
|
negativePrompt: external_exports.string().nullable(),
|
|
11203
11304
|
stitchClipOrder: StitchClipOrderSchema.nullable().optional(),
|
|
11204
11305
|
stitchScaleFit: StitchScaleFitSchema.nullable().optional(),
|
|
@@ -11252,6 +11353,7 @@ var BulkUpdateDirectNodesItemSchema = external_exports.object({
|
|
|
11252
11353
|
outputResolution: OutputResolutionSchema.nullable().optional(),
|
|
11253
11354
|
matchAudioToVideoDuration: external_exports.boolean().nullable().optional(),
|
|
11254
11355
|
seed: external_exports.number().int().nonnegative().max(MAX_SEED).nullable().optional(),
|
|
11356
|
+
numVariations: external_exports.number().int().min(1).max(MAX_VARIATIONS).nullable().optional(),
|
|
11255
11357
|
negativePrompt: external_exports.string().nullable().optional(),
|
|
11256
11358
|
stitchClipOrder: StitchClipOrderSchema.nullable().optional(),
|
|
11257
11359
|
stitchScaleFit: StitchScaleFitSchema.nullable().optional(),
|
|
@@ -11340,6 +11442,16 @@ var PlaygroundCanvasReferenceSchema = external_exports.object({
|
|
|
11340
11442
|
projectId: external_exports.string().uuid(),
|
|
11341
11443
|
canvasId: external_exports.string().uuid()
|
|
11342
11444
|
});
|
|
11445
|
+
var PlaygroundCanvasDestinationSchema = external_exports.discriminatedUnion("kind", [
|
|
11446
|
+
external_exports.object({
|
|
11447
|
+
kind: external_exports.literal("existing"),
|
|
11448
|
+
projectId: external_exports.string().uuid()
|
|
11449
|
+
}),
|
|
11450
|
+
external_exports.object({
|
|
11451
|
+
kind: external_exports.literal("new"),
|
|
11452
|
+
projectName: external_exports.string().trim().min(1).max(500)
|
|
11453
|
+
})
|
|
11454
|
+
]);
|
|
11343
11455
|
var PlaygroundCanvasPageSchema = external_exports.object({
|
|
11344
11456
|
projectId: external_exports.string().uuid().nullable(),
|
|
11345
11457
|
data: external_exports.array(external_exports.object({ id: external_exports.string().uuid() })),
|
|
@@ -11349,9 +11461,12 @@ var canvasContract = c7.router({
|
|
|
11349
11461
|
createPlaygroundCanvas: {
|
|
11350
11462
|
method: "POST",
|
|
11351
11463
|
path: "/playground/canvases",
|
|
11352
|
-
body:
|
|
11464
|
+
body: external_exports.object({
|
|
11465
|
+
destination: PlaygroundCanvasDestinationSchema.optional()
|
|
11466
|
+
}).optional(),
|
|
11353
11467
|
responses: {
|
|
11354
11468
|
201: PlaygroundCanvasReferenceSchema,
|
|
11469
|
+
404: MessageResponseSchema,
|
|
11355
11470
|
409: MessageResponseSchema
|
|
11356
11471
|
}
|
|
11357
11472
|
},
|
|
@@ -11460,8 +11575,8 @@ var canvasContract = c7.router({
|
|
|
11460
11575
|
}
|
|
11461
11576
|
},
|
|
11462
11577
|
// Returns canvases across every team the authenticated user is a
|
|
11463
|
-
// member of
|
|
11464
|
-
//
|
|
11578
|
+
// member of, for pickers where the active team header should not
|
|
11579
|
+
// constrain the results.
|
|
11465
11580
|
listUserCanvases: {
|
|
11466
11581
|
method: "GET",
|
|
11467
11582
|
path: "/users/me/canvases",
|
|
@@ -11591,6 +11706,30 @@ var canvasContract = c7.router({
|
|
|
11591
11706
|
404: MessageResponseSchema
|
|
11592
11707
|
}
|
|
11593
11708
|
},
|
|
11709
|
+
// Who can view this node as a shared playground generation. `anyone`
|
|
11710
|
+
// publishes it behind the public `/g/:nodeId` link; `team` (default)
|
|
11711
|
+
// revokes it. Team-scoped like the asset share toggle.
|
|
11712
|
+
getNodeShareMode: {
|
|
11713
|
+
method: "GET",
|
|
11714
|
+
path: "/nodes/:nodeId/share-mode",
|
|
11715
|
+
pathParams: external_exports.object({ nodeId: external_exports.string().uuid() }),
|
|
11716
|
+
responses: {
|
|
11717
|
+
200: external_exports.object({ shareMode: ShareVisibilitySchema }),
|
|
11718
|
+
403: MessageResponseSchema,
|
|
11719
|
+
404: MessageResponseSchema
|
|
11720
|
+
}
|
|
11721
|
+
},
|
|
11722
|
+
setNodeShareMode: {
|
|
11723
|
+
method: "PATCH",
|
|
11724
|
+
path: "/nodes/:nodeId/share-mode",
|
|
11725
|
+
pathParams: external_exports.object({ nodeId: external_exports.string().uuid() }),
|
|
11726
|
+
body: external_exports.object({ shareMode: ShareVisibilitySchema }),
|
|
11727
|
+
responses: {
|
|
11728
|
+
200: external_exports.object({ shareMode: ShareVisibilitySchema }),
|
|
11729
|
+
403: MessageResponseSchema,
|
|
11730
|
+
404: MessageResponseSchema
|
|
11731
|
+
}
|
|
11732
|
+
},
|
|
11594
11733
|
listNodeVersionAssets: {
|
|
11595
11734
|
method: "GET",
|
|
11596
11735
|
path: "/node-versions/:versionId/assets",
|
|
@@ -12455,6 +12594,8 @@ var GenerationRunBodySchema = external_exports.object({
|
|
|
12455
12594
|
prompt: external_exports.string().trim().min(1).optional(),
|
|
12456
12595
|
/** Selected avatar id from Runware's HeyGen Avatar V catalog. */
|
|
12457
12596
|
heygenAvatar: external_exports.string().trim().min(1).optional(),
|
|
12597
|
+
/** HeyGen Avatar V presentation controls. */
|
|
12598
|
+
heygenSettings: HeygenAvatarSettingsSchema.optional(),
|
|
12458
12599
|
imageUrls: external_exports.array(external_exports.string().url()).optional(),
|
|
12459
12600
|
endImageUrls: external_exports.array(external_exports.string().url()).optional(),
|
|
12460
12601
|
referenceImageUrls: external_exports.array(external_exports.string().url()).optional(),
|
|
@@ -12575,6 +12716,9 @@ var AutoModelDefaultsCategorySchema = external_exports.object({
|
|
|
12575
12716
|
textToSpeech: AutoModelDefaultEntrySchema,
|
|
12576
12717
|
audioToAudio: AutoModelDefaultEntrySchema,
|
|
12577
12718
|
textToSfx: AutoModelDefaultEntrySchema,
|
|
12719
|
+
// Optional so deployed clients validating a response from an
|
|
12720
|
+
// older backend (which omits it) keep working.
|
|
12721
|
+
videoToSfx: AutoModelDefaultEntrySchema.optional(),
|
|
12578
12722
|
textToMusic: AutoModelDefaultEntrySchema,
|
|
12579
12723
|
speechToText: AutoModelDefaultEntrySchema
|
|
12580
12724
|
}).optional()
|
|
@@ -12745,6 +12889,9 @@ var GenerationHistoryItemSchema = external_exports.object({
|
|
|
12745
12889
|
tier: external_exports.string().nullable().optional(),
|
|
12746
12890
|
status: GenerationJobStatusSchema,
|
|
12747
12891
|
creditCost: external_exports.number().nullable(),
|
|
12892
|
+
// Whether the debit was reversed — `creditCost` was charged and given back,
|
|
12893
|
+
// so it did not count towards usage. Optional so older clients ignore it.
|
|
12894
|
+
refunded: external_exports.boolean().optional(),
|
|
12748
12895
|
createdAt: external_exports.string(),
|
|
12749
12896
|
user: external_exports.object({
|
|
12750
12897
|
id: external_exports.string(),
|
|
@@ -12755,7 +12902,15 @@ var GenerationHistoryItemSchema = external_exports.object({
|
|
|
12755
12902
|
id: external_exports.string(),
|
|
12756
12903
|
title: external_exports.string(),
|
|
12757
12904
|
archived: external_exports.boolean()
|
|
12758
|
-
}).nullable()
|
|
12905
|
+
}).nullable(),
|
|
12906
|
+
// Set when the generation was produced by running a template: the bulk run
|
|
12907
|
+
// it belonged to plus the template's name. Lets a run's per-model rows be
|
|
12908
|
+
// consolidated into one row (see `consolidateTemplateRuns`). Optional so
|
|
12909
|
+
// older clients ignore it and it is absent for non-template generations.
|
|
12910
|
+
templateRun: external_exports.object({
|
|
12911
|
+
runId: external_exports.string(),
|
|
12912
|
+
title: external_exports.string()
|
|
12913
|
+
}).nullable().optional()
|
|
12759
12914
|
});
|
|
12760
12915
|
var ListGenerationHistoryResponseSchema = external_exports.object({
|
|
12761
12916
|
items: external_exports.array(GenerationHistoryItemSchema),
|
|
@@ -13125,6 +13280,90 @@ var SharedAssetResponseSchema = external_exports.object({
|
|
|
13125
13280
|
height: external_exports.number().int().nullable(),
|
|
13126
13281
|
durationInMs: external_exports.number().int().nullable()
|
|
13127
13282
|
});
|
|
13283
|
+
var SharedGenerationMediaTypeSchema = external_exports.enum(["image", "video", "audio"]);
|
|
13284
|
+
var SharedGenerationTypeSchema = external_exports.enum(["text", "image", "video", "audio"]);
|
|
13285
|
+
var SharedGenerationReferenceSchema = external_exports.object({
|
|
13286
|
+
mediaType: SharedGenerationMediaTypeSchema,
|
|
13287
|
+
url: external_exports.string().nullable(),
|
|
13288
|
+
previewUrl: external_exports.string().nullable(),
|
|
13289
|
+
// The input handle the reference was wired to (e.g. starting_image), so the
|
|
13290
|
+
// viewer can render the role. Null when the source used the default slot.
|
|
13291
|
+
targetHandle: external_exports.string().nullable()
|
|
13292
|
+
});
|
|
13293
|
+
var SharedGenerationOutputSchema = external_exports.object({
|
|
13294
|
+
mediaUrl: external_exports.string().nullable(),
|
|
13295
|
+
mediaType: SharedGenerationMediaTypeSchema.nullable(),
|
|
13296
|
+
width: external_exports.number().int().nullable(),
|
|
13297
|
+
height: external_exports.number().int().nullable(),
|
|
13298
|
+
durationInMs: external_exports.number().int().nullable(),
|
|
13299
|
+
// Optional for independent web/core deployments.
|
|
13300
|
+
text: external_exports.string().nullable().optional()
|
|
13301
|
+
});
|
|
13302
|
+
var SharedCreatorSchema = external_exports.object({
|
|
13303
|
+
id: external_exports.string().uuid(),
|
|
13304
|
+
name: external_exports.string(),
|
|
13305
|
+
email: external_exports.string(),
|
|
13306
|
+
avatarUrl: external_exports.string().nullable()
|
|
13307
|
+
});
|
|
13308
|
+
var SharedGenerationResponseSchema = external_exports.object({
|
|
13309
|
+
id: external_exports.string().uuid(),
|
|
13310
|
+
type: SharedGenerationTypeSchema,
|
|
13311
|
+
prompt: external_exports.string(),
|
|
13312
|
+
modelName: external_exports.string().nullable(),
|
|
13313
|
+
modelLabel: external_exports.string().nullable(),
|
|
13314
|
+
tier: external_exports.string().nullable(),
|
|
13315
|
+
aspectRatio: OutputAspectRatioSchema.nullable(),
|
|
13316
|
+
output: SharedGenerationOutputSchema.nullable(),
|
|
13317
|
+
references: external_exports.array(SharedGenerationReferenceSchema),
|
|
13318
|
+
// Display name of the member who created the generation, for the
|
|
13319
|
+
// "Created by …" tag. Null when the creator is unknown/deleted.
|
|
13320
|
+
createdByName: external_exports.string().nullable(),
|
|
13321
|
+
// Optional to support version-skew between web and core deployments.
|
|
13322
|
+
createdByUser: SharedCreatorSchema.nullable().optional(),
|
|
13323
|
+
// Set when the generation was produced by a template — the viewer's "Create
|
|
13324
|
+
// in my playground" then opens that template to try, instead of staging a
|
|
13325
|
+
// plain playground run. Null for playground generations.
|
|
13326
|
+
templateId: external_exports.string().uuid().nullable(),
|
|
13327
|
+
createdAt: external_exports.string().nullable()
|
|
13328
|
+
});
|
|
13329
|
+
var RecreateGenerationReferenceSchema = external_exports.object({
|
|
13330
|
+
assetId: external_exports.string().uuid(),
|
|
13331
|
+
displayName: external_exports.string(),
|
|
13332
|
+
mediaType: SharedGenerationMediaTypeSchema,
|
|
13333
|
+
url: external_exports.string().nullable(),
|
|
13334
|
+
previewUrl: external_exports.string().nullable(),
|
|
13335
|
+
targetHandle: external_exports.string().nullable()
|
|
13336
|
+
});
|
|
13337
|
+
var RecreateGenerationResponseSchema = external_exports.object({
|
|
13338
|
+
type: SharedGenerationTypeSchema,
|
|
13339
|
+
prompt: external_exports.string(),
|
|
13340
|
+
modelName: external_exports.string(),
|
|
13341
|
+
// The model variant the source ran (e.g. image-to-video), so the viewer's
|
|
13342
|
+
// composer can pre-select the matching recipe and wire the references into
|
|
13343
|
+
// its input slots. Null when the source recorded no variant.
|
|
13344
|
+
variant: external_exports.string().nullable(),
|
|
13345
|
+
tier: external_exports.string().nullable(),
|
|
13346
|
+
aspectRatio: OutputAspectRatioSchema.nullable(),
|
|
13347
|
+
resolution: external_exports.string().nullable(),
|
|
13348
|
+
duration: external_exports.number().int().positive().nullable(),
|
|
13349
|
+
references: external_exports.array(RecreateGenerationReferenceSchema),
|
|
13350
|
+
// Display name of the member who created the source generation, for the
|
|
13351
|
+
// "Created by …" tag shown on the recreated example in the viewer's
|
|
13352
|
+
// playground. Null when the creator is unknown/deleted.
|
|
13353
|
+
createdByName: external_exports.string().nullable(),
|
|
13354
|
+
// The owned copy of the shared generation. Optional so a newer web client
|
|
13355
|
+
// continues to accept a response from an already-deployed backend while it
|
|
13356
|
+
// rolls out.
|
|
13357
|
+
recreatedGeneration: external_exports.object({
|
|
13358
|
+
nodeId: external_exports.string().uuid(),
|
|
13359
|
+
projectId: external_exports.string().uuid(),
|
|
13360
|
+
canvasId: external_exports.string().uuid()
|
|
13361
|
+
}).optional()
|
|
13362
|
+
});
|
|
13363
|
+
var SharedGenerationHandoffSchema = RecreateGenerationResponseSchema.extend({
|
|
13364
|
+
modelLabel: external_exports.string().nullable(),
|
|
13365
|
+
output: SharedGenerationOutputSchema.nullable()
|
|
13366
|
+
});
|
|
13128
13367
|
var ShareCanvasResponseSchema = external_exports.object({
|
|
13129
13368
|
id: external_exports.string().uuid(),
|
|
13130
13369
|
projectId: external_exports.string().uuid(),
|
|
@@ -13152,12 +13391,7 @@ var ShareProjectInfoResponseSchema = external_exports.object({
|
|
|
13152
13391
|
// The user who created the project — used to render "X shared Y" copy in
|
|
13153
13392
|
// link previews and the owner card on the shared canvas view. Null for
|
|
13154
13393
|
// legacy projects with no recorded creator.
|
|
13155
|
-
createdByUser:
|
|
13156
|
-
id: external_exports.string().uuid(),
|
|
13157
|
-
name: external_exports.string(),
|
|
13158
|
-
email: external_exports.string(),
|
|
13159
|
-
avatarUrl: external_exports.string().nullable()
|
|
13160
|
-
}).nullable()
|
|
13394
|
+
createdByUser: SharedCreatorSchema.nullable()
|
|
13161
13395
|
});
|
|
13162
13396
|
var shareContract = c12.router({
|
|
13163
13397
|
// Public endpoint — no auth required
|
|
@@ -13193,6 +13427,18 @@ var shareContract = c12.router({
|
|
|
13193
13427
|
404: MessageResponseSchema
|
|
13194
13428
|
}
|
|
13195
13429
|
},
|
|
13430
|
+
// Public endpoint — no auth required. Resolves one playground generation
|
|
13431
|
+
// (a node) for an anonymous viewer; 404s unless the node's shareMode is
|
|
13432
|
+
// `anyone`.
|
|
13433
|
+
getSharedGeneration: {
|
|
13434
|
+
method: "GET",
|
|
13435
|
+
path: "/share/generations/:nodeId",
|
|
13436
|
+
pathParams: external_exports.object({ nodeId: external_exports.string().uuid() }),
|
|
13437
|
+
responses: {
|
|
13438
|
+
200: SharedGenerationResponseSchema,
|
|
13439
|
+
404: MessageResponseSchema
|
|
13440
|
+
}
|
|
13441
|
+
},
|
|
13196
13442
|
// Public endpoint — no auth required
|
|
13197
13443
|
getSharedCanvas: {
|
|
13198
13444
|
method: "GET",
|
|
@@ -13225,6 +13471,20 @@ var shareContract = c12.router({
|
|
|
13225
13471
|
200: external_exports.object({ shareMode: ShareModeSchema })
|
|
13226
13472
|
}
|
|
13227
13473
|
},
|
|
13474
|
+
// Authenticated. Clone a shared generation's referenced assets into the
|
|
13475
|
+
// caller's team + files and return a run-ready payload the client feeds into
|
|
13476
|
+
// the Playground run path. 404s unless the node's shareMode is `anyone`.
|
|
13477
|
+
recreateSharedGeneration: {
|
|
13478
|
+
method: "POST",
|
|
13479
|
+
path: "/share/generations/:nodeId/recreate",
|
|
13480
|
+
pathParams: external_exports.object({ nodeId: external_exports.string().uuid() }),
|
|
13481
|
+
body: external_exports.object({}),
|
|
13482
|
+
responses: {
|
|
13483
|
+
200: RecreateGenerationResponseSchema,
|
|
13484
|
+
403: MessageResponseSchema,
|
|
13485
|
+
404: MessageResponseSchema
|
|
13486
|
+
}
|
|
13487
|
+
},
|
|
13228
13488
|
copySharedCanvas: {
|
|
13229
13489
|
method: "POST",
|
|
13230
13490
|
path: "/share/projects/:projectId/canvases/:canvasId/copy",
|
|
@@ -13675,10 +13935,17 @@ var ProjectResponseSchema = external_exports.object({
|
|
|
13675
13935
|
updatedAt: external_exports.string().datetime(),
|
|
13676
13936
|
lastEditAt: external_exports.string().datetime()
|
|
13677
13937
|
});
|
|
13938
|
+
var ProjectOptionSchema = ProjectResponseSchema.pick({
|
|
13939
|
+
id: true,
|
|
13940
|
+
title: true
|
|
13941
|
+
});
|
|
13678
13942
|
var ProjectIdParamsSchema = external_exports.object({ projectId: external_exports.string().uuid() });
|
|
13679
13943
|
var PaginationQuerySchema = external_exports.object(
|
|
13680
13944
|
paginationQuery({ maxLimit: 100, defaultLimit: 50 })
|
|
13681
13945
|
);
|
|
13946
|
+
var ProjectOptionsQuerySchema = PaginationQuerySchema.extend({
|
|
13947
|
+
search: external_exports.string().max(500).optional()
|
|
13948
|
+
});
|
|
13682
13949
|
var IncludePreviewAssetsQuerySchema = external_exports.preprocess((value) => {
|
|
13683
13950
|
if (value === void 0) return void 0;
|
|
13684
13951
|
if (value === "true" || value === true) return true;
|
|
@@ -13702,6 +13969,10 @@ var PaginatedProjectsResponseSchema = external_exports.object({
|
|
|
13702
13969
|
data: external_exports.array(ProjectResponseSchema),
|
|
13703
13970
|
total: external_exports.number().int()
|
|
13704
13971
|
});
|
|
13972
|
+
var PaginatedProjectOptionsResponseSchema = external_exports.object({
|
|
13973
|
+
data: external_exports.array(ProjectOptionSchema),
|
|
13974
|
+
total: external_exports.number().int()
|
|
13975
|
+
});
|
|
13705
13976
|
var ProjectListResponseSchema = external_exports.object({
|
|
13706
13977
|
data: external_exports.array(ProjectResponseSchema)
|
|
13707
13978
|
});
|
|
@@ -13715,8 +13986,15 @@ var ProjectThumbnailResponseSchema = external_exports.object({
|
|
|
13715
13986
|
var ProjectThumbnailsResponseSchema = external_exports.object({
|
|
13716
13987
|
data: external_exports.array(ProjectThumbnailResponseSchema)
|
|
13717
13988
|
});
|
|
13989
|
+
var MAX_PROJECT_TITLE_LENGTH = 500;
|
|
13990
|
+
var PROJECT_CONFLICT_CODE = {
|
|
13991
|
+
nameTaken: "PROJECT_NAME_TAKEN"
|
|
13992
|
+
};
|
|
13993
|
+
var ProjectConflictResponseSchema = MessageResponseSchema.extend({
|
|
13994
|
+
code: external_exports.nativeEnum(PROJECT_CONFLICT_CODE).optional()
|
|
13995
|
+
});
|
|
13718
13996
|
var CreateProjectBodySchema = external_exports.object({
|
|
13719
|
-
title: external_exports.string().min(1).max(
|
|
13997
|
+
title: external_exports.string().min(1).max(MAX_PROJECT_TITLE_LENGTH).optional(),
|
|
13720
13998
|
description: external_exports.string().max(5e3).optional(),
|
|
13721
13999
|
isPublic: external_exports.boolean().optional(),
|
|
13722
14000
|
// Folder to create the project in. Omit (or `null`) to create at the team
|
|
@@ -13724,7 +14002,7 @@ var CreateProjectBodySchema = external_exports.object({
|
|
|
13724
14002
|
folderId: external_exports.string().uuid().nullable().optional()
|
|
13725
14003
|
});
|
|
13726
14004
|
var UpdateProjectBodySchema = external_exports.object({
|
|
13727
|
-
title: external_exports.string().min(1).max(
|
|
14005
|
+
title: external_exports.string().min(1).max(MAX_PROJECT_TITLE_LENGTH).optional(),
|
|
13728
14006
|
description: external_exports.string().max(5e3).nullable().optional(),
|
|
13729
14007
|
isPublic: external_exports.boolean().optional()
|
|
13730
14008
|
});
|
|
@@ -13755,7 +14033,7 @@ var projectContract = c14.router({
|
|
|
13755
14033
|
body: CreateProjectBodySchema,
|
|
13756
14034
|
responses: {
|
|
13757
14035
|
201: ProjectResponseSchema,
|
|
13758
|
-
409:
|
|
14036
|
+
409: ProjectConflictResponseSchema
|
|
13759
14037
|
}
|
|
13760
14038
|
},
|
|
13761
14039
|
listDeletedProjects: {
|
|
@@ -13764,6 +14042,12 @@ var projectContract = c14.router({
|
|
|
13764
14042
|
query: PaginationQuerySchema,
|
|
13765
14043
|
responses: { 200: PaginatedProjectsResponseSchema }
|
|
13766
14044
|
},
|
|
14045
|
+
listProjectOptions: {
|
|
14046
|
+
method: "GET",
|
|
14047
|
+
path: "/projects/options",
|
|
14048
|
+
query: ProjectOptionsQuerySchema,
|
|
14049
|
+
responses: { 200: PaginatedProjectOptionsResponseSchema }
|
|
14050
|
+
},
|
|
13767
14051
|
getProject: {
|
|
13768
14052
|
method: "GET",
|
|
13769
14053
|
path: "/projects/:projectId",
|
|
@@ -13777,7 +14061,7 @@ var projectContract = c14.router({
|
|
|
13777
14061
|
body: UpdateProjectBodySchema,
|
|
13778
14062
|
responses: {
|
|
13779
14063
|
200: ProjectResponseSchema,
|
|
13780
|
-
409:
|
|
14064
|
+
409: ProjectConflictResponseSchema
|
|
13781
14065
|
}
|
|
13782
14066
|
},
|
|
13783
14067
|
deleteProject: {
|
|
@@ -13897,18 +14181,31 @@ var projectContract = c14.router({
|
|
|
13897
14181
|
});
|
|
13898
14182
|
|
|
13899
14183
|
// ../api-contract/src/template-apply-input.ts
|
|
14184
|
+
var templateApplyTextInput = external_exports.object({
|
|
14185
|
+
kind: external_exports.literal("text"),
|
|
14186
|
+
portId: external_exports.string(),
|
|
14187
|
+
text: external_exports.string().min(1)
|
|
14188
|
+
});
|
|
14189
|
+
var templateApplyAssetInput = external_exports.object({
|
|
14190
|
+
kind: external_exports.literal("asset"),
|
|
14191
|
+
portId: external_exports.string(),
|
|
14192
|
+
assetId: external_exports.string().uuid(),
|
|
14193
|
+
mediaType: external_exports.enum(["image", "video", "audio", "pdf"])
|
|
14194
|
+
});
|
|
14195
|
+
var templateApplyAssetUrlInput = external_exports.object({
|
|
14196
|
+
kind: external_exports.literal("assetUrl"),
|
|
14197
|
+
portId: external_exports.string(),
|
|
14198
|
+
url: external_exports.string().url(),
|
|
14199
|
+
mediaType: external_exports.enum(["image", "video", "audio", "pdf"])
|
|
14200
|
+
});
|
|
14201
|
+
var TemplateApplyLibraryInputSchema = external_exports.discriminatedUnion("kind", [
|
|
14202
|
+
templateApplyTextInput,
|
|
14203
|
+
templateApplyAssetInput
|
|
14204
|
+
]);
|
|
13900
14205
|
var TemplateApplyInputSchema = external_exports.discriminatedUnion("kind", [
|
|
13901
|
-
|
|
13902
|
-
|
|
13903
|
-
|
|
13904
|
-
assetId: external_exports.string().uuid(),
|
|
13905
|
-
mediaType: external_exports.enum(["image", "video", "audio", "pdf"])
|
|
13906
|
-
}),
|
|
13907
|
-
external_exports.object({
|
|
13908
|
-
kind: external_exports.literal("text"),
|
|
13909
|
-
portId: external_exports.string(),
|
|
13910
|
-
text: external_exports.string().min(1)
|
|
13911
|
-
})
|
|
14206
|
+
templateApplyTextInput,
|
|
14207
|
+
templateApplyAssetInput,
|
|
14208
|
+
templateApplyAssetUrlInput
|
|
13912
14209
|
]);
|
|
13913
14210
|
|
|
13914
14211
|
// ../api-contract/src/template-public-api.ts
|
|
@@ -14409,7 +14706,7 @@ function isMajorUpgrade(current, latest) {
|
|
|
14409
14706
|
return l[0] > c17[0];
|
|
14410
14707
|
}
|
|
14411
14708
|
function shouldShowUpgradeNotice(ctx = {}) {
|
|
14412
|
-
const current = ctx.current ?? "0.
|
|
14709
|
+
const current = ctx.current ?? "0.12.0";
|
|
14413
14710
|
const latest = ctx.latest ?? serverLatestVersion;
|
|
14414
14711
|
const env = ctx.env ?? process.env;
|
|
14415
14712
|
const isTty = ctx.isTty ?? Boolean(process.stderr.isTTY);
|
|
@@ -14430,7 +14727,7 @@ Upgrade: npm install -g @melius-ai/cli@latest (or: brew update && brew upgrade
|
|
|
14430
14727
|
function printUpgradeNoticeIfNeeded(ctx = {}) {
|
|
14431
14728
|
try {
|
|
14432
14729
|
if (!shouldShowUpgradeNotice(ctx)) return;
|
|
14433
|
-
const current = ctx.current ?? "0.
|
|
14730
|
+
const current = ctx.current ?? "0.12.0";
|
|
14434
14731
|
const latest = ctx.latest ?? serverLatestVersion;
|
|
14435
14732
|
process.stderr.write(formatUpgradeNotice(current, latest));
|
|
14436
14733
|
} catch {
|
|
@@ -16629,7 +16926,7 @@ previewSrc, mediaType, generatedText, activeVersionId, voiceId, createdByUserId.
|
|
|
16629
16926
|
ID is auto-generated if --id is omitted. Geometry defaults per type (text: 380x200, image: 520x293, audio: 380x280).
|
|
16630
16927
|
Valid aspect ratios: 21:9, 16:9, 4:3, 3:2, 1:1, 2:3, 3:4, 9:16, 9:21.
|
|
16631
16928
|
Resolutions vary per model (e.g. 720p, 1080p, 4k for video; 1K, 2K, 4K for images). Use mel model list to check supportedResolutions.
|
|
16632
|
-
Audio modes (set via --variant): text-to-speech (TTS, requires --voice-id), text-to-sfx (5/6/8/10/12/15/20/22 second SFX), text-to-music (10/30/60/90/120/180/240/300 second music), speech-to-text (requires an audio input edge), audio-to-audio (requires an audio input edge and --voice-id). Use mel audio voice list to discover voice ids.
|
|
16929
|
+
Audio modes (set via --variant): text-to-speech (TTS, requires --voice-id), text-to-sfx (5/6/8/10/12/15/20/22 second SFX), video-to-sfx (requires a video input edge; length follows the clip), text-to-music (10/30/60/90/120/180/240/300 second music), speech-to-text (requires an audio input edge), audio-to-audio (requires an audio input edge and --voice-id). Use mel audio voice list to discover voice ids.
|
|
16633
16930
|
For stitch nodes, use --clip-order with connected source node IDs (video or image) in playback order and --scale-fit to control frame adaptation. Images render as 2-second still frames.
|
|
16634
16931
|
|
|
16635
16932
|
Examples:
|
|
@@ -16840,7 +17137,7 @@ Valid node types: text, image, video, audio, file, group, custom_text, stitch.
|
|
|
16840
17137
|
Stitch nodes also accept clipOrder (source node IDs \u2014 video or image \u2014 in playback order; images render as 2-second stills) and scaleFit (fit or stretch).
|
|
16841
17138
|
Valid aspect ratios: 21:9, 16:9, 4:3, 3:2, 1:1, 2:3, 3:4, 9:16, 9:21.
|
|
16842
17139
|
Valid edge types: text, image, video, audio, file.
|
|
16843
|
-
Audio modes (set via variant): text-to-speech (TTS, requires voiceId), text-to-sfx (5/6/8/10/12/15/20/22 second SFX), text-to-music (10/30/60/90/120/180/240/300 second music), speech-to-text (requires an audio input edge), audio-to-audio (requires an audio input edge and voiceId).
|
|
17140
|
+
Audio modes (set via variant): text-to-speech (TTS, requires voiceId), text-to-sfx (5/6/8/10/12/15/20/22 second SFX), video-to-sfx (requires a video input edge; length follows the clip), text-to-music (10/30/60/90/120/180/240/300 second music), speech-to-text (requires an audio input edge), audio-to-audio (requires an audio input edge and voiceId).
|
|
16844
17141
|
|
|
16845
17142
|
Use mel canvas plan-layout first to compute positions, then pass x/y/w/h into each node.
|
|
16846
17143
|
Accepts two JSON formats via stdin (or --json):
|
|
@@ -18280,7 +18577,7 @@ function registerModelCommands(program2, getOutputOpts) {
|
|
|
18280
18577
|
Returns: Array of models, each with name, displayName, provider, variants[], and supportedInputs[].
|
|
18281
18578
|
Each variant has: mode, supportedAspectRatios[], supportedDurations[], supportedResolutions[], requiredInputs[].
|
|
18282
18579
|
For text models, supportedInputs lists accepted media types (e.g. ["image", "video"]) \u2014 use these to determine valid edge handles.
|
|
18283
|
-
For audio, variants are text-to-speech, text-to-sfx, text-to-music, speech-to-text, and audio-to-audio \u2014 supportedDurations applies to sfx and music only. For text-to-speech and audio-to-audio, also call mel audio voice list to discover voice ids.
|
|
18580
|
+
For audio, variants are text-to-speech, text-to-sfx, video-to-sfx, text-to-music, speech-to-text, and audio-to-audio \u2014 supportedDurations applies to sfx and music only. For text-to-speech and audio-to-audio, also call mel audio voice list to discover voice ids.
|
|
18284
18581
|
Use this to discover valid --model and --variant values for mel run start and mel node create.
|
|
18285
18582
|
|
|
18286
18583
|
Examples:
|
|
@@ -19026,7 +19323,7 @@ function parseInputs(value) {
|
|
|
19026
19323
|
"USAGE_ERROR",
|
|
19027
19324
|
result.error.issues.map((issue) => issue.message).join("; "),
|
|
19028
19325
|
{
|
|
19029
|
-
suggestion: 'Use text inputs {"kind":"text","portId":"<portId>","text":"<text>"}
|
|
19326
|
+
suggestion: 'Use text inputs {"kind":"text","portId":"<portId>","text":"<text>"}, library-asset inputs {"kind":"asset","portId":"<portId>","assetId":"<assetId>","mediaType":"image|video|audio|pdf"}, or image-URL inputs {"kind":"assetUrl","portId":"<portId>","url":"https://...","mediaType":"image|video|audio|pdf"}'
|
|
19030
19327
|
}
|
|
19031
19328
|
),
|
|
19032
19329
|
EXIT_USAGE_ERROR
|
|
@@ -19067,18 +19364,22 @@ Examples:
|
|
|
19067
19364
|
"Y center for the template box. Omit for automatic non-overlapping placement"
|
|
19068
19365
|
).option(
|
|
19069
19366
|
"--inputs <json>",
|
|
19070
|
-
"JSON array of text
|
|
19367
|
+
"JSON array of text, library-asset, or image-URL inputs targeting port IDs from mel template list"
|
|
19071
19368
|
).addHelpText(
|
|
19072
19369
|
"after",
|
|
19073
19370
|
`
|
|
19074
19371
|
Returns: { instanceId, groupId }. Internal workflow node IDs are never returned.
|
|
19075
|
-
Input kinds
|
|
19372
|
+
Input kinds (mediaType is image, video, audio, or pdf):
|
|
19373
|
+
text {kind,portId,text}
|
|
19374
|
+
asset {kind,portId,assetId,mediaType} \u2014 a stored library asset (from mel asset search)
|
|
19375
|
+
assetUrl {kind,portId,url,mediaType} \u2014 a remote media URL fetched and stored server-side (e.g. a product image already hosted on your site)
|
|
19076
19376
|
Omit --center-x/--center-y to place the box automatically. Use mel canvas content <canvasId> afterward to inspect its public ports.
|
|
19077
19377
|
Run the applied template with mel bulk-run start <canvasId> --node-ids <groupId> --wait.
|
|
19078
19378
|
|
|
19079
19379
|
Examples:
|
|
19080
19380
|
$ mel template apply <canvasId> <templateId>
|
|
19081
19381
|
$ mel template apply <canvasId> <templateId> --inputs '[{"kind":"text","portId":"<portId>","text":"A red shoe"}]'
|
|
19382
|
+
$ mel template apply <canvasId> <templateId> --inputs '[{"kind":"assetUrl","portId":"<portId>","url":"https://example.com/image.jpg","mediaType":"image"}]'
|
|
19082
19383
|
$ mel bulk-run start <canvasId> --node-ids <groupId> --wait`
|
|
19083
19384
|
).action(
|
|
19084
19385
|
async (canvasId, templateId, opts) => {
|
|
@@ -19563,7 +19864,7 @@ function withDefaultHelp(args) {
|
|
|
19563
19864
|
}
|
|
19564
19865
|
function createProgram() {
|
|
19565
19866
|
const program2 = new Command();
|
|
19566
|
-
program2.name("mel").description("Mel \u2014 Melius agent CLI").version("0.
|
|
19867
|
+
program2.name("mel").description("Mel \u2014 Melius agent CLI").version("0.12.0").showSuggestionAfterError(true).option("--json", "Force JSON output (default)").option("--text", "Human-readable output").option(
|
|
19567
19868
|
"--fields <fields>",
|
|
19568
19869
|
"Select specific output fields (comma-separated)"
|
|
19569
19870
|
).option("--quiet", "Suppress output, exit code only").option("--verbose", "Log request/response metadata to stderr").addHelpText(
|
package/dist/src/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@melius-ai/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "The Melius command-line interface — create canvases and run AI image/video generations from your terminal",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
"mel": "./dist/bin/mel.js"
|
|
22
22
|
},
|
|
23
23
|
"files": [
|
|
24
|
-
"dist"
|
|
24
|
+
"dist",
|
|
25
|
+
"THIRD-PARTY-NOTICES.md"
|
|
25
26
|
],
|
|
26
27
|
"type": "module",
|
|
27
28
|
"exports": {
|