@clipwright/cli 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.
Files changed (3) hide show
  1. package/CHANGELOG.md +251 -0
  2. package/README.md +10 -8
  3. package/package.json +3 -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
@@ -16,6 +16,9 @@ under the short name, so installing both in one project leaves only one of them
16
16
  `node_modules/.bin` — silently. Use `clipwright-cli` where that matters. The commands
17
17
  above name the package with `-p`, so they resolve here either way.
18
18
 
19
+ Recipes, each a prompt an agent turned into a video with the call it sent and
20
+ the price, are in the [`@clipwright/mcp-server` README](https://www.npmjs.com/package/@clipwright/mcp-server).
21
+
19
22
  | Command | What it does |
20
23
  | --- | --- |
21
24
  | `quote --script <text>` | Estimates the credit cost. Spends nothing. |
@@ -127,13 +130,12 @@ each voice: play it before you pay for a render, and reuse the same name next ti
127
130
  `--language` filters by a voice's native language; any voice speaks any supported
128
131
  language.
129
132
 
130
- The voice decides the speech model. The Russian presets `owner_ru_clone` and
131
- `daria_ru_female` and the catalog voices named `ru_*` speak `eleven_v4`; every other
132
- preset and catalog voice speaks `eleven_v3`. A `--voice-id` voice speaks `eleven_v4` when
133
- the script is mostly Cyrillic and `eleven_v3` otherwise. `--tts-model` overrides the
134
- choice: `eleven_flash_v2_5` and `eleven_turbo_v2_5` cost less but misread Russian stress
135
- marks. In a Russian script, mark stress with a capital vowel inside the word: `потОм`.
136
- `eleven_v4`, `eleven_v3` and `gemini-3.8-flash-tts` read it as stress. `eleven_v4` and
133
+ The voice decides the speech model: every preset, catalog voice and `--voice-id` voice
134
+ speaks `eleven_v4`. `--tts-model` overrides the choice: `eleven_flash_v2_5` and
135
+ `eleven_turbo_v2_5` cost less but misread Russian stress marks. `--tts-model eleven_v3` is
136
+ still accepted, but the run speaks `eleven_v4` and warns about it. In a Russian script, mark
137
+ stress with a capital vowel inside the word: `потОм`. `eleven_v4` and
138
+ `gemini-3.8-flash-tts` read it as stress. `eleven_v4` and
137
139
  `gemini-3.8-flash-tts` give no pause for a `<break time="…" />` tag: the tag is cut from
138
140
  the text, and the response warns about it.
139
141
 
@@ -151,7 +153,7 @@ ends with the narration, runs at least 25 seconds and may exceed the selection
151
153
  by up to a quarter, never beyond 90 seconds; a video more than 5 seconds longer
152
154
  says so in `warnings[]`. A script is accepted when its estimated length is 21
153
155
  seconds to the selection plus 5, at most 90. The charge follows the delivered duration and never exceeds the quote;
154
- the minimum remains 200 base credits plus 150 for the opening clip.
156
+ the rates and the minimum are on [clipwright.io/pricing](https://clipwright.io/pricing?ref=npm).
155
157
  Captions are on; `--no-captions`
156
158
  turns them off. `--style-reference <url>` and `--character-reference <url>` take
157
159
  public https images. `--voice <name>` picks the narration voice: take a name
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clipwright/cli",
3
- "version": "0.33.0",
3
+ "version": "0.35.0",
4
4
  "description": "Command-line client for the Clipwright UGC video API",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,8 +33,8 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "commander": "^15.0.0",
36
- "@clipwright/core": "0.33.0",
37
- "@clipwright/sdk": "0.33.0"
36
+ "@clipwright/core": "0.35.0",
37
+ "@clipwright/sdk": "0.35.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^26.1.1"