makefx 1.6.9 → 1.6.10
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 +1 -1
- package/makefx.mjs +383 -93
- package/package.json +11 -2
package/README.md
CHANGED
package/makefx.mjs
CHANGED
|
@@ -4460,7 +4460,7 @@ require_websocket_server();
|
|
|
4460
4460
|
var wrapper_default = import_websocket.default;
|
|
4461
4461
|
//#endregion
|
|
4462
4462
|
//#region src/cli/version.ts
|
|
4463
|
-
var CLI_VERSION = "1.6.
|
|
4463
|
+
var CLI_VERSION = "1.6.10+f750440f39c4";
|
|
4464
4464
|
var CLI_VERSION_HEADER = "X-MakeFX-CLI-Version";
|
|
4465
4465
|
function cliVersionHeaders() {
|
|
4466
4466
|
return {
|
|
@@ -4738,7 +4738,6 @@ var WebSocketClient = class WebSocketClient {
|
|
|
4738
4738
|
this.onSyncState?.({
|
|
4739
4739
|
assets: syncMsg.assets,
|
|
4740
4740
|
variants: syncMsg.variants,
|
|
4741
|
-
lineage: syncMsg.lineage,
|
|
4742
4741
|
collections: syncMsg.collections,
|
|
4743
4742
|
collectionItems: syncMsg.collectionItems,
|
|
4744
4743
|
canvasSettings: syncMsg.canvasSettings,
|
|
@@ -5807,7 +5806,7 @@ function printAssetSearchResults(results, print) {
|
|
|
5807
5806
|
}
|
|
5808
5807
|
}
|
|
5809
5808
|
function printAssetDetails(details, ctx, print) {
|
|
5810
|
-
const { asset, variants,
|
|
5809
|
+
const { asset, variants, recipe_references: recipeReferences } = details;
|
|
5811
5810
|
print(`\nAsset ${createAssetRef(asset.name, asset.id)}\n`);
|
|
5812
5811
|
print(` Name: ${asset.name}`);
|
|
5813
5812
|
print(` Type: ${asset.type || "unknown"}`);
|
|
@@ -5822,17 +5821,24 @@ function printAssetDetails(details, ctx, print) {
|
|
|
5822
5821
|
print(` Status: ${variant.status}`);
|
|
5823
5822
|
print(` Media: ${variant.media_kind || "-"}`);
|
|
5824
5823
|
if (variant.media_mime_type) print(` MIME: ${variant.media_mime_type}`);
|
|
5825
|
-
const
|
|
5826
|
-
|
|
5827
|
-
"
|
|
5828
|
-
|
|
5829
|
-
|
|
5830
|
-
|
|
5831
|
-
|
|
5832
|
-
|
|
5824
|
+
const detail = recipeReferences.variants.find((candidate) => candidate.variant_id === variant.id);
|
|
5825
|
+
if (detail) {
|
|
5826
|
+
print(` Recipe: ${detail.recipe_state.status}; ${detail.recipe_state.replayability.replace("_", " ")}`);
|
|
5827
|
+
const generator = detail.recipe?.generator;
|
|
5828
|
+
const execution = detail.recipe?.execution;
|
|
5829
|
+
const parameters = generator?.parameters;
|
|
5830
|
+
if (generator?.id) print(` Generator: ${String(generator.id)}`);
|
|
5831
|
+
if (execution?.provider) print(` Provider: ${String(execution.provider)}`);
|
|
5832
|
+
if (execution?.model) print(` Model: ${String(execution.model)}`);
|
|
5833
|
+
if (parameters?.prompt !== void 0) print(` Prompt: ${String(parameters.prompt)}`);
|
|
5834
|
+
if (detail.made_from.length > 0) for (const reference of detail.made_from) print(` Reference[${reference.sequence_index}] ${reference.slot}: ${formatRecipeReferenceTarget(reference)}`);
|
|
5835
|
+
print(` Views: made_from=${detail.made_from.length} used_by=${detail.used_by_total}${detail.used_by_truncated ? "+" : ""}`);
|
|
5836
|
+
}
|
|
5833
5837
|
}
|
|
5834
5838
|
}
|
|
5835
|
-
|
|
5839
|
+
}
|
|
5840
|
+
function formatRecipeReferenceTarget(target) {
|
|
5841
|
+
return target.available && target.asset_id && target.asset_name ? createVariantRef(target.asset_name, target.asset_id, target.variant_id) : `unresolved:${target.variant_id}`;
|
|
5836
5842
|
}
|
|
5837
5843
|
function toAssetJson(asset) {
|
|
5838
5844
|
return {
|
|
@@ -5858,29 +5864,41 @@ function toAssetDetailsJson(details) {
|
|
|
5858
5864
|
createdAt: variant.created_at || null,
|
|
5859
5865
|
updatedAt: variant.updated_at || null
|
|
5860
5866
|
})),
|
|
5861
|
-
|
|
5867
|
+
recipeReferences: details.recipe_references.variants.map((detail) => ({
|
|
5868
|
+
variantRef: createVariantRef(details.asset.name, details.asset.id, detail.variant_id),
|
|
5869
|
+
recipe: publicCliRecipe(detail.recipe),
|
|
5870
|
+
recipeState: {
|
|
5871
|
+
status: detail.recipe_state.status,
|
|
5872
|
+
replayability: detail.recipe_state.replayability,
|
|
5873
|
+
issues: detail.recipe_state.issues,
|
|
5874
|
+
replayabilityIssues: detail.recipe_state.replayability_issues
|
|
5875
|
+
},
|
|
5876
|
+
references: detail.made_from.map((reference) => ({
|
|
5877
|
+
variantRef: reference.available && reference.asset_id && reference.asset_name ? createVariantRef(reference.asset_name, reference.asset_id, reference.variant_id) : null,
|
|
5878
|
+
...!reference.available ? { historicalVariantId: reference.variant_id } : {},
|
|
5879
|
+
slot: reference.slot,
|
|
5880
|
+
sequenceIndex: reference.sequence_index,
|
|
5881
|
+
modalityIndex: reference.modality_index,
|
|
5882
|
+
mediaKind: reference.media_kind,
|
|
5883
|
+
mimeType: reference.mime_type,
|
|
5884
|
+
sizeBytes: reference.size_bytes,
|
|
5885
|
+
width: reference.width,
|
|
5886
|
+
height: reference.height,
|
|
5887
|
+
durationMs: reference.duration_ms
|
|
5888
|
+
})),
|
|
5889
|
+
madeFrom: detail.made_from.map(formatRecipeReferenceTarget),
|
|
5890
|
+
usedBy: detail.used_by.map(formatRecipeReferenceTarget),
|
|
5891
|
+
usedByTotal: detail.used_by_total,
|
|
5892
|
+
usedByTruncated: detail.used_by_truncated
|
|
5893
|
+
})),
|
|
5894
|
+
totalVariantCount: details.recipe_references.total_variant_count,
|
|
5895
|
+
truncated: details.recipe_references.truncated
|
|
5862
5896
|
};
|
|
5863
5897
|
}
|
|
5864
|
-
function
|
|
5865
|
-
if (!
|
|
5866
|
-
const
|
|
5867
|
-
|
|
5868
|
-
const parts = [];
|
|
5869
|
-
for (const key of preferredKeys) {
|
|
5870
|
-
const field = parsed[key];
|
|
5871
|
-
if (field === void 0 || field === null || typeof field === "object") continue;
|
|
5872
|
-
parts.push(`${key}=${String(field)}`);
|
|
5873
|
-
}
|
|
5874
|
-
return parts.length > 0 ? truncate(parts.join(" "), 160) : truncate(JSON.stringify(parsed), 160);
|
|
5875
|
-
}
|
|
5876
|
-
function parseJsonObject(value) {
|
|
5877
|
-
try {
|
|
5878
|
-
const parsed = JSON.parse(value);
|
|
5879
|
-
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) return parsed;
|
|
5880
|
-
} catch {
|
|
5881
|
-
return null;
|
|
5882
|
-
}
|
|
5883
|
-
return null;
|
|
5898
|
+
function publicCliRecipe(recipe) {
|
|
5899
|
+
if (!recipe) return null;
|
|
5900
|
+
const { references: _references, regeneration: _regeneration, copiedFromVariantId: _copiedFromVariantId, ...publicRecipe } = recipe;
|
|
5901
|
+
return publicRecipe;
|
|
5884
5902
|
}
|
|
5885
5903
|
function formatTimestamp(value) {
|
|
5886
5904
|
if (!value) return "-";
|
|
@@ -9345,6 +9363,17 @@ async function executeSpaceLens(parsed, deps = defaultDeps$8) {
|
|
|
9345
9363
|
return result;
|
|
9346
9364
|
}
|
|
9347
9365
|
IMAGE_MODEL_SELECTIONS.map((selection) => `image/${selection}`);
|
|
9366
|
+
function referenceSlot(slot, mediaKind, minCount, maxCount, providerPosition, requiredMetadata = []) {
|
|
9367
|
+
return {
|
|
9368
|
+
slot,
|
|
9369
|
+
mediaKinds: [mediaKind],
|
|
9370
|
+
minCount,
|
|
9371
|
+
maxCount,
|
|
9372
|
+
providerPosition,
|
|
9373
|
+
ordering: "preserve_occurrence_order",
|
|
9374
|
+
...requiredMetadata.length ? { requiredMetadata } : {}
|
|
9375
|
+
};
|
|
9376
|
+
}
|
|
9348
9377
|
function input(name, type, required, description, options = {}) {
|
|
9349
9378
|
return {
|
|
9350
9379
|
name,
|
|
@@ -9389,7 +9418,12 @@ function imageGenerator(capability) {
|
|
|
9389
9418
|
operation: "generate",
|
|
9390
9419
|
tool: "generate_image",
|
|
9391
9420
|
description: "Create a new image asset from text.",
|
|
9392
|
-
inputs: generateInputs
|
|
9421
|
+
inputs: generateInputs,
|
|
9422
|
+
referenceSlots: [],
|
|
9423
|
+
referenceCardinality: {
|
|
9424
|
+
minCount: 0,
|
|
9425
|
+
maxCount: 0
|
|
9426
|
+
}
|
|
9393
9427
|
}];
|
|
9394
9428
|
if (capability.supportedOperations.includes("derive")) operations.push({
|
|
9395
9429
|
operation: "derive",
|
|
@@ -9398,7 +9432,12 @@ function imageGenerator(capability) {
|
|
|
9398
9432
|
inputs: [...generateInputs, {
|
|
9399
9433
|
...referenceInput,
|
|
9400
9434
|
required: true
|
|
9401
|
-
}]
|
|
9435
|
+
}],
|
|
9436
|
+
referenceSlots: [referenceSlot("reference_variant_refs", "image", 1, capability.maxReferenceImages, 0)],
|
|
9437
|
+
referenceCardinality: {
|
|
9438
|
+
minCount: 1,
|
|
9439
|
+
maxCount: capability.maxReferenceImages
|
|
9440
|
+
}
|
|
9402
9441
|
});
|
|
9403
9442
|
if (capability.supportedOperations.includes("refine")) operations.push({
|
|
9404
9443
|
operation: "refine",
|
|
@@ -9427,7 +9466,12 @@ function imageGenerator(capability) {
|
|
|
9427
9466
|
defaultValue: "medium"
|
|
9428
9467
|
})] : [],
|
|
9429
9468
|
...capability.supportsSeed ? [input("seed", "integer", false, "Optional reproducible generation seed.")] : []
|
|
9430
|
-
]
|
|
9469
|
+
],
|
|
9470
|
+
referenceSlots: [referenceSlot("source_variant_ref", "image", 1, 1, 0), referenceSlot("reference_variant_refs", "image", 0, Math.max(0, capability.maxReferenceImages - 1), 1)],
|
|
9471
|
+
referenceCardinality: {
|
|
9472
|
+
minCount: 1,
|
|
9473
|
+
maxCount: capability.maxReferenceImages
|
|
9474
|
+
}
|
|
9431
9475
|
});
|
|
9432
9476
|
return {
|
|
9433
9477
|
id: `image/${capability.selection}`,
|
|
@@ -9444,6 +9488,72 @@ function imageGenerator(capability) {
|
|
|
9444
9488
|
notes: capability.maxReferenceImages > 0 ? ["Use compact variant references; binary image input is not accepted."] : ["Text-to-image only; reference inputs are not supported."]
|
|
9445
9489
|
};
|
|
9446
9490
|
}
|
|
9491
|
+
function customImageGenerator(modelId) {
|
|
9492
|
+
const common = [
|
|
9493
|
+
SPACE_INPUT,
|
|
9494
|
+
fixedInput("generator_id", "image/custom", "Selects the configured custom image generator."),
|
|
9495
|
+
NAME_INPUT,
|
|
9496
|
+
input("asset_type", "string", true, "Asset classification stored in the Space."),
|
|
9497
|
+
PROMPT_INPUT,
|
|
9498
|
+
input("aspect_ratio", "string", false, "Output aspect ratio."),
|
|
9499
|
+
input("image_size", "string", false, "Output image size.")
|
|
9500
|
+
];
|
|
9501
|
+
const referenceInput = input("reference_variant_refs", "string_array", false, "Ordered image references.", {
|
|
9502
|
+
minItems: 1,
|
|
9503
|
+
maxItems: 14
|
|
9504
|
+
});
|
|
9505
|
+
return {
|
|
9506
|
+
id: "image/custom",
|
|
9507
|
+
label: "Custom image",
|
|
9508
|
+
mediaKind: "image",
|
|
9509
|
+
modelIds: [modelId],
|
|
9510
|
+
defaultModelId: modelId,
|
|
9511
|
+
operations: [
|
|
9512
|
+
{
|
|
9513
|
+
operation: "generate",
|
|
9514
|
+
tool: "generate_image",
|
|
9515
|
+
description: "Generate with the configured custom model.",
|
|
9516
|
+
inputs: common,
|
|
9517
|
+
referenceSlots: [],
|
|
9518
|
+
referenceCardinality: {
|
|
9519
|
+
minCount: 0,
|
|
9520
|
+
maxCount: 0
|
|
9521
|
+
}
|
|
9522
|
+
},
|
|
9523
|
+
{
|
|
9524
|
+
operation: "derive",
|
|
9525
|
+
tool: "generate_image",
|
|
9526
|
+
description: "Generate with ordered image references.",
|
|
9527
|
+
inputs: [...common, {
|
|
9528
|
+
...referenceInput,
|
|
9529
|
+
required: true
|
|
9530
|
+
}],
|
|
9531
|
+
referenceSlots: [referenceSlot("reference_variant_refs", "image", 1, 14, 0)],
|
|
9532
|
+
referenceCardinality: {
|
|
9533
|
+
minCount: 1,
|
|
9534
|
+
maxCount: 14
|
|
9535
|
+
}
|
|
9536
|
+
},
|
|
9537
|
+
{
|
|
9538
|
+
operation: "refine",
|
|
9539
|
+
tool: "edit_image",
|
|
9540
|
+
description: "Edit a source image.",
|
|
9541
|
+
inputs: [...common, input("source_variant_ref", "string", true, "Source image.")],
|
|
9542
|
+
referenceSlots: [referenceSlot("source_variant_ref", "image", 1, 1, 0)],
|
|
9543
|
+
referenceCardinality: {
|
|
9544
|
+
minCount: 1,
|
|
9545
|
+
maxCount: 1
|
|
9546
|
+
}
|
|
9547
|
+
}
|
|
9548
|
+
],
|
|
9549
|
+
referenceRules: {
|
|
9550
|
+
mediaKind: "image",
|
|
9551
|
+
completedOnly: true,
|
|
9552
|
+
maxCount: 14
|
|
9553
|
+
},
|
|
9554
|
+
notes: ["The configured custom endpoint owns model-specific parameter support."]
|
|
9555
|
+
};
|
|
9556
|
+
}
|
|
9447
9557
|
function videoGenerator(selection) {
|
|
9448
9558
|
const defaultModel = getVideoGenerationModelForSelection(selection);
|
|
9449
9559
|
const isVeo = selection === "veo-3.1";
|
|
@@ -9467,7 +9577,7 @@ function videoGenerator(selection) {
|
|
|
9467
9577
|
allowedValues: VIDEO_GENERATION_TIERS,
|
|
9468
9578
|
defaultValue: DEFAULT_VIDEO_GENERATION_TIER
|
|
9469
9579
|
}));
|
|
9470
|
-
if (isKling) parameterInputs.push(input("generate_audio", "boolean", false, "Generate synchronized audio.", {
|
|
9580
|
+
if (isKling || isVeo) parameterInputs.push(input("generate_audio", "boolean", false, "Generate synchronized audio.", {
|
|
9471
9581
|
allowedValues: [true, false],
|
|
9472
9582
|
defaultValue: true
|
|
9473
9583
|
}));
|
|
@@ -9483,7 +9593,12 @@ function videoGenerator(selection) {
|
|
|
9483
9593
|
operation: "generate",
|
|
9484
9594
|
tool: "generate_video",
|
|
9485
9595
|
description: "Create a new video asset from text.",
|
|
9486
|
-
inputs: commonInputs
|
|
9596
|
+
inputs: commonInputs,
|
|
9597
|
+
referenceSlots: [],
|
|
9598
|
+
referenceCardinality: {
|
|
9599
|
+
minCount: 0,
|
|
9600
|
+
maxCount: 0
|
|
9601
|
+
}
|
|
9487
9602
|
}];
|
|
9488
9603
|
if (VIDEO_MODEL_SUPPORTED_OPERATIONS[selection].includes("refine")) operations.push({
|
|
9489
9604
|
operation: "refine",
|
|
@@ -9496,7 +9611,12 @@ function videoGenerator(selection) {
|
|
|
9496
9611
|
input("source_variant_ref", "string", true, "Completed video variant to refine."),
|
|
9497
9612
|
PROMPT_INPUT,
|
|
9498
9613
|
...parameterInputs
|
|
9499
|
-
]
|
|
9614
|
+
],
|
|
9615
|
+
referenceSlots: [referenceSlot("source_variant_ref", "video", 1, 1, 0)],
|
|
9616
|
+
referenceCardinality: {
|
|
9617
|
+
minCount: 1,
|
|
9618
|
+
maxCount: 1
|
|
9619
|
+
}
|
|
9500
9620
|
});
|
|
9501
9621
|
if (VIDEO_MODEL_SUPPORTED_OPERATIONS[selection].includes("derive")) operations.push({
|
|
9502
9622
|
operation: "derive",
|
|
@@ -9505,9 +9625,14 @@ function videoGenerator(selection) {
|
|
|
9505
9625
|
inputs: [...commonInputs, input("reference_variant_refs", "string_array", true, "Completed image variant references from find_assets or get_asset.", {
|
|
9506
9626
|
minItems: 1,
|
|
9507
9627
|
maxItems: maxReferences
|
|
9508
|
-
})]
|
|
9628
|
+
})],
|
|
9629
|
+
referenceSlots: [referenceSlot("reference_variant_refs", "image", 1, maxReferences, 0)],
|
|
9630
|
+
referenceCardinality: {
|
|
9631
|
+
minCount: 1,
|
|
9632
|
+
maxCount: maxReferences
|
|
9633
|
+
}
|
|
9509
9634
|
});
|
|
9510
|
-
const notes = isVeo ? [`Resolution support by tier: ${VIDEO_GENERATION_TIERS.map((tier) => `${tier}=${VIDEO_GENERATION_RESOLUTIONS_BY_TIER[tier].join("/")}`).join(", ")}
|
|
9635
|
+
const notes = isVeo ? [`Resolution support by tier: ${VIDEO_GENERATION_TIERS.map((tier) => `${tier}=${VIDEO_GENERATION_RESOLUTIONS_BY_TIER[tier].join("/")}`).join(", ")}.`] : isOmni ? ["Resolution, duration, tier, and generated-audio options are not accepted."] : selection === "fal-seedance" ? ["Text-to-video only; generated audio is not supported."] : ["At most one completed image reference is accepted."];
|
|
9511
9636
|
return {
|
|
9512
9637
|
id: `video/${selection}`,
|
|
9513
9638
|
label: VIDEO_MODEL_LABELS[selection],
|
|
@@ -9579,7 +9704,22 @@ function seedanceVideoGenerator(capability) {
|
|
|
9579
9704
|
operation,
|
|
9580
9705
|
tool: "generate_video",
|
|
9581
9706
|
description: capability.mode === "text" ? "Create a video from text." : capability.mode === "frame" ? "Animate a required authoritative start frame and optional authoritative end frame; extended references cannot be combined with them." : "Direct a video with ordered image, video, and audio references; these guide generation but cannot serve as authoritative start/end frames.",
|
|
9582
|
-
inputs: [...common, ...modeInputs]
|
|
9707
|
+
inputs: [...common, ...modeInputs],
|
|
9708
|
+
referenceSlots: capability.mode === "frame" ? [referenceSlot("start_frame_variant_ref", "image", 1, 1, 0), referenceSlot("end_frame_variant_ref", "image", 0, 1, 1)] : capability.mode === "reference" ? [
|
|
9709
|
+
referenceSlot("image_reference_variant_refs", "image", 0, referenceMax("image"), 0, ["mimeType", "sizeBytes"]),
|
|
9710
|
+
referenceSlot("video_reference_variant_refs", "video", 0, referenceMax("video"), 1, ["mimeType", "sizeBytes"]),
|
|
9711
|
+
referenceSlot("audio_reference_variant_refs", "audio", 0, referenceMax("audio"), 2, ["mimeType", "sizeBytes"])
|
|
9712
|
+
] : [],
|
|
9713
|
+
referenceCardinality: capability.mode === "text" ? {
|
|
9714
|
+
minCount: 0,
|
|
9715
|
+
maxCount: 0
|
|
9716
|
+
} : capability.mode === "frame" ? {
|
|
9717
|
+
minCount: 1,
|
|
9718
|
+
maxCount: 2
|
|
9719
|
+
} : {
|
|
9720
|
+
minCount: operation === "derive" ? 1 : 0,
|
|
9721
|
+
maxCount: capability.maxReferenceFiles
|
|
9722
|
+
}
|
|
9583
9723
|
}));
|
|
9584
9724
|
if (capability.operations.includes("refine")) {
|
|
9585
9725
|
const budget = getSeedance2ReferenceBudget(capability, "refine");
|
|
@@ -9605,7 +9745,17 @@ function seedanceVideoGenerator(capability) {
|
|
|
9605
9745
|
PROMPT_INPUT,
|
|
9606
9746
|
...parameters,
|
|
9607
9747
|
...editReferenceInputs
|
|
9608
|
-
]
|
|
9748
|
+
],
|
|
9749
|
+
referenceSlots: [
|
|
9750
|
+
referenceSlot("source_variant_ref", "video", 1, 1, 0, ["mimeType", "sizeBytes"]),
|
|
9751
|
+
referenceSlot("image_reference_variant_refs", "image", 0, budget.maxAdditionalByKind.image, 1, ["mimeType", "sizeBytes"]),
|
|
9752
|
+
referenceSlot("video_reference_variant_refs", "video", 0, budget.maxAdditionalByKind.video, 2, ["mimeType", "sizeBytes"]),
|
|
9753
|
+
referenceSlot("audio_reference_variant_refs", "audio", 0, budget.maxAdditionalByKind.audio, 3, ["mimeType", "sizeBytes"])
|
|
9754
|
+
],
|
|
9755
|
+
referenceCardinality: {
|
|
9756
|
+
minCount: 1,
|
|
9757
|
+
maxCount: capability.maxReferenceFiles
|
|
9758
|
+
}
|
|
9609
9759
|
});
|
|
9610
9760
|
}
|
|
9611
9761
|
return {
|
|
@@ -9628,8 +9778,7 @@ function seedanceVideoGenerator(capability) {
|
|
|
9628
9778
|
promptLabel: reference.promptLabel,
|
|
9629
9779
|
acceptedMimeTypes: reference.acceptedMimeTypes,
|
|
9630
9780
|
maxBytesPerFile: reference.maxBytesPerFile,
|
|
9631
|
-
...reference.combinedMaxBytes !== void 0 ? { combinedMaxBytes: reference.combinedMaxBytes } : {}
|
|
9632
|
-
...reference.combinedDurationSeconds ? { combinedDurationSeconds: reference.combinedDurationSeconds } : {}
|
|
9781
|
+
...reference.combinedMaxBytes !== void 0 ? { combinedMaxBytes: reference.combinedMaxBytes } : {}
|
|
9633
9782
|
}))
|
|
9634
9783
|
},
|
|
9635
9784
|
notes: [
|
|
@@ -9700,7 +9849,30 @@ function wan3VideoGenerator(capability) {
|
|
|
9700
9849
|
operation: capability.mode === "text" ? "generate" : "derive",
|
|
9701
9850
|
tool: "generate_video",
|
|
9702
9851
|
description: capability.mode === "text" ? "Create a native-audio video from text." : capability.mode === "frame" ? "Animate a start frame and optional end frame." : "Direct one video from up to 20 ordered image, video, and audio references.",
|
|
9703
|
-
inputs: [...common, ...modeInputs]
|
|
9852
|
+
inputs: [...common, ...modeInputs],
|
|
9853
|
+
referenceSlots: capability.mode === "frame" ? [referenceSlot("start_frame_variant_ref", "image", 1, 1, 0), referenceSlot("end_frame_variant_ref", "image", 0, 1, 1)] : capability.mode === "reference" ? [
|
|
9854
|
+
referenceSlot("image_reference_variant_refs", "image", 0, max("image"), 0, ["mimeType", "sizeBytes"]),
|
|
9855
|
+
referenceSlot("video_reference_variant_refs", "video", 0, max("video"), 1, [
|
|
9856
|
+
"mimeType",
|
|
9857
|
+
"sizeBytes",
|
|
9858
|
+
"durationMs"
|
|
9859
|
+
]),
|
|
9860
|
+
referenceSlot("audio_reference_variant_refs", "audio", 0, max("audio"), 2, [
|
|
9861
|
+
"mimeType",
|
|
9862
|
+
"sizeBytes",
|
|
9863
|
+
"durationMs"
|
|
9864
|
+
])
|
|
9865
|
+
] : [],
|
|
9866
|
+
referenceCardinality: capability.mode === "text" ? {
|
|
9867
|
+
minCount: 0,
|
|
9868
|
+
maxCount: 0
|
|
9869
|
+
} : capability.mode === "frame" ? {
|
|
9870
|
+
minCount: 1,
|
|
9871
|
+
maxCount: 2
|
|
9872
|
+
} : {
|
|
9873
|
+
minCount: 1,
|
|
9874
|
+
maxCount: capability.maxReferenceFiles
|
|
9875
|
+
}
|
|
9704
9876
|
}];
|
|
9705
9877
|
if (capability.mode === "reference") operations.push({
|
|
9706
9878
|
operation: "refine",
|
|
@@ -9727,7 +9899,29 @@ function wan3VideoGenerator(capability) {
|
|
|
9727
9899
|
maxItems: 4,
|
|
9728
9900
|
description: "Up to 4 additional videos; the source video is Video 1."
|
|
9729
9901
|
} : item)
|
|
9730
|
-
]
|
|
9902
|
+
],
|
|
9903
|
+
referenceSlots: [
|
|
9904
|
+
referenceSlot("source_variant_ref", "video", 1, 1, 0, [
|
|
9905
|
+
"mimeType",
|
|
9906
|
+
"sizeBytes",
|
|
9907
|
+
"durationMs"
|
|
9908
|
+
]),
|
|
9909
|
+
referenceSlot("image_reference_variant_refs", "image", 0, 10, 1, ["mimeType", "sizeBytes"]),
|
|
9910
|
+
referenceSlot("video_reference_variant_refs", "video", 0, 4, 2, [
|
|
9911
|
+
"mimeType",
|
|
9912
|
+
"sizeBytes",
|
|
9913
|
+
"durationMs"
|
|
9914
|
+
]),
|
|
9915
|
+
referenceSlot("audio_reference_variant_refs", "audio", 0, 5, 3, [
|
|
9916
|
+
"mimeType",
|
|
9917
|
+
"sizeBytes",
|
|
9918
|
+
"durationMs"
|
|
9919
|
+
])
|
|
9920
|
+
],
|
|
9921
|
+
referenceCardinality: {
|
|
9922
|
+
minCount: 1,
|
|
9923
|
+
maxCount: capability.maxReferenceFiles
|
|
9924
|
+
}
|
|
9731
9925
|
});
|
|
9732
9926
|
return {
|
|
9733
9927
|
id: capability.generatorId,
|
|
@@ -9804,7 +9998,12 @@ function avatarVideoGenerator(model) {
|
|
|
9804
9998
|
minItems: 1,
|
|
9805
9999
|
maxItems: 1
|
|
9806
10000
|
})
|
|
9807
|
-
]
|
|
10001
|
+
],
|
|
10002
|
+
referenceSlots: [referenceSlot("image_reference_variant_refs", "image", 1, 1, 0, ["mimeType", "sizeBytes"]), referenceSlot("audio_reference_variant_refs", "audio", 1, 1, 1, ["mimeType", "sizeBytes"])],
|
|
10003
|
+
referenceCardinality: {
|
|
10004
|
+
minCount: 2,
|
|
10005
|
+
maxCount: 2
|
|
10006
|
+
}
|
|
9808
10007
|
}],
|
|
9809
10008
|
referenceRules: {
|
|
9810
10009
|
mediaKind: null,
|
|
@@ -9855,13 +10054,18 @@ function audioGenerator(input_) {
|
|
|
9855
10054
|
id: input_.id,
|
|
9856
10055
|
label: input_.label,
|
|
9857
10056
|
mediaKind: "audio",
|
|
9858
|
-
modelIds: [input_.modelId],
|
|
10057
|
+
modelIds: input_.assetType === "speech" || input_.assetType === "dialogue" ? [...new Set([input_.modelId, DEFAULT_ELEVENLABS_SPEECH_MODEL_ID])] : [input_.modelId],
|
|
9859
10058
|
defaultModelId: input_.modelId,
|
|
9860
10059
|
operations: [{
|
|
9861
10060
|
operation: "generate",
|
|
9862
10061
|
tool: "generate_audio",
|
|
9863
10062
|
description: `Create a new ${input_.assetType} audio asset.`,
|
|
9864
|
-
inputs
|
|
10063
|
+
inputs,
|
|
10064
|
+
referenceSlots: [],
|
|
10065
|
+
referenceCardinality: {
|
|
10066
|
+
minCount: 0,
|
|
10067
|
+
maxCount: 0
|
|
10068
|
+
}
|
|
9865
10069
|
}],
|
|
9866
10070
|
referenceRules: {
|
|
9867
10071
|
mediaKind: null,
|
|
@@ -9878,6 +10082,7 @@ function getGeneratorCatalog(overrides = {}) {
|
|
|
9878
10082
|
const lyria = overrides.lyria ?? "lyria-3-clip-preview";
|
|
9879
10083
|
return [
|
|
9880
10084
|
...Object.values(IMAGE_MODEL_CAPABILITIES).map(imageGenerator),
|
|
10085
|
+
...overrides.customImage ? [customImageGenerator(overrides.customImage)] : [],
|
|
9881
10086
|
...VIDEO_MODEL_SELECTIONS.filter((selection) => !getWan3CapabilityBySelection(selection)).map(videoGenerator),
|
|
9882
10087
|
...SEEDANCE_2_SELECTIONS.map((selection) => seedanceVideoGenerator(SEEDANCE_2_CAPABILITIES[selection])),
|
|
9883
10088
|
...WAN_3_CAPABILITIES.map(wan3VideoGenerator),
|
|
@@ -9924,6 +10129,15 @@ function getGeneratorDefinition(id, overrides = {}) {
|
|
|
9924
10129
|
}
|
|
9925
10130
|
//#endregion
|
|
9926
10131
|
//#region src/shared/generationReferences.ts
|
|
10132
|
+
var GENERATION_REFERENCE_SLOTS = [
|
|
10133
|
+
"source_variant_ref",
|
|
10134
|
+
"reference_variant_refs",
|
|
10135
|
+
"start_frame_variant_ref",
|
|
10136
|
+
"end_frame_variant_ref",
|
|
10137
|
+
"image_reference_variant_refs",
|
|
10138
|
+
"video_reference_variant_refs",
|
|
10139
|
+
"audio_reference_variant_refs"
|
|
10140
|
+
];
|
|
9927
10141
|
function isGenerationReference(value) {
|
|
9928
10142
|
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
9929
10143
|
const reference = value;
|
|
@@ -11324,6 +11538,7 @@ function rejectUnknownModelOptions(command, options) {
|
|
|
11324
11538
|
var defaultDeps$4 = {
|
|
11325
11539
|
loadConfig: loadStoredConfig,
|
|
11326
11540
|
resolveBaseUrl,
|
|
11541
|
+
loadProjectConfig,
|
|
11327
11542
|
saveProjectConfig,
|
|
11328
11543
|
fetch,
|
|
11329
11544
|
print: console.log
|
|
@@ -11337,10 +11552,12 @@ async function handleSpaces(parsed) {
|
|
|
11337
11552
|
}
|
|
11338
11553
|
}
|
|
11339
11554
|
async function executeSpaces(parsed, deps = defaultDeps$4) {
|
|
11340
|
-
const env = resolveCommandEnvironment(parsed);
|
|
11341
11555
|
const subcommand = parsed.positionals[0];
|
|
11342
11556
|
rejectUnknownSpaceOptions(subcommand, parsed.options);
|
|
11343
11557
|
const jsonOutput = parsed.options.json === "true";
|
|
11558
|
+
const projectConfig = subcommand === "current" ? await deps.loadProjectConfig() : null;
|
|
11559
|
+
if (subcommand === "current" && !projectConfig) throw new Error("No current MakeFX Space. Run: makefx init --space <space-id>");
|
|
11560
|
+
const env = resolveCommandEnvironment(parsed, projectConfig);
|
|
11344
11561
|
const config = await deps.loadConfig(env);
|
|
11345
11562
|
if (!config) throw new Error(`Not logged in to ${env} environment. Run: ${loginCommandForEnvironment(env)}`);
|
|
11346
11563
|
if (config.token.expiresAt < Date.now()) throw new Error(`Token expired for ${env} environment. Run: ${loginCommandForEnvironment(env)}`);
|
|
@@ -11406,7 +11623,35 @@ async function executeSpaces(parsed, deps = defaultDeps$4) {
|
|
|
11406
11623
|
assets: details.assets
|
|
11407
11624
|
};
|
|
11408
11625
|
}
|
|
11409
|
-
if (subcommand
|
|
11626
|
+
if (subcommand === "current") {
|
|
11627
|
+
const details = await getSpaceDetails(ctx, deps, projectConfig.spaceId);
|
|
11628
|
+
if (jsonOutput) deps.print(JSON.stringify({
|
|
11629
|
+
project: {
|
|
11630
|
+
root: projectConfig.projectRoot ?? null,
|
|
11631
|
+
configPath: projectConfig.configPath ?? null,
|
|
11632
|
+
environment: env
|
|
11633
|
+
},
|
|
11634
|
+
space: publicSpace(details.space),
|
|
11635
|
+
assets: details.assets.map((asset) => ({
|
|
11636
|
+
assetRef: createAssetRef(asset.name, asset.id),
|
|
11637
|
+
name: asset.name,
|
|
11638
|
+
type: asset.type,
|
|
11639
|
+
mediaKind: asset.media_kind ?? null,
|
|
11640
|
+
activeVariantRef: asset.active_variant_id ? createVariantRef(asset.name, asset.id, asset.active_variant_id) : null
|
|
11641
|
+
}))
|
|
11642
|
+
}, null, 2));
|
|
11643
|
+
else {
|
|
11644
|
+
deps.print(`Current project: ${projectConfig.projectRoot ?? projectConfig.configPath ?? "unknown"}`);
|
|
11645
|
+
printSpaceDetails(details, deps.print);
|
|
11646
|
+
}
|
|
11647
|
+
return {
|
|
11648
|
+
type: "current",
|
|
11649
|
+
space: details.space,
|
|
11650
|
+
assets: details.assets,
|
|
11651
|
+
projectRoot: projectConfig.projectRoot ?? null
|
|
11652
|
+
};
|
|
11653
|
+
}
|
|
11654
|
+
if (subcommand !== "list") throw new Error("Spaces command is required: current, list, show, create, or delete");
|
|
11410
11655
|
const spaces = await fetchSpaces(ctx, deps);
|
|
11411
11656
|
if (jsonOutput) deps.print(JSON.stringify(spaces.map(publicSpace), null, 2));
|
|
11412
11657
|
else printSpaces(spaces, deps.print);
|
|
@@ -11422,6 +11667,7 @@ function rejectUnknownSpaceOptions(subcommand, options) {
|
|
|
11422
11667
|
"json"
|
|
11423
11668
|
];
|
|
11424
11669
|
const commandOptions = subcommand ? {
|
|
11670
|
+
current: [],
|
|
11425
11671
|
list: [],
|
|
11426
11672
|
show: [],
|
|
11427
11673
|
create: ["name", "init"],
|
|
@@ -11758,33 +12004,31 @@ var defaultDeps$2 = {
|
|
|
11758
12004
|
print: console.log
|
|
11759
12005
|
};
|
|
11760
12006
|
var UploadUsageError = class extends Error {};
|
|
11761
|
-
|
|
11762
|
-
"derived",
|
|
11763
|
-
"refined",
|
|
11764
|
-
"forked"
|
|
11765
|
-
]);
|
|
11766
|
-
function parseLineageOption(raw, defaultRelationType) {
|
|
12007
|
+
function parseRecipeReferencesOption(raw) {
|
|
11767
12008
|
if (!raw) return [];
|
|
11768
12009
|
const entries = raw.split(",").map((entry) => entry.trim()).filter((entry) => entry.length > 0);
|
|
11769
|
-
if (entries.length === 0) throw new UploadUsageError("--
|
|
12010
|
+
if (entries.length === 0) throw new UploadUsageError("--reference requires at least one slot=variant-ref entry");
|
|
11770
12011
|
return entries.map((entry) => {
|
|
11771
|
-
const
|
|
11772
|
-
const
|
|
11773
|
-
|
|
11774
|
-
|
|
11775
|
-
|
|
11776
|
-
|
|
11777
|
-
if (!LINEAGE_RELATION_TYPES.has(suffix)) throw new UploadUsageError(`--lineage relation in "${entry}" must be derived, refined, or forked`);
|
|
11778
|
-
ref = entry.slice(0, separator);
|
|
11779
|
-
relationType = suffix;
|
|
11780
|
-
}
|
|
11781
|
-
if (!ref.startsWith("asset:")) throw new UploadUsageError(`--lineage requires compact variant refs, got "${ref}"`);
|
|
12012
|
+
const separator = entry.indexOf("=");
|
|
12013
|
+
const slot = entry.slice(0, separator);
|
|
12014
|
+
const ref = entry.slice(separator + 1);
|
|
12015
|
+
if (separator <= 0 || !GENERATION_REFERENCE_SLOTS.includes(slot)) throw new UploadUsageError(`--reference requires a canonical slot before "=", got "${entry}"`);
|
|
12016
|
+
const parsed = parseVariantRef(ref);
|
|
12017
|
+
if (!parsed || parsed.variant === "active") throw new UploadUsageError(`--reference requires an exact compact variant ref, got "${ref}"`);
|
|
11782
12018
|
return {
|
|
11783
|
-
|
|
11784
|
-
|
|
12019
|
+
slot,
|
|
12020
|
+
ref
|
|
11785
12021
|
};
|
|
11786
12022
|
});
|
|
11787
12023
|
}
|
|
12024
|
+
function parseParametersOption(raw) {
|
|
12025
|
+
if (!raw) return {};
|
|
12026
|
+
try {
|
|
12027
|
+
const parsed = JSON.parse(raw);
|
|
12028
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) return parsed;
|
|
12029
|
+
} catch {}
|
|
12030
|
+
throw new UploadUsageError("--parameters must be a JSON object");
|
|
12031
|
+
}
|
|
11788
12032
|
async function handleUpload(parsed) {
|
|
11789
12033
|
try {
|
|
11790
12034
|
await executeUpload(parsed);
|
|
@@ -11809,7 +12053,8 @@ async function executeUpload(parsed, deps = defaultDeps$2) {
|
|
|
11809
12053
|
const jsonOutput = parsed.options.json === "true";
|
|
11810
12054
|
if (!spaceId) throw new UploadUsageError("--space is required, or run: makefx init --space <id>");
|
|
11811
12055
|
if (!assetId && !assetName) throw new UploadUsageError("Either --asset or --name is required");
|
|
11812
|
-
const
|
|
12056
|
+
const recipeReferences = parseRecipeReferencesOption(parsed.options.reference);
|
|
12057
|
+
const parameters = parseParametersOption(parsed.options.parameters);
|
|
11813
12058
|
const mediaType = resolveMediaType(path.extname(filePath).toLowerCase(), requestedMediaKind);
|
|
11814
12059
|
const config = await deps.loadConfig(env);
|
|
11815
12060
|
if (!config) throw new Error(`Not logged in to ${env} environment. Run: ${loginCommandForEnvironment(env)}`);
|
|
@@ -11817,15 +12062,10 @@ async function executeUpload(parsed, deps = defaultDeps$2) {
|
|
|
11817
12062
|
const baseUrl = deps.resolveBaseUrl(env);
|
|
11818
12063
|
const accessToken = config.token.accessToken;
|
|
11819
12064
|
const createStateClient = () => (deps.createStateClient ?? defaultDeps$2.createStateClient)(env, spaceId);
|
|
11820
|
-
|
|
11821
|
-
if (assetId || lineageEntries.length > 0) {
|
|
12065
|
+
if (assetId) {
|
|
11822
12066
|
if (assetId && !assetId.startsWith("asset:")) throw new Error("A compact asset ref is required");
|
|
11823
12067
|
const state = await readReferenceSpaceState(createStateClient);
|
|
11824
12068
|
if (assetId) assetId = resolveAssetRef(assetId, state.assets);
|
|
11825
|
-
lineage = lineageEntries.map((entry) => ({
|
|
11826
|
-
parentVariantId: resolveVariantRef(entry.ref, state.assets, state.variants),
|
|
11827
|
-
relationType: entry.relationType
|
|
11828
|
-
}));
|
|
11829
12069
|
}
|
|
11830
12070
|
if (env === "local") process$1.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
|
|
11831
12071
|
try {
|
|
@@ -11844,13 +12084,27 @@ async function executeUpload(parsed, deps = defaultDeps$2) {
|
|
|
11844
12084
|
formData.append("assetName", assetName);
|
|
11845
12085
|
formData.append("assetType", assetType);
|
|
11846
12086
|
}
|
|
11847
|
-
if (
|
|
12087
|
+
if (hasExternalRecipeOptions(parsed.options)) {
|
|
12088
|
+
formData.append("operation", "import");
|
|
12089
|
+
if (parsed.options.generator) formData.append("generatorId", parsed.options.generator);
|
|
12090
|
+
if (parsed.options["generator-operation"]) formData.append("generatorOperation", parsed.options["generator-operation"]);
|
|
12091
|
+
if (parsed.options.service) formData.append("service", parsed.options.service);
|
|
12092
|
+
if (parsed.options.provider) formData.append("provider", parsed.options.provider);
|
|
12093
|
+
if (parsed.options.model) formData.append("model", parsed.options.model);
|
|
12094
|
+
if (parsed.options.prompt !== void 0) formData.append("prompt", parsed.options.prompt);
|
|
12095
|
+
if (parsed.options["external-run-id"]) formData.append("externalRunId", parsed.options["external-run-id"]);
|
|
12096
|
+
formData.append("parameters", JSON.stringify(parameters));
|
|
12097
|
+
formData.append("references", JSON.stringify(recipeReferences.map((reference) => ({
|
|
12098
|
+
slot: reference.slot,
|
|
12099
|
+
variantRef: reference.ref
|
|
12100
|
+
}))));
|
|
12101
|
+
}
|
|
11848
12102
|
if (!jsonOutput) {
|
|
11849
12103
|
deps.print(`\nUploading "${fileName}" to space ${spaceId}...`);
|
|
11850
12104
|
deps.print(` Media kind: ${mediaType.mediaKind}`);
|
|
11851
12105
|
if (assetId) deps.print(` Target asset: ${requestedAssetRef}`);
|
|
11852
12106
|
else deps.print(` Creating asset: "${assetName}" (${assetType})`);
|
|
11853
|
-
for (const entry of
|
|
12107
|
+
for (const entry of recipeReferences) deps.print(` Recipe Reference: ${entry.slot} = ${entry.ref}`);
|
|
11854
12108
|
}
|
|
11855
12109
|
const response = await deps.fetch(`${baseUrl}/api/spaces/${spaceId}/upload`, {
|
|
11856
12110
|
method: "POST",
|
|
@@ -11884,7 +12138,8 @@ async function executeUpload(parsed, deps = defaultDeps$2) {
|
|
|
11884
12138
|
assetRef: result.assetRef,
|
|
11885
12139
|
variantRef: result.variantRef,
|
|
11886
12140
|
status: upload.variant.status,
|
|
11887
|
-
mediaKind: upload.variant.media_kind || mediaType.mediaKind
|
|
12141
|
+
mediaKind: upload.variant.media_kind || mediaType.mediaKind,
|
|
12142
|
+
...upload.provenance ? { provenance: upload.provenance } : {}
|
|
11888
12143
|
}, null, 2));
|
|
11889
12144
|
return result;
|
|
11890
12145
|
}
|
|
@@ -11901,6 +12156,10 @@ async function executeUpload(parsed, deps = defaultDeps$2) {
|
|
|
11901
12156
|
deps.print(` Status: ${upload.variant.status}`);
|
|
11902
12157
|
deps.print(` Media: ${upload.variant.media_kind || mediaType.mediaKind}`);
|
|
11903
12158
|
if (upload.variant.media_mime_type) deps.print(` MIME: ${upload.variant.media_mime_type}`);
|
|
12159
|
+
if (upload.provenance) {
|
|
12160
|
+
deps.print(` Recipe: ${upload.provenance.state}`);
|
|
12161
|
+
if (upload.provenance.missingReasons.length > 0) deps.print(` Guidance: ${upload.provenance.missingReasons.join(", ")}`);
|
|
12162
|
+
}
|
|
11904
12163
|
deps.print("\nTo inspect:");
|
|
11905
12164
|
deps.print(` makefx variants show ${result.variantRef} --wait --space ${spaceId}`);
|
|
11906
12165
|
return result;
|
|
@@ -11936,12 +12195,33 @@ function rejectUnknownUploadOptions(options) {
|
|
|
11936
12195
|
"name",
|
|
11937
12196
|
"type",
|
|
11938
12197
|
"media-kind",
|
|
11939
|
-
"
|
|
11940
|
-
"
|
|
12198
|
+
"json",
|
|
12199
|
+
"generator",
|
|
12200
|
+
"generator-operation",
|
|
12201
|
+
"service",
|
|
12202
|
+
"provider",
|
|
12203
|
+
"model",
|
|
12204
|
+
"prompt",
|
|
12205
|
+
"parameters",
|
|
12206
|
+
"reference",
|
|
12207
|
+
"external-run-id"
|
|
11941
12208
|
]);
|
|
11942
12209
|
const unknown = Object.keys(options).find((name) => !allowed.has(name));
|
|
11943
12210
|
if (unknown) throw new UploadUsageError(`Unknown option: --${unknown}`);
|
|
11944
12211
|
}
|
|
12212
|
+
function hasExternalRecipeOptions(options) {
|
|
12213
|
+
return [
|
|
12214
|
+
"generator",
|
|
12215
|
+
"generator-operation",
|
|
12216
|
+
"service",
|
|
12217
|
+
"provider",
|
|
12218
|
+
"model",
|
|
12219
|
+
"prompt",
|
|
12220
|
+
"parameters",
|
|
12221
|
+
"reference",
|
|
12222
|
+
"external-run-id"
|
|
12223
|
+
].some((name) => options[name] !== void 0);
|
|
12224
|
+
}
|
|
11945
12225
|
function printUsage$2() {
|
|
11946
12226
|
console.log(`
|
|
11947
12227
|
Usage:
|
|
@@ -11954,9 +12234,14 @@ Options:
|
|
|
11954
12234
|
--name <name> New asset name (creates asset + variant)
|
|
11955
12235
|
--type <type> Asset type for new assets (default: character)
|
|
11956
12236
|
--media-kind <k> Optional explicit kind: image, audio, or video
|
|
11957
|
-
--
|
|
11958
|
-
|
|
11959
|
-
|
|
12237
|
+
--generator <id> Canonical generator/service schema for an external result
|
|
12238
|
+
--service <id> External execution service
|
|
12239
|
+
--provider <id> Exact external provider
|
|
12240
|
+
--model <id> Exact external model
|
|
12241
|
+
--prompt <text> Exact submitted prompt
|
|
12242
|
+
--parameters <j> Additional exact generator parameters as a JSON object
|
|
12243
|
+
--reference <r> Ordered slot=exact-variant-ref entries, comma-separated
|
|
12244
|
+
--external-run-id <id> Optional bounded external execution identifier
|
|
11960
12245
|
--json Print machine-readable output
|
|
11961
12246
|
--env <env> Environment (production|stage|local)
|
|
11962
12247
|
--local Shortcut for --env local
|
|
@@ -11964,7 +12249,9 @@ Options:
|
|
|
11964
12249
|
Examples:
|
|
11965
12250
|
makefx assets upload hero.png --name "Hero Character"
|
|
11966
12251
|
makefx assets upload paintover.png --asset asset:hero~27f8f176
|
|
11967
|
-
makefx assets upload
|
|
12252
|
+
makefx assets upload avatar.mp4 --name "Avatar" --generator avatar --service fal \
|
|
12253
|
+
--provider fal --model avatar-v1 --prompt "Welcome" \
|
|
12254
|
+
--reference image_reference_variant_refs=asset:portrait~27f8@a1,audio_reference_variant_refs=asset:voice~91ab@b2
|
|
11968
12255
|
`);
|
|
11969
12256
|
}
|
|
11970
12257
|
//#endregion
|
|
@@ -12390,7 +12677,7 @@ Assets:
|
|
|
12390
12677
|
graph run | status | cancel
|
|
12391
12678
|
|
|
12392
12679
|
Workspace:
|
|
12393
|
-
spaces list | show | create | delete | lens
|
|
12680
|
+
spaces current | list | show | create | delete | lens
|
|
12394
12681
|
init | login | logout
|
|
12395
12682
|
usage | spend | billing
|
|
12396
12683
|
|
|
@@ -12442,12 +12729,14 @@ Generate commands also accept [--collection <id>] [--space <id>].`,
|
|
|
12442
12729
|
makefx assets show <asset-ref> [--json]
|
|
12443
12730
|
makefx assets update <asset-ref> [--name <name>] [--type <type>] [--tags <tag,...>]
|
|
12444
12731
|
makefx assets delete <asset-ref> [--yes]
|
|
12445
|
-
makefx assets upload <file> (--name <name> | --asset <asset-ref>) [--type <type>]
|
|
12732
|
+
makefx assets upload <file> (--name <name> | --asset <asset-ref>) [--type <type>]
|
|
12733
|
+
[--generator <id> --service <id> --provider <id> --model <id>]
|
|
12734
|
+
[--prompt <text>] [--parameters <json>] [--reference <slot=variant-ref,...>]
|
|
12446
12735
|
makefx assets download <variant-ref> -o <file>
|
|
12447
12736
|
|
|
12448
|
-
|
|
12449
|
-
|
|
12450
|
-
|
|
12737
|
+
External import options attach the exact canonical Recipe without executing a
|
|
12738
|
+
provider or billing generation. --reference accepts ordered canonical slots and
|
|
12739
|
+
exact compact Variant refs; raw uploads omit all external Recipe options.`,
|
|
12451
12740
|
variants: `Usage:
|
|
12452
12741
|
makefx variants show <variant-ref> [--wait <seconds>] [--json]
|
|
12453
12742
|
makefx variants update <variant-ref> [--starred true|false] [--rating approved|rejected|none]
|
|
@@ -12479,6 +12768,7 @@ compact variant refs, each optionally suffixed :derived, :refined, or :forked
|
|
|
12479
12768
|
makefx bindings set <draft-ref> <slot> --source variant|asset-active|draft-output --ref <ref> [--sort <index>]
|
|
12480
12769
|
makefx bindings clear <draft-ref> <slot> [--sort <index>]`,
|
|
12481
12770
|
spaces: `Usage:
|
|
12771
|
+
makefx spaces current [--json]
|
|
12482
12772
|
makefx spaces list [--json]
|
|
12483
12773
|
makefx spaces show <space-id> [--json]
|
|
12484
12774
|
makefx spaces create "<name>" [--init] [--json]
|
package/package.json
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "makefx",
|
|
3
|
-
"version": "1.6.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.6.10",
|
|
4
|
+
"description": "MakeFX CLI for reproducible image, video, and audio Assets in Make Effects.",
|
|
5
|
+
"homepage": "https://makefx.app/docs/cli",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"makefx",
|
|
8
|
+
"make-effects",
|
|
9
|
+
"mcp",
|
|
10
|
+
"media-generation",
|
|
11
|
+
"reproducibility",
|
|
12
|
+
"cli"
|
|
13
|
+
],
|
|
5
14
|
"license": "MIT",
|
|
6
15
|
"type": "module",
|
|
7
16
|
"repository": {
|