image-skill 0.1.7 → 0.1.9

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/cli.md CHANGED
@@ -331,9 +331,17 @@ curl -sS https://api.image-skill.com/v1/credit-quotes \
331
331
 
332
332
  Creates a live-provider payment action for a previously returned quote. Stripe
333
333
  Checkout is the first supported provider. This creates a hosted Stripe Checkout
334
- Session and returns an `action_required` response with `checkout_url`; credits
335
- are granted only after verified Stripe webhook fulfillment succeeds. Session
336
- 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 when `checkout_handoff_url` is absent. Do not
342
+ trim Stripe Checkout URLs: the long `#...` fragment is required by Stripe
343
+ Checkout in the browser. Present any fallback Stripe URL in a fenced code block
344
+ so terminal wrapping does not corrupt it.
337
345
 
338
346
  ```bash
339
347
  image-skill credits buy \
@@ -353,14 +361,19 @@ Minimum success data:
353
361
  "provider": "stripe",
354
362
  "accepted_payment_method": "stripe_checkout",
355
363
  "checkout_session_id": "cs_...",
356
- "checkout_url": "https://checkout.stripe.com/...",
364
+ "checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
365
+ "checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
366
+ "checkout_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
357
367
  "credits": 500,
358
368
  "amount_cents": 500,
359
369
  "currency": "USD",
360
370
  "live_money": true,
361
371
  "next": {
362
372
  "human_action": "open_checkout_url",
363
- "after_payment": "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"
373
+ "checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
374
+ "checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
375
+ "fallback_checkout_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
376
+ "after_payment": "open checkout_handoff_url, or the full checkout_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"
364
377
  }
365
378
  }
366
379
  ```
@@ -404,14 +417,18 @@ Minimum action-required data:
404
417
  "payment_attempt": {
405
418
  "payment_attempt_id": "payatt_...",
406
419
  "checkout_session_id": "cs_...",
407
- "checkout_url": "https://checkout.stripe.com/...",
420
+ "checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
421
+ "checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
422
+ "checkout_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
408
423
  "attempt_status": "requires_action"
409
424
  },
410
425
  "receipt": null,
411
426
  "credit_event": null,
412
427
  "next": {
413
428
  "retry_after_seconds": 10,
414
- "human_action": "open_checkout_url"
429
+ "human_action": "open_checkout_url",
430
+ "checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
431
+ "checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...#fid..."
415
432
  }
416
433
  }
