image-skill 0.1.6 → 0.1.8
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 +53 -0
- package/PROVENANCE.md +78 -0
- package/README.md +66 -11
- package/bin/image-skill.mjs +647 -36
- package/cli.md +378 -44
- package/llms.txt +45 -24
- package/package.json +22 -4
- package/skill.md +254 -25
- package/skills/image-skill/SKILL.md +562 -0
- package/skills/image-skill/references/cli.md +1263 -0
- package/skills/image-skill/references/llms.txt +248 -0
package/cli.md
CHANGED
|
@@ -92,6 +92,44 @@ printf '%s\n' "$IMAGE_SKILL_TOKEN" | image-skill usage quota --token-stdin --jso
|
|
|
92
92
|
`--api-base-url` is an advanced preview/test override; production public agents
|
|
93
93
|
should omit it.
|
|
94
94
|
|
|
95
|
+
### Local Config And Install
|
|
96
|
+
|
|
97
|
+
Prefer package execution in fresh agent sandboxes:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
npm exec --yes --package image-skill@latest -- image-skill doctor --json
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Global install is optional, not the primary path. If `npm install -g image-skill`
|
|
104
|
+
or `npx image-skill@latest ...` hits prefix/cache `EACCES`, retry with writable
|
|
105
|
+
package-manager paths instead of cloning private source:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
export npm_config_cache="${npm_config_cache:-$PWD/.npm-cache}"
|
|
109
|
+
export npm_config_prefix="${npm_config_prefix:-$PWD/.npm-global}"
|
|
110
|
+
export PATH="$npm_config_prefix/bin:$PATH"
|
|
111
|
+
npm exec --yes --package image-skill@latest -- image-skill doctor --json
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Saved auth state defaults to
|
|
115
|
+
`${XDG_CONFIG_HOME:-~/.config}/image-skill/config.json`. If that location is
|
|
116
|
+
read-only, set a writable config path before `signup --save`:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
export IMAGE_SKILL_CONFIG_PATH="$PWD/.image-skill/config.json"
|
|
120
|
+
npm exec --yes --package image-skill@latest -- image-skill signup --agent \
|
|
121
|
+
--agent-contact agent-ops@example.com \
|
|
122
|
+
--agent-name creative-agent \
|
|
123
|
+
--runtime codex \
|
|
124
|
+
--save \
|
|
125
|
+
--json
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Config write failures return `PUBLIC_CLI_CONFIG_WRITE_FAILED` with a structured
|
|
129
|
+
`error.recovery.suggested_command`. Agents should follow that recovery field,
|
|
130
|
+
then continue with `whoami`, `usage quota`, `models list`, and the requested
|
|
131
|
+
creative flow.
|
|
132
|
+
|
|
95
133
|
### `image-skill whoami`
|
|
96
134
|
|
|
97
135
|
Shows current actor, organization, claim state, token class, and grants.
|
|
@@ -293,9 +331,21 @@ curl -sS https://api.image-skill.com/v1/credit-quotes \
|
|
|
293
331
|
|
|
294
332
|
Creates a live-provider payment action for a previously returned quote. Stripe
|
|
295
333
|
Checkout is the first supported provider. This creates a hosted Stripe Checkout
|
|
296
|
-
Session and returns an `action_required` response with
|
|
297
|
-
are granted only after verified Stripe webhook
|
|
298
|
-
creation itself must not mutate credit balances.
|
|
334
|
+
Session and returns an `action_required` response with
|
|
335
|
+
`checkout_handoff_url`; credits are granted only after verified Stripe webhook
|
|
336
|
+
fulfillment succeeds. Session creation itself must not mutate credit balances.
|
|
337
|
+
|
|
338
|
+
Agents should present or open `checkout_handoff_url` for humans. It is a short
|
|
339
|
+
Image Skill URL that redirects to Stripe Checkout and is safe to copy from
|
|
340
|
+
mobile terminals, SSH clients, and wrapped chat output. `checkout_url` remains
|
|
341
|
+
the Stripe compatibility fallback and is fragment-stripped by current API/CLI
|
|
342
|
+
responses for human copy/paste; do not ask a person to copy it when
|
|
343
|
+
`checkout_handoff_url` is present.
|
|
344
|
+
|
|
345
|
+
If a stale server or older client exposes a raw Stripe URL with a long `#...`
|
|
346
|
+
fragment, remove the fragment and use `checkout_compact_url` for human
|
|
347
|
+
copy/paste. Present any fallback Stripe URL in a fenced code block so terminal
|
|
348
|
+
wrapping does not corrupt it.
|
|
299
349
|
|
|
300
350
|
```bash
|
|
301
351
|
image-skill credits buy \
|
|
@@ -315,14 +365,19 @@ Minimum success data:
|
|
|
315
365
|
"provider": "stripe",
|
|
316
366
|
"accepted_payment_method": "stripe_checkout",
|
|
317
367
|
"checkout_session_id": "cs_...",
|
|
318
|
-
"
|
|
368
|
+
"checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
|
|
369
|
+
"checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...",
|
|
370
|
+
"checkout_url": "https://checkout.stripe.com/c/pay/cs_...",
|
|
319
371
|
"credits": 500,
|
|
320
372
|
"amount_cents": 500,
|
|
321
373
|
"currency": "USD",
|
|
322
374
|
"live_money": true,
|
|
323
375
|
"next": {
|
|
324
376
|
"human_action": "open_checkout_url",
|
|
325
|
-
"
|
|
377
|
+
"checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
|
|
378
|
+
"checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...",
|
|
379
|
+
"fallback_checkout_url": "https://checkout.stripe.com/c/pay/cs_...",
|
|
380
|
+
"after_payment": "open checkout_handoff_url, or checkout_compact_url if only a Stripe URL is available, then poll image-skill credits status --payment-attempt-id PAYMENT_ATTEMPT_ID --json or image-skill usage quota --json; credits are granted only after verified webhook fulfillment"
|
|
326
381
|
}
|
|
327
382
|
}
|
|
328
383
|
```
|
|
@@ -366,14 +421,18 @@ Minimum action-required data:
|
|
|
366
421
|
"payment_attempt": {
|
|
367
422
|
"payment_attempt_id": "payatt_...",
|
|
368
423
|
"checkout_session_id": "cs_...",
|
|
369
|
-
"
|
|
424
|
+
"checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
|
|
425
|
+
"checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...",
|
|
426
|
+
"checkout_url": "https://checkout.stripe.com/c/pay/cs_...",
|
|
370
427
|
"attempt_status": "requires_action"
|
|
371
428
|
},
|
|
372
429
|
"receipt": null,
|
|
373
430
|
"credit_event": null,
|
|
374
431
|
"next": {
|
|
375
432
|
"retry_after_seconds": 10,
|
|
376
|
-
"human_action": "open_checkout_url"
|
|
433
|
+
"human_action": "open_checkout_url",
|
|
434
|
+
"checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
|
|
435
|
+
"checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_..."
|
|
377
436
|
}
|
|
378
437
|
}
|
|
379
438
|
```
|
|
@@ -468,12 +527,60 @@ must not flatten rich model capabilities into coarse universal categories.
|
|
|
468
527
|
Use `model_parameters` for rare or model-specific parameters advertised by the
|
|
469
528
|
capability schema.
|
|
470
529
|
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
`model_parameters
|
|
530
|
+
Current executable provider-native controls include:
|
|
531
|
+
|
|
532
|
+
- Fal FLUX.1 dev: `model_parameters.image_size` for presets such as
|
|
533
|
+
`square_hd`, plus `seed`.
|
|
534
|
+
- Fal FLUX Pro 1.1 Ultra Create: `model_parameters.seed` and
|
|
535
|
+
`model_parameters.raw`; optional reference-image controls remain cataloged
|
|
536
|
+
for inspection but are not executable on the create-only path.
|
|
537
|
+
- Fal Z-Image Turbo Create/Edit: `model_parameters.image_size` for
|
|
538
|
+
`square_hd`, `square`, portrait/landscape presets, and `auto` on edit; costs
|
|
539
|
+
are quoted from requested megapixels when the output size is explicit.
|
|
540
|
+
- Fal Nano Banana 2 Edit: `model_parameters.resolution` for `0.5K`, `1K`,
|
|
541
|
+
`2K`, and `4K`, plus `seed`.
|
|
542
|
+
- Fal Ideogram V2 Edit: `model_parameters.expand_prompt`, `seed`, and
|
|
543
|
+
`style`; pass masks as top-level `--mask` / `mask_asset_id`, not as
|
|
544
|
+
provider `mask_url`.
|
|
545
|
+
- Fal Gemini 3 Pro Image Preview Create/Edit:
|
|
546
|
+
`model_parameters.resolution` for `1K`, `2K`, and `4K`, plus `seed`; 4K is
|
|
547
|
+
quoted as the higher-priced provider tier.
|
|
548
|
+
- Fal Nano Banana Pro Create/Edit: `model_parameters.resolution` for `1K`,
|
|
549
|
+
`2K`, and `4K`, plus `seed`; 4K is quoted as the higher-priced provider tier.
|
|
550
|
+
- Fal FLUX Pro Kontext Pro/Max Edit: `model_parameters.seed`; guidance scale
|
|
551
|
+
and aspect-ratio controls remain cataloged for inspection but are not
|
|
552
|
+
executable until their UX and receipt behavior are represented.
|
|
553
|
+
- Fal Bytedance Seedream 4.5 Create/Edit: `model_parameters.image_size` for
|
|
554
|
+
`square_hd`, `square`, portrait/landscape presets, `auto_2K`, and
|
|
555
|
+
`auto_4K`, plus `seed`; multi-output and multi-reference controls remain
|
|
556
|
+
cataloged but fixed for hosted accounting.
|
|
557
|
+
- Fal Bytedance Seedream 5.0 Lite Create/Edit:
|
|
558
|
+
`model_parameters.image_size` for `square_hd`, `square`, portrait/landscape
|
|
559
|
+
presets, `auto_2K`, and `auto_3K`; multi-output and multi-reference controls
|
|
560
|
+
remain cataloged but fixed for hosted accounting.
|
|
561
|
+
- xAI Grok Imagine Image Quality: `model_parameters.resolution` for `1k` and
|
|
562
|
+
`2k`; 2k is priced from the higher provider tier. Create supports top-level
|
|
563
|
+
`--output-count` up to the model's advertised `max_outputs_per_request`,
|
|
564
|
+
currently mapped to xAI's documented `n` batch parameter.
|
|
565
|
+
- GPT Image 1.5 create/edit: documented fixed sizes `1024x1024`,
|
|
566
|
+
`1024x1536`, and `1536x1024`, output format, compression, transparent or
|
|
567
|
+
opaque background, moderation, and the upstream provider-native quality
|
|
568
|
+
parameter. GPT Image 1.5 create quotes output-token estimates when quality
|
|
569
|
+
and concrete size are known; GPT Image 1.5 create supports top-level
|
|
570
|
+
`--output-count` up to the model's advertised `max_outputs_per_request`,
|
|
571
|
+
currently mapped to OpenAI's `n` parameter. GPT Image 1.5 edit accepts
|
|
572
|
+
low/high `input_fidelity` and remains preflight unknown-cost until usage is
|
|
573
|
+
returned.
|
|
574
|
+
- GPT Image 2 create/edit: size, output format, compression, background,
|
|
575
|
+
moderation, and the upstream provider-native quality parameter. GPT Image 2
|
|
576
|
+
create quotes request-aware output-token estimates when quality and concrete
|
|
577
|
+
size are known; GPT Image 2 create supports top-level `--output-count` up to
|
|
578
|
+
the model's advertised `max_outputs_per_request`, currently mapped to
|
|
579
|
+
OpenAI's `n` parameter. GPT Image 2 edit remains preflight unknown-cost, then
|
|
580
|
+
records usage-priced provider cost when OpenAI returns token usage.
|
|
581
|
+
|
|
582
|
+
Inspect each model before use; provider-native controls are available only
|
|
583
|
+
through validated `model_parameters`.
|
|
477
584
|
|
|
478
585
|
### `image-skill capabilities`
|
|
479
586
|
|
|
@@ -499,29 +606,125 @@ image-skill create \
|
|
|
499
606
|
--json
|
|
500
607
|
```
|
|
501
608
|
|
|
609
|
+
Hosted defaults are quality-first. If an agent does not choose a model, Image
|
|
610
|
+
Skill selects the strongest available create capability for the requested
|
|
611
|
+
intent and budget, then records the decision in `request.selection`. Explicit
|
|
612
|
+
`--provider`, `--model`, namespaced model ids, and validated
|
|
613
|
+
`model_parameters` always take precedence. For final/product/hero-style
|
|
614
|
+
intents, Image Skill may default an eligible quality-capability request to a
|
|
615
|
+
higher output tier only when `--max-estimated-usd-per-image` is high enough for
|
|
616
|
+
that tier; otherwise it stays on a lower-cost quality tier or chooses a cheaper
|
|
617
|
+
capability within the budget and tells agents what happened in the selection
|
|
618
|
+
receipt.
|
|
619
|
+
|
|
502
620
|
Preview-compatible richer shape:
|
|
503
621
|
|
|
504
622
|
```bash
|
|
505
623
|
image-skill create \
|
|
506
|
-
--prompt-
|
|
624
|
+
--prompt "Campaign-ready product image of a compact field camera" \
|
|
507
625
|
--intent finalize \
|
|
508
626
|
--model MODEL_ID \
|
|
509
627
|
--aspect-ratio 1:1 \
|
|
510
|
-
--
|
|
511
|
-
--max-usd 0.
|
|
628
|
+
--output-count 2 \
|
|
629
|
+
--max-estimated-usd-per-image 0.07 \
|
|
512
630
|
--model-parameters-json '{"seed":1234}' \
|
|
513
631
|
--json
|
|
514
632
|
```
|
|
515
633
|
|
|
634
|
+
Use `--output-count N` only when `models show MODEL_ID --json` advertises
|
|
635
|
+
`media.output.max_outputs_per_request` greater than `1`. `--output-count` is a
|
|
636
|
+
top-level Image Skill create control; do not pass provider-native `n` through
|
|
637
|
+
`model_parameters` unless the selected model schema explicitly advertises that
|
|
638
|
+
field. Credit pricing and `cost.credit_pricing.credits_required` are total
|
|
639
|
+
operation debits across all requested outputs. `--max-estimated-usd-per-image`
|
|
640
|
+
and raw API `max_estimated_usd_per_image` remain per-image budget guards.
|
|
641
|
+
|
|
642
|
+
For create models with wired reference support, pass owned reference assets
|
|
643
|
+
with the model's advertised reference role. Kling element routes use
|
|
644
|
+
`--element-frontal IMAGE[@ELEMENT_INDEX]` and
|
|
645
|
+
`--element-reference IMAGE[@ELEMENT_INDEX[:REFERENCE_INDEX]]`; flat
|
|
646
|
+
reference-image routes use `--reference-image IMAGE[@INDEX]`; Fal DreamO also
|
|
647
|
+
accepts `:TASK` where `TASK` is `ip`, `id`, or `style`. The public CLI uploads
|
|
648
|
+
local paths and external URLs first, then
|
|
649
|
+
sends top-level `references[]` entries with Image Skill `asset_id` values to
|
|
650
|
+
`/v1/create`. Do not pass provider-native `elements`, `frontal_image_url`,
|
|
651
|
+
`reference_image_urls`, `first_image_url`, `second_image_url`, `images`, or
|
|
652
|
+
`*_reference_task` through `model_parameters`; provider-private URLs are
|
|
653
|
+
resolved server-side after ownership and media-policy validation.
|
|
654
|
+
|
|
655
|
+
```bash
|
|
656
|
+
image-skill create \
|
|
657
|
+
--model fal.kling-image-o3-text-to-image \
|
|
658
|
+
--prompt "Place the same character in a clean studio campaign" \
|
|
659
|
+
--element-frontal ./character-front.png@0 \
|
|
660
|
+
--element-reference ./character-side.webp@0:0 \
|
|
661
|
+
--output-count 2 \
|
|
662
|
+
--max-estimated-usd-per-image 0.06 \
|
|
663
|
+
--json
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
```bash
|
|
667
|
+
image-skill create \
|
|
668
|
+
--model fal.dreamo \
|
|
669
|
+
--prompt "Studio portrait preserving identity with a bolder editorial style" \
|
|
670
|
+
--reference-image ./identity.png@0:id \
|
|
671
|
+
--reference-image ./style.webp@1:style \
|
|
672
|
+
--model-parameters-json '{"image_size":{"width":1280,"height":720}}' \
|
|
673
|
+
--max-estimated-usd-per-image 0.06 \
|
|
674
|
+
--json
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
High-resolution examples:
|
|
678
|
+
|
|
679
|
+
```bash
|
|
680
|
+
image-skill create \
|
|
681
|
+
--prompt "Campaign-ready product image of a compact field camera" \
|
|
682
|
+
--intent final \
|
|
683
|
+
--max-estimated-usd-per-image 0.07 \
|
|
684
|
+
--json
|
|
685
|
+
|
|
686
|
+
image-skill create \
|
|
687
|
+
--prompt "Campaign-ready product image of a compact field camera" \
|
|
688
|
+
--model fal.gemini-3-pro-image-preview \
|
|
689
|
+
--model-parameters-json '{"resolution":"4K"}' \
|
|
690
|
+
--max-estimated-usd-per-image 0.30 \
|
|
691
|
+
--json
|
|
692
|
+
|
|
693
|
+
image-skill create \
|
|
694
|
+
--prompt "Campaign-ready product image of a compact field camera" \
|
|
695
|
+
--model xai.grok-imagine-image-quality \
|
|
696
|
+
--model-parameters-json '{"resolution":"2k"}' \
|
|
697
|
+
--max-estimated-usd-per-image 0.07 \
|
|
698
|
+
--json
|
|
699
|
+
|
|
700
|
+
image-skill edit \
|
|
701
|
+
--input-asset-id image_... \
|
|
702
|
+
--prompt "preserve the subject and make this campaign-ready" \
|
|
703
|
+
--model fal.nano-banana-2-edit \
|
|
704
|
+
--model-parameters-json '{"resolution":"4K"}' \
|
|
705
|
+
--accept-unknown-cost \
|
|
706
|
+
--json
|
|
707
|
+
```
|
|
708
|
+
|
|
516
709
|
`model_parameters` must be validated against the selected model/capability
|
|
517
710
|
schema before any provider call or paid reservation. Unknown fields fail closed
|
|
518
711
|
unless the capability explicitly allows additional properties. This is how
|
|
519
712
|
Image Skill preserves rare model controls without turning every
|
|
520
713
|
provider-specific parameter into a top-level flag.
|
|
521
|
-
In the current preview, Fal create/edit
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
714
|
+
In the current preview, Fal create/edit, xAI quality generation, and OpenAI GPT
|
|
715
|
+
Image 2 expose the executable provider-native controls listed in the selected
|
|
716
|
+
model schema. GPT Image 2 create has request-aware output-token credit quotes
|
|
717
|
+
for concrete quality/size requests; GPT Image 2 edit still requires
|
|
718
|
+
unknown-cost acceptance before execution, but records usage-priced provider cost
|
|
719
|
+
after execution when OpenAI returns token usage. Provider-native controls remain
|
|
720
|
+
visible for planning and fail closed until their capability schema marks them
|
|
721
|
+
executable. Hosted
|
|
722
|
+
`create --dry-run` validates `model_parameters` against the selected model,
|
|
723
|
+
returns accepted keys/provenance and request-aware credit pricing for planning,
|
|
724
|
+
and never executes provider controls or consumes credits.
|
|
725
|
+
For dry-run responses, `cost.credit_pricing.credits_required` is the planned
|
|
726
|
+
live execution debit for the selected model. The actual debit for the dry run is
|
|
727
|
+
`quota.consumed_credits: 0`.
|
|
525
728
|
|
|
526
729
|
Minimum success data:
|
|
527
730
|
|
|
@@ -536,19 +739,44 @@ Minimum success data:
|
|
|
536
739
|
"asset_id": "image_...",
|
|
537
740
|
"path": "https://media.image-skill.com/a/image_abc123.png",
|
|
538
741
|
"mime_type": "image/png",
|
|
539
|
-
"url": "https://media.image-skill.com/a/image_abc123.png"
|
|
742
|
+
"url": "https://media.image-skill.com/a/image_abc123.png",
|
|
743
|
+
"content_length": 333444,
|
|
744
|
+
"width": 1024,
|
|
745
|
+
"height": 1024
|
|
540
746
|
}
|
|
541
747
|
],
|
|
542
748
|
"cost": {
|
|
543
|
-
"estimated_usd": 0.
|
|
749
|
+
"estimated_usd": 0.05,
|
|
544
750
|
"credit_pricing": {
|
|
545
751
|
"credit_unit_usd": 0.01,
|
|
546
|
-
"credits_required":
|
|
547
|
-
"estimated_provider_cost_usd": 0.
|
|
548
|
-
"estimated_revenue_usd": 0.
|
|
752
|
+
"credits_required": 9,
|
|
753
|
+
"estimated_provider_cost_usd": 0.05,
|
|
754
|
+
"estimated_revenue_usd": 0.09,
|
|
549
755
|
"pricing_confidence": "known"
|
|
550
756
|
}
|
|
551
757
|
},
|
|
758
|
+
"request": {
|
|
759
|
+
"output_count": 1,
|
|
760
|
+
"selection": {
|
|
761
|
+
"policy": "hosted_default_create_v1",
|
|
762
|
+
"reason": "hosted default selected the strongest currently available quality-first create model",
|
|
763
|
+
"intent": "explore",
|
|
764
|
+
"capability": {
|
|
765
|
+
"id": "is.image.generate.xai-grok-imagine-image-quality.v1"
|
|
766
|
+
},
|
|
767
|
+
"model_parameters": {
|
|
768
|
+
"keys": ["resolution"],
|
|
769
|
+
"defaults_applied": ["resolution=1k"],
|
|
770
|
+
"source": "default_policy"
|
|
771
|
+
},
|
|
772
|
+
"output": {
|
|
773
|
+
"resolution_class": "1k",
|
|
774
|
+
"expected_width": null,
|
|
775
|
+
"expected_height": null,
|
|
776
|
+
"expected_min_short_edge": 1024
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
},
|
|
552
780
|
"safety": {
|
|
553
781
|
"status": "allowed"
|
|
554
782
|
}
|
|
@@ -578,6 +806,7 @@ curl -sS https://api.image-skill.com/v1/create \
|
|
|
578
806
|
"prompt": "A compact field camera on a stainless workbench",
|
|
579
807
|
"intent": "explore",
|
|
580
808
|
"aspect_ratio": "1:1",
|
|
809
|
+
"output_count": 1,
|
|
581
810
|
"max_estimated_usd_per_image": 0.05,
|
|
582
811
|
"model_parameters": {
|
|
583
812
|
"seed": 1234
|
|
@@ -586,7 +815,8 @@ curl -sS https://api.image-skill.com/v1/create \
|
|
|
586
815
|
```
|
|
587
816
|
|
|
588
817
|
Hosted free-preview create currently requires owned artifact storage and returns
|
|
589
|
-
`assets[]
|
|
818
|
+
one `assets[]` entry per output with `assets[].url` under
|
|
819
|
+
`https://media.image-skill.com/...` on success.
|
|
590
820
|
|
|
591
821
|
### `image-skill upload`
|
|
592
822
|
|
|
@@ -643,6 +873,7 @@ with one hosted provider-backed edit model.
|
|
|
643
873
|
```bash
|
|
644
874
|
image-skill edit \
|
|
645
875
|
--input ASSET_ID_OR_PATH_OR_URL \
|
|
876
|
+
--mask MASK_ASSET_ID_OR_PATH_OR_URL \
|
|
646
877
|
--prompt "Remove the background and keep natural object shadows" \
|
|
647
878
|
--accept-unknown-cost \
|
|
648
879
|
--json
|
|
@@ -652,16 +883,114 @@ If `--input` is a local path or external URL, the public CLI first normalizes it
|
|
|
652
883
|
through the same upload resolver as `image-skill upload`, then sends only the
|
|
653
884
|
resulting `asset_id` to `POST /v1/edit`. If `--input` is an Image Skill asset id
|
|
654
885
|
or owned asset URL, edit uses that owned asset directly.
|
|
886
|
+
For models with wired mask support, `--mask` follows the same upload/asset-id
|
|
887
|
+
resolver and sends only `mask_asset_id`; never pass provider-native `mask_url`
|
|
888
|
+
through `model_parameters`.
|
|
889
|
+
For models with wired reference support, pass owned reference assets with the
|
|
890
|
+
model's advertised reference role. Kling element routes use
|
|
891
|
+
`--element-frontal IMAGE[@ELEMENT_INDEX]` and
|
|
892
|
+
`--element-reference IMAGE[@ELEMENT_INDEX[:REFERENCE_INDEX]]`; flat
|
|
893
|
+
reference-image routes use `--reference-image IMAGE[@INDEX[:TASK]]`. The
|
|
894
|
+
public CLI uploads local paths and external URLs first, then sends top-level
|
|
895
|
+
`references[]` entries with Image Skill `asset_id` values. For Kling element
|
|
896
|
+
routes, `--element-frontal ./front.png@0` becomes role `element_frontal` for
|
|
897
|
+
element index `0`, and `--element-reference ./side.webp@0:0` becomes role
|
|
898
|
+
`element_reference` for the same element with reference slot `0`. For DreamO
|
|
899
|
+
create, `--reference-image ./identity.png@0:id` becomes role
|
|
900
|
+
`reference_image`, index `0`, and `reference_task` `id`. For xAI edit,
|
|
901
|
+
`--reference-image ./reference.png@0` becomes the second ordered source image;
|
|
902
|
+
the primary `--input` asset remains the first source image. Do not pass
|
|
903
|
+
provider-native `elements`, `image_url`, `image_urls`, `frontal_image_url`,
|
|
904
|
+
`reference_image_urls`, `first_image_url`, `second_image_url`, `images`, or
|
|
905
|
+
`*_reference_task` through `model_parameters`; provider-private URLs are
|
|
906
|
+
resolved server-side after ownership and media-policy validation.
|
|
907
|
+
Current public `references[]` support covers Kling Image O1, Kling Image O3
|
|
908
|
+
image-to-image/text-to-image, Kling Image v3 image-to-image/text-to-image, and
|
|
909
|
+
Fal DreamO create plus xAI Grok Imagine image edit/quality edit. Kling requests
|
|
910
|
+
may contain at most 40 reference entries across at most 10 contiguous element
|
|
911
|
+
indexes starting at `0`; each referenced element requires one frontal image and
|
|
912
|
+
may include up to three additional reference images. DreamO accepts up to two
|
|
913
|
+
contiguous `reference_image` indexes starting at `0`, each with optional
|
|
914
|
+
`reference_task` `ip`, `id`, or `style`. xAI edit accepts up to two contiguous
|
|
915
|
+
`reference_image` indexes starting at `0` and does not accept `reference_task`.
|
|
916
|
+
Reference assets must be Image Skill-owned PNG, JPEG, or WebP images with
|
|
917
|
+
known non-empty byte length up to 10MB, known width and height of at least
|
|
918
|
+
300px, and aspect ratio from 0.40 to 2.50.
|
|
919
|
+
|
|
920
|
+
```bash
|
|
921
|
+
image-skill edit \
|
|
922
|
+
--model fal.kling-image-o3-image-to-image \
|
|
923
|
+
--input ./starting-frame.png \
|
|
924
|
+
--element-frontal ./character-front.png@0 \
|
|
925
|
+
--element-reference ./character-side.webp@0:0 \
|
|
926
|
+
--prompt "Place the same character in a clean studio product portrait" \
|
|
927
|
+
--accept-unknown-cost \
|
|
928
|
+
--json
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
Direct `/v1/edit` callers use the same owned-asset contract:
|
|
932
|
+
|
|
933
|
+
```json
|
|
934
|
+
{
|
|
935
|
+
"input_asset_id": "image_starting_frame",
|
|
936
|
+
"model": "fal.kling-image-o3-image-to-image",
|
|
937
|
+
"prompt": "Place the same character in a clean studio product portrait",
|
|
938
|
+
"references": [
|
|
939
|
+
{
|
|
940
|
+
"asset_id": "image_character_front",
|
|
941
|
+
"role": "element_frontal",
|
|
942
|
+
"index": 0
|
|
943
|
+
},
|
|
944
|
+
{
|
|
945
|
+
"asset_id": "image_character_side",
|
|
946
|
+
"role": "element_reference",
|
|
947
|
+
"index": 0,
|
|
948
|
+
"reference_index": 0
|
|
949
|
+
}
|
|
950
|
+
]
|
|
951
|
+
}
|
|
952
|
+
```
|
|
655
953
|
|
|
656
|
-
Preview hosted edit supports model-specific provider-backed
|
|
657
|
-
Fal
|
|
954
|
+
Preview hosted create/edit supports model-specific provider-backed paths such
|
|
955
|
+
as Fal Gemini 3 Pro Image Preview Create (`fal.gemini-3-pro-image-preview`),
|
|
956
|
+
Fal Nano Banana 2 Edit (`fal.nano-banana-2-edit`), Fal Ideogram V2 Edit
|
|
957
|
+
(`fal.ideogram-v2-edit`), Fal Gemini 3 Pro Image
|
|
958
|
+
Preview Edit (`fal.gemini-3-pro-image-preview-edit`), Fal FLUX Pro 1.1 Ultra
|
|
959
|
+
Create (`fal.flux-pro-v1-1-ultra`), Fal FLUX Pro Kontext Edit
|
|
960
|
+
(`fal.flux-pro-kontext`), Fal FLUX Pro Kontext Max Edit
|
|
961
|
+
(`fal.flux-pro-kontext-max`), Fal Seedream 5.0 Lite Create
|
|
962
|
+
(`fal.bytedance-seedream-v5-lite-text-to-image`), Fal Seedream 5.0 Lite Edit
|
|
963
|
+
(`fal.bytedance-seedream-v5-lite-edit`), Fal Seedream 4.5 Create
|
|
964
|
+
(`fal.bytedance-seedream-v4-5-text-to-image`), Fal Seedream 4.5 Edit
|
|
965
|
+
(`fal.bytedance-seedream-v4-5-edit`), Fal Nano Banana Pro Create
|
|
966
|
+
(`fal.nano-banana-pro`), Fal Nano Banana Pro Edit
|
|
967
|
+
(`fal.nano-banana-pro-edit`), GPT Image 1.5 Create
|
|
968
|
+
(`openai.gpt-image-1.5`), GPT Image 1.5 Edit
|
|
969
|
+
(`openai.gpt-image-1.5-edit`), and GPT Image 2 Edit
|
|
658
970
|
(`openai.gpt-image-2-edit`) when their provider credentials are configured.
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
971
|
+
Fal Gemini 3 Pro Image Preview create/edit has known per-image pricing: 1K/2K
|
|
972
|
+
requests quote `$0.15` provider cost and 4K quotes the doubled provider tier.
|
|
973
|
+
Fal Nano Banana Pro create/edit uses the same `$0.15` standard and doubled 4K
|
|
974
|
+
provider tier. Fal FLUX Pro 1.1 Ultra Create quotes `$0.06` provider cost per
|
|
975
|
+
image. Fal FLUX Pro Kontext Edit quotes `$0.04` provider cost per image, and
|
|
976
|
+
Fal FLUX Pro Kontext Max Edit quotes `$0.08` provider cost per image. Fal
|
|
977
|
+
Seedream 4.5 create/edit quotes `$0.04` provider cost per image.
|
|
978
|
+
Fal Seedream 5.0 Lite create/edit quotes `$0.035` provider cost per image. Fal
|
|
979
|
+
Z-Image Turbo create/edit quotes `$0.005/MP` when `image_size` is explicit or
|
|
980
|
+
derived from aspect ratio; edit `auto` remains unknown-cost. GPT Image 1.5
|
|
981
|
+
create quotes output-token estimates for concrete quality/size requests using
|
|
982
|
+
OpenAI's fixed-size token table; GPT Image 1.5 edit remains preflight
|
|
983
|
+
unknown-cost because edit input image/text tokens are provider-metered, then
|
|
984
|
+
records usage-priced provider cost when OpenAI returns token usage. GPT Image 2
|
|
985
|
+
create quotes output-token estimates for concrete quality/size requests. GPT
|
|
986
|
+
Image 2 edit remains preflight unknown-cost because edit input image/text tokens
|
|
987
|
+
are provider-metered, then records usage-priced provider cost when OpenAI
|
|
988
|
+
returns token usage. Other edit paths without machine-readable pricing require
|
|
989
|
+
`--accept-unknown-cost` until a stable price source is captured. Responses
|
|
990
|
+
include a new generated asset URL, job id, safety state, quota consumption, and
|
|
991
|
+
input asset metadata where
|
|
992
|
+
applicable. Responses do not include raw prompts, source bytes, base64
|
|
993
|
+
payloads, local paths, full external URLs, bucket names, or object keys.
|
|
665
994
|
|
|
666
995
|
Provider/model names in this paragraph are preview provenance, not the primary
|
|
667
996
|
public UX. The public selection surface should be Image Skill capabilities and
|
|
@@ -833,16 +1162,21 @@ Activity `type` values are stable public contract values. Do not infer new
|
|
|
833
1162
|
event names from provider responses or telemetry logs; use only the registry
|
|
834
1163
|
below.
|
|
835
1164
|
|
|
836
|
-
| Event type
|
|
837
|
-
|
|
|
838
|
-
| `job.completed`
|
|
839
|
-
| `asset.created`
|
|
840
|
-
| `asset.uploaded`
|
|
841
|
-
| `usage.credit_consumed`
|
|
842
|
-
| `feedback.created`
|
|
843
|
-
| `feedback.github_queue.processed`
|
|
844
|
-
| `payment.checkout_session.created`
|
|
845
|
-
| `credits.payment_backed_granted`
|
|
1165
|
+
| Event type | Subject | Operation | Emitted when | Stable links |
|
|
1166
|
+
| ------------------------------------------ | ---------- | ----------- | ----------------------------------------------------------------- | ------------------------------------------------------------------ |
|
|
1167
|
+
| `job.completed` | `job` | create/edit | A hosted create or edit job reaches a terminal state. | `job_id`, `asset_ids`, `usage_event_id` |
|
|
1168
|
+
| `asset.created` | `asset` | create/edit | A hosted create or edit produces an output asset. | `job_id`, `asset_ids`, `usage_event_id` |
|
|
1169
|
+
| `asset.uploaded` | `asset` | upload | A public edit workflow uploads or imports input media. | `job_id`, `asset_ids`, `usage_event_id` |
|
|
1170
|
+
| `usage.credit_consumed` | `usage` | usage | A creative operation records a preview-credit entry. | `job_id`, `usage_event_id` |
|
|
1171
|
+
| `feedback.created` | `feedback` | feedback | Hosted agent feedback is accepted into product memory. | `feedback_id` |
|
|
1172
|
+
| `feedback.github_queue.processed` | `feedback` | feedback | Feedback is processed by the GitHub implementation queue handoff. | `feedback_id` |
|
|
1173
|
+
| `payment.checkout_session.created` | `payment` | payment | A Stripe Checkout session is created and awaits external action. | `quote_id`, `payment_attempt_id`, `checkout_session_id` |
|
|
1174
|
+
| `credits.payment_backed_granted` | `credit` | credits | Verified payment or fake-payment proof grants paid credits. | `quote_id`, `receipt_id`, `credit_event_id` |
|
|
1175
|
+
| `credits.payment_backed_refunded` | `credit` | credits | A Stripe refund debits payment-backed credits. | `quote_id`, `receipt_id`, `payment_reversal_id`, `credit_event_id` |
|
|
1176
|
+
| `credits.payment_backed_disputed` | `credit` | credits | A Stripe dispute debit applies to payment-backed credits. | `quote_id`, `receipt_id`, `payment_reversal_id`, `credit_event_id` |
|
|
1177
|
+
| `credits.payment_backed_reinstated` | `credit` | credits | Stripe dispute funds were reinstated and recorded. | `quote_id`, `receipt_id`, `payment_reversal_id` |
|
|
1178
|
+
| `credits.payment_backed_reversal_pending` | `credit` | credits | A reversal was recorded but could not be fully applied. | `quote_id`, `receipt_id`, `payment_reversal_id` |
|
|
1179
|
+
| `credits.payment_backed_reversal_rejected` | `credit` | credits | A reversal was rejected because it could not safely reconcile. | `quote_id`, `receipt_id`, `payment_reversal_id` |
|
|
846
1180
|
|
|
847
1181
|
`feedback.github_queue.processed` includes `details.github_queue` with
|
|
848
1182
|
machine-readable lifecycle fields such as `state`, `reason`, `issue_urls`,
|