makefx 1.6.1 → 1.6.3

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 +29 -12
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -61,4 +61,4 @@ IDs, or runs. Retired commands and aliases are not redirected.
61
61
 
62
62
  Run `makefx --help` or `makefx <noun> --help` for current options.
63
63
 
64
- Version: 1.6.1
64
+ Version: 1.6.3
package/makefx.mjs CHANGED
@@ -4438,7 +4438,7 @@ require_websocket_server();
4438
4438
  var wrapper_default = import_websocket.default;
4439
4439
  //#endregion
4440
4440
  //#region src/cli/version.ts
4441
- var CLI_VERSION = "1.6.1+00259d259e65";
4441
+ var CLI_VERSION = "1.6.3+203ed3ea216e";
4442
4442
  var CLI_VERSION_HEADER = "X-MakeFX-CLI-Version";
4443
4443
  function cliVersionHeaders() {
4444
4444
  return {
@@ -5780,6 +5780,18 @@ Usage:
5780
5780
  `);
5781
5781
  }
5782
5782
  //#endregion
5783
+ //#region src/shared/audioGenerationOptions.ts
5784
+ var DEFAULT_ELEVENLABS_SPEECH_MODEL_ID = "eleven_v3";
5785
+ /**
5786
+ * Keep the provider-native ElevenLabs ID canonical everywhere after an input
5787
+ * boundary. The hyphenated MakeFX slug is accepted only for migration.
5788
+ */
5789
+ function normalizeElevenLabsSpeechModelId(model) {
5790
+ const normalized = model?.trim();
5791
+ if (!normalized) return void 0;
5792
+ return normalized === "eleven-v3" ? DEFAULT_ELEVENLABS_SPEECH_MODEL_ID : normalized;
5793
+ }
5794
+ //#endregion
5783
5795
  //#region src/backend/utils/audio-metadata.ts
5784
5796
  function readWavDurationMs(bytes) {
5785
5797
  if (bytes.byteLength < 12) return void 0;
@@ -6870,8 +6882,9 @@ function getAudioModeFromType(type) {
6870
6882
  }
6871
6883
  function validateAudioModelOption(value, mode) {
6872
6884
  if (!value) return;
6873
- const supported = mode === "music" ? ["eleven-music", "lyria-3"] : mode === "sfx" ? ["eleven-sfx"] : mode === "speech" || mode === "dialogue" ? ["eleven-v3"] : [];
6874
- if (!supported.includes(value)) throw new Error(`Unsupported ${mode ?? "audio"} model: ${value}. Expected ${supported.join(" or ")}`);
6885
+ const normalized = mode === "speech" || mode === "dialogue" ? normalizeElevenLabsSpeechModelId(value) : value;
6886
+ const supported = mode === "music" ? ["eleven-music", "lyria-3"] : mode === "sfx" ? ["eleven-sfx"] : mode === "speech" || mode === "dialogue" ? [DEFAULT_ELEVENLABS_SPEECH_MODEL_ID] : [];
6887
+ if (!normalized || !supported.includes(normalized)) throw new Error(`Unsupported ${mode ?? "audio"} model: ${value}. Expected ${supported.join(" or ")}`);
6875
6888
  }
6876
6889
  function parseMusicProviderOption(parsed, mediaKind, assetType) {
6877
6890
  const value = parsed.options.model;
@@ -7067,7 +7080,6 @@ async function preflightLocalSeedanceReferences(options, deps, state) {
7067
7080
  if (videoBytes >= 50 * 1024 * 1024) throw new Error("Seedance reference videos must total under 50 MB");
7068
7081
  const hasCompleteVideoDurations = inspections.video.every((item) => item.durationMs !== void 0);
7069
7082
  if (inspections.video.length > 0 && hasCompleteVideoDurations && (videoDurationMs < 2e3 || videoDurationMs > 15e3)) throw new Error("Seedance reference videos must total 2 to 15 seconds");
7070
- if (inspections.audio.reduce((total, item) => total + (item.durationMs ?? 0), 0) > 15e3) throw new Error("Seedance reference audio must total at most 15 seconds");
7071
7083
  }
7072
7084
  async function resolveReferenceVariantIds(refs, ctx, deps, variants = [], mediaKind = CLI_GENERATION_MEDIA_KIND, assets = [], expectedReferenceMediaKind) {
7073
7085
  const variantIds = [];
@@ -7435,9 +7447,12 @@ function normalizeCliOption(value) {
7435
7447
  if (value === void 0 || value === "true") return void 0;
7436
7448
  return value.trim() || void 0;
7437
7449
  }
7438
- function parseAudioGenerationOptions(_parsed, mediaKind) {
7450
+ function parseAudioGenerationOptions(parsed, mediaKind) {
7439
7451
  if (mediaKind !== "audio") return {};
7440
- return {};
7452
+ const mode = getAudioModeFromType(parsed.options.type);
7453
+ if (mode !== "speech" && mode !== "dialogue") return {};
7454
+ const model = normalizeElevenLabsSpeechModelId(parsed.options.model);
7455
+ return model ? { model } : {};
7441
7456
  }
7442
7457
  function parseImageGenerationOptions(parsed, mediaKind) {
7443
7458
  if (mediaKind !== "image") return {};
@@ -7638,6 +7653,7 @@ function parseWaitSeconds$1(value) {
7638
7653
  function buildRegenerationBody(mediaKind, parsed, referenceVariantIds, audioMode, sourceRecipe) {
7639
7654
  const prompt = parsed.positionals[1] ?? parsed.options.prompt;
7640
7655
  const model = parsed.options.model;
7656
+ const audioModel = mediaKind === "audio" && (audioMode === "speech" || audioMode === "dialogue") ? normalizeElevenLabsSpeechModelId(model) : void 0;
7641
7657
  const params = {};
7642
7658
  let duration;
7643
7659
  let modelProvider;
@@ -7658,7 +7674,7 @@ function buildRegenerationBody(mediaKind, parsed, referenceVariantIds, audioMode
7658
7674
  if (parsed.options["no-audio"] === "true") params.generateAudio = false;
7659
7675
  } else {
7660
7676
  if (!audioMode) throw new Error("Audio regeneration mode is required");
7661
- validateAudioModel(audioMode, model);
7677
+ validateAudioModel(audioMode, audioModel ?? model);
7662
7678
  if (parsed.options.voice) params.voiceId = parsed.options.voice;
7663
7679
  if (parsed.options["dialogue-voices"]) params.dialogueVoiceIds = splitList(parsed.options["dialogue-voices"]);
7664
7680
  if (audioMode === "music" && model) params.musicProvider = model === "lyria-3" ? "lyria" : "elevenlabs";
@@ -7667,6 +7683,7 @@ function buildRegenerationBody(mediaKind, parsed, referenceVariantIds, audioMode
7667
7683
  ...prompt ? { prompt } : {},
7668
7684
  ...model && mediaKind === "image" ? { model } : {},
7669
7685
  ...model && mediaKind === "video" ? { model: resolveVideoRegenerationModel(model, parsed, sourceRecipe) } : {},
7686
+ ...audioModel ? { model: audioModel } : {},
7670
7687
  ...modelProvider ? { modelProvider } : {},
7671
7688
  ...referenceVariantIds !== void 0 ? { referenceVariantIds } : {},
7672
7689
  ...Object.keys(params).length > 0 ? { params } : {},
@@ -7708,7 +7725,7 @@ function parseStoredRecipe$2(recipe) {
7708
7725
  }
7709
7726
  function validateAudioModel(mode, model) {
7710
7727
  if (!model) return;
7711
- const supported = mode === "music" ? ["eleven-music", "lyria-3"] : mode === "sfx" ? ["eleven-sfx"] : ["eleven-v3"];
7728
+ const supported = mode === "music" ? ["eleven-music", "lyria-3"] : mode === "sfx" ? ["eleven-sfx"] : [DEFAULT_ELEVENLABS_SPEECH_MODEL_ID];
7712
7729
  if (!supported.includes(model)) throw new Error(`Unsupported ${mode} model: ${model}. Expected ${supported.join(" or ")}`);
7713
7730
  }
7714
7731
  function parseReferences(mediaKind, options) {
@@ -11497,10 +11514,10 @@ Seedance mode is inferred: first/last frame selects frame mode, image/video/audi
11497
11514
  makefx audio voices [--json]
11498
11515
  makefx audio align <variant-ref> "transcript" [--space <id>] [--json]
11499
11516
  makefx audio align <variant-ref> --input transcript.txt [--space <id>] [--json]
11500
- makefx audio speech generate "text" --voice <voice-id> --name <name> -o <file>
11501
- makefx audio speech regenerate <variant-ref> ["text"] [--voice <voice-id>] [--no-activate] [--wait]
11502
- makefx audio dialogue generate --input <file> --dialogue-voices <id,id> --name <name> -o <file>
11503
- makefx audio dialogue regenerate <variant-ref> ["script"] [--dialogue-voices <id,id>] [--no-activate] [--wait]
11517
+ makefx audio speech generate "text" [--model eleven_v3] --voice <voice-id> --name <name> -o <file>
11518
+ makefx audio speech regenerate <variant-ref> ["text"] [--model eleven_v3] [--voice <voice-id>] [--no-activate] [--wait]
11519
+ makefx audio dialogue generate --input <file> [--model eleven_v3] --dialogue-voices <id,id> --name <name> -o <file>
11520
+ makefx audio dialogue regenerate <variant-ref> ["script"] [--model eleven_v3] [--dialogue-voices <id,id>] [--no-activate] [--wait]
11504
11521
  makefx audio music generate "prompt" --model eleven-music|lyria-3 --name <name> -o <file>
11505
11522
  makefx audio music regenerate <variant-ref> ["prompt"] [--model eleven-music|lyria-3] [--no-activate] [--wait]
11506
11523
  makefx audio sfx generate "prompt" --name <name> -o <file>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "makefx",
3
- "version": "1.6.1",
3
+ "version": "1.6.3",
4
4
  "description": "Command-line interface for AI-assisted game asset production with Make Effects.",
5
5
  "license": "MIT",
6
6
  "type": "module",