@mrgoonie/multix 0.0.7 → 0.1.0-beta
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 +24 -0
- package/README.md +60 -5
- package/dist/cli.js +891 -157
- package/package.json +4 -2
- package/skill/SKILL.md +159 -101
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,30 @@ 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.1.0-beta](https://github.com/mrgoonie/multix-cli/compare/v0.0.8...v0.1.0-beta) (2026-05-19)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
* **openai:** add provider media commands ([#9](https://github.com/mrgoonie/multix-cli/issues/9)) ([4622102](https://github.com/mrgoonie/multix-cli/commit/46221029ac98f6da03653397d20e2e604f7f39c1))
|
|
14
|
+
|
|
15
|
+
## [0.0.8] - 2026-05-11
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
- `multix openrouter image-to-image` previously failed for any non-Gemini text+image model (e.g. `openai/gpt-5.4-image-2`, `openai/gpt-5-image-mini`, `recraft/recraft-v3`) because the `modalities` heuristic forced `["image"]` for non-Gemini models. The new default is `["image","text"]`, with `["image"]` only emitted for verified image-only families (`black-forest-labs/`, `bytedance-seed/seedream`, `sourceful/`).
|
|
19
|
+
- "No images in response" errors now include the model id, `finish_reason`, the model's text reply (if any), and a hint about modalities — previously a single generic line.
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
- `multix openrouter image-to-image --strength <0..1>` — Recraft init-image strength control.
|
|
23
|
+
- `OPENROUTER_FALLBACK_MODELS` (CSV) now applies to `image-to-image` (previously `generate` only). Sends `models: [primary, ...fallbacks]` so OpenRouter can route on availability.
|
|
24
|
+
- New shared module `src/providers/openrouter/payload.ts` — `resolveModalities`, `buildOpenRouterHeaders`, `extractImagesFromResponse`, `formatNoImagesError`, `buildI2IPayload`. DRY across `generate` + `image-to-image`.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
- README and `skill/SKILL.md` document the OpenRouter model-family matrix (Gemini / OpenAI gpt-image / Recraft → text+image; Flux 2.x / Seedream 4.5 / Sourceful → image-only) and the new flags.
|
|
28
|
+
|
|
29
|
+
### Verified live
|
|
30
|
+
`openai/gpt-5.4-image-2`, `openai/gpt-5-image-mini`, `google/gemini-2.5-flash-image`, `black-forest-labs/flux.2-pro`, `flux.2-max`, `flux.2-flex`, `bytedance-seed/seedream-4.5`.
|
|
31
|
+
|
|
8
32
|
## [0.0.7] - 2026-05-05
|
|
9
33
|
|
|
10
34
|
### Added
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
AI multimodal CLI — generate images/video/speech/music, analyze and transcribe media files, convert documents to Markdown, and optimize media with ffmpeg/ImageMagick.
|
|
4
4
|
|
|
5
|
-
Supports **Gemini** (analyze, transcribe, generate, Veo video, Flash TTS), **MiniMax** (image, video, speech, music), **OpenRouter** (image generation), **Leonardo.Ai** (image, video, upscale), **BytePlus** (Seedream image, Seedance video, Hyper3D / Hitem3d 3D), and **ElevenLabs** (TTS, voice cloning, STT, voice changer, SFX, music, dubbing, isolation, alignment).
|
|
5
|
+
Supports **OpenAI** (image, image edits, TTS, STT, optional Codex image driver), **Gemini** (analyze, transcribe, generate, Veo video, Flash TTS), **MiniMax** (image, video, speech, music), **OpenRouter** (image generation), **Leonardo.Ai** (image, video, upscale), **BytePlus** (Seedream image, Seedance video, Hyper3D / Hitem3d 3D), and **ElevenLabs** (TTS, voice cloning, STT, voice changer, SFX, music, dubbing, isolation, alignment).
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -14,6 +14,11 @@ npx -p @mrgoonie/multix multix --help
|
|
|
14
14
|
|
|
15
15
|
**Requirements:** Node >= 20. For media commands: `ffmpeg` and `magick` (ImageMagick 7+) on PATH.
|
|
16
16
|
|
|
17
|
+
## Release channels
|
|
18
|
+
|
|
19
|
+
- `main` uses Release Please for stable releases. It creates release PRs from conventional commits, bumps semver, updates `CHANGELOG.md`, tags `vX.Y.Z`, and publishes npm with dist-tag `latest`.
|
|
20
|
+
- `dev` uses Release Please for beta releases. It creates prerelease PRs like `vX.Y.Z-beta.N` from conventional commits and publishes npm with dist-tag `beta`.
|
|
21
|
+
|
|
17
22
|
## Quick start
|
|
18
23
|
|
|
19
24
|
```bash
|
|
@@ -23,6 +28,9 @@ multix check
|
|
|
23
28
|
# Generate an image with Gemini
|
|
24
29
|
multix gemini generate --prompt "A sunset over mountains" --aspect-ratio 16:9
|
|
25
30
|
|
|
31
|
+
# Generate an image with OpenAI
|
|
32
|
+
multix openai generate --prompt "A clean product photo of a glass espresso cup"
|
|
33
|
+
|
|
26
34
|
# Analyze an image
|
|
27
35
|
multix gemini analyze --files photo.jpg --prompt "Describe this"
|
|
28
36
|
|
|
@@ -40,6 +48,7 @@ Set at least one provider key. Add to `.env` in your project root or `~/.multix/
|
|
|
40
48
|
| Variable | Required | Purpose |
|
|
41
49
|
|---|---|---|
|
|
42
50
|
| `GEMINI_API_KEY` | For Gemini | [AI Studio](https://aistudio.google.com/apikey) |
|
|
51
|
+
| `OPENAI_API_KEY` | For OpenAI API | [OpenAI](https://platform.openai.com/api-keys) |
|
|
43
52
|
| `OPENROUTER_API_KEY` | For OpenRouter | [OpenRouter](https://openrouter.ai/settings/keys) |
|
|
44
53
|
| `MINIMAX_API_KEY` | For MiniMax | [MiniMax](https://platform.minimax.io/user-center/basic-information/interface-key) |
|
|
45
54
|
| `LEONARDO_API_KEY` | For Leonardo | [Leonardo](https://app.leonardo.ai/settings/api-keys) |
|
|
@@ -57,6 +66,9 @@ Set at least one provider key. Add to `.env` in your project root or `~/.multix/
|
|
|
57
66
|
| `MULTIX_OUTPUT_DIR` | No | Override default output dir (`./multix-output`) |
|
|
58
67
|
| `OPENROUTER_IMAGE_MODEL` | No | Default OpenRouter model |
|
|
59
68
|
| `OPENROUTER_FALLBACK_MODELS` | No | Comma-separated fallback model ids |
|
|
69
|
+
| `OPENAI_IMAGE_MODEL` | No | Default OpenAI image model (default `gpt-image-2`) |
|
|
70
|
+
| `OPENAI_TTS_MODEL` | No | Default OpenAI TTS model (default `gpt-4o-mini-tts`) |
|
|
71
|
+
| `OPENAI_STT_MODEL` | No | Default OpenAI STT model (default `gpt-4o-transcribe`) |
|
|
60
72
|
| `IMAGE_GEN_MODEL` | No | Override Gemini image generation model |
|
|
61
73
|
| `VIDEO_GEN_MODEL` | No | Override Gemini video generation model |
|
|
62
74
|
| `MULTIMODAL_MODEL` | No | Override Gemini analysis model |
|
|
@@ -68,13 +80,13 @@ Priority: `process.env` > `cwd/.env` > `~/.multix/.env`.
|
|
|
68
80
|
|
|
69
81
|
### `multix check`
|
|
70
82
|
|
|
71
|
-
Validate setup: tooling (ffmpeg, magick), API keys, Gemini live ping.
|
|
83
|
+
Validate setup: tooling (ffmpeg, magick), API keys, Gemini live ping, and experimental authenticated Codex image capability. Codex is checked when no API key is configured, or in `--verbose` mode.
|
|
72
84
|
|
|
73
85
|
```
|
|
74
86
|
multix check [--verbose]
|
|
75
87
|
```
|
|
76
88
|
|
|
77
|
-
Exits 0 if at least one provider key is configured. Exits 1 if no
|
|
89
|
+
Exits 0 if at least one provider key is configured, or authenticated Codex image capability is available. Exits 1 if no provider is usable or Gemini auth fails.
|
|
78
90
|
|
|
79
91
|
### `multix gemini`
|
|
80
92
|
|
|
@@ -146,7 +158,7 @@ multix minimax generate-music [--lyrics <str>] [--prompt <str>] [--model music-2
|
|
|
146
158
|
multix openrouter generate --prompt "Retro robot" [--model google/gemini-3.1-flash-image-preview] [--aspect-ratio 1:1] [--image-size <sz>] [--num-images 1] [-v]
|
|
147
159
|
|
|
148
160
|
# Image-to-image (alias: i2i) — refs accept URL or local path
|
|
149
|
-
multix openrouter image-to-image --prompt "make it cyberpunk" --ref ./photo.jpg [--ref https://...] [--model google/gemini-2.5-flash-image] [--output <path>] [-v]
|
|
161
|
+
multix openrouter image-to-image --prompt "make it cyberpunk" --ref ./photo.jpg [--ref https://...] [--model google/gemini-2.5-flash-image] [--strength 0.7] [--output <path>] [-v]
|
|
150
162
|
|
|
151
163
|
# Image-to-video (async — returns job id; image input is URL only)
|
|
152
164
|
multix openrouter image-to-video --prompt "camera pans left" --image-url https://... [--last-frame-url <url>] [--model google/veo-3.1] [--resolution 720p] [--aspect-ratio 16:9] [--duration <n>] [--seed <n>] [-v]
|
|
@@ -159,7 +171,50 @@ multix openrouter video-status <jobId> [--download] [--output <path>] [-v]
|
|
|
159
171
|
multix openrouter video-models
|
|
160
172
|
```
|
|
161
173
|
|
|
162
|
-
|
|
174
|
+
**Supported i2i model families:** Gemini (default) and OpenAI gpt-image return `text+image` (modalities `["image","text"]`); Recraft accepts `--strength` (init-image strength 0..1); Flux / Sourceful are image-only (`["image"]`). The CLI picks the right `modalities` automatically based on the model id prefix.
|
|
175
|
+
|
|
176
|
+
Fallback models from `OPENROUTER_FALLBACK_MODELS` (CSV) are appended to the chat-image payload automatically — applies to both `generate` and `image-to-image`. Override the default video model with `OPENROUTER_VIDEO_MODEL` (default `google/veo-3.1`).
|
|
177
|
+
|
|
178
|
+
### `multix openai`
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# Image generation via OpenAI Images API
|
|
182
|
+
multix openai generate --prompt "A product photo of a titanium travel mug" \
|
|
183
|
+
[--model gpt-image-2] [--size 1024x1024] [--quality medium] [--format png] [--num-images 1] [--output <path>] [-v]
|
|
184
|
+
|
|
185
|
+
# Use authenticated Codex CLI as an experimental image driver.
|
|
186
|
+
# Requires manual `codex` login outside multix.
|
|
187
|
+
multix openai generate --prompt "A poster for a midnight jazz club" --driver codex --output poster.png
|
|
188
|
+
|
|
189
|
+
# Auto chooses OpenAI API when OPENAI_API_KEY exists, otherwise tries authenticated Codex.
|
|
190
|
+
multix openai generate --prompt "Editorial portrait lighting" --driver auto
|
|
191
|
+
|
|
192
|
+
# Image-to-image edits with one or more local/URL refs
|
|
193
|
+
multix openai image-to-image --prompt "turn this into a watercolor travel sketch" --ref ./photo.jpg [--ref https://...] [--output sketch.png]
|
|
194
|
+
|
|
195
|
+
# Text-to-speech
|
|
196
|
+
multix openai generate-speech --text "Welcome to multix." [--voice alloy] [--output-format mp3|wav|aac|flac|opus|pcm] [--output speech.mp3]
|
|
197
|
+
|
|
198
|
+
# Speech-to-text
|
|
199
|
+
multix openai transcribe --input meeting.mp3 [--format text|json|diarized_json] [--language vi]
|
|
200
|
+
|
|
201
|
+
# Known speaker refs must be paired by name and reference audio path/URL.
|
|
202
|
+
multix openai transcribe --input call.mp3 --format json \
|
|
203
|
+
--known-speaker-name Alice --known-speaker-reference ./alice.wav \
|
|
204
|
+
--known-speaker-name Bob --known-speaker-reference ./bob.wav
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**OpenAI models:** image `gpt-image-2` (default), TTS `gpt-4o-mini-tts` (default), STT `gpt-4o-transcribe` (default). The Codex driver is experimental and only handles image generation; `multix` does not authenticate Codex for you.
|
|
208
|
+
|
|
209
|
+
**OpenAI STT format behavior:**
|
|
210
|
+
|
|
211
|
+
| CLI format | Non-diarize GPT transcription models | Diarize model |
|
|
212
|
+
|---|---|---|
|
|
213
|
+
| `text` | Requests JSON from API, writes returned `text` | Requests JSON from API, writes returned `text` |
|
|
214
|
+
| `json` | Requests JSON | Requests JSON |
|
|
215
|
+
| `diarized_json` | Not supported | Requires `gpt-4o-transcribe-diarize` and defaults `chunking_strategy=auto` |
|
|
216
|
+
|
|
217
|
+
Known-speaker diarization uses paired `--known-speaker-name` and `--known-speaker-reference` flags; names and references must have the same count.
|
|
163
218
|
|
|
164
219
|
### `multix leonardo`
|
|
165
220
|
|