@mrgoonie/multix 0.1.1 → 0.2.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/CHANGELOG.md +7 -0
- package/dist/cli.js +31 -15
- package/package.json +1 -1
- package/skill/SKILL.md +69 -6
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
|
+
## [0.2.0](https://github.com/mrgoonie/multix-cli/compare/v0.1.1...v0.2.0) (2026-05-27)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
* improve agent-facing command and skill descriptions ([#19](https://github.com/mrgoonie/multix-cli/issues/19)) ([a0f1dab](https://github.com/mrgoonie/multix-cli/commit/a0f1dab7e76295d5eb6a9d6dff237d28d2832596)), closes [#18](https://github.com/mrgoonie/multix-cli/issues/18)
|
|
14
|
+
|
|
8
15
|
## [0.1.1](https://github.com/mrgoonie/multix-cli/compare/v0.1.0...v0.1.1) (2026-05-20)
|
|
9
16
|
|
|
10
17
|
|
package/dist/cli.js
CHANGED
|
@@ -1240,7 +1240,7 @@ Task: ${taskId}`);
|
|
|
1240
1240
|
// src/providers/byteplus/commands/index.ts
|
|
1241
1241
|
function registerBytePlusCommands(program2) {
|
|
1242
1242
|
const byteplus = program2.command("byteplus").description(
|
|
1243
|
-
"BytePlus ModelArk: Seedream
|
|
1243
|
+
"BytePlus ModelArk: image (Seedream 4.0), video (Seedance 2.0 text/image/reference-to-video), and 3D (Hyper3D / Hitem3d)"
|
|
1244
1244
|
);
|
|
1245
1245
|
registerBytePlusGenerateCommand(byteplus);
|
|
1246
1246
|
registerBytePlusImageToImageCommand(byteplus);
|
|
@@ -1998,7 +1998,7 @@ ${data.voices.length} voices${data.has_more ? " (more available)" : ""}`);
|
|
|
1998
1998
|
// src/providers/elevenlabs/commands/index.ts
|
|
1999
1999
|
function registerElevenLabsCommands(program2) {
|
|
2000
2000
|
const el = program2.command("elevenlabs").description(
|
|
2001
|
-
"ElevenLabs:
|
|
2001
|
+
"ElevenLabs: text-to-speech, voice cloning, speech-to-text, voice changer, sound effects, music, dubbing, voice isolation, forced alignment"
|
|
2002
2002
|
);
|
|
2003
2003
|
registerTtsCommand(el);
|
|
2004
2004
|
registerVoicesCommand(el);
|
|
@@ -3037,7 +3037,7 @@ function registerTranscribeCommand2(parent) {
|
|
|
3037
3037
|
// src/providers/gemini/commands/index.ts
|
|
3038
3038
|
function registerGeminiCommands(program2) {
|
|
3039
3039
|
const gemini = program2.command("gemini").description(
|
|
3040
|
-
"Gemini
|
|
3040
|
+
"Gemini: analyze, transcribe, extract data, generate images (Imagen/Nano Banana), video (Veo), and speech (Flash TTS)"
|
|
3041
3041
|
);
|
|
3042
3042
|
registerAnalyzeCommand(gemini);
|
|
3043
3043
|
registerTranscribeCommand2(gemini);
|
|
@@ -3722,7 +3722,9 @@ Resolutions: ${LEONARDO_VIDEO_RESOLUTIONS.join(", ")}`);
|
|
|
3722
3722
|
|
|
3723
3723
|
// src/providers/leonardo/commands/index.ts
|
|
3724
3724
|
function registerLeonardoCommands(program2) {
|
|
3725
|
-
const leonardo = program2.command("leonardo").description(
|
|
3725
|
+
const leonardo = program2.command("leonardo").description(
|
|
3726
|
+
"Leonardo: image generation, video (Motion, Veo, Kling, Hailuo, Seedance, LTX), upscaling, and account info"
|
|
3727
|
+
);
|
|
3726
3728
|
registerLeonardoGenerateCommand(leonardo);
|
|
3727
3729
|
registerLeonardoImageToImageCommand(leonardo);
|
|
3728
3730
|
registerLeonardoVideoCommand(leonardo);
|
|
@@ -4348,7 +4350,7 @@ Generated ${saved.length} image(s):`);
|
|
|
4348
4350
|
|
|
4349
4351
|
// src/providers/minimax/commands/index.ts
|
|
4350
4352
|
function registerMinimaxCommands(program2) {
|
|
4351
|
-
const minimax = program2.command("minimax").description("MiniMax
|
|
4353
|
+
const minimax = program2.command("minimax").description("MiniMax: generate images, video (Hailuo), speech (TTS), and music");
|
|
4352
4354
|
registerMinimaxGenerateCommand(minimax);
|
|
4353
4355
|
registerMinimaxImageToImageCommand(minimax);
|
|
4354
4356
|
registerMinimaxGenerateVideoCommand(minimax);
|
|
@@ -4976,7 +4978,9 @@ function collect6(value, prev) {
|
|
|
4976
4978
|
|
|
4977
4979
|
// src/providers/openai/commands/index.ts
|
|
4978
4980
|
function registerOpenAICommands(program2) {
|
|
4979
|
-
const openai = program2.command("openai").description(
|
|
4981
|
+
const openai = program2.command("openai").description(
|
|
4982
|
+
"OpenAI: image generation/editing (GPT-Image, Codex driver), text-to-speech (TTS), speech-to-text (STT)"
|
|
4983
|
+
);
|
|
4980
4984
|
registerOpenAIGenerateCommand(openai);
|
|
4981
4985
|
registerOpenAIImageToImageCommand(openai);
|
|
4982
4986
|
registerOpenAIGenerateSpeechCommand(openai);
|
|
@@ -5170,7 +5174,9 @@ async function generateOpenRouterImage(opts) {
|
|
|
5170
5174
|
|
|
5171
5175
|
// src/providers/openrouter/commands/generate.ts
|
|
5172
5176
|
function registerOpenRouterGenerateCommand(parent) {
|
|
5173
|
-
parent.command("generate").description(
|
|
5177
|
+
parent.command("generate").description(
|
|
5178
|
+
"Generate images via OpenRouter (text-to-image); models: Gemini, GPT-Image, Flux, Recraft, Seedream"
|
|
5179
|
+
).requiredOption("--prompt <text>", "Image generation prompt").option("--model <id>", "OpenRouter model id (e.g. google/gemini-3.1-flash-image-preview)").option("--aspect-ratio <ratio>", "Aspect ratio (e.g. 1:1, 16:9)", "1:1").option("--image-size <size>", "Image size hint (e.g. 1K, 2K)").option("--num-images <n>", "Number of images to generate", "1").option("--output <path>", "Copy first image to this path").option("-v, --verbose", "Verbose logging").action(
|
|
5174
5180
|
async (opts) => {
|
|
5175
5181
|
const logger = createLogger({ verbose: opts.verbose ?? false });
|
|
5176
5182
|
const model = opts.model ?? resolveKey("OPENROUTER_IMAGE_MODEL") ?? DEFAULT_OPENROUTER_MODEL;
|
|
@@ -5206,7 +5212,9 @@ var DEFAULT_MODEL = "google/gemini-2.5-flash-image";
|
|
|
5206
5212
|
var SOFT_LIMIT_BYTES2 = 5 * 1024 * 1024;
|
|
5207
5213
|
var HARD_LIMIT_BYTES2 = 8 * 1024 * 1024;
|
|
5208
5214
|
function registerOpenRouterImageToImageCommand(parent) {
|
|
5209
|
-
parent.command("image-to-image").alias("i2i").description(
|
|
5215
|
+
parent.command("image-to-image").alias("i2i").description(
|
|
5216
|
+
"Edit/transform images via OpenRouter (image-to-image); models: Gemini, GPT-Image, Flux, Recraft, Seedream"
|
|
5217
|
+
).requiredOption("--prompt <text>", "Text prompt describing the edit").requiredOption(
|
|
5210
5218
|
"--ref <path>",
|
|
5211
5219
|
"Reference image (URL or local path); repeatable (most models accept 1)",
|
|
5212
5220
|
collect7,
|
|
@@ -5376,7 +5384,7 @@ async function downloadOpenRouterVideo(opts) {
|
|
|
5376
5384
|
return dest;
|
|
5377
5385
|
}
|
|
5378
5386
|
function registerOpenRouterVideoStatusCommand(parent) {
|
|
5379
|
-
parent.command("video-status <jobId>").description("Poll an OpenRouter video generation job").option("--wait", "Poll until status is 'completed' or 'failed'").option("--wait-timeout <ms>", "Poll timeout in ms (with --wait)", "600000").option("--download", "If completed, download the video (implies --wait)").option("--output <path>", "Copy downloaded video to this path").option("--no-thumb", "Skip downloading the thumbnail if the API returns one").option("-v, --verbose", "Verbose logging").action(
|
|
5387
|
+
parent.command("video-status <jobId>").description("Poll or download an OpenRouter video generation job by job ID").option("--wait", "Poll until status is 'completed' or 'failed'").option("--wait-timeout <ms>", "Poll timeout in ms (with --wait)", "600000").option("--download", "If completed, download the video (implies --wait)").option("--output <path>", "Copy downloaded video to this path").option("--no-thumb", "Skip downloading the thumbnail if the API returns one").option("-v, --verbose", "Verbose logging").action(
|
|
5380
5388
|
async (jobId, opts) => {
|
|
5381
5389
|
const logger = createLogger({ verbose: opts.verbose ?? false });
|
|
5382
5390
|
const shouldWait = !!(opts.wait || opts.download);
|
|
@@ -5426,7 +5434,9 @@ function registerOpenRouterVideoStatusCommand(parent) {
|
|
|
5426
5434
|
|
|
5427
5435
|
// src/providers/openrouter/commands/image-to-video.ts
|
|
5428
5436
|
function registerOpenRouterImageToVideoCommand(parent) {
|
|
5429
|
-
parent.command("image-to-video").alias("i2v").description(
|
|
5437
|
+
parent.command("image-to-video").alias("i2v").description(
|
|
5438
|
+
"Generate video from an image via OpenRouter (image-to-video, async); models: Veo, Seedance, Kling \u2014 use video-models to list all"
|
|
5439
|
+
).requiredOption("--prompt <text>", "Motion/scene prompt").requiredOption("--image-url <url>", "First-frame image URL (https)").option("--last-frame-url <url>", "Optional last-frame image URL").option("--model <id>", "OpenRouter video model id (e.g. google/veo-3.1)").option("--resolution <r>", "Resolution hint (e.g. 720p, 1080p)").option("--aspect-ratio <r>", "Aspect ratio hint (e.g. 16:9, 9:16)").option("--duration <n>", "Duration seconds").option("--seed <n>", "Fixed seed").option("--wait", "Poll until status is 'completed' or 'failed'").option("--wait-timeout <ms>", "Poll timeout in ms (with --wait)", "600000").option("--download", "Download the generated video on success (implies --wait)").option("--output <path>", "Copy downloaded video to this path").option("--no-thumb", "Skip downloading the thumbnail if the API returns one").option("-v, --verbose", "Verbose logging").action(
|
|
5430
5440
|
async (opts) => {
|
|
5431
5441
|
const logger = createLogger({ verbose: opts.verbose ?? false });
|
|
5432
5442
|
const model = opts.model ?? resolveKey("OPENROUTER_VIDEO_MODEL") ?? "google/veo-3.1";
|
|
@@ -5503,7 +5513,9 @@ function registerOpenRouterImageToVideoCommand(parent) {
|
|
|
5503
5513
|
|
|
5504
5514
|
// src/providers/openrouter/commands/video-models.ts
|
|
5505
5515
|
function registerOpenRouterVideoModelsCommand(parent) {
|
|
5506
|
-
parent.command("video-models").description(
|
|
5516
|
+
parent.command("video-models").description(
|
|
5517
|
+
"List available OpenRouter video-generation models (Veo, Seedance, Kling, and others)"
|
|
5518
|
+
).option("-v, --verbose", "Verbose logging").action(async (opts) => {
|
|
5507
5519
|
const logger = createLogger({ verbose: opts.verbose ?? false });
|
|
5508
5520
|
const res = await listVideoModels();
|
|
5509
5521
|
const list = res.data ?? res.models ?? [];
|
|
@@ -5516,7 +5528,9 @@ function registerOpenRouterVideoModelsCommand(parent) {
|
|
|
5516
5528
|
|
|
5517
5529
|
// src/providers/openrouter/commands/index.ts
|
|
5518
5530
|
function registerOpenRouterCommands(program2) {
|
|
5519
|
-
const openrouter = program2.command("openrouter").description(
|
|
5531
|
+
const openrouter = program2.command("openrouter").description(
|
|
5532
|
+
"OpenRouter: text-to-image, image-to-image, and video generation (image-to-video) via routed models \u2014 Veo, Seedance, Kling, and others"
|
|
5533
|
+
);
|
|
5520
5534
|
registerOpenRouterGenerateCommand(openrouter);
|
|
5521
5535
|
registerOpenRouterImageToImageCommand(openrouter);
|
|
5522
5536
|
registerOpenRouterImageToVideoCommand(openrouter);
|
|
@@ -5865,7 +5879,9 @@ function sleep5(ms) {
|
|
|
5865
5879
|
|
|
5866
5880
|
// src/commands/doc/index.ts
|
|
5867
5881
|
function registerDocCommands(program2) {
|
|
5868
|
-
const doc = program2.command("doc").description(
|
|
5882
|
+
const doc = program2.command("doc").description(
|
|
5883
|
+
"Document-to-Markdown: convert PDFs, images, DOCX, PPTX, and other docs to Markdown via Gemini"
|
|
5884
|
+
);
|
|
5869
5885
|
doc.command("convert").description("Convert documents to Markdown using Gemini Files API").requiredOption(
|
|
5870
5886
|
"--input <files...>",
|
|
5871
5887
|
"Input file(s) to convert",
|
|
@@ -6187,7 +6203,7 @@ async function splitVideo(opts) {
|
|
|
6187
6203
|
// src/commands/media/index.ts
|
|
6188
6204
|
function registerMediaCommands(program2) {
|
|
6189
6205
|
const media = program2.command("media").description(
|
|
6190
|
-
"Media
|
|
6206
|
+
"Media processing via ffmpeg/ImageMagick: compress video/audio/images, split long videos, batch optimize directories"
|
|
6191
6207
|
);
|
|
6192
6208
|
media.command("optimize").description("Optimize a single media file (video, audio, or image)").requiredOption("--input <file>", "Input media file").requiredOption("--output <file>", "Output file path").option("--target-size <MB>", "Target file size in MB").option("--quality <n>", "Quality: video CRF (0-51) or image (1-100)", "85").option("--max-width <px>", "Max image/video width in pixels", "1920").option("--bitrate <rate>", "Audio bitrate (e.g. 64k)", "64k").option("--resolution <WxH>", "Force video resolution (e.g. 1920x1080)").option("-v, --verbose", "Verbose logging").action(
|
|
6193
6209
|
async (opts) => {
|
|
@@ -6294,7 +6310,7 @@ loadEnv();
|
|
|
6294
6310
|
var require2 = createRequire(import.meta.url);
|
|
6295
6311
|
var pkg = require2("../package.json");
|
|
6296
6312
|
var program = new Command().name("multix").description(
|
|
6297
|
-
"AI multimodal CLI \u2014 Gemini
|
|
6313
|
+
"AI multimodal CLI \u2014 image/video/audio/3D generation, editing, transcription, and media processing via OpenAI, Gemini, MiniMax, OpenRouter, Leonardo, BytePlus, ElevenLabs, ffmpeg, and ImageMagick"
|
|
6298
6314
|
).version(pkg.version);
|
|
6299
6315
|
registerCommands(program);
|
|
6300
6316
|
program.parseAsync(process.argv).catch((err2) => {
|
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: multix
|
|
3
|
-
description: AI multimodal CLI — generate and edit images (OpenAI, Codex driver, Gemini Nano Banana, Imagen, MiniMax, OpenRouter, Leonardo, BytePlus Seedream), generate video (Veo, Hailuo, Seedance, Leonardo), TTS/STT/music (OpenAI, Gemini Flash TTS, MiniMax, ElevenLabs), 3D models (Hyper3D), analyze/transcribe media, convert documents to Markdown, optimize media via ffmpeg/ImageMagick. Use whenever the user wants to create, edit, or transform images/video/audio/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, ElevenLabs voice cloning, or asks for batch media optimization.
|
|
4
|
-
version: 0.
|
|
3
|
+
description: AI multimodal CLI — generate and edit images (OpenAI, Codex driver, Gemini Nano Banana, Imagen, MiniMax, OpenRouter, Leonardo, BytePlus Seedream), generate video (Gemini Veo, MiniMax Hailuo, OpenRouter via Veo/Seedance/Kling, Leonardo via Motion/Veo/Kling/Hailuo/Seedance/LTX, BytePlus Seedance), TTS/STT/music (OpenAI, Gemini Flash TTS, MiniMax, ElevenLabs), 3D models (BytePlus Hyper3D/Hitem3d), analyze/transcribe media, convert documents to Markdown, optimize media via ffmpeg/ImageMagick. 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, video generation, text-to-video, image-to-video, i2v, ElevenLabs voice cloning, or asks for batch media optimization.
|
|
4
|
+
version: 0.2.0 # x-release-please-version
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# multix — AI Multimodal CLI
|
|
@@ -12,8 +12,11 @@ Activate this skill when the user asks to:
|
|
|
12
12
|
- Generate images from a text prompt (any provider)
|
|
13
13
|
- **Edit/transform an existing image with a prompt** (image-to-image, alias `i2i`)
|
|
14
14
|
- Generate video from text or from a reference image (image-to-video, alias `i2v`)
|
|
15
|
+
- **Generate video via OpenRouter routed models** (Veo, Seedance, Kling — use `multix openrouter video-models` to list)
|
|
16
|
+
- **Generate video via BytePlus Seedance** directly (text-to-video, image-to-video, reference-to-video)
|
|
17
|
+
- **Generate video via Leonardo** (Motion, Veo, Kling, Hailuo, Seedance, LTX models)
|
|
15
18
|
- Generate or clone a voice, run STT, generate music or sound effects
|
|
16
|
-
- Generate 3D models (Hyper3D / Hitem3d)
|
|
19
|
+
- Generate 3D models (BytePlus Hyper3D / Hitem3d)
|
|
17
20
|
- Analyze, transcribe, or extract structured data from media/docs
|
|
18
21
|
- Convert PDFs / DOCX / images to Markdown
|
|
19
22
|
- Optimize, resize, batch-convert, or split video/audio/image files
|
|
@@ -23,7 +26,7 @@ Activate this skill when the user asks to:
|
|
|
23
26
|
```
|
|
24
27
|
GEMINI_API_KEY # Google AI Studio
|
|
25
28
|
OPENAI_API_KEY # OpenAI API (image, image edit, TTS, STT)
|
|
26
|
-
OPENROUTER_API_KEY # OpenRouter (multi-model gateway)
|
|
29
|
+
OPENROUTER_API_KEY # OpenRouter (multi-model gateway: image + video via Veo, Seedance, Kling)
|
|
27
30
|
MINIMAX_API_KEY # MiniMax (image/video/speech/music)
|
|
28
31
|
LEONARDO_API_KEY # Leonardo.Ai (image/video/upscale)
|
|
29
32
|
BYTEPLUS_API_KEY # BytePlus / Volcengine ARK (Seedream/Seedance/Hyper3D)
|
|
@@ -138,8 +141,9 @@ multix gemini i2v ./photo.jpg --prompt "camera pans left" [--last-frame <path>]
|
|
|
138
141
|
# MiniMax Hailuo — async with auto-poll
|
|
139
142
|
multix minimax generate-video --prompt "A dancer" --duration 6 --resolution 1080P [--first-frame <url>]
|
|
140
143
|
|
|
141
|
-
# OpenRouter
|
|
142
|
-
multix openrouter i2v --prompt "<text>" --image-url https://... [--
|
|
144
|
+
# OpenRouter — video via routed models (Veo, Seedance, Kling); async, URL input only
|
|
145
|
+
multix openrouter i2v --prompt "<text>" --image-url https://... [--model google/veo-3.1] [--resolution 720p]
|
|
146
|
+
multix openrouter video-models # list all available video models
|
|
143
147
|
multix openrouter video-status <jobId> [--download] [--output <path>]
|
|
144
148
|
|
|
145
149
|
# Leonardo MOTION2 / VEO3 / kling
|
|
@@ -154,6 +158,30 @@ multix byteplus reference-to-video --prompt "<text>" --ref-image ./hero.jpg:subj
|
|
|
154
158
|
|
|
155
159
|
All video commands accept `--wait`, `--wait-timeout <ms>`, `--download`, `--output <path>`, `--no-thumb`.
|
|
156
160
|
|
|
161
|
+
### Decision tree — which provider to pick for video generation
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
User wants to generate a video?
|
|
165
|
+
├── Text-to-video?
|
|
166
|
+
│ ├── Gemini Veo (experimental, Google billing) → multix gemini generate-video
|
|
167
|
+
│ ├── MiniMax Hailuo (async, auto-poll) → multix minimax generate-video
|
|
168
|
+
│ ├── Leonardo (Motion/Veo/Kling/Hailuo/Seedance/LTX) → multix leonardo video
|
|
169
|
+
│ └── BytePlus Seedance 2.0 (direct) → multix byteplus video
|
|
170
|
+
├── Image-to-video?
|
|
171
|
+
│ ├── Gemini Veo (experimental) → multix gemini i2v
|
|
172
|
+
│ ├── OpenRouter (Veo, Seedance, Kling — URL input) → multix openrouter i2v --image-url <url>
|
|
173
|
+
│ ├── Leonardo (needs imageId from Leonardo upload) → multix leonardo i2v
|
|
174
|
+
│ └── BytePlus Seedance 2.0 (local file or URL) → multix byteplus i2v
|
|
175
|
+
└── Multi-reference video (images + videos + audio)? → multix byteplus reference-to-video
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Provider selection hints for agents
|
|
179
|
+
|
|
180
|
+
- **OpenRouter video** supports Veo, Seedance, Kling, and more via model routing. Image input must be a URL (not a local file). Run `multix openrouter video-models` to discover available models.
|
|
181
|
+
- **BytePlus Seedance** is the best choice when `BYTEPLUS_API_KEY` is available and you need text-to-video, image-to-video (local file or URL), or multi-reference video.
|
|
182
|
+
- **Leonardo** offers the widest model selection (Motion, Veo, Kling, Hailuo, Seedance, LTX) but requires a Leonardo API key.
|
|
183
|
+
- If one provider's key is unavailable, fall back to another that supports the same capability.
|
|
184
|
+
|
|
157
185
|
## Speech, music, voice, 3D, docs, media
|
|
158
186
|
|
|
159
187
|
```bash
|
|
@@ -205,6 +233,41 @@ Files saved under `./multix-output/` by default. Override with `MULTIX_OUTPUT_DI
|
|
|
205
233
|
| `BYTEPLUS_VIDEO_PARAMS_MODE` | `flags` (default) or `structured` |
|
|
206
234
|
| `MULTIX_DISABLE_HOME_ENV` | `1` to skip `~/.multix/.env` |
|
|
207
235
|
|
|
236
|
+
## Quick examples for agents
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
# Text-to-image
|
|
240
|
+
multix openai generate --prompt "A sunset over mountains"
|
|
241
|
+
multix gemini generate --prompt "A sunset over mountains" --aspect-ratio 16:9
|
|
242
|
+
multix openrouter generate --prompt "A sunset over mountains" --num-images 2
|
|
243
|
+
multix byteplus generate --prompt "A sunset over mountains" --size 2K
|
|
244
|
+
|
|
245
|
+
# Image-to-image (edit an existing image)
|
|
246
|
+
multix gemini i2i --prompt "make it watercolor" --ref ./photo.jpg
|
|
247
|
+
multix openrouter i2i --prompt "make it cyberpunk" --ref ./photo.jpg
|
|
248
|
+
|
|
249
|
+
# Text-to-video
|
|
250
|
+
multix byteplus video --prompt "Ocean waves crashing on rocks" --duration 8
|
|
251
|
+
multix leonardo video "Ocean waves crashing on rocks" --model kling-2.6
|
|
252
|
+
multix gemini generate-video --prompt "Ocean waves crashing on rocks"
|
|
253
|
+
|
|
254
|
+
# Image-to-video
|
|
255
|
+
multix openrouter i2v --prompt "camera slowly pans left" --image-url https://example.com/photo.jpg
|
|
256
|
+
multix byteplus i2v ./photo.jpg --prompt "camera slowly pans left"
|
|
257
|
+
|
|
258
|
+
# Transcribe / analyze media
|
|
259
|
+
multix gemini analyze --files ./video.mp4 --prompt "Summarize this video"
|
|
260
|
+
multix gemini transcribe --files ./audio.mp3
|
|
261
|
+
multix elevenlabs transcribe --input ./audio.mp3 --diarize
|
|
262
|
+
|
|
263
|
+
# Compress / split media
|
|
264
|
+
multix media optimize --input large.mp4 --output small.mp4 --target-size 50
|
|
265
|
+
multix media split --input long-video.mp4 --chunk-duration 600
|
|
266
|
+
|
|
267
|
+
# Convert document to markdown
|
|
268
|
+
multix doc convert --input report.pdf --auto-name
|
|
269
|
+
```
|
|
270
|
+
|
|
208
271
|
## Security & scope
|
|
209
272
|
|
|
210
273
|
This skill produces shell commands for the local `multix` CLI. It does NOT execute the commands itself, exfiltrate API keys, or modify provider accounts.
|