417
434
  ```
@@ -506,12 +523,60 @@ must not flatten rich model capabilities into coarse universal categories.
506
523
  Use `model_parameters` for rare or model-specific parameters advertised by the
507
524
  capability schema.
508
525
 
509
- GPT Image 2 is exposed as `openai.gpt-image-2` for create and
510
- `openai.gpt-image-2-edit` for edit when OpenAI is configured. Inspect these
511
- models before use; OpenAI provider-native controls such as size, output
512
- format, compression, background, moderation, and the upstream
513
- provider-native quality parameter are available only through validated
514
- `model_parameters`.
526
+ Current executable provider-native controls include:
527
+
528
+ - Fal FLUX.1 dev: `model_parameters.image_size` for presets such as
529
+ `square_hd`, plus `seed`.
530
+ - Fal FLUX Pro 1.1 Ultra Create: `model_parameters.seed` and
531
+ `model_parameters.raw`; optional reference-image controls remain cataloged
532
+ for inspection but are not executable on the create-only path.
533
+ - Fal Z-Image Turbo Create/Edit: `model_parameters.image_size` for
534
+ `square_hd`, `square`, portrait/landscape presets, and `auto` on edit; costs
535
+ are quoted from requested megapixels when the output size is explicit.
536
+ - Fal Nano Banana 2 Edit: `model_parameters.resolution` for `0.5K`, `1K`,
537
+ `2K`, and `4K`, plus `seed`.
538
+ - Fal Ideogram V2 Edit: `model_parameters.expand_prompt`, `seed`, and
539
+ `style`; pass masks as top-level `--mask` / `mask_asset_id`, not as
540
+ provider `mask_url`.
541
+ - Fal Gemini 3 Pro Image Preview Create/Edit:
542
+ `model_parameters.resolution` for `1K`, `2K`, and `4K`, plus `seed`; 4K is
543
+ quoted as the higher-priced provider tier.
544
+ - Fal Nano Banana Pro Create/Edit: `model_parameters.resolution` for `1K`,
545
+ `2K`, and `4K`, plus `seed`; 4K is quoted as the higher-priced provider tier.
546
+ - Fal FLUX Pro Kontext Pro/Max Edit: `model_parameters.seed`; guidance scale
547
+ and aspect-ratio controls remain cataloged for inspection but are not
548
+ executable until their UX and receipt behavior are represented.
549
+ - Fal Bytedance Seedream 4.5 Create/Edit: `model_parameters.image_size` for
550
+ `square_hd`, `square`, portrait/landscape presets, `auto_2K`, and
551
+ `auto_4K`, plus `seed`; multi-output and multi-reference controls remain
552
+ cataloged but fixed for hosted accounting.
553
+ - Fal Bytedance Seedream 5.0 Lite Create/Edit:
554
+ `model_parameters.image_size` for `square_hd`, `square`, portrait/landscape
555
+ presets, `auto_2K`, and `auto_3K`; multi-output and multi-reference controls
556
+ remain cataloged but fixed for hosted accounting.
557
+ - xAI Grok Imagine Image Quality: `model_parameters.resolution` for `1k` and
558
+ `2k`; 2k is priced from the higher provider tier. Create supports top-level
559
+ `--output-count` up to the model's advertised `max_outputs_per_request`,
560
+ currently mapped to xAI's documented `n` batch parameter.
561
+ - GPT Image 1.5 create/edit: documented fixed sizes `1024x1024`,
562
+ `1024x1536`, and `1536x1024`, output format, compression, transparent or
563
+ opaque background, moderation, and the upstream provider-native quality
564
+ parameter. GPT Image 1.5 create quotes output-token estimates when quality
565
+ and concrete size are known; GPT Image 1.5 create supports top-level
566
+ `--output-count` up to the model's advertised `max_outputs_per_request`,
567
+ currently mapped to OpenAI's `n` parameter. GPT Image 1.5 edit accepts
568
+ low/high `input_fidelity` and remains preflight unknown-cost until usage is
569
+ returned.
570
+ - GPT Image 2 create/edit: size, output format, compression, background,
571
+ moderation, and the upstream provider-native quality parameter. GPT Image 2
572
+ create quotes request-aware output-token estimates when quality and concrete
573
+ size are known; GPT Image 2 create supports top-level `--output-count` up to
574
+ the model's advertised `max_outputs_per_request`, currently mapped to
575
+ OpenAI's `n` parameter. GPT Image 2 edit remains preflight unknown-cost, then
576
+ records usage-priced provider cost when OpenAI returns token usage.
577
+
578
+ Inspect each model before use; provider-native controls are available only
579
+ through validated `model_parameters`.
515
580
 
516
581
  ### `image-skill capabilities`
517
582
 
@@ -537,29 +602,125 @@ image-skill create \
537
602
  --json
538
603
  ```
539
604
 
605
+ Hosted defaults are quality-first. If an agent does not choose a model, Image
606
+ Skill selects the strongest available create capability for the requested
607
+ intent and budget, then records the decision in `request.selection`. Explicit
608
+ `--provider`, `--model`, namespaced model ids, and validated
609
+ `model_parameters` always take precedence. For final/product/hero-style
610
+ intents, Image Skill may default an eligible quality-capability request to a
611
+ higher output tier only when `--max-estimated-usd-per-image` is high enough for
612
+ that tier; otherwise it stays on a lower-cost quality tier or chooses a cheaper
613
+ capability within the budget and tells agents what happened in the selection
614
+ receipt.
615
+
540
616
  Preview-compatible richer shape:
541
617
 
542
618
  ```bash
543
619
  image-skill create \
544
- --prompt-file ./prompt.md \
620
+ --prompt "Campaign-ready product image of a compact field camera" \
545
621
  --intent finalize \
546
622
  --model MODEL_ID \
547
623
  --aspect-ratio 1:1 \
548
- --format png \
549
- --max-usd 0.25 \
624
+ --output-count 2 \
625
+ --max-estimated-usd-per-image 0.07 \
550
626
  --model-parameters-json '{"seed":1234}' \
551
627
  --json
552
628
  ```
