@clipwright/core 0.33.0 → 0.35.0
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 +251 -0
- package/README.md +3 -1
- package/dist/account-actors.d.ts +173 -14
- package/dist/account-actors.js +142 -10
- package/dist/account-actors.js.map +1 -1
- package/dist/actor-bounds.d.ts +4 -0
- package/dist/actor-bounds.js +4 -0
- package/dist/actor-bounds.js.map +1 -1
- package/dist/actors.d.ts +31 -0
- package/dist/actors.js +26 -0
- package/dist/actors.js.map +1 -1
- package/dist/api-failure.js +2 -1
- package/dist/api-failure.js.map +1 -1
- package/dist/asset-identity.d.ts +6 -0
- package/dist/asset-identity.js +7 -0
- package/dist/asset-identity.js.map +1 -0
- package/dist/assets.d.ts +403 -8
- package/dist/assets.js +132 -22
- package/dist/assets.js.map +1 -1
- package/dist/billing-terms.d.ts +69 -0
- package/dist/billing-terms.js +8 -0
- package/dist/billing-terms.js.map +1 -1
- package/dist/caption-language.d.ts +2 -0
- package/dist/caption-language.js +17 -0
- package/dist/caption-language.js.map +1 -0
- package/dist/contract-dispositions.d.ts +1617 -8
- package/dist/contract-dispositions.js +75 -11
- package/dist/contract-dispositions.js.map +1 -1
- package/dist/contracts/v1/workflow-brief.d.ts +3166 -78
- package/dist/contracts/v1/workflow-brief.js +4 -0
- package/dist/contracts/v1/workflow-brief.js.map +1 -1
- package/dist/contracts/v1/workflow-catalog.d.ts +3712 -8
- package/dist/contracts/v1/workflow-catalog.js +4 -2
- package/dist/contracts/v1/workflow-catalog.js.map +1 -1
- package/dist/contracts/v1/workflow-client.d.ts +2466 -4
- package/dist/contracts/v1/workflow-client.js +6 -3
- package/dist/contracts/v1/workflow-client.js.map +1 -1
- package/dist/contracts/v1/workflow-execution.d.ts +163 -9
- package/dist/contracts/v1/workflow-execution.js +15 -7
- package/dist/contracts/v1/workflow-execution.js.map +1 -1
- package/dist/contracts/v1/workflow-plan.d.ts +6014 -487
- package/dist/contracts/v1/workflow-primitives.d.ts +3 -1
- package/dist/contracts/v1/workflow-primitives.js +1 -1
- package/dist/contracts/v1/workflow-primitives.js.map +1 -1
- package/dist/contracts/v1/workflow-run-read.d.ts +114 -1
- package/dist/edit-billing.d.ts +12 -0
- package/dist/edit-billing.js +8 -0
- package/dist/edit-billing.js.map +1 -1
- package/dist/edit-long-form.d.ts +1 -1
- package/dist/edit-long-form.js +12 -2
- package/dist/edit-long-form.js.map +1 -1
- package/dist/endpoint-notes.d.ts +3 -0
- package/dist/endpoint-notes.js +66 -0
- package/dist/endpoint-notes.js.map +1 -0
- package/dist/endpoints.d.ts +4 -0
- package/dist/endpoints.js +15 -0
- package/dist/endpoints.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js +7 -0
- package/dist/errors.js.map +1 -1
- package/dist/face-billing.d.ts +55 -0
- package/dist/face-billing.js +22 -0
- package/dist/face-billing.js.map +1 -1
- package/dist/faceless-price.d.ts +26 -2
- package/dist/faceless-price.js +33 -6
- package/dist/faceless-price.js.map +1 -1
- package/dist/faceless-public.d.ts +6 -1
- package/dist/faceless-public.js +2 -2
- package/dist/faceless-public.js.map +1 -1
- package/dist/generations.d.ts +32 -6
- package/dist/generations.js +82 -27
- package/dist/generations.js.map +1 -1
- package/dist/idempotency.d.ts +2 -0
- package/dist/idempotency.js +7 -4
- package/dist/idempotency.js.map +1 -1
- package/dist/index.d.ts +15 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/long-form-pricing.d.ts +7 -4
- package/dist/long-form-pricing.js +13 -10
- package/dist/long-form-pricing.js.map +1 -1
- package/dist/long-form-revision.js +1 -1
- package/dist/long-form-revision.js.map +1 -1
- package/dist/openapi.d.ts +154 -0
- package/dist/openapi.js +334 -0
- package/dist/openapi.js.map +1 -0
- package/dist/pacing.d.ts +15 -0
- package/dist/pacing.js +30 -0
- package/dist/pacing.js.map +1 -1
- package/dist/parts-pricing.d.ts +84 -0
- package/dist/parts-pricing.js +105 -0
- package/dist/parts-pricing.js.map +1 -0
- package/dist/presenter-beats.d.ts +45 -0
- package/dist/presenter-beats.js +144 -0
- package/dist/presenter-beats.js.map +1 -0
- package/dist/prices.d.ts +98 -0
- package/dist/prices.js +189 -0
- package/dist/prices.js.map +1 -0
- package/dist/public-endpoints.d.ts +2 -0
- package/dist/public-endpoints.js +2 -0
- package/dist/public-endpoints.js.map +1 -1
- package/dist/public-responses.d.ts +23 -0
- package/dist/public-responses.js +11 -0
- package/dist/public-responses.js.map +1 -0
- package/dist/reference-analysis.d.ts +683 -0
- package/dist/reference-analysis.js +91 -0
- package/dist/reference-analysis.js.map +1 -0
- package/dist/reference-kinds.d.ts +6 -0
- package/dist/reference-kinds.js +8 -0
- package/dist/reference-kinds.js.map +1 -0
- package/dist/reference-profile.d.ts +633 -0
- package/dist/reference-profile.js +151 -0
- package/dist/reference-profile.js.map +1 -0
- package/dist/reference-staging.d.ts +571 -0
- package/dist/reference-staging.js +151 -0
- package/dist/reference-staging.js.map +1 -0
- package/dist/reference-voice.d.ts +305 -0
- package/dist/reference-voice.js +108 -0
- package/dist/reference-voice.js.map +1 -0
- package/dist/resolved-timeline.d.ts +206 -1
- package/dist/resolved-timeline.js +96 -4
- package/dist/resolved-timeline.js.map +1 -1
- package/dist/run-static-warnings.js +19 -7
- package/dist/run-static-warnings.js.map +1 -1
- package/dist/runs.d.ts +75 -3
- package/dist/runs.js +6 -1
- package/dist/runs.js.map +1 -1
- package/dist/semantic-inserts.d.ts +7 -0
- package/dist/semantic-inserts.js +19 -9
- package/dist/semantic-inserts.js.map +1 -1
- package/dist/skills.d.ts +5838 -22
- package/dist/skills.js +380 -25
- package/dist/skills.js.map +1 -1
- package/dist/templates/callout.d.ts +34 -0
- package/dist/templates/callout.js +51 -0
- package/dist/templates/callout.js.map +1 -0
- package/dist/templates/checklist.d.ts +42 -0
- package/dist/templates/checklist.js +47 -0
- package/dist/templates/checklist.js.map +1 -0
- package/dist/templates/compare.d.ts +26 -0
- package/dist/templates/compare.js +35 -0
- package/dist/templates/compare.js.map +1 -0
- package/dist/templates/end-card.d.ts +16 -0
- package/dist/templates/end-card.js +25 -0
- package/dist/templates/end-card.js.map +1 -0
- package/dist/templates/index.d.ts +171 -0
- package/dist/templates/index.js +394 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/lower-third.d.ts +18 -0
- package/dist/templates/lower-third.js +26 -0
- package/dist/templates/lower-third.js.map +1 -0
- package/dist/templates/notification.d.ts +30 -0
- package/dist/templates/notification.js +32 -0
- package/dist/templates/notification.js.map +1 -0
- package/dist/templates/phone-call.d.ts +27 -0
- package/dist/templates/phone-call.js +43 -0
- package/dist/templates/phone-call.js.map +1 -0
- package/dist/templates/progress.d.ts +22 -0
- package/dist/templates/progress.js +42 -0
- package/dist/templates/progress.js.map +1 -0
- package/dist/templates/quote.d.ts +21 -0
- package/dist/templates/quote.js +29 -0
- package/dist/templates/quote.js.map +1 -0
- package/dist/templates/rating.d.ts +22 -0
- package/dist/templates/rating.js +29 -0
- package/dist/templates/rating.js.map +1 -0
- package/dist/templates/size.d.ts +13 -0
- package/dist/templates/size.js +10 -0
- package/dist/templates/size.js.map +1 -0
- package/dist/templates/slot.d.ts +10 -0
- package/dist/templates/slot.js +5 -0
- package/dist/templates/slot.js.map +1 -0
- package/dist/templates/sounds.d.ts +701 -0
- package/dist/templates/sounds.js +89 -0
- package/dist/templates/sounds.js.map +1 -0
- package/dist/templates/stat.d.ts +20 -0
- package/dist/templates/stat.js +33 -0
- package/dist/templates/stat.js.map +1 -0
- package/dist/templates/tag.d.ts +23 -0
- package/dist/templates/tag.js +31 -0
- package/dist/templates/tag.js.map +1 -0
- package/dist/templates/theme.d.ts +29 -0
- package/dist/templates/theme.js +47 -0
- package/dist/templates/theme.js.map +1 -0
- package/dist/templates/title-card.d.ts +21 -0
- package/dist/templates/title-card.js +30 -0
- package/dist/templates/title-card.js.map +1 -0
- package/dist/tts-backend.d.ts +9 -0
- package/dist/tts-backend.js +21 -0
- package/dist/tts-backend.js.map +1 -1
- package/dist/ugc-call.d.ts +89 -0
- package/dist/ugc-call.js +111 -0
- package/dist/ugc-call.js.map +1 -0
- package/dist/ugc-framing.d.ts +26 -0
- package/dist/ugc-framing.js +64 -0
- package/dist/ugc-framing.js.map +1 -0
- package/dist/ugc-layers.d.ts +88 -0
- package/dist/ugc-layers.js +142 -0
- package/dist/ugc-layers.js.map +1 -0
- package/dist/ugc-video-media.d.ts +12 -0
- package/dist/ugc-video-media.js +39 -0
- package/dist/ugc-video-media.js.map +1 -0
- package/dist/vendor-response.d.ts +4 -0
- package/dist/vendor-response.js +12 -0
- package/dist/vendor-response.js.map +1 -1
- package/dist/voice-admission.d.ts +1244 -1
- package/dist/voice-listing.js +7 -1
- package/dist/voice-listing.js.map +1 -1
- package/dist/voice-pace.d.ts +34 -0
- package/dist/voice-pace.generated.json +72 -0
- package/dist/voice-pace.js +34 -0
- package/dist/voice-pace.js.map +1 -0
- package/dist/voices.d.ts +21 -8
- package/dist/voices.js +44 -19
- package/dist/voices.js.map +1 -1
- package/dist/workflows/catalog.js +2 -1
- package/dist/workflows/catalog.js.map +1 -1
- package/dist/workflows/index.d.ts +2 -0
- package/dist/workflows/index.js +2 -0
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/methods/faceless-explainer.d.ts +697 -3
- package/dist/workflows/methods/kinetic-launch.d.ts +697 -3
- package/dist/workflows/methods/product-image-story.d.ts +697 -3
- package/dist/workflows/methods/reference-remake.d.ts +870 -0
- package/dist/workflows/methods/reference-remake.js +26 -0
- package/dist/workflows/methods/reference-remake.js.map +1 -0
- package/dist/workflows/methods/shared.d.ts +697 -3
- package/dist/workflows/methods/ugc-faq-answer.d.ts +697 -3
- package/dist/workflows/methods/ugc-product-intro.d.ts +697 -3
- package/dist/workflows/methods/website-proof-demo.d.ts +697 -3
- package/dist/workflows/reference-remake.d.ts +663 -0
- package/dist/workflows/reference-remake.js +598 -0
- package/dist/workflows/reference-remake.js.map +1 -0
- package/dist/workflows/validate.js +19 -11
- package/dist/workflows/validate.js.map +1 -1
- package/package.json +9 -3
package/CHANGELOG.md
CHANGED
|
@@ -18,6 +18,257 @@ listed under.
|
|
|
18
18
|
|
|
19
19
|
## [Unreleased]
|
|
20
20
|
|
|
21
|
+
## [0.35.0] - 2026-10-30
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- The texts an agent reads describe the `parts-v1` tariff (#933). The `call` field says the call adds production
|
|
26
|
+
seconds and that a live-avatar still has its own price; the templates description and the remake plan's tariff
|
|
27
|
+
note drop the retired per-second rate. The MCP server's SKILL.md and the CLI README point to `list_prices` and the
|
|
28
|
+
quotes instead of fixed faceless prices, and the `quote_ugc` example shows `price_lines` for 12 s.
|
|
29
|
+
- *Dashboard:* /pricing lists only the presenter a request can get, and prints single images and clips as price
|
|
30
|
+
ranges per resolution without model names (#800). Two comparison pages are rewritten from the other products'
|
|
31
|
+
sites as read on 2026-10-30.
|
|
32
|
+
|
|
33
|
+
- *Server-side:* `make_ugc` is priced by its parts, one tariff `parts-v1` for short and long videos (#800): 12 credits
|
|
34
|
+
for every second a presenter take fills on HeyGen (22 on OmniHuman), plus 1 for every second of the finished video,
|
|
35
|
+
plus 400 for each live-avatar still of a call, at least 50 for a delivered video. A plain 35 s video costs 455
|
|
36
|
+
instead of 1 050. The quote itemizes it in `price_lines` and names `minimum_credits`; the terms are frozen at
|
|
37
|
+
admission, so a run admitted before keeps its own.
|
|
38
|
+
- *Server-side:* `analyze_reference` costs 70 credits (#927): held at the start and charged once the analysis
|
|
39
|
+
succeeds; a failed analysis costs nothing, and starting it again on the same asset answers the same analysis for
|
|
40
|
+
free. The analysis carries `credits_reserved`, `credits_charged` and `balance_after_credits`.
|
|
41
|
+
- *Server-side:* single generations are priced at ×2.5 of their cheapest route instead of ×2: an image from 6 credits,
|
|
42
|
+
a clip from 6 credits a second. `seedance-2.0-mini` is rendered by one route only.
|
|
43
|
+
- *Server-side:* `make_faceless` is priced by its parts, tariff `faceless-parts-v1` (#800): 7 credits for each picture
|
|
44
|
+
we generate, the opening clip's still included, 49 for the opening clip and 1 for every second of the delivered
|
|
45
|
+
video, at least 50. Your own pictures are not charged. The quote is the most a selection is charged: 212 at 30 s,
|
|
46
|
+
356 at 90 s, instead of 350 and 420. `faceless_billing` names `images` and `imageCredits`; a run admitted before
|
|
47
|
+
keeps its tariff.
|
|
48
|
+
- *Server-side:* edits and personal actors are repriced at ×2.5 of their cost (#800): a revision's new picture 7, clip
|
|
49
|
+
49, clip with a new picture 56, render 13, and a shot candidate the same unit prices; an actor's portrait 4 and each
|
|
50
|
+
other format 8 at `medium`, 12 and 18 at `high`. Runs admitted before keep their snapshot.
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
|
|
54
|
+
- *Server-side:* `POST /v1/reference-analyses/quote`, the `quote_analysis` tool and `ClipwrightClient.quoteAnalysis()`
|
|
55
|
+
price an analysis before it starts (#927).
|
|
56
|
+
- *Server-side:* every settled run carries `balance_after_credits`, the account's balance read in the transaction
|
|
57
|
+
that settled it (#927).
|
|
58
|
+
|
|
59
|
+
- *Server-side:* `GET /v1/public/prices` lists the price of every action in credits, without a key: one entry per tool
|
|
60
|
+
and variant, its price as lines of credits per unit plus a minimum, or a formula; free tools are listed at 0. No price
|
|
61
|
+
changed (#927).
|
|
62
|
+
- The `list_prices` tool and `ClipwrightClient.listPrices()` read that list, and the description of every paid tool
|
|
63
|
+
ends with its price line, built from the same list.
|
|
64
|
+
- `@clipwright/core` exports `PRICE_LIST`, `priceLine` and `pricesResponse`, with the constants the list reads:
|
|
65
|
+
`CREDITS_PER_SECOND`, `ACTOR_UNIT_CREDITS`, `EDIT_UNIT_PRICES`, `EDIT_RENDER_PRICE`, `EDIT_ZERO_UNIT_PRICE` and the
|
|
66
|
+
numbers of the faceless tariff.
|
|
67
|
+
|
|
68
|
+
- *Server-side:* `GET /openapi.json` serves an OpenAPI 3.1 description of the REST API without a key: every public
|
|
69
|
+
route with its request and response schemas, the error envelope and `warnings[]`. The API's own tests check
|
|
70
|
+
their real responses against it.
|
|
71
|
+
- `@clipwright/core/openapi` exports `buildOpenApiDocument()` and the route marking `OPENAPI_ROUTES`;
|
|
72
|
+
`@clipwright/core` exports `ENDPOINT_NOTES`, `healthResponse` and `publicSkillsResponse`.
|
|
73
|
+
- `make_ugc` takes `voice_pace` (0.7–1.2): `eleven_flash_v2_5` and `eleven_turbo_v2_5` get it as their speed,
|
|
74
|
+
`gemini-3.8-flash-tts` as a "speaking rapidly" or "speaking slowly" style with a warning. `eleven_v4` has no speed
|
|
75
|
+
setting: it gets no speed, and a `voice_pace` other than 1 is named in `warnings[]` (#890).
|
|
76
|
+
- `list_voices` gives each English voice on `eleven_v4` its measured pace, `words_per_second`. On that model the voice
|
|
77
|
+
sets the pace, so pick the voice nearest a reference presenter's pace (#890).
|
|
78
|
+
- *Server-side:* all ElevenLabs speech goes to `eleven_v4`, now the model of every preset, catalog voice and raw
|
|
79
|
+
`voice_id`. `tts_model: "eleven_v3"` is still accepted: the run speaks `eleven_v4` and `warnings[]` says so.
|
|
80
|
+
`eleven_v4` gives no pause for a `<break>` tag, so the tag is cut with a warning on the default path too.
|
|
81
|
+
- `make_ugc` takes `pause_trim`, targets in seconds per gap class: after synthesis a pause longer than its target is cut
|
|
82
|
+
down to it inside silence only, with a crossfade, and word timings move with the audio. A joint that would click is
|
|
83
|
+
kept and named in `warnings[]`.
|
|
84
|
+
- *Server-side:* a reference analysis measures the presenter's voice from the words it already transcribes: pace,
|
|
85
|
+
pauses in three layers, hinge pauses, pitch and loudness range, in the profile's new `voice` section.
|
|
86
|
+
`plan_reference_remake` sets `voice_pace` from it on a model with a speed. On `eleven_v4` it sets none and, when
|
|
87
|
+
the voice is more than 5% off the presenter, names the measured voices nearer the presenter's pace (#890).
|
|
88
|
+
- `@clipwright/core` exports `referenceVoice`, the schema of that section, and `narrationPaceFromVoice`.
|
|
89
|
+
|
|
90
|
+
- *Dashboard:* a public `/captions` page plays every caption style on the same presenter and the same words, each
|
|
91
|
+
with the description `tools/list` gives it; the `caption_style` description links to the page.
|
|
92
|
+
- `SKILL.md` names every caption style and tells the agent to ask whether the user wants captions, to offer three
|
|
93
|
+
or four fitting styles with the gallery link, and to take the style closest to a reference video's captions.
|
|
94
|
+
- *Server-side:* `hormozi` now matches the canonical look: Montserrat Black uppercase, white with a thick black outline,
|
|
95
|
+
one yellow (`#FFD93D`) keyword per cue, up to three words. The previous look (condensed Oswald, orange keyword, no
|
|
96
|
+
outline) is the new style `accent`. `hormozi` stays the default; there are 24 styles.
|
|
97
|
+
- *Server-side:* `make_ugc` takes `edit_sounds: true` on a run with `inserts` or `layout_windows`: a low sound plays on
|
|
98
|
+
every cut, to or from an insert, at a full-frame template's cut in or out and at a layout window's in and out, with
|
|
99
|
+
its peak on the cut. `template_sounds.edit` picks it from `swell_hit` (default), `whoosh_deep`, `whoosh_low`,
|
|
100
|
+
`boom_low`, `sub_drop`, `riser_boom` and `riser_hit`. A cut that already plays a template's whoosh or flash gets no
|
|
101
|
+
second sound. Without the field a run plays no edit sounds, as before; `edit_sounds` with nothing to cut, with
|
|
102
|
+
`template_sounds: false`, or `template_sounds.edit` without `edit_sounds`, is refused 400 by its path before any
|
|
103
|
+
hold. The price does not change.
|
|
104
|
+
- *Server-side:* new template sounds: a `pop` (`plop`) when a `tag` or a `callout` pops in, a `hangup` (`phone`) just
|
|
105
|
+
before an answered `phone_call` leaves, and `money` (`cash_register`, `coins`) when a `stat` with a currency sign in
|
|
106
|
+
its prefix or suffix counts up. `answer` adds `pickup`, `whoosh` adds `slide_quick` and `flash` adds `swish`.
|
|
107
|
+
`list_template_sounds` lists them. A run frozen before them keeps its sounds.
|
|
108
|
+
- *Server-side:* `make_ugc` takes `framing`, presenter sizes on their words: `close` (1.18 times larger about the face)
|
|
109
|
+
or `medium`, each a hard cut that settles over 8 frames, or with `transition: "flash"` a warm light leak over the cut.
|
|
110
|
+
It needs long-form qualification, works without captions, refuses overlap with inserts, layout windows and other framing,
|
|
111
|
+
and names in `warnings[]` a framing wholly under full-frame templates. With `edit_sounds`, each framing cut plays the
|
|
112
|
+
edit sound. `plan_reference_remake` turns a `punch_in` camera into a close framing and a flash into a speaking beat
|
|
113
|
+
into a flashed one.
|
|
114
|
+
- `create_actor` takes `from_actor_id` with `framing: "wide"`, `holding` (one or two objects, each with words, an
|
|
115
|
+
optional image asset of the object and a hand) or `setting`: it derives a new personal actor from a library actor or
|
|
116
|
+
your own, with the same face checked against the source. A face that does not match costs nothing. The price is the
|
|
117
|
+
usual per-image units. *Server-side:* the fields are open only where `CLIPWRIGHT_ACTOR_VIEWS` is on; elsewhere they
|
|
118
|
+
are refused 400 `rejected_field`. A wide derived actor's 9:16 is listed with `framing: "wide"`, and `make_ugc`
|
|
119
|
+
renders it as a wide view. `@clipwright/core` exports `storedActorSource`, `storedHoldingItem`,
|
|
120
|
+
`createActorDispositions`, `createActorRejectedFields` and `isActorViewsEnabled`.
|
|
121
|
+
|
|
122
|
+
### Changed
|
|
123
|
+
|
|
124
|
+
- *Server-side:* the template sound library is re-recorded from CC0 sounds the owner chose by ear: 25 of the 31 files
|
|
125
|
+
play a new recording under the same name; the rings, `glitch`, `switch_heavy` and `paper_swipe` stay as they were.
|
|
126
|
+
Every source is named in `THIRD_PARTY_NOTICES`.
|
|
127
|
+
|
|
128
|
+
## [0.34.0] - 2026-10-24
|
|
129
|
+
|
|
130
|
+
### Added
|
|
131
|
+
|
|
132
|
+
- `@clipwright/core` exports `PUBLIC_MCP_URL`, the hosted MCP server address `https://mcp.clipwright.io/mcp`.
|
|
133
|
+
- *Dashboard:* a public `/mcp` page answers "Yes, Clipwright has an MCP server": the hosted address with the
|
|
134
|
+
`claude mcp add` command (sign in, no key), the local package with a key, and the tool list. `llms.txt` names the
|
|
135
|
+
hosted MCP address, the `/mcp` page and the CLI. The home page and `/pricing` carry schema.org data with the price
|
|
136
|
+
of the cheapest credit pack, and the sitemap dates the comparison pages by the day their facts were checked.
|
|
137
|
+
|
|
138
|
+
- *Server-side:* video assets. An MP4 in h264 or hevc up to 120 seconds and 100 MB comes from an own `generate_video`
|
|
139
|
+
run, a public url (`{ url, kind: "video" }`), a presigned PUT (`{ put: { media_type, bytes, sha256 } }`, also for
|
|
140
|
+
pictures) or `POST /v1/assets/bytes` up to 32 MB. A url or a PUT answers `202` with `state: "processing"` or
|
|
141
|
+
`"awaiting_upload"`; the worker task `ingest-asset-media` measures frames, fps, codec and `pix_fmt` from the bytes
|
|
142
|
+
and publishes the asset, and `GET /v1/assets/{id}` says `ready` or `failed` with the reason. Clips are kept for
|
|
143
|
+
assembly and are no generation reference.
|
|
144
|
+
- MCP: `create_asset` takes `put` and a url clip; on stdio a local MP4 `path` is uploaded through a PUT.
|
|
145
|
+
- `generate_video` and `quote_video` take an optional `camera`: `static`, `push_in`, `pull_back` or `pan`. It
|
|
146
|
+
becomes the first line of the prompt the model gets and does not change the price.
|
|
147
|
+
- `GET /v1/generations/models` lists `duration_values` for a model that takes only some lengths inside its
|
|
148
|
+
`duration_s` range; the schema and the quote refuse the others. The resolution `360p` is part of the contract.
|
|
149
|
+
- New clip models: `kling-3.0` at 720p in 9:16 and 16:9, 3 to 15 seconds, and `gemini-omni-flash-1.1` at 720p in both
|
|
150
|
+
formats and 360p 16:9, for 4, 6, 8 or 10 seconds. `seedance-2.5` adds 480p 9:16 and 720p 16:9.
|
|
151
|
+
- *Server-side:* a clip refused for a real face in its input picture, or turned away as rate-limited before it was
|
|
152
|
+
accepted, is made by a second provider at the same quote where that row was measured there. A clip is always
|
|
153
|
+
delivered without an audio track.
|
|
154
|
+
- *Dashboard:* the Assets page. It lists the account's pictures and clips in a grid of small, medium or large tiles,
|
|
155
|
+
with filters by role and kind, a name search and the usage of the 2,000 assets and 20 GB. A selected asset opens on
|
|
156
|
+
the right: rename it, change its role, copy its `asset_id`, open the file or delete it. Pictures up to 10 MB and MP4
|
|
157
|
+
clips up to 32 MB upload from the page; a clip shows as processing until it is checked.
|
|
158
|
+
- *Server-side:* each asset gets a preview of at most 512 pixels on the long side, made by the worker after the asset
|
|
159
|
+
is saved and caught up hourly. The Assets page shows the preview, never the original, in its grid. The API does not
|
|
160
|
+
return the preview yet.
|
|
161
|
+
- *Server-side:* more clip formats. `seedance-2.0` adds 480p in 9:16 and 16:9 at 18 credits a second and 720p 16:9;
|
|
162
|
+
`seedance-2.0-fast` adds 480p in both formats and 720p 16:9; `seedance-2.0-mini` and `seedance-2.5` add 480p 16:9.
|
|
163
|
+
The 480p clip of `seedance-2.0`, `-mini` and `-fast` is 496×864 or 864×496, and `warnings[]` says so.
|
|
164
|
+
- A `make_ugc` image insert can name `asset_id` instead of `media_url`, exactly one of the two. The quote and the run
|
|
165
|
+
accept only a ready PNG or JPEG asset of the same account, with a `media_type` that matches it. A foreign, deleted
|
|
166
|
+
or unfinished asset answers `400 reference_not_usable` before any credits are reserved. The worker reads the
|
|
167
|
+
file admission recorded and checks its sha256, so a later delete does not change a started run.
|
|
168
|
+
- `get_run` in the MCP server returns `created_actor` on a succeeded `create_actor` run, so an agent sees the
|
|
169
|
+
`actor_id` to pass to `make_ugc`.
|
|
170
|
+
- `make_ugc` takes `overlays`: pictures anchored to words like inserts, drawn over the presenter in a corner or as a
|
|
171
|
+
band across the top or bottom, entering with `cut`, `fade`, `slide` or `tilt_in`. At most two show at once, and two
|
|
172
|
+
on screen together need positions that share no corner. Captions move to the middle or the bottom of the frame when
|
|
173
|
+
an overlay meets them, never up over the face, and hide when neither place is free. An overlay steps aside while a full-frame insert is on screen, and one wholly under inserts is refused.
|
|
174
|
+
- `make_ugc` takes `layout_windows`: `split` puts the presenter in the top half and the picture in the bottom half with
|
|
175
|
+
captions on the seam (9:16 only); `card` shows the picture in a centred card, and `blur_presenter` blurs the
|
|
176
|
+
presenter behind it. Windows may not overlap one another or an insert.
|
|
177
|
+
- Inserts take `transition`: `cut`, `wipe`, `flash` or `zoom`. It plays inside the insert's own frames and never moves
|
|
178
|
+
its start or end. A `caption_emphasis` item takes `punch_in: true` to zoom into the presenter while the quote is
|
|
179
|
+
spoken.
|
|
180
|
+
- *Server-side:* overlays and layout windows follow the insert rules: `script`, long-form qualification, 1080p and
|
|
181
|
+
`broll_policy=anyone`, exactly one of `media_url` and `asset_id`, and ids unique across inserts, overlays and
|
|
182
|
+
windows. A script with overlays or windows alone runs as long form. They change
|
|
183
|
+
neither the presenter's slots nor the price: a blurred or covered presenter is billed face time. A run whose
|
|
184
|
+
composition is off, skipped or failed names undrawn overlays, windows, transitions and punch-in in `warnings[]`.
|
|
185
|
+
- `make_ugc` inserts, overlays and layout windows take `media_type: "video"`, by `media_url` or by the `asset_id` of an
|
|
186
|
+
MP4 asset. The clip plays muted from its first frame and is cut by time where its words end, so a variable frame
|
|
187
|
+
rate does not shift it. A clip shorter than its words holds its last frame, and `warnings[]` names the insert or
|
|
188
|
+
layer: in the quote for an `asset_id` the slow speech edge may outlast, otherwise on the run. H.264 and HEVC in 8 bits
|
|
189
|
+
without HDR are accepted.
|
|
190
|
+
- *Server-side:* a 10-bit video asset answers `400 reference_not_usable` before any credits are reserved. A
|
|
191
|
+
`media_url` clip, and the colour transfer of an asset clip, are measured by the worker before the first paid call:
|
|
192
|
+
another codec, 10 bits or more, or a PQ or HLG transfer fails the run uncharged with `media_source_rejected` naming
|
|
193
|
+
the insert or layer. A video `segments` item is still refused. Customer video costs nothing: the same script with a
|
|
194
|
+
picture or a clip quotes and bills the same face seconds.
|
|
195
|
+
- *Server-side:* graphic templates on `make_ugc`. `templates[]` takes up to 12 items
|
|
196
|
+
`{ id, kind, anchor, cover_words?, placement?, transition?, data }` of three kinds: `tag` (a gradient pill, also
|
|
197
|
+
over an insert), `lower_third` (a name and role bar) and `end_card` (a site pill with an optional call to action);
|
|
198
|
+
captions are hidden under the last two and under a tag without `position`, which sits in the caption spot. Each kind
|
|
199
|
+
takes `size` small, medium (the default) or large, and long text shrinks to fit. Templates are accepted on any
|
|
200
|
+
`script` run without `segments` and never change its tariff or price: a plain run is billed 30 credits a second of
|
|
201
|
+
finished video, and a run with inserts, overlays or layout windows is billed long-form-v1 (#840). Text over its
|
|
202
|
+
limit (a wide CJK character counts 2), emoji, letters the run's fonts cannot draw, overlapping footprints and the
|
|
203
|
+
other refusals answer 400 with a path before any hold. `@clipwright/core` exports the catalog (`TEMPLATE_KINDS`)
|
|
204
|
+
and `@clipwright/mcp-server` offers a slim template item with the catalog in its description.
|
|
205
|
+
- *Server-side:* full-frame templates and template pictures. `title_card` (a hook card: a title in up to two lines on
|
|
206
|
+
a white card, an optional logo picture shown whole and a gradient chip) and `quote` (up to four lines, an author and
|
|
207
|
+
an optional round photo) fill the frame; `stat` counts a number up from zero, on a full frame or over the presenter.
|
|
208
|
+
A full-frame template hides captions, overlays and over-presenter templates while it shows, takes a `wipe`, `flash`
|
|
209
|
+
or `zoom` drawn over the live presenter, and on a long-form run the presenter under it is still billed as face time.
|
|
210
|
+
`logo` and `photo` take `{ asset_id }`: pinned at admission under the template id and slot, a video or another
|
|
211
|
+
account's asset is refused 400 `reference_not_usable` before any hold, and a photo cut to its circle is named in
|
|
212
|
+
`warnings[]`. On a plain run a template picture needs explicit `broll_policy=anyone`, like a layer (#840).
|
|
213
|
+
- *Server-side:* templates on a plain script run (#840). A `script` run without inserts, overlays or layout windows
|
|
214
|
+
takes `templates`, `template_theme` and `template_sounds` at 30 credits a second, with no minimum and no face
|
|
215
|
+
seconds. The templates are drawn over its one take; if they cannot be drawn, the video is delivered at the same
|
|
216
|
+
price and `warnings[]` says `templates was not drawn: <reason>`.
|
|
217
|
+
- Quotes carry `tariff`: `ugc-per-second-v1` on a plain run, or long form's `pricingVersion` (`long-form-v1`). The
|
|
218
|
+
field is an optional string, so older clients and stored quotes still parse; templates never change it.
|
|
219
|
+
- *Server-side:* the `callout` template and template looks. `callout` draws an arrow or a ring onto a point given
|
|
220
|
+
as `target { x, y }` in percent of the frame, pulses twice and rests, with an optional label pill below the point,
|
|
221
|
+
or above it when there is no room or the face is below; the point may sit anywhere, the face rule covers the label.
|
|
222
|
+
A run-level `template_theme { preset?, accent? }` picks `clean_light` (the default when absent) or `bold_dark`, and
|
|
223
|
+
`accent` takes a `#RRGGBB` colour for the pills and accent text. A customer accent under 3:1 against the colours it
|
|
224
|
+
meets is refused 400 at `template_theme.accent` before any hold, never shifted. The look freezes into the timeline,
|
|
225
|
+
so a resumed run draws what it was admitted with, and footprints come from the frozen kind version.
|
|
226
|
+
- *Server-side:* three interactive templates with inner quotes. `checklist` draws 2–4 rows of switches or check boxes
|
|
227
|
+
that a cursor clicks in turn; `phone_call` rings an incoming call on a neutral phone at the side and answers it; and
|
|
228
|
+
`compare` sweeps an after picture in over a before picture on a diagonal, full frame. An inner quote
|
|
229
|
+
(`clicks[].quote`, `answer_at`, `reveal_at`) names words inside the template's own: the click, answer or reveal lands
|
|
230
|
+
on their first word, and a click without one is spread evenly. A quote missing from the script, outside the item's
|
|
231
|
+
words, out of the script's order, or on words an insert or full-frame template covers is refused 400 by its path
|
|
232
|
+
before any hold. `compare` takes two pictures, pinned apart as `before` and `after`. Templates still change no price.
|
|
233
|
+
- *Server-side:* three more templates and three more looks. `notification` drops a phone notification (an icon, the
|
|
234
|
+
app, a title and a body line) into the band above the face, holds it at least 1.2 s and takes it away before its
|
|
235
|
+
span ends; `progress` completes 2–5 steps in turn, each on its `advance_at` quote (exactly one per step) or spread
|
|
236
|
+
evenly; `rating` fills five stars in turn up to a score in halves. `advance_at` is refused like the other inner
|
|
237
|
+
quotes, and a list of the wrong length too. `template_theme.preset` adds `neon`, `paper` and `mono`, and a customer
|
|
238
|
+
accent is checked against each look's own colours.
|
|
239
|
+
- *Server-side:* templates play sounds, well under the voice, from a library of 31 bundled with the composition: a
|
|
240
|
+
checklist click and its switch landing, a phone ringing until it is answered and the answer, a notification dropping
|
|
241
|
+
in, each progress step and rating star, a compare reveal, and a full-frame wipe, zoom or flash. A run plays the
|
|
242
|
+
defaults; `template_sounds: { beat: name }` swaps a beat's sound and `template_sounds: false` plays none. An unknown
|
|
243
|
+
beat or name, or `template_sounds` without templates, is refused 400 by its path before any hold. `GET
|
|
244
|
+
/v1/template-sounds` and the MCP tool `list_template_sounds` list each beat, its default and its names, free. A run
|
|
245
|
+
frozen before this plays none. Sounds change no price. `@clipwright/sdk` adds `listTemplateSounds()`.
|
|
246
|
+
|
|
247
|
+
### Changed
|
|
248
|
+
|
|
249
|
+
- *Server-side:* in `mono` the callout's ring and arrow have a white outline, so they read over a dark suit.
|
|
250
|
+
- *Server-side:* a template beat spoken before its template has entered (a checklist click before its rows and cursor are
|
|
251
|
+
in, or an answer, step or reveal during the enter) moves to the first frame after the enter, the beats after it keep
|
|
252
|
+
6 frames apart, and `warnings[]` names each move. Runs already rendered keep their frames.
|
|
253
|
+
- *Server-side:* captions and the light template look are blue, with no purple: the two-tier and pill captions and the
|
|
254
|
+
`punch` keyword use the reference's periwinkle-to-sky blue, `clean_light` follows it, `bold_dark` sits on a neutral
|
|
255
|
+
near-black ground, `checklist` switches are green when on and red when off in every look, and the `phone_call` screen
|
|
256
|
+
is the device's own teal-to-blue.
|
|
257
|
+
- *Server-side:* a template no longer moves captions. While it meets their band it hides them, as the checklist and
|
|
258
|
+
the phone do; a small one elsewhere, such as a notification at the top, leaves them on screen.
|
|
259
|
+
- *Server-side:* `generate_image` and `generate_video` cost less. A `seedream-5.0-flash` image costs 5 credits instead
|
|
260
|
+
of 12 and a `flare` image 6 instead of 18; a second of `seedance-2.0-mini` at 720p costs 10 instead of 50,
|
|
261
|
+
`seedance-2.0` at 1080p 91 instead of 250, `kling-3.0` 17 instead of 50 and `gemini-omni-flash-1.1` 19 instead of 55.
|
|
262
|
+
A run already admitted keeps its quoted price.
|
|
263
|
+
- *Server-side:* a second of `seedance-2.5` at 480p costs 25 credits instead of 34.
|
|
264
|
+
- *Server-side:* every delivered video is encoded once, at a quality setting chosen by eye on text frames, so a
|
|
265
|
+
35-second 1080×1920 video is about 11 MB instead of 27 MB. The resolution is unchanged (#845).
|
|
266
|
+
|
|
267
|
+
### Fixed
|
|
268
|
+
|
|
269
|
+
- *Server-side:* a dropped connection while the worker checks on an ordered `make_ugc` clip no longer fails the run
|
|
270
|
+
and charges for it. The worker checks again until its wait deadline, and a run that stays cut off ends with no charge.
|
|
271
|
+
|
|
21
272
|
## [0.33.0] - 2026-10-20
|
|
22
273
|
|
|
23
274
|
### Added
|
package/README.md
CHANGED
|
@@ -17,7 +17,9 @@ edit: `runShots`, `runEdit` and `saveRunEdit` are what the API emits and takes;
|
|
|
17
17
|
that a name a later API adds does not break it.
|
|
18
18
|
|
|
19
19
|
The `./idempotency` subpath export is separate because it pulls in a Node
|
|
20
|
-
built-in and would otherwise break bundlers targeting the browser.
|
|
20
|
+
built-in and would otherwise break bundlers targeting the browser. So is
|
|
21
|
+
`./openapi`: `buildOpenApiDocument()` builds the OpenAPI 3.1 document the API
|
|
22
|
+
serves at `GET /openapi.json` from the route registry and these schemas.
|
|
21
23
|
|
|
22
24
|
## Changelog
|
|
23
25
|
|
package/dist/account-actors.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { type ActorQuality } from "./actor-qualities.js";
|
|
2
|
+
import { type ActorQuality, type ActorQualityAccepted } from "./actor-qualities.js";
|
|
3
3
|
import { type AspectRatio } from "./skills.js";
|
|
4
4
|
/** Personal actors of an account. */
|
|
5
5
|
export { ACTOR_DEFAULT_QUALITY, ACTOR_QUALITIES_ACCEPTED, ACTOR_QUALITIES_KNOWN } from "./actor-qualities.js";
|
|
6
6
|
export type { ActorQuality, ActorQualityAccepted } from "./actor-qualities.js";
|
|
7
|
-
export { ACTOR_AGE_FLOOR, ACTOR_ASPECTS_KNOWN, ACTOR_DESCRIPTION_MAX_CHARS, ACTOR_GENDERS_ACCEPTED, ACTOR_GENDERS_KNOWN, ACTOR_MAX_AGE, ACTOR_MIN_AGE, ACTOR_NAME_MAX_CHARS, } from "./actor-bounds.js";
|
|
7
|
+
export { ACTOR_AGE_FLOOR, ACTOR_ASPECTS_KNOWN, ACTOR_DESCRIPTION_MAX_CHARS, ACTOR_GENDERS_ACCEPTED, ACTOR_GENDERS_KNOWN, ACTOR_HOLDING_DESCRIPTION_MAX_CHARS, ACTOR_HOLDING_MAX_ITEMS, ACTOR_MAX_AGE, ACTOR_MIN_AGE, ACTOR_NAME_MAX_CHARS, ACTOR_SETTING_MAX_CHARS, } from "./actor-bounds.js";
|
|
8
8
|
export type { ActorAspectKnown, ActorGender } from "./actor-bounds.js";
|
|
9
9
|
export declare const PERSONAL_ACTOR_ID_PREFIX = "actor_u_";
|
|
10
10
|
/** `actor_u_` plus 26 base32 characters (RFC 4648, lowercase): 128 random bits. */
|
|
@@ -32,36 +32,70 @@ export declare const ACTOR_SIZE_SET: {
|
|
|
32
32
|
readonly height: 1024;
|
|
33
33
|
};
|
|
34
34
|
};
|
|
35
|
+
export declare const ACTOR_VIEW_FRAMINGS: readonly ["wide"];
|
|
36
|
+
export declare const ACTOR_HANDS: readonly ["left", "right"];
|
|
37
|
+
/** The fields of a view derived from an actor (#898). */
|
|
38
|
+
export declare const ACTOR_VIEW_FIELDS: readonly ["from_actor_id", "framing", "holding", "setting"];
|
|
35
39
|
type AcceptedQualities = readonly [ActorQuality, ...ActorQuality[]];
|
|
36
40
|
/** The input for a given set of accepted qualities. */
|
|
37
41
|
export declare function createActorInputWith<const Q extends AcceptedQualities>(accepted: Q, defaultQuality: Q[number]): z.ZodObject<{
|
|
38
|
-
description: z.ZodString
|
|
39
|
-
gender: z.ZodEnum<{
|
|
42
|
+
description: z.ZodOptional<z.ZodString>;
|
|
43
|
+
gender: z.ZodOptional<z.ZodEnum<{
|
|
40
44
|
female: "female";
|
|
41
45
|
male: "male";
|
|
42
|
-
}
|
|
43
|
-
approximate_age: z.ZodNumber
|
|
46
|
+
}>>;
|
|
47
|
+
approximate_age: z.ZodOptional<z.ZodNumber>;
|
|
44
48
|
name: z.ZodString;
|
|
45
49
|
aspect_ratios: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
46
50
|
"16:9": "16:9";
|
|
47
51
|
"1:1": "1:1";
|
|
48
52
|
"9:16": "9:16";
|
|
49
53
|
}>>>;
|
|
54
|
+
from_actor_id: z.ZodOptional<z.ZodString>;
|
|
55
|
+
framing: z.ZodOptional<z.ZodEnum<{
|
|
56
|
+
wide: "wide";
|
|
57
|
+
}>>;
|
|
58
|
+
holding: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
59
|
+
description: z.ZodString;
|
|
60
|
+
reference: z.ZodOptional<z.ZodObject<{
|
|
61
|
+
asset_id: z.ZodString;
|
|
62
|
+
}, z.core.$strict>>;
|
|
63
|
+
hand: z.ZodOptional<z.ZodEnum<{
|
|
64
|
+
left: "left";
|
|
65
|
+
right: "right";
|
|
66
|
+
}>>;
|
|
67
|
+
}, z.core.$strict>>>;
|
|
68
|
+
setting: z.ZodOptional<z.ZodString>;
|
|
50
69
|
quality: z.ZodDefault<z.ZodEnum<{ [k in Q[number]]: k; } extends infer T ? { [k in keyof T]: T[k]; } : never>>;
|
|
51
70
|
}, z.core.$strict>;
|
|
52
71
|
export declare const createActorInput: z.ZodObject<{
|
|
53
|
-
description: z.ZodString
|
|
54
|
-
gender: z.ZodEnum<{
|
|
72
|
+
description: z.ZodOptional<z.ZodString>;
|
|
73
|
+
gender: z.ZodOptional<z.ZodEnum<{
|
|
55
74
|
female: "female";
|
|
56
75
|
male: "male";
|
|
57
|
-
}
|
|
58
|
-
approximate_age: z.ZodNumber
|
|
76
|
+
}>>;
|
|
77
|
+
approximate_age: z.ZodOptional<z.ZodNumber>;
|
|
59
78
|
name: z.ZodString;
|
|
60
79
|
aspect_ratios: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
61
80
|
"16:9": "16:9";
|
|
62
81
|
"1:1": "1:1";
|
|
63
82
|
"9:16": "9:16";
|
|
64
83
|
}>>>;
|
|
84
|
+
from_actor_id: z.ZodOptional<z.ZodString>;
|
|
85
|
+
framing: z.ZodOptional<z.ZodEnum<{
|
|
86
|
+
wide: "wide";
|
|
87
|
+
}>>;
|
|
88
|
+
holding: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
89
|
+
description: z.ZodString;
|
|
90
|
+
reference: z.ZodOptional<z.ZodObject<{
|
|
91
|
+
asset_id: z.ZodString;
|
|
92
|
+
}, z.core.$strict>>;
|
|
93
|
+
hand: z.ZodOptional<z.ZodEnum<{
|
|
94
|
+
left: "left";
|
|
95
|
+
right: "right";
|
|
96
|
+
}>>;
|
|
97
|
+
}, z.core.$strict>>>;
|
|
98
|
+
setting: z.ZodOptional<z.ZodString>;
|
|
65
99
|
quality: z.ZodDefault<z.ZodEnum<{
|
|
66
100
|
high: "high";
|
|
67
101
|
medium: "medium";
|
|
@@ -73,18 +107,33 @@ export type CreateActorInput = z.infer<typeof createActorInput>;
|
|
|
73
107
|
export type CreateActorInputArgs = z.input<typeof createActorInput>;
|
|
74
108
|
/** Flat shape for MCP: the tool publishes the same schema the server checks. */
|
|
75
109
|
export declare const createActorInputShape: {
|
|
76
|
-
description: z.ZodString
|
|
77
|
-
gender: z.ZodEnum<{
|
|
110
|
+
description: z.ZodOptional<z.ZodString>;
|
|
111
|
+
gender: z.ZodOptional<z.ZodEnum<{
|
|
78
112
|
female: "female";
|
|
79
113
|
male: "male";
|
|
80
|
-
}
|
|
81
|
-
approximate_age: z.ZodNumber
|
|
114
|
+
}>>;
|
|
115
|
+
approximate_age: z.ZodOptional<z.ZodNumber>;
|
|
82
116
|
name: z.ZodString;
|
|
83
117
|
aspect_ratios: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
84
118
|
"16:9": "16:9";
|
|
85
119
|
"1:1": "1:1";
|
|
86
120
|
"9:16": "9:16";
|
|
87
121
|
}>>>;
|
|
122
|
+
from_actor_id: z.ZodOptional<z.ZodString>;
|
|
123
|
+
framing: z.ZodOptional<z.ZodEnum<{
|
|
124
|
+
wide: "wide";
|
|
125
|
+
}>>;
|
|
126
|
+
holding: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
127
|
+
description: z.ZodString;
|
|
128
|
+
reference: z.ZodOptional<z.ZodObject<{
|
|
129
|
+
asset_id: z.ZodString;
|
|
130
|
+
}, z.core.$strict>>;
|
|
131
|
+
hand: z.ZodOptional<z.ZodEnum<{
|
|
132
|
+
left: "left";
|
|
133
|
+
right: "right";
|
|
134
|
+
}>>;
|
|
135
|
+
}, z.core.$strict>>>;
|
|
136
|
+
setting: z.ZodOptional<z.ZodString>;
|
|
88
137
|
quality: z.ZodDefault<z.ZodEnum<{
|
|
89
138
|
high: "high";
|
|
90
139
|
medium: "medium";
|
|
@@ -94,6 +143,10 @@ export declare const actorUnitCredits: z.ZodObject<{
|
|
|
94
143
|
portrait: z.ZodNumber;
|
|
95
144
|
variant: z.ZodNumber;
|
|
96
145
|
}, z.core.$strip>;
|
|
146
|
+
/** Unit prices of a personal actor (owner's decision, clipwright#120). Admission copies them into the */
|
|
147
|
+
/** run's snapshot and settlement reads the snapshot, so a change here leaves old runs alone. ×2.5 over the S0 costs (owner, 29.10, */
|
|
148
|
+
/** #800): a portrait is a generate call ($0.0103 medium, $0.039 high), another format an edit ($0.024, $0.0581). */
|
|
149
|
+
export declare const ACTOR_UNIT_CREDITS: Readonly<Record<ActorQualityAccepted, z.infer<typeof actorUnitCredits>>>;
|
|
97
150
|
/** Unit prices and requested formats fixed at admission; settlement uses these, not the price table. */
|
|
98
151
|
export declare const actorPricingSnapshot: z.ZodObject<{
|
|
99
152
|
quality: z.ZodEnum<{
|
|
@@ -127,6 +180,43 @@ export declare const admittedActorPricingSnapshot: z.ZodObject<{
|
|
|
127
180
|
"9:16": "9:16";
|
|
128
181
|
}>>;
|
|
129
182
|
}, z.core.$strip>;
|
|
183
|
+
/** The source image admission resolved for `from_actor_id`: the worker reads these bytes, not a payload. */
|
|
184
|
+
export declare const storedActorSource: z.ZodObject<{
|
|
185
|
+
actor_id: z.ZodString;
|
|
186
|
+
scope: z.ZodEnum<{
|
|
187
|
+
account: "account";
|
|
188
|
+
clipwright: "clipwright";
|
|
189
|
+
}>;
|
|
190
|
+
key: z.ZodString;
|
|
191
|
+
sha256: z.ZodString;
|
|
192
|
+
width: z.ZodNumber;
|
|
193
|
+
height: z.ZodNumber;
|
|
194
|
+
framing: z.ZodEnum<{
|
|
195
|
+
close: "close";
|
|
196
|
+
wide: "wide";
|
|
197
|
+
}>;
|
|
198
|
+
}, z.core.$strip>;
|
|
199
|
+
export type StoredActorSource = z.infer<typeof storedActorSource>;
|
|
200
|
+
/** A held object as admitted: a `reference` carries the asset row admission found. */
|
|
201
|
+
export declare const storedHoldingItem: z.ZodObject<{
|
|
202
|
+
description: z.ZodString;
|
|
203
|
+
hand: z.ZodOptional<z.ZodEnum<{
|
|
204
|
+
left: "left";
|
|
205
|
+
right: "right";
|
|
206
|
+
}>>;
|
|
207
|
+
reference: z.ZodOptional<z.ZodObject<{
|
|
208
|
+
asset_id: z.ZodString;
|
|
209
|
+
}, z.core.$strip>>;
|
|
210
|
+
picture: z.ZodOptional<z.ZodObject<{
|
|
211
|
+
asset_id: z.ZodString;
|
|
212
|
+
key: z.ZodString;
|
|
213
|
+
mime: z.ZodEnum<{
|
|
214
|
+
"image/jpeg": "image/jpeg";
|
|
215
|
+
"image/png": "image/png";
|
|
216
|
+
}>;
|
|
217
|
+
}, z.core.$strip>>;
|
|
218
|
+
}, z.core.$strip>;
|
|
219
|
+
export type StoredHoldingItem = z.infer<typeof storedHoldingItem>;
|
|
130
220
|
/** A stored run input. Quality and formats must match the snapshot, or generation would diverge */
|
|
131
221
|
/** from the charge, so such a run does not read (`run_input_unreadable`, zero credits). */
|
|
132
222
|
export declare const storedCreateActorInput: z.ZodObject<{
|
|
@@ -161,6 +251,44 @@ export declare const storedCreateActorInput: z.ZodObject<{
|
|
|
161
251
|
"9:16": "9:16";
|
|
162
252
|
}>>;
|
|
163
253
|
}, z.core.$strip>;
|
|
254
|
+
from_actor_id: z.ZodOptional<z.ZodString>;
|
|
255
|
+
source_actor: z.ZodOptional<z.ZodObject<{
|
|
256
|
+
actor_id: z.ZodString;
|
|
257
|
+
scope: z.ZodEnum<{
|
|
258
|
+
account: "account";
|
|
259
|
+
clipwright: "clipwright";
|
|
260
|
+
}>;
|
|
261
|
+
key: z.ZodString;
|
|
262
|
+
sha256: z.ZodString;
|
|
263
|
+
width: z.ZodNumber;
|
|
264
|
+
height: z.ZodNumber;
|
|
265
|
+
framing: z.ZodEnum<{
|
|
266
|
+
close: "close";
|
|
267
|
+
wide: "wide";
|
|
268
|
+
}>;
|
|
269
|
+
}, z.core.$strip>>;
|
|
270
|
+
framing: z.ZodOptional<z.ZodEnum<{
|
|
271
|
+
wide: "wide";
|
|
272
|
+
}>>;
|
|
273
|
+
holding: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
274
|
+
description: z.ZodString;
|
|
275
|
+
hand: z.ZodOptional<z.ZodEnum<{
|
|
276
|
+
left: "left";
|
|
277
|
+
right: "right";
|
|
278
|
+
}>>;
|
|
279
|
+
reference: z.ZodOptional<z.ZodObject<{
|
|
280
|
+
asset_id: z.ZodString;
|
|
281
|
+
}, z.core.$strip>>;
|
|
282
|
+
picture: z.ZodOptional<z.ZodObject<{
|
|
283
|
+
asset_id: z.ZodString;
|
|
284
|
+
key: z.ZodString;
|
|
285
|
+
mime: z.ZodEnum<{
|
|
286
|
+
"image/jpeg": "image/jpeg";
|
|
287
|
+
"image/png": "image/png";
|
|
288
|
+
}>;
|
|
289
|
+
}, z.core.$strip>>;
|
|
290
|
+
}, z.core.$strip>>>;
|
|
291
|
+
setting: z.ZodOptional<z.ZodString>;
|
|
164
292
|
}, z.core.$strip>;
|
|
165
293
|
export type StoredCreateActorInput = z.infer<typeof storedCreateActorInput>;
|
|
166
294
|
export declare const createActorQuote: z.ZodObject<{
|
|
@@ -235,7 +363,11 @@ export type CreateActorDisposition = {
|
|
|
235
363
|
kind: "warned";
|
|
236
364
|
warning: string;
|
|
237
365
|
triggersWhen: "present";
|
|
366
|
+
} | {
|
|
367
|
+
kind: "rejected";
|
|
368
|
+
message: string;
|
|
238
369
|
};
|
|
370
|
+
type CreateActorField = keyof typeof createActorInput.shape;
|
|
239
371
|
export declare const CREATE_ACTOR_FIELD_DISPOSITIONS: {
|
|
240
372
|
readonly description: {
|
|
241
373
|
readonly kind: "implemented";
|
|
@@ -261,7 +393,31 @@ export declare const CREATE_ACTOR_FIELD_DISPOSITIONS: {
|
|
|
261
393
|
readonly kind: "implemented";
|
|
262
394
|
readonly provenBy: "egress";
|
|
263
395
|
};
|
|
396
|
+
readonly from_actor_id: {
|
|
397
|
+
readonly kind: "implemented";
|
|
398
|
+
readonly provenBy: "egress";
|
|
399
|
+
};
|
|
400
|
+
readonly framing: {
|
|
401
|
+
readonly kind: "implemented";
|
|
402
|
+
readonly provenBy: "egress";
|
|
403
|
+
};
|
|
404
|
+
readonly holding: {
|
|
405
|
+
readonly kind: "implemented";
|
|
406
|
+
readonly provenBy: "egress";
|
|
407
|
+
};
|
|
408
|
+
readonly setting: {
|
|
409
|
+
readonly kind: "implemented";
|
|
410
|
+
readonly provenBy: "egress";
|
|
411
|
+
};
|
|
264
412
|
};
|
|
413
|
+
export declare const ACTOR_VIEWS_DISABLED_MESSAGE = "is switched off on this deployment: deriving an actor from an actor is not available; create an actor from a description instead";
|
|
414
|
+
/** The registry with `CLIPWRIGHT_ACTOR_VIEWS` applied: switched off, the view fields are refused, not ignored. */
|
|
415
|
+
export declare function createActorDispositions(viewsEnabled: boolean): Record<CreateActorField, CreateActorDisposition>;
|
|
416
|
+
/** Present fields whose disposition is `rejected`, in registry order, for `rejectedFieldBody`. */
|
|
417
|
+
export declare function createActorRejectedFields(input: Readonly<Record<string, unknown>>, dispositions: Readonly<Record<string, CreateActorDisposition>>): {
|
|
418
|
+
field: string;
|
|
419
|
+
message: string;
|
|
420
|
+
}[];
|
|
265
421
|
/** Admission warnings come only from the registry; written to `runs.warnings`, not recomputed on read. */
|
|
266
422
|
export declare function createActorAdmissionWarnings(input: Readonly<Record<string, unknown>>, dispositions?: Readonly<Record<string, CreateActorDisposition>>): string[];
|
|
267
423
|
/** `create_actor` run failure codes, each charging zero credits. The `error` column reads `code: text`. */
|
|
@@ -275,6 +431,9 @@ export declare const CREATE_ACTOR_RUN_ERRORS: {
|
|
|
275
431
|
readonly actor_generation_disabled: "actor generation is disabled right now; no actor was created and nothing was charged";
|
|
276
432
|
readonly actor_run_interrupted: "the run stopped before it finished; no actor was created and nothing was charged";
|
|
277
433
|
readonly actor_spend_refused: "our spend guard refused the paid call; no actor was created and nothing was charged. Retry later";
|
|
434
|
+
readonly actor_identity_not_kept: "the edited portrait did not keep the source actor's face; no actor was created and nothing was charged";
|
|
435
|
+
readonly actor_source_unreadable: "the source actor or a held object's picture could not be read; no actor was created and nothing was charged";
|
|
436
|
+
readonly actor_views_disabled: "deriving an actor from an actor is disabled right now; no actor was created and nothing was charged";
|
|
278
437
|
};
|
|
279
438
|
export type CreateActorRunErrorCode = keyof typeof CREATE_ACTOR_RUN_ERRORS;
|
|
280
439
|
export declare const CREATE_ACTOR_RUN_ERROR_CODES: CreateActorRunErrorCode[];
|