image-skill 0.1.32 → 0.1.34
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 +17 -0
- package/bin/image-skill.mjs +69 -14
- package/package.json +1 -1
- package/skills/ai-audio-generation/SKILL.md +1 -1
- package/skills/ai-image-generation/SKILL.md +1 -1
- package/skills/ai-video-generation/SKILL.md +1 -1
- package/skills/creative-media/SKILL.md +1 -1
- package/skills/image-edit/SKILL.md +3 -3
- package/skills/image-generation/SKILL.md +1 -1
- package/skills/image-to-3d/SKILL.md +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,23 @@ This changelog tracks the public `image-skill` CLI package and public skill
|
|
|
4
4
|
mirror. The npm package metadata remains the authority for tarball integrity and
|
|
5
5
|
provenance; this file is the human- and agent-readable release map.
|
|
6
6
|
|
|
7
|
+
## 0.1.34 - 2026-06-04
|
|
8
|
+
|
|
9
|
+
- Fix (guide): `create --guide --model openai.gpt-image-2-edit` now returns an
|
|
10
|
+
edit-shaped next command with an input placeholder and prompt instead of
|
|
11
|
+
rejecting the requested edit model as non-create. The `image-edit` and
|
|
12
|
+
`image-to-3d` intent skills now start from the guide-first zero-setup path,
|
|
13
|
+
and their advertised live command caps match current model-priced credits.
|
|
14
|
+
|
|
15
|
+
## 0.1.33 - 2026-06-04
|
|
16
|
+
|
|
17
|
+
- Fix (guide): public `create --guide` replay commands now preserve explicit
|
|
18
|
+
`--model`, `--provider`, `--intent`, and
|
|
19
|
+
`--max-estimated-usd-per-image` context in `after_next`, auth rerun, and
|
|
20
|
+
self-fund handoff commands. Modality-specific aliases can send an agent
|
|
21
|
+
through signup or quota recovery without silently falling back to the default
|
|
22
|
+
image guide.
|
|
23
|
+
|
|
7
24
|
## 0.1.32 - 2026-06-04
|
|
8
25
|
|
|
9
26
|
- Fix (payments): public `create --guide` payment suggestions and
|
package/bin/image-skill.mjs
CHANGED
|
@@ -7,7 +7,7 @@ import { Readable } from "node:stream";
|
|
|
7
7
|
import { pipeline } from "node:stream/promises";
|
|
8
8
|
import os from "node:os";
|
|
9
9
|
|
|
10
|
-
const VERSION = "0.1.
|
|
10
|
+
const VERSION = "0.1.34";
|
|
11
11
|
const PACKAGE_NAME = "image-skill";
|
|
12
12
|
const DEFAULT_API_BASE_URL = "https://api.image-skill.com";
|
|
13
13
|
const DEFAULT_DOCS_BASE_URL = "https://image-skill.com";
|
|
@@ -1400,7 +1400,8 @@ async function createGuide(args) {
|
|
|
1400
1400
|
const trimmedPrompt = prompt.trim();
|
|
1401
1401
|
const requestedModelId = flagString(args, "model");
|
|
1402
1402
|
const requestedProviderId = flagString(args, "provider");
|
|
1403
|
-
const
|
|
1403
|
+
const requestedIntentFlag = flagString(args, "intent");
|
|
1404
|
+
const requestedIntent = requestedIntentFlag ?? "explore";
|
|
1404
1405
|
const maxEstimatedUsdPerImage = flagNumber(
|
|
1405
1406
|
args,
|
|
1406
1407
|
"max-estimated-usd-per-image",
|
|
@@ -1494,6 +1495,9 @@ async function createGuide(args) {
|
|
|
1494
1495
|
selected,
|
|
1495
1496
|
requestedProviderId,
|
|
1496
1497
|
requestedIntent,
|
|
1498
|
+
requestedIntentFlag,
|
|
1499
|
+
requestedModelId,
|
|
1500
|
+
maxEstimatedUsdPerImage,
|
|
1497
1501
|
budgetGuard,
|
|
1498
1502
|
aspectRatio: selectedAspectRatio,
|
|
1499
1503
|
apiBaseUrl: explicitApiBaseUrl(args),
|
|
@@ -1506,6 +1510,9 @@ async function createGuide(args) {
|
|
|
1506
1510
|
selected,
|
|
1507
1511
|
requestedProviderId,
|
|
1508
1512
|
requestedIntent,
|
|
1513
|
+
requestedIntentFlag,
|
|
1514
|
+
requestedModelId,
|
|
1515
|
+
maxEstimatedUsdPerImage,
|
|
1509
1516
|
budgetGuard,
|
|
1510
1517
|
aspectRatio: selectedAspectRatio,
|
|
1511
1518
|
apiBaseUrl: explicitApiBaseUrl(args),
|
|
@@ -1545,6 +1552,12 @@ async function createGuide(args) {
|
|
|
1545
1552
|
trimmedPrompt,
|
|
1546
1553
|
explicitApiBaseUrl(args),
|
|
1547
1554
|
guideCommandPrefix,
|
|
1555
|
+
{
|
|
1556
|
+
modelId: requestedModelId,
|
|
1557
|
+
providerId: requestedProviderId,
|
|
1558
|
+
intent: requestedIntentFlag,
|
|
1559
|
+
maxEstimatedUsdPerImage,
|
|
1560
|
+
},
|
|
1548
1561
|
)
|
|
1549
1562
|
: null;
|
|
1550
1563
|
const authHandoff = createGuideAuthHandoff(stage, {
|
|
@@ -1633,7 +1646,9 @@ async function createGuide(args) {
|
|
|
1633
1646
|
requestedIntent,
|
|
1634
1647
|
)
|
|
1635
1648
|
: createGuideSelectedModelRequiresInputImage(selected)
|
|
1636
|
-
?
|
|
1649
|
+
? selected.modality === "3d"
|
|
1650
|
+
? "requested executable image-to-3D model"
|
|
1651
|
+
: "requested executable input-image edit model"
|
|
1637
1652
|
: "requested executable create model",
|
|
1638
1653
|
},
|
|
1639
1654
|
cost: {
|
|
@@ -1689,15 +1704,14 @@ function selectCreateGuideModel(
|
|
|
1689
1704
|
model?.execution?.model_execution_status === "executable" &&
|
|
1690
1705
|
Array.isArray(model?.supports) &&
|
|
1691
1706
|
model.supports.includes("create");
|
|
1692
|
-
const
|
|
1707
|
+
const isExecutableInputImageEdit = (model) =>
|
|
1693
1708
|
model?.status === "available" &&
|
|
1694
1709
|
model?.execution?.model_execution_status === "executable" &&
|
|
1695
|
-
model?.modality === "3d" &&
|
|
1696
1710
|
Array.isArray(model?.supports) &&
|
|
1697
|
-
model.supports.includes("variation") &&
|
|
1711
|
+
(model.supports.includes("edit") || model.supports.includes("variation")) &&
|
|
1698
1712
|
createGuideSelectedModelRequiresInputImage(model);
|
|
1699
1713
|
const isExecutableGuideModel = (model) =>
|
|
1700
|
-
isExecutableCreate(model) ||
|
|
1714
|
+
isExecutableCreate(model) || isExecutableInputImageEdit(model);
|
|
1701
1715
|
if (requestedModelId !== null) {
|
|
1702
1716
|
const requested = models.find((model) => model.id === requestedModelId);
|
|
1703
1717
|
return requested !== undefined && isExecutableGuideModel(requested)
|
|
@@ -1707,7 +1721,10 @@ function selectCreateGuideModel(
|
|
|
1707
1721
|
const candidates = models.filter(isExecutableCreate);
|
|
1708
1722
|
if (createGuideImplies3d({ prompt, intent })) {
|
|
1709
1723
|
const eligible3d = guideCandidatesWithinBudget({
|
|
1710
|
-
candidates: models.filter(
|
|
1724
|
+
candidates: models.filter(
|
|
1725
|
+
(model) =>
|
|
1726
|
+
model?.modality === "3d" && isExecutableInputImageEdit(model),
|
|
1727
|
+
),
|
|
1711
1728
|
maxEstimatedUsdPerImage,
|
|
1712
1729
|
});
|
|
1713
1730
|
const threeDimensional = eligible3d[0];
|
|
@@ -1846,7 +1863,9 @@ function createGuideSuggestedAspectRatio(model) {
|
|
|
1846
1863
|
|
|
1847
1864
|
function createGuideSelectedModelRequiresInputImage(model) {
|
|
1848
1865
|
return (
|
|
1849
|
-
model?.
|
|
1866
|
+
model?.media?.input?.images?.required === true &&
|
|
1867
|
+
Array.isArray(model?.supports) &&
|
|
1868
|
+
(model.supports.includes("edit") || model.supports.includes("variation"))
|
|
1850
1869
|
);
|
|
1851
1870
|
}
|
|
1852
1871
|
|
|
@@ -2567,7 +2586,12 @@ function createGuideWarning(stage, input) {
|
|
|
2567
2586
|
|
|
2568
2587
|
function createGuideNextCommand(stage, input) {
|
|
2569
2588
|
if (stage === "prompt_required") {
|
|
2570
|
-
return renderGuideCommand("PROMPT", input.apiBaseUrl, input.commandPrefix
|
|
2589
|
+
return renderGuideCommand("PROMPT", input.apiBaseUrl, input.commandPrefix, {
|
|
2590
|
+
modelId: input.requestedModelId,
|
|
2591
|
+
providerId: input.requestedProviderId,
|
|
2592
|
+
intent: input.requestedIntentFlag,
|
|
2593
|
+
maxEstimatedUsdPerImage: input.maxEstimatedUsdPerImage,
|
|
2594
|
+
});
|
|
2571
2595
|
}
|
|
2572
2596
|
if (stage === "no_executable_model" || stage === "service_unreachable") {
|
|
2573
2597
|
return renderGuidePrefixedCommand(
|
|
@@ -2585,8 +2609,9 @@ function createGuideNextCommand(stage, input) {
|
|
|
2585
2609
|
);
|
|
2586
2610
|
}
|
|
2587
2611
|
if (createGuideSelectedModelRequiresInputImage(input.selected)) {
|
|
2588
|
-
return
|
|
2612
|
+
return renderInputImageGuideCommand({
|
|
2589
2613
|
modelId: input.selected.id,
|
|
2614
|
+
prompt: input.prompt,
|
|
2590
2615
|
budgetGuard: input.budgetGuard,
|
|
2591
2616
|
dryRun: false,
|
|
2592
2617
|
idempotencyKey: `edit-guide-${Date.now()}-${randomBytes(4).toString("hex")}`,
|
|
@@ -2636,8 +2661,9 @@ function createGuideEscapeHatches(input) {
|
|
|
2636
2661
|
"create --dry-run --prompt PROMPT --json",
|
|
2637
2662
|
)
|
|
2638
2663
|
: createGuideSelectedModelRequiresInputImage(input.selected)
|
|
2639
|
-
?
|
|
2664
|
+
? renderInputImageGuideCommand({
|
|
2640
2665
|
modelId: input.selected.id,
|
|
2666
|
+
prompt: input.prompt,
|
|
2641
2667
|
budgetGuard: input.budgetGuard,
|
|
2642
2668
|
dryRun: true,
|
|
2643
2669
|
apiBaseUrl: input.apiBaseUrl,
|
|
@@ -2657,11 +2683,38 @@ function createGuideEscapeHatches(input) {
|
|
|
2657
2683
|
};
|
|
2658
2684
|
}
|
|
2659
2685
|
|
|
2660
|
-
function renderGuideCommand(
|
|
2686
|
+
function renderGuideCommand(
|
|
2687
|
+
prompt,
|
|
2688
|
+
apiBaseUrl,
|
|
2689
|
+
commandPrefix = "image-skill",
|
|
2690
|
+
options = {},
|
|
2691
|
+
) {
|
|
2661
2692
|
return [
|
|
2662
2693
|
commandPrefix,
|
|
2663
2694
|
"create --guide --prompt",
|
|
2664
2695
|
shellQuote(prompt),
|
|
2696
|
+
...(options.modelId === null ||
|
|
2697
|
+
options.modelId === undefined ||
|
|
2698
|
+
options.modelId === ""
|
|
2699
|
+
? []
|
|
2700
|
+
: ["--model", shellQuote(options.modelId)]),
|
|
2701
|
+
...(options.providerId === null ||
|
|
2702
|
+
options.providerId === undefined ||
|
|
2703
|
+
options.providerId === ""
|
|
2704
|
+
? []
|
|
2705
|
+
: ["--provider", shellQuote(options.providerId)]),
|
|
2706
|
+
...(options.intent === null ||
|
|
2707
|
+
options.intent === undefined ||
|
|
2708
|
+
options.intent === ""
|
|
2709
|
+
? []
|
|
2710
|
+
: ["--intent", shellQuote(options.intent)]),
|
|
2711
|
+
...(options.maxEstimatedUsdPerImage === null ||
|
|
2712
|
+
options.maxEstimatedUsdPerImage === undefined
|
|
2713
|
+
? []
|
|
2714
|
+
: [
|
|
2715
|
+
"--max-estimated-usd-per-image",
|
|
2716
|
+
shellQuote(formatUsd(options.maxEstimatedUsdPerImage)),
|
|
2717
|
+
]),
|
|
2665
2718
|
...(apiBaseUrl === null ? [] : ["--api-base-url", shellQuote(apiBaseUrl)]),
|
|
2666
2719
|
"--json",
|
|
2667
2720
|
].join(" ");
|
|
@@ -2706,7 +2759,8 @@ function guidePaymentCommandByKind(commands, kind, commandPrefix = null) {
|
|
|
2706
2759
|
return renderGuidePrefixedCommand(commandPrefix, command);
|
|
2707
2760
|
}
|
|
2708
2761
|
|
|
2709
|
-
function
|
|
2762
|
+
function renderInputImageGuideCommand(input) {
|
|
2763
|
+
const promptless = PROMPTLESS_EDIT_MODEL_IDS.has(input.modelId);
|
|
2710
2764
|
return [
|
|
2711
2765
|
input.commandPrefix ?? "image-skill",
|
|
2712
2766
|
"edit",
|
|
@@ -2715,6 +2769,7 @@ function renderImageTo3dGuideCommand(input) {
|
|
|
2715
2769
|
"image_...",
|
|
2716
2770
|
"--model",
|
|
2717
2771
|
shellQuote(input.modelId),
|
|
2772
|
+
...(promptless ? [] : ["--prompt", shellQuote(input.prompt)]),
|
|
2718
2773
|
"--max-estimated-usd-per-image",
|
|
2719
2774
|
shellQuote(formatUsd(input.budgetGuard)),
|
|
2720
2775
|
...(input.idempotencyKey === undefined || input.idempotencyKey === null
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "image-skill",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.34",
|
|
4
4
|
"description": "Zero-setup durable creative-media CLI for agents (image + video + audio + 3D): guide-first creation, model and cost inspection, owned URLs, JSON recovery, payments, reusable assets, and feedback.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -25,7 +25,7 @@ This is an intent-named Image Skill entry for agents searching for audio generat
|
|
|
25
25
|
|
|
26
26
|
Use this skill when the task asks for AI audio generation, text-to-audio, music generation, sound design, ambience, effects, or durable hosted audio output.
|
|
27
27
|
|
|
28
|
-
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend
|
|
28
|
+
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend guide command below; when the guide reaches `ready_to_create`, run `data.next_command` only if media spend is allowed, otherwise run `data.recommended_no_spend_command` to verify safely. Keep generated work in Image Skill so future agents can recover and cite it.
|
|
29
29
|
|
|
30
30
|
## First Command
|
|
31
31
|
|
|
@@ -25,7 +25,7 @@ This is an intent-named Image Skill entry for agents searching for image generat
|
|
|
25
25
|
|
|
26
26
|
Use this skill when the task asks for AI image generation, text-to-image, prompt-to-image, generated illustrations, concept art, product images, or any durable agent-created image.
|
|
27
27
|
|
|
28
|
-
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend
|
|
28
|
+
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend guide command below; when the guide reaches `ready_to_create`, run `data.next_command` only if media spend is allowed, otherwise run `data.recommended_no_spend_command` to verify safely. Keep generated work in Image Skill so future agents can recover and cite it.
|
|
29
29
|
|
|
30
30
|
## First Command
|
|
31
31
|
|
|
@@ -25,7 +25,7 @@ This is an intent-named Image Skill entry for agents searching for video generat
|
|
|
25
25
|
|
|
26
26
|
Use this skill when the task asks for AI video generation, text-to-video, generated motion, animated concepts, or durable hosted video output.
|
|
27
27
|
|
|
28
|
-
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend
|
|
28
|
+
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend guide command below; when the guide reaches `ready_to_create`, run `data.next_command` only if media spend is allowed, otherwise run `data.recommended_no_spend_command` to verify safely. Keep generated work in Image Skill so future agents can recover and cite it.
|
|
29
29
|
|
|
30
30
|
## First Command
|
|
31
31
|
|
|
@@ -25,7 +25,7 @@ This is an intent-named Image Skill entry for agents searching for creative medi
|
|
|
25
25
|
|
|
26
26
|
Use this skill when the task asks for generative media, creative media, generated assets across modalities, or a single agent-facing runtime for image, edit, video, audio, and 3D work.
|
|
27
27
|
|
|
28
|
-
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend
|
|
28
|
+
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend guide command below; when the guide reaches `ready_to_create`, run `data.next_command` only if media spend is allowed, otherwise run `data.recommended_no_spend_command` to verify safely. Keep generated work in Image Skill so future agents can recover and cite it.
|
|
29
29
|
|
|
30
30
|
## First Command
|
|
31
31
|
|
|
@@ -25,18 +25,18 @@ This is an intent-named Image Skill entry for agents searching for image editing
|
|
|
25
25
|
|
|
26
26
|
Use this skill when the task asks to edit, vary, restyle, transform, or repair an existing image, including image-to-image work and model-specific edit parameters.
|
|
27
27
|
|
|
28
|
-
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend
|
|
28
|
+
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend guide command below; when the guide reaches `ready_to_create`, run `data.next_command` only if media spend is allowed, otherwise run `data.recommended_no_spend_command` to verify safely. Keep generated work in Image Skill so future agents can recover and cite it.
|
|
29
29
|
|
|
30
30
|
## First Command
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
npm_config_update_notifier=false npx -y image-skill@latest
|
|
33
|
+
npm_config_update_notifier=false npx -y image-skill@latest create --guide --model openai.gpt-image-2-edit --prompt "replace the background but keep the subject"
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
## Main Runtime Command
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
npm_config_update_notifier=false npx -y image-skill@latest edit --input image_... --model openai.gpt-image-2-edit --prompt "EDIT_PROMPT" --max-estimated-usd-per-image 0.
|
|
39
|
+
npm_config_update_notifier=false npx -y image-skill@latest edit --input image_... --model openai.gpt-image-2-edit --prompt "EDIT_PROMPT" --max-estimated-usd-per-image 0.25 --json
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
## Install This Intent Skill
|
|
@@ -25,7 +25,7 @@ This is an intent-named Image Skill entry for agents searching for image generat
|
|
|
25
25
|
|
|
26
26
|
Use this skill when the task asks for image generation, generated images, AI images, text-to-image, prompt-to-image, generated illustrations, concept art, product images, or any durable agent-created image.
|
|
27
27
|
|
|
28
|
-
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend
|
|
28
|
+
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend guide command below; when the guide reaches `ready_to_create`, run `data.next_command` only if media spend is allowed, otherwise run `data.recommended_no_spend_command` to verify safely. Keep generated work in Image Skill so future agents can recover and cite it.
|
|
29
29
|
|
|
30
30
|
## First Command
|
|
31
31
|
|
|
@@ -25,18 +25,18 @@ This is an intent-named Image Skill entry for agents searching for image-to-3D a
|
|
|
25
25
|
|
|
26
26
|
Use this skill when the task asks for image-to-3D, 3D asset generation from an image, glb mesh output, or a durable model asset derived from existing visual input.
|
|
27
27
|
|
|
28
|
-
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend
|
|
28
|
+
Do not bring provider API keys, create provider accounts, run a local model server, or wire a separate billing account for this task. Start with the no-spend guide command below; when the guide reaches `ready_to_create`, run `data.next_command` only if media spend is allowed, otherwise run `data.recommended_no_spend_command` to verify safely. Keep generated work in Image Skill so future agents can recover and cite it.
|
|
29
29
|
|
|
30
30
|
## First Command
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
npm_config_update_notifier=false npx -y image-skill@latest
|
|
33
|
+
npm_config_update_notifier=false npx -y image-skill@latest create --guide --model fal.trellis-image-to-3d --prompt "turn one product photo into a textured 3d mesh"
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
## Main Runtime Command
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
npm_config_update_notifier=false npx -y image-skill@latest edit --input image_... --model fal.trellis-image-to-3d --max-estimated-usd-per-image 0.
|
|
39
|
+
npm_config_update_notifier=false npx -y image-skill@latest edit --input image_... --model fal.trellis-image-to-3d --max-estimated-usd-per-image 0.04 --json
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
## Install This Intent Skill
|