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 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
@@ -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.32";
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 requestedIntent = flagString(args, "intent") ?? "explore";
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
- ? "requested executable image-to-3D model"
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 isExecutableImageTo3d = (model) =>
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) || isExecutableImageTo3d(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(isExecutableImageTo3d),
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?.modality === "3d" && model?.media?.input?.images?.required === true
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 renderImageTo3dGuideCommand({
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
- ? renderImageTo3dGuideCommand({
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(prompt, apiBaseUrl, commandPrefix = "image-skill") {
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 renderImageTo3dGuideCommand(input) {
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.32",
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 inspection 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.
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 inspection 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.
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 inspection 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.
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 inspection 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.
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 inspection 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.
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 models show openai.gpt-image-2-edit --json
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.07
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 inspection 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.
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 inspection 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.
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 models show fal.trellis-image-to-3d --json
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.25 --json
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