553
629
 
630
+ Use `--output-count N` only when `models show MODEL_ID --json` advertises
631
+ `media.output.max_outputs_per_request` greater than `1`. `--output-count` is a
632
+ top-level Image Skill create control; do not pass provider-native `n` through
633
+ `model_parameters` unless the selected model schema explicitly advertises that
634
+ field. Credit pricing and `cost.credit_pricing.credits_required` are total
635
+ operation debits across all requested outputs. `--max-estimated-usd-per-image`
636
+ and raw API `max_estimated_usd_per_image` remain per-image budget guards.
637
+
638
+ For create models with wired reference support, pass owned reference assets
639
+ with the model's advertised reference role. Kling element routes use
640
+ `--element-frontal IMAGE[@ELEMENT_INDEX]` and
641
+ `--element-reference IMAGE[@ELEMENT_INDEX[:REFERENCE_INDEX]]`; flat
642
+ reference-image routes use `--reference-image IMAGE[@INDEX]`; Fal DreamO also
643
+ accepts `:TASK` where `TASK` is `ip`, `id`, or `style`. The public CLI uploads
644
+ local paths and external URLs first, then
645
+ sends top-level `references[]` entries with Image Skill `asset_id` values to
646
+ `/v1/create`. Do not pass provider-native `elements`, `frontal_image_url`,
647
+ `reference_image_urls`, `first_image_url`, `second_image_url`, `images`, or
648
+ `*_reference_task` through `model_parameters`; provider-private URLs are
649
+ resolved server-side after ownership and media-policy validation.
650
+
651
+ ```bash
652
+ image-skill create \
653
+ --model fal.kling-image-o3-text-to-image \
654
+ --prompt "Place the same character in a clean studio campaign" \
655
+ --element-frontal ./character-front.png@0 \
656
+ --element-reference ./character-side.webp@0:0 \
657
+ --output-count 2 \
658
+ --max-estimated-usd-per-image 0.06 \
659
+ --json
660
+ ```
661
+
662
+ ```bash
663
+ image-skill create \
664
+ --model fal.dreamo \
665
+ --prompt "Studio portrait preserving identity with a bolder editorial style" \
666
+ --reference-image ./identity.png@0:id \
667
+ --reference-image ./style.webp@1:style \
668
+ --model-parameters-json '{"image_size":{"width":1280,"height":720}}' \
669
+ --max-estimated-usd-per-image 0.06 \
670
+ --json
671
+ ```
672
+
673
+ High-resolution examples:
674
+
675
+ ```bash
676
+ image-skill create \
677
+ --prompt "Campaign-ready product image of a compact field camera" \
678
+ --intent final \
679
+ --max-estimated-usd-per-image 0.07 \
680
+ --json
681
+
682
+ image-skill create \
683
+ --prompt "Campaign-ready product image of a compact field camera" \
684
+ --model fal.gemini-3-pro-image-preview \
685
+ --model-parameters-json '{"resolution":"4K"}' \
686
+ --max-estimated-usd-per-image 0.30 \
687
+ --json
688
+
689
+ image-skill create \
690
+ --prompt "Campaign-ready product image of a compact field camera" \
691
+ --model xai.grok-imagine-image-quality \
692
+ --model-parameters-json '{"resolution":"2k"}' \
693
+ --max-estimated-usd-per-image 0.07 \
694
+ --json
695
+
696
+ image-skill edit \
697
+ --input-asset-id image_... \
698
+ --prompt "preserve the subject and make this campaign-ready" \
699
+ --model fal.nano-banana-2-edit \
700
+ --model-parameters-json '{"resolution":"4K"}' \
701
+ --accept-unknown-cost \
702
+ --json
703
+ ```
704
+
554
705
  `model_parameters` must be validated against the selected model/capability
555
706
  schema before any provider call or paid reservation. Unknown fields fail closed
556
707
  unless the capability explicitly allows additional properties. This is how
557
708
  Image Skill preserves rare model controls without turning every
558
709
  provider-specific parameter into a top-level flag.
