makaron-cli 0.13.6 → 0.13.7

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "makaron-cli",
3
- "version": "0.13.6",
3
+ "version": "0.13.7",
4
4
  "description": "Give Claude Code a creative agent. Pass complete creative requests and source media to Makaron Chat.",
5
5
  "author": {
6
6
  "name": "Versa AI",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "makaron-cli",
3
- "version": "0.13.6",
3
+ "version": "0.13.7",
4
4
  "description": "Give Codex a creative agent. Pass complete creative requests and source media to Makaron Chat.",
5
5
  "author": {
6
6
  "name": "Versa AI",
package/README.md CHANGED
@@ -98,7 +98,12 @@ npx makaron-cli chat --project auto --image photo.jpg --json -b "make it cinemat
98
98
  npx makaron-cli chat --project auto --image img1.jpg --image img2.jpg --json -b "combine these"
99
99
  ```
100
100
 
101
- `chat` always routes agent, image, and video models automatically. Never pass `--agent-model`, `--image-model`, `--video-model`, or the legacy `--model` flag to `chat`; the CLI rejects them before starting a run. Model flags remain available only on explicit low-level commands such as `edit` and `video create`.
101
+ `chat` routes image and video models automatically, but you may select the Agent LLM with `--agent-model`. Accepted values are exactly `auto`, `gpt-5.6-terra`, `gpt-5.6-sol`, `gpt-5.6-luna`, `grok-4.5`, and `deepseek-v4-pro`; `auto` currently resolves to `gpt-5.6-terra`. This flag changes only the reasoning/tool-calling Agent LLM. The CLI still rejects `--image-model`, `--video-model`, and the legacy `--model` flag before starting a chat run, so image/video model names cannot be mistaken for Agent models.
102
+
103
+ ```bash
104
+ # Explicit lower-cost Agent LLM for a controlled comparison
105
+ npx makaron-cli chat --project auto --agent-model deepseek-v4-pro --json -b "make a 20s badminton video"
106
+ ```
102
107
 
103
108
  Returns immediately:
104
109
  ```json
@@ -342,7 +347,7 @@ npx makaron-cli video create --script "Shot 1 (15s): <<<image_1>>> and <<<image_
342
347
 
343
348
  # 3b. Native SeeDance or MiniMax H3 text-to-video (no image required)
344
349
  npx makaron-cli video create --script "Shot 1 (5s): A neon one-person studio wakes at dawn" --duration 5 --video-model seedance-fast --aspect 16:9
345
- npx makaron-cli video create --script "Shot 1 (15s): A premium creative editor comes alive" --duration 15 --video-model minimax-h3 --video-resolution 2k --aspect 16:9
350
+ npx makaron-cli video create --script "Shot 1 (15s): A premium creative editor comes alive" --duration 15 --video-model minimax-h3 --aspect 16:9
346
351
 
347
352
  # 3c. Edit a video from a local file or public URL
348
353
  npx makaron-cli video create --script "make it funny" --video input.mp4 --duration 5 --video-model seedance-fast
@@ -358,7 +363,7 @@ For project/timeline video editing, use:
358
363
  npx makaron-cli chat --project <id|auto> --video input.mp4 -b "make it funny"
359
364
  ```
360
365
 
361
- Options for `video create`: `--script "..."`, `--script-file <path>`, `--image <url>` (repeatable, up to the selected model limit), `--video <file|url>` and `--audio <file|url>` (repeatable where supported), `--duration <seconds>`, `--aspect 9:16|16:9|1:1`, `--video-model seedance-fast|seedance-mini|seedance|seedance-2.5|kling|grok|google-omni|minimax-h3`, `--video-resolution auto|480p|720p|768p|1080p|2k|4k`. Default model is `seedance-fast`. SeeDance accepts native text-to-video with no image and integer output duration 4-15s (default 5s); `seedance-mini` supports 480p/720p and is best for cheaper drafts/multi-size tests; MiniMax H3 accepts native text-to-video, 4-15s output, and up to 9 image, up to 3 video, and up to 3 audio references through Makaron Agent/chat. H3 defaults to public 2k output; 768p requires provider preview access plus `MINIMAX_H3_ENABLE_768P=true` on the Makaron server. Kling supports 5-15s; Grok 1.5 supports 1-15s single-image-to-video only; Gemini Omni supports 3-10s fast 720p image/video generation and editing with native generated audio, including up to 6 image references when no video reference is provided. For `--video-model grok`, forced `--aspect` is ignored to avoid xAI stretching the source image; pad/create the image at the target shape first or use another model.
366
+ Options for `video create`: `--script "..."`, `--script-file <path>`, `--image <url>` (repeatable, up to the selected model limit), `--video <file|url>` and `--audio <file|url>` (repeatable where supported), `--duration <seconds>`, `--aspect 9:16|16:9|1:1`, `--video-model seedance-fast|seedance-mini|seedance|seedance-2.5|kling|grok|google-omni|minimax-h3`, `--video-resolution auto|480p|720p|768p|1080p|2k|4k`. Default model is `seedance-fast`. SeeDance accepts native text-to-video with no image and integer output duration 4-15s (default 5s); `seedance-mini` supports 480p/720p and is best for cheaper drafts/multi-size tests; MiniMax H3 accepts native text-to-video, 4-15s output, public 768p/2k resolution, and up to 9 image, up to 3 video, and up to 3 audio references through Makaron Agent/chat. H3 defaults to 768p; request 2k explicitly for maximum/final quality. Kling supports 5-15s; Grok 1.5 supports 1-15s single-image-to-video only; Gemini Omni supports 3-10s fast 720p image/video generation and editing with native generated audio, including up to 6 image references when no video reference is provided. For `--video-model grok`, forced `--aspect` is ignored to avoid xAI stretching the source image; pad/create the image at the target shape first or use another model.
362
367
 
363
368
  Seedance 2.5: use `--video-model seedance-2.5` for 4-30 second output at 480p/720p. `--image` accepts local files or URLs (up to 30), while repeatable `--video` and `--audio` accept up to 10 each. Use `--video-operation generate|edit|extend`, `--extend-direction forward|backward`, `--output-format mp4|mov`, `--web-search`, `--generated-audio` / `--no-generated-audio`, and `--relaxed-content-filter`. Edit/extend require a video reference. The Evolink route does not currently expose 4K output.
364
369
 
package/bin/makaron.mjs CHANGED
@@ -28,6 +28,14 @@ const NPM_PACKAGE_NAME = 'makaron-cli';
28
28
  const UPDATE_CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
29
29
  const UPDATE_CHECK_TIMEOUT_MS = 400;
30
30
  const AGENT_WAIT_TIMEOUT_SECONDS = Math.max(900, Number(process.env.MAKARON_AGENT_WAIT_TIMEOUT_SECONDS || 10_800));
31
+ const CHAT_AGENT_MODELS = [
32
+ 'auto',
33
+ 'gpt-5.6-terra',
34
+ 'gpt-5.6-sol',
35
+ 'gpt-5.6-luna',
36
+ 'grok-4.5',
37
+ 'deepseek-v4-pro',
38
+ ];
31
39
 
32
40
  // Public anon key (safe to embed — only enables auth, not data access)
33
41
  const SUPABASE_URL = 'https://sdyrtztrjgmmpnirswxt.supabase.co';
@@ -59,6 +67,16 @@ function warnLegacyModelFlag(replacement) {
59
67
  process.stderr.write(`⚠️ --model is deprecated here; use ${replacement}.\n`);
60
68
  }
61
69
 
70
+ function validateChatAgentModel(value) {
71
+ if (!value || !CHAT_AGENT_MODELS.includes(value)) {
72
+ process.stderr.write(`❌ Unknown Agent LLM: ${value || '(missing value)'}\n`);
73
+ process.stderr.write(`Choose one of: ${CHAT_AGENT_MODELS.join(', ')}\n`);
74
+ process.stderr.write('--agent-model selects only the Agent LLM. Put image/video model preferences in the chat prompt, or use the explicit edit/video commands.\n');
75
+ process.exit(1);
76
+ }
77
+ return value;
78
+ }
79
+
62
80
  function getCliVersion() {
63
81
  try {
64
82
  const pkg = JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));
@@ -351,13 +369,15 @@ Options:
351
369
  --audio <file|url> Attach a song, beat, or voice reference. MP3/WAV, repeatable.
352
370
  --media-manifest <file|-> Import source_url + start + end + description clips before this run.
353
371
  --skill <id|label|name> Use an installed skill or auto-install a matched marketplace skill.
372
+ --agent-model <id> Agent LLM only: auto, gpt-5.6-terra, gpt-5.6-sol,
373
+ gpt-5.6-luna, grok-4.5, or deepseek-v4-pro.
354
374
  --background, -b Submit and print a runId.
355
375
  --json Output structured JSON.
356
376
  --stream Legacy live SSE stream.
357
377
  --help, -h Show this help.
358
378
 
359
- Model routing is automatic in chat. Do not pass --agent-model, --image-model,
360
- --video-model, or the legacy --model flag.
379
+ Agent LLM defaults to auto (currently gpt-5.6-terra). Image/video model routing
380
+ stays automatic in chat; --image-model, --video-model, and --model are rejected.
361
381
 
362
382
  What you can ask:
363
383
  Image edit
@@ -381,6 +401,9 @@ What you can ask:
381
401
  Agent-to-agent source-range handoff
382
402
  makaron chat --project auto --media-manifest set-01.json -b --json "make a 30s vertical video"
383
403
 
404
+ Compare Agent LLMs with identical inputs
405
+ makaron chat --project auto --agent-model deepseek-v4-pro -b --json "make a 20s badminton video"
406
+
384
407
  Music
385
408
  makaron chat --project <id> "add calm piano background music"
386
409
 
@@ -422,6 +445,7 @@ async function streamAgent(baseUrl, headers, projectId, prompt, opts = {}) {
422
445
  projectId,
423
446
  prompt,
424
447
  headless: true,
448
+ ...(opts.agentModel ? { agentModel: opts.agentModel } : {}),
425
449
  ...(opts.uploadedVideoCount ? { uploadedVideoCount: opts.uploadedVideoCount } : {}),
426
450
  ...(opts.turnMediaCount ? { turnMediaCount: opts.turnMediaCount } : {}),
427
451
  }),
@@ -530,6 +554,7 @@ async function streamAgent(baseUrl, headers, projectId, prompt, opts = {}) {
530
554
 
531
555
  async function submitRun(baseUrl, headers, projectId, prompt, opts = {}) {
532
556
  const body = { projectId, prompt };
557
+ if (opts.agentModel) body.agentModel = opts.agentModel;
533
558
  if (opts.currentSnapshotIndex != null) body.currentSnapshotIndex = opts.currentSnapshotIndex;
534
559
  if (opts.isNsfw) body.isNsfw = opts.isNsfw;
535
560
  if (opts.audioAttachments?.length) body.audioAttachments = opts.audioAttachments;
@@ -1693,6 +1718,8 @@ Commands:
1693
1718
 
1694
1719
  chat --project <id> "message" Chat (non-blocking, polls for result)
1695
1720
  chat --project <id> --skill <id> Use a built-in or marketplace skill
1721
+ chat --project <id> --agent-model <id> "message"
1722
+ Select only the Agent LLM (strict allowlist)
1696
1723
  chat --project <id> --video <file> Attach video to conversation
1697
1724
  chat --project <id> --audio <file> Attach song/beat/voice reference
1698
1725
  chat --project auto --media-manifest <file> "message"
@@ -1726,7 +1753,8 @@ Examples:
1726
1753
  makaron chat --project <id> "turn this into a short video"
1727
1754
 
1728
1755
  Run makaron <command> --help for command-specific options.
1729
- Chat chooses agent, image, and video models automatically.
1756
+ Chat defaults the Agent LLM automatically; --agent-model can select an exact
1757
+ Agent LLM. Image and video model routing remains automatic in chat.
1730
1758
 
1731
1759
  Environment:
1732
1760
  MAKARON_API_KEY API key (mk_live_xxx) — recommended for agents
@@ -1854,7 +1882,7 @@ Use with chat:
1854
1882
  else console.log(`Video commands:
1855
1883
  video script --image <file> [--image <file>] "direction" Write video script
1856
1884
  video create --script "..." --video-model seedance-fast Native text-to-video (no image required)
1857
- video create --script "..." --video-model minimax-h3 --video-resolution 2k MiniMax H3 native 2K text-to-video
1885
+ video create --script "..." --video-model minimax-h3 MiniMax H3 text-to-video (default 768P)
1858
1886
  video create --script "..." --image <url> [--duration 10] Submit video task
1859
1887
  video create --script "..." --video <public-url> [--video-model seedance-fast|seedance-mini|seedance|seedance-2.5|kling|google-omni|minimax-h3] Edit/reference a video (Grok does not support video refs)
1860
1888
  video status <taskId> Check video status
@@ -1968,6 +1996,7 @@ if (!command || command === '--help' || command === '-h' || command === 'help')
1968
1996
  let jsonOutput = false;
1969
1997
  let activeSkill = undefined;
1970
1998
  let mediaManifestPath = undefined;
1999
+ let agentModel = undefined;
1971
2000
  for (let i = 1; i < args.length; i++) {
1972
2001
  if (args[i] === '--project' && args[i + 1]) projectId = args[++i];
1973
2002
  else if (args[i] === '--image' && args[i + 1]) chatImages.push(args[++i]);
@@ -1983,6 +2012,21 @@ if (!command || command === '--help' || command === '-h' || command === 'help')
1983
2012
  else if (args[i].startsWith('--media-manifest=')) mediaManifestPath = args[i].slice('--media-manifest='.length);
1984
2013
  else if (args[i] === '--skill' && args[i + 1]) activeSkill = args[++i];
1985
2014
  else if (args[i].startsWith('--skill=')) activeSkill = args[i].slice('--skill='.length);
2015
+ else if (args[i] === '--agent-model') {
2016
+ if (agentModel !== undefined) {
2017
+ process.stderr.write('❌ Pass --agent-model only once per chat run.\n');
2018
+ process.exit(1);
2019
+ }
2020
+ if (!args[i + 1] || args[i + 1].startsWith('--')) validateChatAgentModel('');
2021
+ agentModel = validateChatAgentModel(args[++i]);
2022
+ }
2023
+ else if (args[i].startsWith('--agent-model=')) {
2024
+ if (agentModel !== undefined) {
2025
+ process.stderr.write('❌ Pass --agent-model only once per chat run.\n');
2026
+ process.exit(1);
2027
+ }
2028
+ agentModel = validateChatAgentModel(args[i].slice('--agent-model='.length));
2029
+ }
1986
2030
  else if (args[i] === '--stream') useStream = true;
1987
2031
  else if (args[i] === '--background' || args[i] === '-b') background = true;
1988
2032
  else if (args[i] === '--json') jsonOutput = true;
@@ -1991,11 +2035,11 @@ if (!command || command === '--help' || command === '-h' || command === 'help')
1991
2035
  process.exit(1);
1992
2036
  }
1993
2037
  else if (
1994
- ['--agent-model', '--image-model', '--video-model', '--model'].includes(args[i])
1995
- || ['--agent-model=', '--image-model=', '--video-model=', '--model='].some(prefix => args[i].startsWith(prefix))
2038
+ ['--image-model', '--video-model', '--model'].includes(args[i])
2039
+ || ['--image-model=', '--video-model=', '--model='].some(prefix => args[i].startsWith(prefix))
1996
2040
  ) {
1997
2041
  const flag = args[i].split('=')[0];
1998
- process.stderr.write(`❌ makaron chat chooses agent, image, and video models automatically. Remove ${flag} and retry.\n`);
2042
+ process.stderr.write(`❌ ${flag} is not valid for makaron chat. Only --agent-model may select the Agent LLM; image/video routing stays automatic. Remove ${flag} and retry.\n`);
1999
2043
  process.exit(1);
2000
2044
  }
2001
2045
  else promptParts.push(args[i]);
@@ -2222,6 +2266,7 @@ if (!command || command === '--help' || command === '-h' || command === 'help')
2222
2266
  if (useStream) {
2223
2267
  // Legacy SSE mode
2224
2268
  const { results } = await streamAgent(baseUrl, headers, projectId, finalPrompt, {
2269
+ agentModel,
2225
2270
  uploadedVideoCount: uploadedTurnVideoCount,
2226
2271
  turnMediaCount: uploadedTurnMediaCount,
2227
2272
  });
@@ -2234,6 +2279,7 @@ if (!command || command === '--help' || command === '-h' || command === 'help')
2234
2279
  } else {
2235
2280
  // Default: fire-and-forget + poll
2236
2281
  const { runId } = await submitRun(baseUrl, headers, projectId, finalPrompt, {
2282
+ agentModel,
2237
2283
  audioAttachments,
2238
2284
  uploadedVideoCount: uploadedTurnVideoCount,
2239
2285
  turnMediaCount: uploadedTurnMediaCount,
@@ -2776,7 +2822,7 @@ if (!command || command === '--help' || command === '-h' || command === 'help')
2776
2822
  console.log(`Video commands:
2777
2823
  video script --image <file> [--image <file>] "direction" Write video script
2778
2824
  video create --script "..." --video-model seedance-fast Native text-to-video (no image required)
2779
- video create --script "..." --video-model minimax-h3 --video-resolution 2k MiniMax H3 native 2K text-to-video
2825
+ video create --script "..." --video-model minimax-h3 MiniMax H3 text-to-video (default 768P)
2780
2826
  video create --script "..." --image <url> [--duration 10] Submit video task
2781
2827
  video create --script "..." --video <public-url> [--video-model seedance-fast|seedance-mini|seedance|seedance-2.5|kling|google-omni|minimax-h3] Edit/reference a video (Grok does not support video refs)
2782
2828
  video status <taskId> Check video status
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "makaron-cli",
3
- "version": "0.13.6",
3
+ "version": "0.13.7",
4
4
  "description": "Talk to Makaron Agent from the terminal — create projects, edit images, generate videos",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -85,7 +85,11 @@ npx makaron-cli chat --project auto --image photo.jpg --json -b "make it cinemat
85
85
  npx makaron-cli chat --project auto --image img1.jpg --image img2.jpg --json -b "combine these"
86
86
  ```
87
87
 
88
- `chat` always routes agent, image, and video models automatically. Never pass `--agent-model`, `--image-model`, `--video-model`, or the legacy `--model` flag to `chat`; the CLI rejects them before starting a run. Model flags remain available only on explicit low-level commands such as `edit` and `video create`.
88
+ `chat` routes image and video models automatically. Use `--agent-model` only when the user explicitly asks to select or compare the reasoning/tool-calling Agent LLM. Accepted values are exactly `auto`, `gpt-5.6-terra`, `gpt-5.6-sol`, `gpt-5.6-luna`, `grok-4.5`, and `deepseek-v4-pro`; `auto` currently resolves to `gpt-5.6-terra`. Never put an image or video model ID in `--agent-model`. The CLI rejects unknown Agent IDs plus `--image-model`, `--video-model`, and legacy `--model` before starting a chat run.
89
+
90
+ ```bash
91
+ npx makaron-cli chat --project auto --agent-model deepseek-v4-pro --json -b "make a 20s badminton video"
92
+ ```
89
93
 
90
94
  Returns immediately:
91
95
  ```json
@@ -280,7 +284,7 @@ npx makaron-cli video create --script "Shot 1 (15s): <<<image_1>>> and <<<image_
280
284
 
281
285
  # 3b. Native SeeDance or MiniMax H3 text-to-video (no image required)
282
286
  npx makaron-cli video create --script "Shot 1 (5s): A neon one-person studio wakes at dawn" --duration 5 --video-model seedance-fast --aspect 16:9
283
- npx makaron-cli video create --script "Shot 1 (15s): A premium creative editor comes alive" --duration 15 --video-model minimax-h3 --video-resolution 2k --aspect 16:9
287
+ npx makaron-cli video create --script "Shot 1 (15s): A premium creative editor comes alive" --duration 15 --video-model minimax-h3 --aspect 16:9
284
288
 
285
289
  # 3c. Edit a video from a local file or public URL
286
290
  npx makaron-cli video create --script "make it funny" --video input.mp4 --duration 5 --video-model seedance-fast
@@ -296,7 +300,7 @@ npx makaron-cli video status <taskId>
296
300
  npx makaron-cli chat --project <id|auto> --video input.mp4 -b "make it funny"
297
301
  ```
298
302
 
299
- Options for `video create`: `--script "..."`, `--script-file <path>`, `--image <url>` (repeatable, up to the selected model limit), `--video <file|url>` and `--audio <file|url>` (repeatable where supported), `--duration <seconds>`, `--aspect 9:16|16:9|1:1`, `--video-model seedance-fast|seedance-mini|seedance|seedance-2.5|kling|grok|google-omni|minimax-h3`, `--video-resolution auto|480p|720p|768p|1080p|2k|4k`. Default model is `seedance-fast`. SeeDance accepts native text-to-video with no image and integer output duration 4-15s (default 5s); `seedance-mini` supports 480p/720p and is best for cheaper drafts/multi-size tests; MiniMax H3 accepts native text-to-video, 4-15s output, and up to 9 image, up to 3 video, and up to 3 audio references through Makaron Agent/chat. H3 defaults to public 2k output; 768p requires provider preview access plus `MINIMAX_H3_ENABLE_768P=true` on the Makaron server. Kling supports 5-15s; Grok 1.5 supports 1-15s single-image-to-video only; Gemini Omni supports 3-10s fast 720p image/video generation and editing with native generated audio, including up to 6 image references when no video reference is provided. For `--video-model grok`, forced `--aspect` is ignored to avoid xAI stretching the source image; pad/create the image at the target shape first or use another model.
303
+ Options for `video create`: `--script "..."`, `--script-file <path>`, `--image <url>` (repeatable, up to the selected model limit), `--video <file|url>` and `--audio <file|url>` (repeatable where supported), `--duration <seconds>`, `--aspect 9:16|16:9|1:1`, `--video-model seedance-fast|seedance-mini|seedance|seedance-2.5|kling|grok|google-omni|minimax-h3`, `--video-resolution auto|480p|720p|768p|1080p|2k|4k`. Default model is `seedance-fast`. SeeDance accepts native text-to-video with no image and integer output duration 4-15s (default 5s); `seedance-mini` supports 480p/720p and is best for cheaper drafts/multi-size tests; MiniMax H3 accepts native text-to-video, 4-15s output, public 768p/2k resolution, and up to 9 image, up to 3 video, and up to 3 audio references through Makaron Agent/chat. H3 defaults to 768p; request 2k explicitly for maximum/final quality. Kling supports 5-15s; Grok 1.5 supports 1-15s single-image-to-video only; Gemini Omni supports 3-10s fast 720p image/video generation and editing with native generated audio, including up to 6 image references when no video reference is provided. For `--video-model grok`, forced `--aspect` is ignored to avoid xAI stretching the source image; pad/create the image at the target shape first or use another model.
300
304
 
301
305
  Seedance 2.5 uses `--video-model seedance-2.5` and supports 4-30s at 480p/720p, up to 30 images + 10 videos + 10 audios, repeatable local/URL references, `--video-operation generate|edit|extend`, `--extend-direction`, `--output-format mp4|mov`, and `--web-search`. The Evolink route does not currently expose 4K output.
302
306