makefx 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +1 -1
  2. package/makefx.mjs +18 -12
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -176,4 +176,4 @@ Run `makefx --help` or `makefx help <command>` for command-specific options.
176
176
  - Media generation guide: https://makefx.app/docs/media-playbooks
177
177
  - Source: https://github.com/krasnoperov/inventory
178
178
 
179
- Version: 0.2.1
179
+ Version: 0.2.2
package/makefx.mjs CHANGED
@@ -5111,7 +5111,7 @@ async function executeUpload(parsed, deps = defaultDeps$11) {
5111
5111
  const provider = parsed.options.provider;
5112
5112
  const rawProviderMetadata = parsed.options["provider-metadata"] ?? parsed.options.providerMetadata ?? parsed.options.provider_metadata;
5113
5113
  const rawGenerationProvenance = parsed.options["generation-provenance"] ?? parsed.options.generationProvenance ?? parsed.options.generation_provenance;
5114
- const sourceVariantId = parsed.options["source-variant"] ?? parsed.options.sourceVariantId ?? parsed.options.parentVariantId;
5114
+ const rawSourceVariantIds = parsed.options["source-variants"] ?? parsed.options.sourceVariants ?? parsed.options.sourceVariantIds ?? parsed.options["source-variant"] ?? parsed.options.sourceVariantId ?? parsed.options.parentVariantId;
5115
5115
  const rawRelationType = parsed.options["relation-type"] ?? parsed.options.relationType;
5116
5116
  const rawActiveVariantBehavior = parsed.options["active-variant-behavior"] ?? parsed.options.activeVariantBehavior;
5117
5117
  const rawCollectionIds = parsed.options.collection ?? parsed.options.collections;
@@ -5128,11 +5128,12 @@ async function executeUpload(parsed, deps = defaultDeps$11) {
5128
5128
  if (parsed.options["dry-run"] === "true" || parsed.options.dryRun === "true") throw new UploadUsageError("--dry-run is not supported for direct file upload");
5129
5129
  if (!spaceId) throw new UploadUsageError("--space is required, or run: makefx init --space <id>");
5130
5130
  if (!assetId && !assetName) throw new UploadUsageError("Either --asset or --name is required");
5131
- if (!sourceVariantId && (parsed.options["relation-type"] || parsed.options.relationType)) throw new UploadUsageError("--relation-type requires --source-variant");
5132
5131
  const providerMetadata = parseJsonObjectOption(rawProviderMetadata, "--provider-metadata");
5133
5132
  const generationProvenance = parseJsonObjectOption(rawGenerationProvenance, "--generation-provenance");
5133
+ const sourceVariantIds = parseCsvOption$1(rawSourceVariantIds, "--source-variant");
5134
5134
  const relationType = normalizeRelationType(rawRelationType);
5135
5135
  const activeVariantBehavior = normalizeActiveVariantBehavior(rawActiveVariantBehavior);
5136
+ if (sourceVariantIds.length === 0 && (parsed.options["relation-type"] || parsed.options.relationType)) throw new UploadUsageError("--relation-type requires --source-variant or --source-variants");
5136
5137
  const collectionPlacements = parseCollectionPlacements({
5137
5138
  collectionIds: rawCollectionIds,
5138
5139
  collectionNames: rawCollectionNames,
@@ -5165,7 +5166,7 @@ async function executeUpload(parsed, deps = defaultDeps$11) {
5165
5166
  if (fileStat.size > 10485760) throw new Error(`File too large (${(fileStat.size / 1024 / 1024).toFixed(2)}MB). Maximum size: 10MB`);
5166
5167
  await preflightUploadOrganization(ctx, deps, {
5167
5168
  assetId,
5168
- sourceVariantId,
5169
+ sourceVariantIds,
5169
5170
  collectionPlacements,
5170
5171
  manualRelations
5171
5172
  });
@@ -5186,16 +5187,17 @@ async function executeUpload(parsed, deps = defaultDeps$11) {
5186
5187
  if (provider) formData.append("provider", provider);
5187
5188
  if (providerMetadata) formData.append("providerMetadata", JSON.stringify(providerMetadata));
5188
5189
  if (generationProvenance) formData.append("generationProvenance", JSON.stringify(generationProvenance));
5189
- if (sourceVariantId) formData.append("lineage", JSON.stringify([{
5190
- parentVariantId: sourceVariantId,
5190
+ if (sourceVariantIds.length > 0) formData.append("lineage", JSON.stringify(sourceVariantIds.map((parentVariantId) => ({
5191
+ parentVariantId,
5191
5192
  relationType
5192
- }]));
5193
+ }))));
5193
5194
  if (!jsonOutput) {
5194
5195
  deps.print(`\nUploading "${fileName}" to space ${spaceId}...`);
5195
5196
  deps.print(` Media kind: ${mediaType.mediaKind}`);
5196
5197
  if (assetId) deps.print(` Target asset: ${assetId}`);
5197
5198
  else deps.print(` Creating asset: "${assetName}" (${assetType})`);
5198
- if (sourceVariantId) deps.print(` Source variant: ${sourceVariantId} (${relationType})`);
5199
+ if (sourceVariantIds.length === 1) deps.print(` Source variant: ${sourceVariantIds[0]} (${relationType})`);
5200
+ else if (sourceVariantIds.length > 1) deps.print(` Source variants: ${sourceVariantIds.join(", ")} (${relationType})`);
5199
5201
  }
5200
5202
  const response = await deps.fetch(`${baseUrl}/api/spaces/${spaceId}/upload`, {
5201
5203
  method: "POST",
@@ -5372,7 +5374,7 @@ function parseManualRelations(input) {
5372
5374
  }
5373
5375
  async function preflightUploadOrganization(ctx, deps, options) {
5374
5376
  const needsCollections = options.collectionPlacements.length > 0;
5375
- const needsAssetState = Boolean(options.sourceVariantId) || options.manualRelations.length > 0 || options.collectionPlacements.some((placement) => placement.pinnedVariantId);
5377
+ const needsAssetState = options.sourceVariantIds.length > 0 || options.manualRelations.length > 0 || options.collectionPlacements.some((placement) => placement.pinnedVariantId);
5376
5378
  const [collections, state] = await Promise.all([needsCollections ? fetchJson$1(ctx, deps, `/api/spaces/${ctx.spaceId}/collections`) : void 0, needsAssetState ? fetchAssetState(ctx, deps) : void 0]);
5377
5379
  if (collections) {
5378
5380
  const collectionList = collections.collections ?? [];
@@ -5387,7 +5389,7 @@ async function preflightUploadOrganization(ctx, deps, options) {
5387
5389
  }
5388
5390
  }
5389
5391
  if (!state) return;
5390
- if (options.sourceVariantId && !state.variantsById.has(options.sourceVariantId)) throw new Error(`Source variant not found in space: ${options.sourceVariantId}`);
5392
+ for (const sourceVariantId of options.sourceVariantIds) if (!state.variantsById.has(sourceVariantId)) throw new Error(`Source variant not found in space: ${sourceVariantId}`);
5391
5393
  for (const placement of options.collectionPlacements) {
5392
5394
  if (!placement.pinnedVariantId) continue;
5393
5395
  const pinned = state.variantsById.get(placement.pinnedVariantId);
@@ -5500,7 +5502,8 @@ Options:
5500
5502
  --provider <name> Provider provenance for uploaded media
5501
5503
  --provider-metadata <json> Provider metadata JSON object
5502
5504
  --generation-provenance <json> Extra provenance JSON object
5503
- --source-variant <id> Existing source variant for upload lineage
5505
+ --source-variant <ids> Comma-separated source variants for upload lineage
5506
+ --source-variants <ids> Alias for --source-variant
5504
5507
  --relation-type <type> Lineage type: derived, refined, or forked (default: derived)
5505
5508
  --active-variant-behavior <b> if-missing, set-active, or keep
5506
5509
  --collection <ids> Comma-separated collection IDs for the uploaded asset or variant
@@ -5525,6 +5528,7 @@ Examples:
5525
5528
  makefx upload hero.png --space abc123 --name "Hero Character"
5526
5529
  makefx upload hero.png --space abc123 --name "Hero" --prompt "external render" --provider blender
5527
5530
  makefx upload paintover.png --space abc123 --asset def456 --source-variant var123 --relation-type refined
5531
+ makefx upload scene.png --space abc123 --name "Cocina" --type scene --source-variants anna,roman,bg
5528
5532
  makefx upload hero.png --space abc123 --name "Hero" --collection collection_cast --collection-role character
5529
5533
  makefx upload hero.png --space abc123 --name "Hero" --collection-name "Cast" --collection-role character
5530
5534
  makefx upload thumbnail.png --space abc123 --asset asset_thumb --manual-relation thumbnail_for:asset:asset_target
@@ -19471,6 +19475,7 @@ var UserProfileSchema = object({
19471
19475
  var SessionConfigSchema = object({
19472
19476
  googleClientId: string$1(),
19473
19477
  environment: string$1(),
19478
+ mediaCdnBaseUrl: string$1().nullable().optional(),
19474
19479
  features: object({ rotation: boolean$1() })
19475
19480
  }).openapi("SessionConfig");
19476
19481
  var AuthSessionResponseSchema = object({
@@ -25717,7 +25722,7 @@ Options:
25717
25722
  }
25718
25723
  //#endregion
25719
25724
  //#region src/cli/index.ts
25720
- var CLI_VERSION = "0.2.1+2f99bf2b725b";
25725
+ var CLI_VERSION = "0.2.2+eac63fce1aba";
25721
25726
  async function main() {
25722
25727
  const argv = process$1.argv.slice(2);
25723
25728
  if (argv[0] === "--") argv.shift();
@@ -26079,7 +26084,8 @@ Options:
26079
26084
  --provider <name> Provider provenance for uploaded media
26080
26085
  --provider-metadata <json> Provider metadata JSON object
26081
26086
  --generation-provenance <json> Extra provenance JSON object
26082
- --source-variant <id> Existing source variant for upload lineage
26087
+ --source-variant <ids> Comma-separated source variants for upload lineage
26088
+ --source-variants <ids> Alias for --source-variant
26083
26089
  --relation-type <type> Lineage type: derived, refined, or forked (default: derived)
26084
26090
  --active-variant-behavior <b> if-missing, set-active, or keep
26085
26091
  --collection <ids> Comma-separated collection IDs for the uploaded asset or variant
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "makefx",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Command-line interface for AI-assisted game asset production with Make Effects.",
5
5
  "license": "MIT",
6
6
  "type": "module",