559
- In the current preview, Fal create/edit expose executable `seed`, and OpenAI
560
- GPT Image 2 exposes documented provider-native controls through
561
- `model_parameters`. Provider-native controls remain visible for planning and
562
- fail closed until their capability schema marks them executable.
710
+ In the current preview, Fal create/edit, xAI quality generation, and OpenAI GPT
711
+ Image 2 expose the executable provider-native controls listed in the selected
712
+ model schema. GPT Image 2 create has request-aware output-token credit quotes
713
+ for concrete quality/size requests; GPT Image 2 edit still requires
714
+ unknown-cost acceptance before execution, but records usage-priced provider cost
715
+ after execution when OpenAI returns token usage. Provider-native controls remain
716
+ visible for planning and fail closed until their capability schema marks them
717
+ executable. Hosted
718
+ `create --dry-run` validates `model_parameters` against the selected model,
719
+ returns accepted keys/provenance and request-aware credit pricing for planning,
720
+ and never executes provider controls or consumes credits.
721
+ For dry-run responses, `cost.credit_pricing.credits_required` is the planned
722
+ live execution debit for the selected model. The actual debit for the dry run is
723
+ `quota.consumed_credits: 0`.
563
724
 
564
725
  Minimum success data:
565
726
 
@@ -574,19 +735,44 @@ Minimum success data:
574
735
  "asset_id": "image_...",
575
736
  "path": "https://media.image-skill.com/a/image_abc123.png",
576
737
  "mime_type": "image/png",
577
- "url": "https://media.image-skill.com/a/image_abc123.png"
738
+ "url": "https://media.image-skill.com/a/image_abc123.png",
739
+ "content_length": 333444,
740
+ "width": 1024,
741
+ "height": 1024
578
742
  }
579
743
  ],
580
744
  "cost": {
581
- "estimated_usd": 0.025,
745
+ "estimated_usd": 0.05,
582
746
  "credit_pricing": {
583
747
  "credit_unit_usd": 0.01,
584
- "credits_required": 5,
585
- "estimated_provider_cost_usd": 0.025,
586
- "estimated_revenue_usd": 0.05,
748
+ "credits_required": 9,
749
+ "estimated_provider_cost_usd": 0.05,
750
+ "estimated_revenue_usd": 0.09,
587
751
  "pricing_confidence": "known"
588
752
  }
589
753
  },
754
+ "request": {
755
+ "output_count": 1,
756
+ "selection": {
757
+ "policy": "hosted_default_create_v1",
758
+ "reason": "hosted default selected the strongest currently available quality-first create model",
759
+ "intent": "explore",
760
+ "capability": {
761
+ "id": "is.image.generate.xai-grok-imagine-image-quality.v1"
762
+ },
763
+ "model_parameters": {
764
+ "keys": ["resolution"],
765
+ "defaults_applied": ["resolution=1k"],
766
+ "source": "default_policy"
767
+ },
768
+ "output": {
769
+ "resolution_class": "1k",
770
+ "expected_width": null,
771
+ "expected_height": null,
772
+ "expected_min_short_edge": 1024
773
+ }
774
+ }
775
+ },
590
776
  "safety": {
591
777
  "status": "allowed"
592
778
  }
@@ -616,6 +802,7 @@ curl -sS https://api.image-skill.com/v1/create \
616
802
  "prompt": "A compact field camera on a stainless workbench",
617
803
  "intent": "explore",
618
804
  "aspect_ratio": "1:1",
805
+ "output_count": 1,
619
806
  "max_estimated_usd_per_image": 0.05,
