@clipwright/cli 0.34.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 +107 -0
  2. package/README.md +7 -8
  3. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -18,6 +18,113 @@ 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
+
21
128
  ## [0.34.0] - 2026-10-24
22
129
 
23
130
  ### Added
package/README.md CHANGED
@@ -130,13 +130,12 @@ each voice: play it before you pay for a render, and reuse the same name next ti
130
130
  `--language` filters by a voice's native language; any voice speaks any supported
131
131
  language.
132
132
 
133
- The voice decides the speech model. The Russian presets `owner_ru_clone` and
134
- `daria_ru_female` and the catalog voices named `ru_*` speak `eleven_v4`; every other
135
- preset and catalog voice speaks `eleven_v3`. A `--voice-id` voice speaks `eleven_v4` when
136
- the script is mostly Cyrillic and `eleven_v3` otherwise. `--tts-model` overrides the
137
- choice: `eleven_flash_v2_5` and `eleven_turbo_v2_5` cost less but misread Russian stress
138
- marks. In a Russian script, mark stress with a capital vowel inside the word: `потОм`.
139
- `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
140
139
  `gemini-3.8-flash-tts` give no pause for a `<break time="…" />` tag: the tag is cut from
141
140
  the text, and the response warns about it.
142
141
 
@@ -154,7 +153,7 @@ ends with the narration, runs at least 25 seconds and may exceed the selection
154
153
  by up to a quarter, never beyond 90 seconds; a video more than 5 seconds longer
155
154
  says so in `warnings[]`. A script is accepted when its estimated length is 21
156
155
  seconds to the selection plus 5, at most 90. The charge follows the delivered duration and never exceeds the quote;
157
- 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).
158
157
  Captions are on; `--no-captions`
159
158
  turns them off. `--style-reference <url>` and `--character-reference <url>` take
160
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.34.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.34.0",
37
- "@clipwright/sdk": "0.34.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"