@mrgoonie/multix 1.0.5 → 1.0.6
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/CHANGELOG.md +7 -0
- package/dist/cli.js +47 -18
- package/package.json +1 -1
- package/skill/SKILL.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.0.6](https://github.com/mrgoonie/multix-cli/compare/v1.0.5...v1.0.6) (2026-10-11)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
* **providers:** read model defaults after loading .env files ([#121](https://github.com/mrgoonie/multix-cli/issues/121)) ([5f36dba](https://github.com/mrgoonie/multix-cli/commit/5f36dba0fc7a1ccbe3d904e928c4ef82b3c6ce36))
|
|
14
|
+
|
|
8
15
|
## [1.0.5](https://github.com/mrgoonie/multix-cli/compare/v1.0.4...v1.0.5) (2026-10-11)
|
|
9
16
|
|
|
10
17
|
|
package/dist/cli.js
CHANGED
|
@@ -3006,6 +3006,11 @@ async function poll(opts) {
|
|
|
3006
3006
|
// src/providers/byteplus/client.ts
|
|
3007
3007
|
init_errors();
|
|
3008
3008
|
|
|
3009
|
+
// src/core/env-default.ts
|
|
3010
|
+
function envDefault(name, fallback) {
|
|
3011
|
+
return process.env[name]?.trim() || fallback;
|
|
3012
|
+
}
|
|
3013
|
+
|
|
3009
3014
|
// src/providers/byteplus/models.ts
|
|
3010
3015
|
var DEFAULT_BYTEPLUS_BASE_URL = "https://ark.ap-southeast.bytepluses.com/api/v3";
|
|
3011
3016
|
var BYTEPLUS_ROUTING = {
|
|
@@ -3021,9 +3026,15 @@ var BYTEPLUS_3D_MODELS = [
|
|
|
3021
3026
|
{ id: "hitem3d-2-0-251223", name: "Hitem3d 2.0", family: "hitem3d" }
|
|
3022
3027
|
];
|
|
3023
3028
|
var BYTEPLUS_DEFAULTS = {
|
|
3024
|
-
imageModel
|
|
3025
|
-
|
|
3026
|
-
|
|
3029
|
+
get imageModel() {
|
|
3030
|
+
return envDefault("BYTEPLUS_IMAGE_MODEL", DEFAULT_BYTEPLUS_IMAGE_MODEL);
|
|
3031
|
+
},
|
|
3032
|
+
get videoModel() {
|
|
3033
|
+
return envDefault("BYTEPLUS_VIDEO_MODEL", DEFAULT_BYTEPLUS_VIDEO_MODEL);
|
|
3034
|
+
},
|
|
3035
|
+
get threeDModel() {
|
|
3036
|
+
return envDefault("BYTEPLUS_3D_MODEL", DEFAULT_BYTEPLUS_3D_MODEL);
|
|
3037
|
+
},
|
|
3027
3038
|
videoResolution: "1080p",
|
|
3028
3039
|
videoDuration: 8,
|
|
3029
3040
|
videoAspectRatio: "16:9",
|
|
@@ -5024,11 +5035,17 @@ var FAL_ROUTING = {
|
|
|
5024
5035
|
};
|
|
5025
5036
|
var FAL_DEFAULTS = {
|
|
5026
5037
|
// FLUX.1 [schnell] — fast, low-cost default text-to-image model.
|
|
5027
|
-
imageModel
|
|
5038
|
+
get imageModel() {
|
|
5039
|
+
return envDefault("FAL_IMAGE_MODEL", "fal-ai/flux/schnell");
|
|
5040
|
+
},
|
|
5028
5041
|
// Stable, widely available default text-to-video model.
|
|
5029
|
-
videoModel
|
|
5042
|
+
get videoModel() {
|
|
5043
|
+
return envDefault("FAL_VIDEO_MODEL", "fal-ai/kling-video/v1.6/standard/text-to-video");
|
|
5044
|
+
},
|
|
5030
5045
|
// Matching image-to-video model — used when --image-url is passed without -m.
|
|
5031
|
-
videoImageModel
|
|
5046
|
+
get videoImageModel() {
|
|
5047
|
+
return envDefault("FAL_VIDEO_IMAGE_MODEL", "fal-ai/kling-video/v1.6/standard/image-to-video");
|
|
5048
|
+
}
|
|
5032
5049
|
};
|
|
5033
5050
|
|
|
5034
5051
|
// src/providers/fal/run-helpers.ts
|
|
@@ -6098,15 +6115,15 @@ var ASPECT_RATIOS = [
|
|
|
6098
6115
|
var IMAGE_SIZES = ["1K", "2K", "4K"];
|
|
6099
6116
|
function getDefaultModel(task) {
|
|
6100
6117
|
if (task === "generate") {
|
|
6101
|
-
return
|
|
6118
|
+
return envDefault("IMAGE_GEN_MODEL", envDefault("GEMINI_IMAGE_GEN_MODEL", IMAGE_MODEL_DEFAULT));
|
|
6102
6119
|
}
|
|
6103
6120
|
if (task === "generate-video") {
|
|
6104
|
-
return
|
|
6121
|
+
return envDefault("VIDEO_GEN_MODEL", VIDEO_MODEL_DEFAULT);
|
|
6105
6122
|
}
|
|
6106
6123
|
if (task === "generate-speech") {
|
|
6107
|
-
return
|
|
6124
|
+
return envDefault("GEMINI_TTS_MODEL", envDefault("TTS_MODEL", TTS_MODEL_DEFAULT));
|
|
6108
6125
|
}
|
|
6109
|
-
return
|
|
6126
|
+
return envDefault("MULTIMODAL_MODEL", envDefault("GEMINI_MODEL", ANALYSIS_MODEL_DEFAULT));
|
|
6110
6127
|
}
|
|
6111
6128
|
|
|
6112
6129
|
// src/providers/gemini/result-formatter.ts
|
|
@@ -8969,8 +8986,12 @@ var LEONARDO_ROUTING = {
|
|
|
8969
8986
|
};
|
|
8970
8987
|
var DEFAULT_LEONARDO_MODEL_ID = "7b592283-e8a7-4c5a-9ba6-d18c31f258b9";
|
|
8971
8988
|
var LEONARDO_DEFAULTS = {
|
|
8972
|
-
modelId
|
|
8973
|
-
|
|
8989
|
+
get modelId() {
|
|
8990
|
+
return envDefault("LEONARDO_DEFAULT_MODEL", DEFAULT_LEONARDO_MODEL_ID);
|
|
8991
|
+
},
|
|
8992
|
+
get videoModel() {
|
|
8993
|
+
return envDefault("LEONARDO_VIDEO_MODEL", "MOTION2");
|
|
8994
|
+
},
|
|
8974
8995
|
width: 1024,
|
|
8975
8996
|
height: 1024,
|
|
8976
8997
|
numImages: 1
|
|
@@ -9819,10 +9840,18 @@ var ALL_MINIMAX_MODELS = /* @__PURE__ */ new Set([
|
|
|
9819
9840
|
...MINIMAX_MUSIC_MODELS
|
|
9820
9841
|
]);
|
|
9821
9842
|
var TASK_DEFAULTS2 = {
|
|
9822
|
-
image
|
|
9823
|
-
|
|
9824
|
-
|
|
9825
|
-
|
|
9843
|
+
get image() {
|
|
9844
|
+
return envDefault("MINIMAX_IMAGE_MODEL", "image-01");
|
|
9845
|
+
},
|
|
9846
|
+
get video() {
|
|
9847
|
+
return envDefault("MINIMAX_VIDEO_MODEL", "MiniMax-Hailuo-2.3");
|
|
9848
|
+
},
|
|
9849
|
+
get speech() {
|
|
9850
|
+
return envDefault("MINIMAX_SPEECH_MODEL", "speech-2.8-hd");
|
|
9851
|
+
},
|
|
9852
|
+
get music() {
|
|
9853
|
+
return envDefault("MINIMAX_MUSIC_MODEL", "music-2.5");
|
|
9854
|
+
}
|
|
9826
9855
|
};
|
|
9827
9856
|
var VIDEO_DURATIONS = [6, 10];
|
|
9828
9857
|
var VIDEO_RESOLUTIONS = ["720P", "1080P"];
|
|
@@ -10548,7 +10577,7 @@ async function transcribeOpenAIAudio(opts) {
|
|
|
10548
10577
|
|
|
10549
10578
|
// src/providers/openai/commands/generate-speech.ts
|
|
10550
10579
|
function registerOpenAIGenerateSpeechCommand(parent) {
|
|
10551
|
-
parent.command("generate-speech").description("Generate speech with OpenAI TTS").option("--text <str>", "Text to speak").option("--prompt <str>", "Alias for --text").option("--model <id>", "TTS model",
|
|
10580
|
+
parent.command("generate-speech").description("Generate speech with OpenAI TTS").option("--text <str>", "Text to speak").option("--prompt <str>", "Alias for --text").option("--model <id>", "TTS model", envDefault("OPENAI_TTS_MODEL", DEFAULT_OPENAI_TTS_MODEL)).option("--voice <name>", "OpenAI voice", "marin").option("--instructions <text>", "Voice/style instructions").option("--output-format <fmt>", "mp3|opus|aac|flac|wav|pcm", "mp3").option("--output <path>", "Copy generated audio to this path").option("-v, --verbose", "Verbose logging").action(async (opts) => {
|
|
10552
10581
|
const text = opts.text ?? opts.prompt;
|
|
10553
10582
|
if (!text) throw new ValidationError("Either --text or --prompt is required");
|
|
10554
10583
|
validateTtsVoice(opts.voice);
|
|
@@ -10867,7 +10896,7 @@ function collect6(value, prev) {
|
|
|
10867
10896
|
|
|
10868
10897
|
// src/providers/openai/commands/transcribe.ts
|
|
10869
10898
|
function registerOpenAITranscribeCommand(parent) {
|
|
10870
|
-
parent.command("transcribe").description("Transcribe audio/video with OpenAI STT").requiredOption("--input <path>", "Audio or video file").option("--model <id>", "STT model",
|
|
10899
|
+
parent.command("transcribe").description("Transcribe audio/video with OpenAI STT").requiredOption("--input <path>", "Audio or video file").option("--model <id>", "STT model", envDefault("OPENAI_STT_MODEL", DEFAULT_OPENAI_STT_MODEL)).option("--format <fmt>", "json|text|diarized_json", "text").option("--language <code>", "ISO language code").option("--chunking-strategy <strategy>", "e.g. auto").option(
|
|
10871
10900
|
"--known-speaker-name <name>",
|
|
10872
10901
|
"Known speaker name; repeatable",
|
|
10873
10902
|
collect7,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mrgoonie/multix",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "AI multimodal CLI — OpenAI, Gemini, MiniMax, OpenRouter, Leonardo, BytePlus, ElevenLabs, fal.ai, Atlas Cloud, Replicate, HeyGen, ffmpeg, ImageMagick, doc-to-md",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
package/skill/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: multix
|
|
3
3
|
description: AI multimodal CLI — generate and edit images (OpenAI, Codex driver, Gemini Nano Banana, Imagen, MiniMax, OpenRouter, Leonardo, BytePlus Seedream, Cloudflare Workers AI FLUX.1 Schnell, fal.ai FLUX, Replicate FLUX), generate video (Gemini Veo, MiniMax Hailuo, OpenRouter via Veo/Seedance/Kling, Leonardo via Motion/Veo/Kling/Hailuo/Seedance/LTX, BytePlus Seedance, Cloudflare AI Gateway via Replicate, fal.ai queue models, Replicate direct API models incl. P-Video, HeyGen Video Agent and scripted avatar videos), video translation and lipsync (HeyGen), TTS/STT/music (OpenAI, Gemini Flash TTS incl. Gemini 3.8 with delivery-style control, MiniMax, Cloudflare Workers AI MeloTTS, ElevenLabs), 3D models (BytePlus Hyper3D/Hitem3d), analyze/transcribe media, convert documents to Markdown, optimize media via ffmpeg/ImageMagick, and self-update the CLI. Use whenever the user wants to create, edit, or transform images/video/audio/3D/documents from a CLI, mentions any of: OpenAI, Codex image driver, image-to-image, i2i, image edit, watercolor/cyberpunk style transfer, reference image, OpenRouter, Nano Banana, Flux, Seedream, Veo, Hailuo, Seedance, Kling, Cloudflare Workers AI, AI Gateway, fal.ai, Atlas Cloud, Replicate, replicate.com models, Replicate predictions, HeyGen, avatar video, talking head, Video Agent, video translation, dubbing, lipsync, video generation, text-to-video, image-to-video, i2v, ElevenLabs voice cloning, updating/upgrading multix, or asks for batch media optimization.
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.6 # x-release-please-version
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# multix — AI Multimodal CLI
|