620
807
  "model_parameters": {
621
808
  "seed": 1234
@@ -624,7 +811,8 @@ curl -sS https://api.image-skill.com/v1/create \
624
811
  ```
625
812
 
626
813
  Hosted free-preview create currently requires owned artifact storage and returns
627
- `assets[].url` under `https://media.image-skill.com/...` on success.
814
+ one `assets[]` entry per output with `assets[].url` under
815
+ `https://media.image-skill.com/...` on success.
628
816
 
629
817
  ### `image-skill upload`
630
818
 
@@ -681,6 +869,7 @@ with one hosted provider-backed edit model.
681
869
  ```bash
682
870
  image-skill edit \
683
871
  --input ASSET_ID_OR_PATH_OR_URL \
872
+ --mask MASK_ASSET_ID_OR_PATH_OR_URL \
684
873
  --prompt "Remove the background and keep natural object shadows" \
685
874
  --accept-unknown-cost \
686
875
  --json
@@ -690,16 +879,114 @@ If `--input` is a local path or external URL, the public CLI first normalizes it
690
879
  through the same upload resolver as `image-skill upload`, then sends only the
691
880
  resulting `asset_id` to `POST /v1/edit`. If `--input` is an Image Skill asset id
692
881
  or owned asset URL, edit uses that owned asset directly.
882
+ For models with wired mask support, `--mask` follows the same upload/asset-id
883
+ resolver and sends only `mask_asset_id`; never pass provider-native `mask_url`
884
+ through `model_parameters`.
885
+ For models with wired reference support, pass owned reference assets with the
886
+ model's advertised reference role. Kling element routes use
887
+ `--element-frontal IMAGE[@ELEMENT_INDEX]` and
888
+ `--element-reference IMAGE[@ELEMENT_INDEX[:REFERENCE_INDEX]]`; flat
889
+ reference-image routes use `--reference-image IMAGE[@INDEX[:TASK]]`. The
890
+ public CLI uploads local paths and external URLs first, then sends top-level
891
+ `references[]` entries with Image Skill `asset_id` values. For Kling element
892
+ routes, `--element-frontal ./front.png@0` becomes role `element_frontal` for
893
+ element index `0`, and `--element-reference ./side.webp@0:0` becomes role
894
+ `element_reference` for the same element with reference slot `0`. For DreamO
895
+ create, `--reference-image ./identity.png@0:id` becomes role
896
+ `reference_image`, index `0`, and `reference_task` `id`. For xAI edit,
897
+ `--reference-image ./reference.png@0` becomes the second ordered source image;
898
+ the primary `--input` asset remains the first source image. Do not pass
899
+ provider-native `elements`, `image_url`, `image_urls`, `frontal_image_url`,
900
+ `reference_image_urls`, `first_image_url`, `second_image_url`, `images`, or
901
+ `*_reference_task` through `model_parameters`; provider-private URLs are
902
+ resolved server-side after ownership and media-policy validation.
903
+ Current public `references[]` support covers Kling Image O1, Kling Image O3
904
+ image-to-image/text-to-image, Kling Image v3 image-to-image/text-to-image, and
905
+ Fal DreamO create plus xAI Grok Imagine image edit/quality edit. Kling requests
906
+ may contain at most 40 reference entries across at most 10 contiguous element
907
+ indexes starting at `0`; each referenced element requires one frontal image and
908
+ may include up to three additional reference images. DreamO accepts up to two
909
+ contiguous `reference_image` indexes starting at `0`, each with optional
910
+ `reference_task` `ip`, `id`, or `style`. xAI edit accepts up to two contiguous
911
+ `reference_image` indexes starting at `0` and does not accept `reference_task`.
912
+ Reference assets must be Image Skill-owned PNG, JPEG, or WebP images with
913
+ known non-empty byte length up to 10MB, known width and height of at least
914
+ 300px, and aspect ratio from 0.40 to 2.50.
915
+
916
+ ```bash
917
+ image-skill edit \
918
+ --model fal.kling-image-o3-image-to-image \
919
+ --input ./starting-frame.png \
920
+ --element-frontal ./character-front.png@0 \
921
+ --element-reference ./character-side.webp@0:0 \
922
+ --prompt "Place the same character in a clean studio product portrait" \
923
+ --accept-unknown-cost \
924
+ --json
925
+ ```
926
+
927
+ Direct `/v1/edit` callers use the same owned-asset contract:
928
+
929
+ ```json
930
+ {
931
+ "input_asset_id": "image_starting_frame",
932
+ "model": "fal.kling-image-o3-image-to-image",
933
+ "prompt": "Place the same character in a clean studio product portrait",
934
+ "references": [
935
+ {
936
+ "asset_id": "image_character_front",
937
+ "role": "element_frontal",
938
+ "index": 0
939
+ },
940
+ {
941
+ "asset_id": "image_character_side",
942
+ "role": "element_reference",
943
+ "index": 0,
944
+ "reference_index": 0
945
+ }
946
+ ]
947
+ }
948
+ ```
693
949
 
694
- Preview hosted edit supports model-specific provider-backed edit paths such as
695
- Fal Nano Banana 2 Edit (`fal.nano-banana-2-edit`) and GPT Image 2 Edit
950
+ Preview hosted create/edit supports model-specific provider-backed paths such
951
+ as Fal Gemini 3 Pro Image Preview Create (`fal.gemini-3-pro-image-preview`),
952
+ Fal Nano Banana 2 Edit (`fal.nano-banana-2-edit`), Fal Ideogram V2 Edit
953
+ (`fal.ideogram-v2-edit`), Fal Gemini 3 Pro Image
954
+ Preview Edit (`fal.gemini-3-pro-image-preview-edit`), Fal FLUX Pro 1.1 Ultra
955
+ Create (`fal.flux-pro-v1-1-ultra`), Fal FLUX Pro Kontext Edit
956
+ (`fal.flux-pro-kontext`), Fal FLUX Pro Kontext Max Edit
957
+ (`fal.flux-pro-kontext-max`), Fal Seedream 5.0 Lite Create
958
+ (`fal.bytedance-seedream-v5-lite-text-to-image`), Fal Seedream 5.0 Lite Edit
959
+ (`fal.bytedance-seedream-v5-lite-edit`), Fal Seedream 4.5 Create
960
+ (`fal.bytedance-seedream-v4-5-text-to-image`), Fal Seedream 4.5 Edit
961
+ (`fal.bytedance-seedream-v4-5-edit`), Fal Nano Banana Pro Create
962
+ (`fal.nano-banana-pro`), Fal Nano Banana Pro Edit
963
+ (`fal.nano-banana-pro-edit`), GPT Image 1.5 Create
964
+ (`openai.gpt-image-1.5`), GPT Image 1.5 Edit
965
+ (`openai.gpt-image-1.5-edit`), and GPT Image 2 Edit
696
966
  (`openai.gpt-image-2-edit`) when their provider credentials are configured.
697
- Current machine-readable prices are treated as unknown for these edit paths, so
698
- live edit requires `--accept-unknown-cost` until a stable price source is
699
- captured. Responses include a new generated asset URL, job id, safety state,
700
- quota consumption, and input asset metadata. Responses do not include raw
701
- prompts, source bytes, base64 payloads, local paths, full external URLs, bucket
702
- names, or object keys.
967
+ Fal Gemini 3 Pro Image Preview create/edit has known per-image pricing: 1K/2K
968
+ requests quote `$0.15` provider cost and 4K quotes the doubled provider tier.
969
+ Fal Nano Banana Pro create/edit uses the same `$0.15` standard and doubled 4K
970
+ provider tier. Fal FLUX Pro 1.1 Ultra Create quotes `$0.06` provider cost per
971
+ image. Fal FLUX Pro Kontext Edit quotes `$0.04` provider cost per image, and
972
+ Fal FLUX Pro Kontext Max Edit quotes `$0.08` provider cost per image. Fal
973
+ Seedream 4.5 create/edit quotes `$0.04` provider cost per image.
974
+ Fal Seedream 5.0 Lite create/edit quotes `$0.035` provider cost per image. Fal
975
+ Z-Image Turbo create/edit quotes `$0.005/MP` when `image_size` is explicit or
976
+ derived from aspect ratio; edit `auto` remains unknown-cost. GPT Image 1.5
977
+ create quotes output-token estimates for concrete quality/size requests using
978
+ OpenAI's fixed-size token table; GPT Image 1.5 edit remains preflight
979
+ unknown-cost because edit input image/text tokens are provider-metered, then
980
+ records usage-priced provider cost when OpenAI returns token usage. GPT Image 2
981
+ create quotes output-token estimates for concrete quality/size requests. GPT
982
+ Image 2 edit remains preflight unknown-cost because edit input image/text tokens
983
+ are provider-metered, then records usage-priced provider cost when OpenAI
984
+ returns token usage. Other edit paths without machine-readable pricing require
985
+ `--accept-unknown-cost` until a stable price source is captured. Responses
986
+ include a new generated asset URL, job id, safety state, quota consumption, and
987
+ input asset metadata where
988
+ applicable. Responses do not include raw prompts, source bytes, base64
989
+ payloads, local paths, full external URLs, bucket names, or object keys.
703
990
 
704
991
  Provider/model names in this paragraph are preview provenance, not the primary
705
992
  public UX. The public selection surface should be Image Skill capabilities and
@@ -871,16 +1158,21 @@ Activity `type` values are stable public contract values. Do not infer new
871
1158
  event names from provider responses or telemetry logs; use only the registry
872
1159
  below.
873
1160
 
874
- | Event type | Subject | Operation | Emitted when | Stable links |
875
- | ---------------------------------- | ---------- | ----------- | ----------------------------------------------------------------- | ------------------------------------------------------- |
876
- | `job.completed` | `job` | create/edit | A hosted create or edit job reaches a terminal state. | `job_id`, `asset_ids`, `usage_event_id` |
877
- | `asset.created` | `asset` | create/edit | A hosted create or edit produces an output asset. | `job_id`, `asset_ids`, `usage_event_id` |
878
- | `asset.uploaded` | `asset` | upload | A public edit workflow uploads or imports input media. | `job_id`, `asset_ids`, `usage_event_id` |
879
- | `usage.credit_consumed` | `usage` | usage | A creative operation records a preview-credit entry. | `job_id`, `usage_event_id` |
880
- | `feedback.created` | `feedback` | feedback | Hosted agent feedback is accepted into product memory. | `feedback_id` |
881
- | `feedback.github_queue.processed` | `feedback` | feedback | Feedback is processed by the GitHub implementation queue handoff. | `feedback_id` |
882
- | `payment.checkout_session.created` | `payment` | payment | A Stripe Checkout session is created and awaits external action. | `quote_id`, `payment_attempt_id`, `checkout_session_id` |
883
- | `credits.payment_backed_granted` | `credit` | credits | Verified payment or fake-payment proof grants paid credits. | `quote_id`, `receipt_id`, `credit_event_id` |
1161
+ | Event type | Subject | Operation | Emitted when | Stable links |
1162
+ | ------------------------------------------ | ---------- | ----------- | ----------------------------------------------------------------- | ------------------------------------------------------------------ |
1163
+ | `job.completed` | `job` | create/edit | A hosted create or edit job reaches a terminal state. | `job_id`, `asset_ids`, `usage_event_id` |
1164
+ | `asset.created` | `asset` | create/edit | A hosted create or edit produces an output asset. | `job_id`, `asset_ids`, `usage_event_id` |
1165
+ | `asset.uploaded` | `asset` | upload | A public edit workflow uploads or imports input media. | `job_id`, `asset_ids`, `usage_event_id` |
1166
+ | `usage.credit_consumed` | `usage` | usage | A creative operation records a preview-credit entry. | `job_id`, `usage_event_id` |
1167
+ | `feedback.created` | `feedback` | feedback | Hosted agent feedback is accepted into product memory. | `feedback_id` |
1168
+ | `feedback.github_queue.processed` | `feedback` | feedback | Feedback is processed by the GitHub implementation queue handoff. | `feedback_id` |
1169
+ | `payment.checkout_session.created` | `payment` | payment | A Stripe Checkout session is created and awaits external action. | `quote_id`, `payment_attempt_id`, `checkout_session_id` |
1170
+ | `credits.payment_backed_granted` | `credit` | credits | Verified payment or fake-payment proof grants paid credits. | `quote_id`, `receipt_id`, `credit_event_id` |
1171
+ | `credits.payment_backed_refunded` | `credit` | credits | A Stripe refund debits payment-backed credits. | `quote_id`, `receipt_id`, `payment_reversal_id`, `credit_event_id` |
1172
+ | `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` |
1173
+ | `credits.payment_backed_reinstated` | `credit` | credits | Stripe dispute funds were reinstated and recorded. | `quote_id`, `receipt_id`, `payment_reversal_id` |
1174
+ | `credits.payment_backed_reversal_pending` | `credit` | credits | A reversal was recorded but could not be fully applied. | `quote_id`, `receipt_id`, `payment_reversal_id` |
1175
+ | `credits.payment_backed_reversal_rejected` | `credit` | credits | A reversal was rejected because it could not safely reconcile. | `quote_id`, `receipt_id`, `payment_reversal_id` |
884
1176
 
885
1177
  `feedback.github_queue.processed` includes `details.github_queue` with
886
1178
  machine-readable lifecycle fields such as `state`, `reason`, `issue_urls`,