makaron-cli 0.13.2 → 0.13.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.
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +2 -6
- package/bin/makaron.mjs +16 -56
- package/package.json +1 -1
- package/skills/makaron/SKILL.md +2 -6
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "makaron-cli",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.3",
|
|
4
4
|
"description": "AI image editing, video generation, music creation, and marketplace skill workflows via CLI. Agents can self-register, install skills, create projects, and produce creative media.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Makaron AI",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "makaron-cli",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.3",
|
|
4
4
|
"description": "AI image editing, video generation, music creation, and marketplace skill workflows via CLI. Agents can self-register, install skills, create projects, and produce creative media.",
|
|
5
5
|
"displayName": "Makaron",
|
|
6
6
|
"shortDescription": "AI image/video/music creation from the terminal",
|
package/README.md
CHANGED
|
@@ -96,12 +96,9 @@ npx makaron-cli chat --project <id> --json -b "<prompt>"
|
|
|
96
96
|
# Auto-create project (with or without images)
|
|
97
97
|
npx makaron-cli chat --project auto --image photo.jpg --json -b "make it cinematic"
|
|
98
98
|
npx makaron-cli chat --project auto --image img1.jpg --image img2.jpg --json -b "combine these"
|
|
99
|
-
|
|
100
|
-
# Choose each model role explicitly
|
|
101
|
-
npx makaron-cli chat --project auto --agent-model deepseek-v4-pro --image-model qwen "design a product poster"
|
|
102
99
|
```
|
|
103
100
|
|
|
104
|
-
|
|
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`.
|
|
105
102
|
|
|
106
103
|
Returns immediately:
|
|
107
104
|
```json
|
|
@@ -118,7 +115,7 @@ Returns immediately:
|
|
|
118
115
|
| Fix one moment in a video from a screenshot | `npx makaron-cli chat --project <id> --image screenshot.png "@4 this frame should be Paris; only fix this moment"` |
|
|
119
116
|
| Cut or assemble video | `npx makaron-cli chat --project <id> --video clip.mp4 "cut out the dead air and keep the best 20 seconds"` |
|
|
120
117
|
| Add music | `npx makaron-cli chat --project <id> "add calm piano background music"` |
|
|
121
|
-
| Beat-sync video from audio | `npx makaron-cli chat --project auto --audio beat.mp3 --video-
|
|
118
|
+
| Beat-sync video from audio | `npx makaron-cli chat --project auto --audio beat.mp3 --video-resolution 480p "make a beat-synced video"` |
|
|
122
119
|
| Create motion design | `npx makaron-cli chat --project <id> "make an animated Instagram story with this image"` |
|
|
123
120
|
|
|
124
121
|
### Marketplace skills
|
|
@@ -219,7 +216,6 @@ Attach a short song, beat, or voice recording when the video should follow audio
|
|
|
219
216
|
```bash
|
|
220
217
|
npx makaron-cli chat --project auto \
|
|
221
218
|
--audio beat.mp3 \
|
|
222
|
-
--video-model seedance-fast \
|
|
223
219
|
--video-resolution 480p \
|
|
224
220
|
-b "make a 15s beat-synced video"
|
|
225
221
|
```
|
package/bin/makaron.mjs
CHANGED
|
@@ -27,7 +27,6 @@ const APP_URL = process.env.MAKARON_APP_URL || DEFAULT_URL;
|
|
|
27
27
|
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
|
-
const AGENT_MODELS = ['auto', 'gpt-5.6-terra', 'gpt-5.6-sol', 'gpt-5.6-luna', 'grok-4.5', 'deepseek-v4-pro'];
|
|
31
30
|
const AGENT_WAIT_TIMEOUT_SECONDS = Math.max(900, Number(process.env.MAKARON_AGENT_WAIT_TIMEOUT_SECONDS || 10_800));
|
|
32
31
|
|
|
33
32
|
// Public anon key (safe to embed — only enables auth, not data access)
|
|
@@ -56,14 +55,6 @@ function warnLegacyModelFlag(replacement) {
|
|
|
56
55
|
process.stderr.write(`⚠️ --model is deprecated here; use ${replacement}.\n`);
|
|
57
56
|
}
|
|
58
57
|
|
|
59
|
-
function validateAgentModel(value) {
|
|
60
|
-
if (!AGENT_MODELS.includes(value)) {
|
|
61
|
-
process.stderr.write(`❌ Unknown agent model: ${value}\nChoose one of: ${AGENT_MODELS.join(', ')}\n`);
|
|
62
|
-
process.exit(1);
|
|
63
|
-
}
|
|
64
|
-
return value;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
58
|
function getCliVersion() {
|
|
68
59
|
try {
|
|
69
60
|
const pkg = JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));
|
|
@@ -291,15 +282,15 @@ Options:
|
|
|
291
282
|
--video <file|url> Attach a video to the project timeline. Repeatable.
|
|
292
283
|
--audio <file|url> Attach a song, beat, or voice reference. MP3/WAV, repeatable.
|
|
293
284
|
--skill <id|label|name> Use an installed skill or auto-install a matched marketplace skill.
|
|
294
|
-
--image-model <name> Image model: gemini, gemini-lite, qwen, openai, pony, or wai.
|
|
295
|
-
--video-model <name> Preferred video model: seedance-fast, seedance-mini, seedance, kling, grok, or google-omni.
|
|
296
|
-
--agent-model <name> Agent model: auto, gpt-5.6-terra, gpt-5.6-sol, gpt-5.6-luna, grok-4.5, or deepseek-v4-pro.
|
|
297
285
|
--video-resolution <res> Video resolution: auto, 480p, 720p, 1080p, or 4k.
|
|
298
286
|
--background, -b Submit and print a runId.
|
|
299
287
|
--json Output structured JSON.
|
|
300
288
|
--stream Legacy live SSE stream.
|
|
301
289
|
--help, -h Show this help.
|
|
302
290
|
|
|
291
|
+
Model routing is automatic in chat. Do not pass --agent-model, --image-model,
|
|
292
|
+
--video-model, or the legacy --model flag.
|
|
293
|
+
|
|
303
294
|
What you can ask:
|
|
304
295
|
Image edit
|
|
305
296
|
makaron chat --project <id> --image photo.jpg "remove the person in the background"
|
|
@@ -323,7 +314,7 @@ What you can ask:
|
|
|
323
314
|
makaron chat --project <id> "add calm piano background music"
|
|
324
315
|
|
|
325
316
|
Reference audio / beat sync
|
|
326
|
-
makaron chat --project auto --audio beat.mp3 --video-
|
|
317
|
+
makaron chat --project auto --audio beat.mp3 --video-resolution 480p "用这个音乐做卡点视频"
|
|
327
318
|
makaron chat --project <id> --audio https://example.com/beat.mp3 "add this as the soundtrack"
|
|
328
319
|
|
|
329
320
|
Motion design
|
|
@@ -360,10 +351,7 @@ async function streamAgent(baseUrl, headers, projectId, prompt, opts = {}) {
|
|
|
360
351
|
projectId,
|
|
361
352
|
prompt,
|
|
362
353
|
headless: true,
|
|
363
|
-
...(opts.preferredModel ? { preferredModel: opts.preferredModel } : {}),
|
|
364
|
-
...(opts.videoModel ? { videoModel: opts.videoModel } : {}),
|
|
365
354
|
...(opts.videoResolution ? { videoResolution: opts.videoResolution } : {}),
|
|
366
|
-
...(opts.agentModel && opts.agentModel !== 'auto' ? { agentModel: opts.agentModel } : {}),
|
|
367
355
|
...(opts.uploadedVideoCount ? { uploadedVideoCount: opts.uploadedVideoCount } : {}),
|
|
368
356
|
...(opts.turnMediaCount ? { turnMediaCount: opts.turnMediaCount } : {}),
|
|
369
357
|
}),
|
|
@@ -472,9 +460,6 @@ async function streamAgent(baseUrl, headers, projectId, prompt, opts = {}) {
|
|
|
472
460
|
|
|
473
461
|
async function submitRun(baseUrl, headers, projectId, prompt, opts = {}) {
|
|
474
462
|
const body = { projectId, prompt };
|
|
475
|
-
if (opts.preferredModel) body.preferredModel = opts.preferredModel;
|
|
476
|
-
if (opts.agentModel && opts.agentModel !== 'auto') body.agentModel = opts.agentModel;
|
|
477
|
-
if (opts.videoModel) body.videoModel = opts.videoModel;
|
|
478
463
|
if (opts.videoResolution) body.videoResolution = opts.videoResolution;
|
|
479
464
|
if (opts.currentSnapshotIndex != null) body.currentSnapshotIndex = opts.currentSnapshotIndex;
|
|
480
465
|
if (opts.isNsfw) body.isNsfw = opts.isNsfw;
|
|
@@ -1634,26 +1619,17 @@ Commands:
|
|
|
1634
1619
|
|
|
1635
1620
|
admin Admin commands (skills, upload, set-admin)
|
|
1636
1621
|
|
|
1637
|
-
Model selection:
|
|
1638
|
-
--agent-model <name> Reasoning/tool model: auto, gpt-5.6-terra, gpt-5.6-sol,
|
|
1639
|
-
gpt-5.6-luna, grok-4.5, or deepseek-v4-pro
|
|
1640
|
-
--image-model <name> Image model: gemini, gemini-lite, qwen, openai,
|
|
1641
|
-
pony, or wai
|
|
1642
|
-
--video-model <name> Video model: seedance-fast, seedance-mini, seedance,
|
|
1643
|
-
kling, grok, or google-omni
|
|
1644
|
-
|
|
1645
1622
|
Examples:
|
|
1646
|
-
makaron chat --project auto
|
|
1647
|
-
makaron chat --project <id>
|
|
1648
|
-
makaron chat --project <id>
|
|
1623
|
+
makaron chat --project auto "plan a launch poster"
|
|
1624
|
+
makaron chat --project <id> "make it cinematic"
|
|
1625
|
+
makaron chat --project <id> "turn this into a short video"
|
|
1649
1626
|
|
|
1650
1627
|
Run makaron <command> --help for command-specific options.
|
|
1651
|
-
|
|
1628
|
+
Chat chooses agent, image, and video models automatically.
|
|
1652
1629
|
|
|
1653
1630
|
Environment:
|
|
1654
1631
|
MAKARON_API_KEY API key (mk_live_xxx) — recommended for agents
|
|
1655
1632
|
MAKARON_URL API base (default: ${DEFAULT_URL})
|
|
1656
|
-
MAKARON_AGENT_MODEL Default Agent model; --agent-model takes precedence
|
|
1657
1633
|
`);
|
|
1658
1634
|
}
|
|
1659
1635
|
|
|
@@ -1744,8 +1720,6 @@ function printHelp(topic, subtopic) {
|
|
|
1744
1720
|
else if (subtopic === 'install') console.log('Usage: makaron skills install <marketplace-id|label> [--json]');
|
|
1745
1721
|
else console.log(`Skill commands:
|
|
1746
1722
|
skills list --built-in List all built-in Makaron skills and Studio Run recipes
|
|
1747
|
-
skills list --built-in --openmontage
|
|
1748
|
-
List OpenMontage-native adapters only
|
|
1749
1723
|
skills list List marketplace skills
|
|
1750
1724
|
skills search <query> Search marketplace skills
|
|
1751
1725
|
skills show <id|label> --built-in Show a built-in skill
|
|
@@ -1888,10 +1862,7 @@ if (!command || command === '--help' || command === '-h' || command === 'help')
|
|
|
1888
1862
|
let background = false;
|
|
1889
1863
|
let jsonOutput = false;
|
|
1890
1864
|
let activeSkill = undefined;
|
|
1891
|
-
let videoModel = undefined;
|
|
1892
1865
|
let videoResolution = undefined;
|
|
1893
|
-
let preferredModel = undefined;
|
|
1894
|
-
let agentModel = process.env.MAKARON_AGENT_MODEL || 'auto';
|
|
1895
1866
|
for (let i = 1; i < args.length; i++) {
|
|
1896
1867
|
if (args[i] === '--project' && args[i + 1]) projectId = args[++i];
|
|
1897
1868
|
else if (args[i] === '--image' && args[i + 1]) chatImages.push(args[++i]);
|
|
@@ -1902,13 +1873,14 @@ if (!command || command === '--help' || command === '-h' || command === 'help')
|
|
|
1902
1873
|
else if (args[i] === '--stream') useStream = true;
|
|
1903
1874
|
else if (args[i] === '--background' || args[i] === '-b') background = true;
|
|
1904
1875
|
else if (args[i] === '--json') jsonOutput = true;
|
|
1905
|
-
else if (args[i] === '--video-model' && args[i + 1]) videoModel = args[++i];
|
|
1906
1876
|
else if (args[i] === '--video-resolution' && args[i + 1]) videoResolution = args[++i];
|
|
1907
|
-
else if (
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1877
|
+
else if (
|
|
1878
|
+
['--agent-model', '--image-model', '--video-model', '--model'].includes(args[i])
|
|
1879
|
+
|| ['--agent-model=', '--image-model=', '--video-model=', '--model='].some(prefix => args[i].startsWith(prefix))
|
|
1880
|
+
) {
|
|
1881
|
+
const flag = args[i].split('=')[0];
|
|
1882
|
+
process.stderr.write(`❌ makaron chat chooses agent, image, and video models automatically. Remove ${flag} and retry.\n`);
|
|
1883
|
+
process.exit(1);
|
|
1912
1884
|
}
|
|
1913
1885
|
else promptParts.push(args[i]);
|
|
1914
1886
|
}
|
|
@@ -1918,7 +1890,6 @@ if (!command || command === '--help' || command === '-h' || command === 'help')
|
|
|
1918
1890
|
console.error('Run: makaron chat --help');
|
|
1919
1891
|
process.exit(1);
|
|
1920
1892
|
}
|
|
1921
|
-
agentModel = validateAgentModel(agentModel);
|
|
1922
1893
|
const { headers, baseUrl } = getAuth();
|
|
1923
1894
|
// Split images into URLs vs local files
|
|
1924
1895
|
const imageUrlList = chatImages.filter(p => p.startsWith('http://') || p.startsWith('https://'));
|
|
@@ -2108,10 +2079,7 @@ if (!command || command === '--help' || command === '-h' || command === 'help')
|
|
|
2108
2079
|
if (useStream) {
|
|
2109
2080
|
// Legacy SSE mode
|
|
2110
2081
|
const { results } = await streamAgent(baseUrl, headers, projectId, finalPrompt, {
|
|
2111
|
-
videoModel,
|
|
2112
2082
|
videoResolution,
|
|
2113
|
-
preferredModel,
|
|
2114
|
-
agentModel,
|
|
2115
2083
|
uploadedVideoCount: uploadedTurnVideoCount,
|
|
2116
2084
|
turnMediaCount: uploadedTurnMediaCount,
|
|
2117
2085
|
});
|
|
@@ -2124,10 +2092,7 @@ if (!command || command === '--help' || command === '-h' || command === 'help')
|
|
|
2124
2092
|
} else {
|
|
2125
2093
|
// Default: fire-and-forget + poll
|
|
2126
2094
|
const { runId } = await submitRun(baseUrl, headers, projectId, finalPrompt, {
|
|
2127
|
-
videoModel,
|
|
2128
2095
|
videoResolution,
|
|
2129
|
-
preferredModel,
|
|
2130
|
-
agentModel,
|
|
2131
2096
|
audioAttachments,
|
|
2132
2097
|
uploadedVideoCount: uploadedTurnVideoCount,
|
|
2133
2098
|
turnMediaCount: uploadedTurnMediaCount,
|
|
@@ -2320,10 +2285,7 @@ if (!command || command === '--help' || command === '-h' || command === 'help')
|
|
|
2320
2285
|
|
|
2321
2286
|
if (sub === 'list') {
|
|
2322
2287
|
const builtIn = args.includes('--built-in');
|
|
2323
|
-
|
|
2324
|
-
if (builtIn && args.includes('--openmontage')) {
|
|
2325
|
-
skills = skills.filter(skill => skill.sourceProject === 'openmontage');
|
|
2326
|
-
}
|
|
2288
|
+
const skills = builtIn ? await fetchBuiltInSkills(baseUrl) : await fetchMarketplaceSkills(baseUrl);
|
|
2327
2289
|
if (jsonOutput) console.log(JSON.stringify({ skills }, null, 2));
|
|
2328
2290
|
else if (builtIn) printBuiltInSkills(skills);
|
|
2329
2291
|
else printMarketplaceSkills(skills);
|
|
@@ -2365,8 +2327,6 @@ if (!command || command === '--help' || command === '-h' || command === 'help')
|
|
|
2365
2327
|
} else {
|
|
2366
2328
|
console.log(`Skill commands:
|
|
2367
2329
|
skills list --built-in List all built-in Makaron skills and Studio Run recipes
|
|
2368
|
-
skills list --built-in --openmontage
|
|
2369
|
-
List OpenMontage-native adapters only
|
|
2370
2330
|
skills list List marketplace skills
|
|
2371
2331
|
skills search <query> Search marketplace skills
|
|
2372
2332
|
skills show <id|label> --built-in Show a built-in skill
|
package/package.json
CHANGED
package/skills/makaron/SKILL.md
CHANGED
|
@@ -83,12 +83,9 @@ npx makaron-cli chat --project <id> --json -b "<prompt>"
|
|
|
83
83
|
# Auto-create project (with or without images)
|
|
84
84
|
npx makaron-cli chat --project auto --image photo.jpg --json -b "make it cinematic"
|
|
85
85
|
npx makaron-cli chat --project auto --image img1.jpg --image img2.jpg --json -b "combine these"
|
|
86
|
-
|
|
87
|
-
# Choose each model role explicitly
|
|
88
|
-
npx makaron-cli chat --project auto --agent-model deepseek-v4-pro --image-model qwen "design a product poster"
|
|
89
86
|
```
|
|
90
87
|
|
|
91
|
-
|
|
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`.
|
|
92
89
|
|
|
93
90
|
Returns immediately:
|
|
94
91
|
```json
|
|
@@ -105,7 +102,7 @@ Returns immediately:
|
|
|
105
102
|
| Fix one moment in a video from a screenshot | `npx makaron-cli chat --project <id> --image screenshot.png "@4 this frame should be Paris; only fix this moment"` |
|
|
106
103
|
| Cut or assemble video | `npx makaron-cli chat --project <id> --video clip.mp4 "cut out the dead air and keep the best 20 seconds"` |
|
|
107
104
|
| Add music | `npx makaron-cli chat --project <id> "add calm piano background music"` |
|
|
108
|
-
| Beat-sync video from audio | `npx makaron-cli chat --project auto --audio beat.mp3 --video-
|
|
105
|
+
| Beat-sync video from audio | `npx makaron-cli chat --project auto --audio beat.mp3 --video-resolution 480p "make a beat-synced video"` |
|
|
109
106
|
| Create motion design | `npx makaron-cli chat --project <id> "make an animated Instagram story with this image"` |
|
|
110
107
|
|
|
111
108
|
### Marketplace skills
|
|
@@ -179,7 +176,6 @@ Attach a short song, beat, or voice recording when the video should follow audio
|
|
|
179
176
|
```bash
|
|
180
177
|
npx makaron-cli chat --project auto \
|
|
181
178
|
--audio beat.mp3 \
|
|
182
|
-
--video-model seedance-fast \
|
|
183
179
|
--video-resolution 480p \
|
|
184
180
|
-b "make a 15s beat-synced video"
|
|
185
181
|
```
|