blitzreels 0.1.21 → 0.1.23

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/README.md CHANGED
@@ -36,7 +36,7 @@ npx blitzreels auth login
36
36
  Local repo development:
37
37
 
38
38
  ```bash
39
- pnpm --filter blitzreels dev auth login --base-url http://localhost:3000/api/v1
39
+ pnpm --filter blitzreels dev auth login --base-url http://localhost:3100/api/v1
40
40
  ```
41
41
 
42
42
  ## Auth
@@ -80,235 +80,18 @@ For generation jobs, use `GET /generation-jobs/{job_id}` through `client.generat
80
80
  An in-progress finalization is protected from concurrent retries; a stale attempt can be reclaimed after five minutes.
81
81
  Use the same generation idempotency key only with the original request.
82
82
 
83
- ## Commands
83
+ ## Choose a workflow
84
84
 
85
- ```bash
86
- blitzreels workspace settings get --json
87
- blitzreels workspace settings update --name "Creator Studio" --protected-words "Brand,Product"
88
-
89
- blitzreels onboarding scan start --website-url "https://example.com" --json
90
- blitzreels onboarding scan get --run-id RUN_ID --json
91
- blitzreels onboarding profile get --json
92
- blitzreels onboarding profile update --brand-name "Creator Studio" --protected-words "Brand,Product"
93
- blitzreels onboarding logo import --profile-id PROFILE_ID --replace-existing false
94
- blitzreels onboarding complete --brand-name "Creator Studio" --platforms tiktok,linkedin --save-workspace-icon true --json
95
-
96
- blitzreels projects list --status active --json
97
- blitzreels projects create --name "Launch short" --aspect-ratio 9:16
98
- blitzreels projects get --project-id PROJECT_ID --json
99
- blitzreels projects rename --project-id PROJECT_ID --name "New title"
100
- blitzreels projects update --project-id PROJECT_ID --description "New description"
101
- blitzreels projects delete --project-id PROJECT_ID --confirm-delete
102
-
103
- blitzreels media list --asset-type video --json
104
- blitzreels media get --asset-id ASSET_ID --json
105
- blitzreels media verify --asset-id ASSET_ID --json
106
- blitzreels media download --asset-id ASSET_ID --output ./source.mp4
107
- blitzreels media delete --asset-id ASSET_ID --confirm-delete \
108
- --reason "Remove duplicate upload" --idempotency-key media-delete:ASSET_ID:v1
109
- blitzreels media delete --search "old upload" --confirm-delete \
110
- --reason "Remove obsolete imports" --idempotency-key media-delete:old-upload:v1 \
111
- --delete-generated-clips true --delete-linked-projects true
112
- blitzreels media upload --file ./video.mp4 --timeout-ms 300000 --auto-transcribe true
113
- blitzreels media import-youtube --url "https://www.youtube.com/watch?v=..."
114
- blitzreels media rename --asset-id ASSET_ID --name "New media name"
115
- blitzreels media update --asset-id ASSET_ID --description "B-roll" --folder-id FOLDER_ID
116
- blitzreels media move --asset-id ASSET_ID --target-folder-id FOLDER_ID
117
- blitzreels media attach --project-id PROJECT_ID --asset-id ASSET_ID --at 0 --duration 4
118
- blitzreels media attach --project-id PROJECT_ID --asset-id ASSET_ID --at 0 --duration 4 \
119
- --placement-intent overlay --volume 0.4
120
- blitzreels media overlay update --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --mute true
121
- blitzreels media attach --project-id PROJECT_ID --asset-id IMAGE_ID --at 6 --duration 1.6 --position-preset center --position-y -230 --width-px 561 --height-px 212 --animation-preset popIn
122
- blitzreels media reframe apply --asset-id ASSET_ID --project-id PROJECT_ID \
123
- --expected-revision 7 \
124
- --replace-timeline-item-id TIMELINE_ITEM_ID \
125
- --aspect-ratio 9:16 --content-type-hint podcast --layout-strategy split \
126
- --idempotency-key reframe:PROJECT_ID:v1
127
- blitzreels media reframe status --asset-id ASSET_ID --json
128
- blitzreels media reframe analyze --asset-id ASSET_ID \
129
- --idempotency-key reframe-analysis:ASSET_ID:v1 --json
130
- blitzreels media reframe get --project-id PROJECT_ID --reframe-id REFRAME_ID --json
131
- blitzreels media reframe source-update --project-id PROJECT_ID \
132
- --reframe-id REFRAME_ID --source-asset-id SOURCE_ASSET_ID \
133
- --source-crop-json '{"x":0,"y":0,"width":0.5,"height":1}' \
134
- --idempotency-key reframe-source:REFRAME_ID:SOURCE_ASSET_ID:v1 --json
135
- blitzreels media folders list --json
136
- blitzreels media folders create --name "B-roll" --icon-type video
137
- blitzreels media folders rename --folder-id FOLDER_ID --name "New folder name"
138
- blitzreels media folders update --folder-id FOLDER_ID --parent-folder-id root
139
- blitzreels media folders delete --folder-id FOLDER_ID --confirm-delete
140
-
141
- blitzreels publishing connections list --json
142
- blitzreels publishing video schedule --video ./launch.mp4 \
143
- --targets instagram:INSTAGRAM_CONNECTION_ID,tiktok:TIKTOK_CONNECTION_ID,facebook:FACEBOOK_CONNECTION_ID \
144
- --caption "Launch day" --scheduled-for 2030-08-31T22:45:00Z \
145
- --tiktok-publish-mode draft
146
- blitzreels publishing video schedule --media-asset-id VIDEO_ASSET_ID \
147
- --targets youtube:YOUTUBE_CONNECTION_ID --title "Launch day" \
148
- --scheduled-for 2030-08-31T22:45:00Z --contains-synthetic-media
149
- blitzreels publishing tiktok schedule --project-id PROJECT_ID --export-id EXPORT_ID \
150
- --connection-id TIKTOK_CONNECTION_ID --scheduled-for 2030-08-31T22:45:00Z \
151
- --privacy-level SELF_ONLY --consent-accepted
152
- blitzreels publishing tiktok schedule --images ./01.jpg,./02.webp,./03.jpg \
153
- --project-name "Ancient facts slideshow" --connection-id TIKTOK_CONNECTION_ID \
154
- --caption "Three facts from the ancient world" --scheduled-for 2030-08-31T22:45:00Z \
155
- --privacy-level SELF_ONLY --photo-cover-index 1 --auto-add-music --consent-accepted
156
- blitzreels publishing tiktok schedule --images ./01.jpg,./02.webp \
157
- --connection-id TIKTOK_CONNECTION_ID --scheduled-for 2030-08-31T22:45:00Z \
158
- --publish-mode draft
159
-
160
- # Uploaded video publishing accepts MP4, MOV, and WebM. Every selected provider
161
- # is validated atomically before scheduling. A target without a connection ID is
162
- # resolved automatically when exactly one active account exists.
163
- # TikTok direct posts require --privacy-level; drafts do not.
164
-
165
- # Upload output includes processing_run_id and accepted follow_up intent.
166
-
167
- blitzreels clips create --asset-id ASSET_ID --output ./clips
168
- blitzreels clips create --asset-id ASSET_ID --logo-asset-id LOGO_ASSET_ID --output ./clips --count 5
169
- blitzreels clips create --asset-id ASSET_ID --layout-mode people_first --content-type-hint podcast
170
- blitzreels clips create --asset-id ASSET_ID --studio-sound --output ./clips
171
- blitzreels clips create --youtube-url "https://www.youtube.com/watch?v=..." --name "MKBHD hero loop"
172
- blitzreels clips get --clip-id CLIP_ID --json
173
- blitzreels clips wait --clip-id CLIP_ID --json
174
- blitzreels clips reselect --clip-id CLIP_ID --start-seconds 52 --end-seconds 64 --idempotency-key reselect:CLIP_ID:v1
175
- blitzreels clips reselect --clip-id CLIP_ID --suggestion-id SUGGESTION_ID
176
- blitzreels clips reselect --clip-id CLIP_ID --suggestion-id SUGGESTION_ID \
177
- --layout-mode people_first --content-type-hint podcast --caption-style-id cinematic-film \
178
- --caption-word-reveal-animation fade --caption-max-lines 2 \
179
- --caption-words-per-line 8 --caption-page-combine-ms 3000
180
- blitzreels clips reject --clip-id CLIP_ID --reason "Main speaker cropped out" --idempotency-key review:CLIP_ID:v1
181
- blitzreels clips repair --clip-id CLIP_ID
182
- blitzreels clips export --clip-id CLIP_ID
183
- blitzreels clips attach-export --asset-id ASSET_ID --project-id PROJECT_ID \
184
- --export-id EXPORT_ID --confirm-visual-qa --idempotency-key attach:EXPORT_ID:v1
185
- blitzreels clips promote-export --clip-id CLIP_ID --export-id EXPORT_ID \
186
- --confirm-visual-qa --idempotency-key promote:CLIP_ID:EXPORT_ID:v1
187
- blitzreels clip-batches recover --batch-id BATCH_ID --target-count 10 \
188
- --idempotency-key clip-recovery:BATCH_ID:v1
189
- blitzreels clip-batches get --batch-id BATCH_ID --json
190
- blitzreels clip-batches wait --batch-id BATCH_ID --json
191
- blitzreels clip-share-pages publish --asset-id ASSET_ID \
192
- --allow-downloads true --idempotency-key clip-share:ASSET_ID:publish:v1
193
- blitzreels clip-share-pages set-clip-visibility --asset-id ASSET_ID --clip-id CLIP_ID \
194
- --visibility hidden --idempotency-key clip-share:CLIP_ID:hidden:v1
195
- blitzreels clip-share-pages get --asset-id ASSET_ID --json
196
-
197
- blitzreels recording-sets create --name "Product demo" --idempotency-key recording-set:create:v1 --json
198
- blitzreels recording-sets list --status ready --json
199
- blitzreels recording-sets tracks attach --recording-set-id SET_ID --asset-id CAMERA_ASSET_ID \
200
- --role camera --primary --idempotency-key recording-set:camera:v1
201
- blitzreels recording-sets tracks attach --recording-set-id SET_ID --asset-id SCREEN_ASSET_ID \
202
- --role screen --idempotency-key recording-set:screen:v1
203
- blitzreels recording-sets finalize --recording-set-id SET_ID --idempotency-key recording-set:finalize:v1
204
- blitzreels recording-sets get --recording-set-id SET_ID --json
205
- blitzreels recording-sets delete --recording-set-id EMPTY_SET_ID --confirm-delete \
206
- --idempotency-key recording-set:delete:v1
207
- blitzreels recording-sets clips create --recording-set-id SET_ID --max-clip-count 5 \
208
- --max-duration 60 \
209
- --layout-mode prefer_focus --content-type-hint podcast --caption-theme-id hormozi \
210
- --studio-sound \
211
- --idempotency-key recording-set:clips:v1
212
-
213
- # `clips get|list --json` exposes `layout.segments` with time ranges, panel assets,
214
- # crops, canvas geometry, and split-only caption placement.
215
-
216
- blitzreels characters create --name "Virgile" \
217
- --reference-asset-ids CHARACTER_SHEET_ASSET_ID \
218
- --primary-reference-asset-id CHARACTER_SHEET_ASSET_ID \
219
- --idempotency-key character:virgile:v1
220
- blitzreels characters list --json
221
- blitzreels faceless plans create --project-id PROJECT_ID --script-file ./script.txt \
222
- --character-ids CHARACTER_ID --video-model seedance-2.0-ref2v \
223
- --idempotency-key faceless:PROJECT_ID:v1
224
-
225
- blitzreels project inspect --project-id PROJECT_ID --json
226
- blitzreels project timeline --project-id PROJECT_ID --json
227
- blitzreels project snapshot --project-id PROJECT_ID --at 00:03
228
- blitzreels project snapshots --project-id PROJECT_ID --at 00:01,00:03
229
-
230
- blitzreels timeline transform --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --position-x 0 --position-y -230 --width-px 561 --height-px 212 --keep-aspect-ratio true
231
- blitzreels timeline move --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --at 00:06 --layer-index 2
232
- blitzreels timeline delete --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --auto-pack false
233
-
234
- blitzreels effects zoom add --project-id PROJECT_ID --at 9.8 --duration 1.8 --scale-start 1 --scale-end 1.1 --easing easeInOut
235
- blitzreels effects zoom update --project-id PROJECT_ID --timeline-item-id EFFECT_TIMELINE_ITEM_ID --scale-end 1.1 --easing easeInOut --duration 1.8
236
- blitzreels effects mask add --project-id PROJECT_ID --settings-json '{"shape":"rounded","size":{"width":0.8,"height":0.8}}'
237
- blitzreels effects colorgrade update --project-id PROJECT_ID --timeline-item-id EFFECT_TIMELINE_ITEM_ID --settings-json '{"brightness":1.1,"vignetteEnabled":true}'
238
-
239
- blitzreels text add --project-id PROJECT_ID --text "Hook" --at 0 --duration 4
240
- blitzreels text add --project-id PROJECT_ID --text "SERVEURS MCP" --at 24.33 --duration 2.8 --font-family Pacifico --font-size 82 --color "#17FFA6" --background-color "rgba(3,7,18,0.82)" --top "24%"
241
- blitzreels text list --project-id PROJECT_ID --json
242
- blitzreels text update --project-id PROJECT_ID --content-item-id CONTENT_ITEM_ID --text "New hook" --font-family Inter --font-size 64 --color "#FFFFFF"
243
- blitzreels text remove --project-id PROJECT_ID --content-item-id CONTENT_ITEM_ID
244
-
245
- blitzreels audio search --query "ambient riser" --license cc0 --json
246
- blitzreels audio import --provider openverse --external-id AUDIO_ID --project-id PROJECT_ID --at 0 --duration 12 --volume 0.03
247
- blitzreels audio add --project-id PROJECT_ID --asset-id ASSET_ID --at 0 --volume 0.03
248
-
249
- blitzreels captions words list --project-id PROJECT_ID --match-text "Supabase" --json
250
- blitzreels captions words text --project-id PROJECT_ID --word-id WORD_ID --text "Supabase"
251
- blitzreels captions words update --project-id PROJECT_ID --word-id WORD_ID --text "Supabase"
252
- blitzreels captions words batch-text --project-id PROJECT_ID --updates-json '[{"word_id":"WORD_ID","new_text":"Supabase"}]'
253
- blitzreels captions words batch-text --project-id PROJECT_ID --updates-file caption-updates.json
254
- blitzreels captions words style --project-id PROJECT_ID --word-id WORD_ID --font-family Pacifico --color "#17FFA6" --scale 1.45
255
- blitzreels captions words style --project-id PROJECT_ID --all --style-file caption-word-style.json
256
- blitzreels captions words emphasis --project-id PROJECT_ID --match-text "MCP" --emphasis true
257
- blitzreels captions words delete --project-id PROJECT_ID --word-id WORD_ID
258
- blitzreels captions words merge --project-id PROJECT_ID --word-ids WORD_ID_1,WORD_ID_2 --text "serveurs MCP"
259
- blitzreels captions words split --project-id PROJECT_ID --word-id WORD_ID --words "serveurs,MCP"
260
-
261
- blitzreels silence plan --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --json
262
- blitzreels silence plan --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID \
263
- --strategy audio --json > silence-plan.json
264
- blitzreels silence apply --project-id PROJECT_ID --confirm-preview \
265
- --plan-json "$(cat silence-plan.json)"
266
- blitzreels silence apply --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --confirm-preview
267
-
268
- blitzreels mistakes plan --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --json
269
- blitzreels mistakes apply --project-id PROJECT_ID --timeline-item-id TIMELINE_ITEM_ID --confirm-preview
270
-
271
- blitzreels captions looks list --json
272
- blitzreels captions look set --project-id PROJECT_ID --look-id editor-premium-lime
273
- blitzreels captions style update --project-id PROJECT_ID --look-id paper-karaoke --text-stroke-enabled false
274
-
275
- blitzreels exports start --project-id PROJECT_ID --cover-frame-seconds 1
276
- blitzreels exports wait --export-id EXPORT_ID
277
- blitzreels exports download --export-id EXPORT_ID --output ./short.mp4
278
-
279
- blitzreels formats run --format video-model-benchmark \
280
- --prompt "A red figure walks toward a circular platform under a deep blue night sky" \
281
- --left-model wan-2.1 --right-model krea-wan-14b-t2v --confirm-cost
282
- blitzreels credits pricing --kind video --json
283
- blitzreels generate videos --options --json
284
- blitzreels jobs get --job-id JOB_ID --json
285
-
286
- `generate videos --options` is the live model catalog. `seedance-2.5` I2V
287
- `input_notes` warn that BytePlus rejects human-face stills on `source_image`
288
- and image references. Character-sheet I2V uses `seedance-2.0-ref2v`. Killing
289
- the local process does not cancel the remote job; `jobs get` is the status
290
- surface (SDK `generation.cancel` exists, no `jobs cancel` CLI yet).
291
-
292
- blitzreels api docs
293
- blitzreels api spec
294
- ```
295
-
296
- Use `--json` for script and AI-agent workflows.
297
- Quoted `--prompt` values preserve line breaks.
298
- Use `credits pricing --kind KIND --json` to load current AI Studio models,
299
- limits, and credit rates.
300
- Use `--fields id,name` with `--json` to trim large responses.
301
- Export status responses include `thumbnail_url`, `thumbnail.frame_seconds`, `thumbnail.rationale`, and first-pass `platform_metadata` suggestions for YouTube, TikTok, and Instagram.
302
- Onboarding scan responses include `run_id`, `status`, optional `profile`, and `next_actions`; poll the run before completing onboarding. Mutating onboarding commands support `--dry-run`.
85
+ Use `blitzreels <command> --help` or the one-command contract below for exact flags.
86
+ The [generated CLI guide](https://blitzreels.com/cli.md) owns the full command catalog.
303
87
 
304
- Media deletion is a batch operation even for one asset.
305
- It requires a reason and stable idempotency key, returns impact and partial-failure receipts, and only cascades when requested.
88
+ - Inspect/edit: `projects`, `project`, `timeline`, `captions`, `text`, `audio`, `silence` and `mistakes`.
89
+ - Sources and finished clips: `media`, `clips`, `clip-batches` and `exports`.
90
+ - Generation and continuity: `generate`, `characters` and `story-kits`.
91
+ - Workspace setup: `workspace settings` and `onboarding`.
306
92
 
307
- `media wait --json` reports `skipped_for` when a requested stage does not apply to the asset.
308
- `project timeline --json` returns normalized top-level `items` in snake_case while retaining legacy `data.items`.
309
-
310
- Caption style receipts include `verified`, `effective_settings`, `warnings`, and `cleared_word_overrides`.
311
- Overlay attach and update accept `volume`; `--mute true` sets it to zero.
93
+ The stored API key selects one workspace; `auth whoami` identifies it.
94
+ Workspace membership listing and account-level switching are not implied by `auth login`.
312
95
 
313
96
  ## Machine-Readable Contract
314
97
 
@@ -365,25 +148,7 @@ Set `BLITZREELS_NO_UPDATE_NOTIFIER=1` to disable passive update notices.
365
148
  The CLI validates commands and flags before making API calls. Faulty commands
366
149
  print the closest known command or flag, then the command-specific usage.
367
150
 
368
- ```bash
369
- blitzreels caption words list --project-id PROJECT_ID
370
- # Unknown command: caption words list
371
- # Did you mean?
372
- # blitzreels captions words list --project-id ID ...
373
- ```
374
-
375
- With `--json`, errors are structured on stderr:
376
-
377
- ```json
378
- {
379
- "error": {
380
- "code": "unknown_flag",
381
- "message": "Unknown flag --poject-id for `projects get`.",
382
- "suggestions": ["--project-id"],
383
- "usage": "blitzreels projects get --project-id ID [--json]"
384
- }
385
- }
386
- ```
151
+ With `--json`, errors are structured on stderr with their code, message, suggestions and usage.
387
152
 
388
153
  Plan-limit failures use `upgrade_required`, exit code `3`, and include an
389
154
  `upgrade_url`. Human output prints the same billing link after the error.
@@ -394,8 +159,6 @@ auth.
394
159
  ## Source, releases, and license
395
160
 
396
161
  The npm package is publicly installable, but its canonical source is private and proprietary.
397
- Workspace `0.1.18` adds the current generation model catalog and prompt controls.
398
- It includes the `0.1.12` reusable character commands and faceless-generation character selection.
399
162
 
400
163
  Admin recovery and other internal operator commands are not part of the public CLI artifact.
401
164
 
@@ -403,45 +166,23 @@ Published behavior depends on the installed version; inspect it with `blitzreels
403
166
  See `LICENSE` for the package terms.
404
167
 
405
168
 
406
- ### Generation resolution
169
+ ## Generation inputs
407
170
 
408
- REST uses `resolution`; SDK and MCP use `resolution`; CLI uses `--resolution`.
409
- Omit it (or send null through REST/MCP) to retain the model default.
410
- `generate images --options --json` and `generate videos --options --json` report
411
- `parameters.resolution` with `supported`, `values`, `default`, and an unavailable reason.
412
- `parameters.quality` reports that a separate quality tier is unavailable.
413
- Unsupported explicit settings return validation errors before generation is queued.
171
+ Discover current models, resolution values/costs and reference limits with:
414
172
 
415
- ```sh
416
- blitzreels generate images --prompt "A futuristic loft" --model fal-ai/nano-banana-pro --resolution 4k
417
- blitzreels generate videos --prompt "A slow camera pan" --model minimax-h3-max-t2v --resolution 768p
418
- blitzreels exports start --project-id PROJECT_ID --expected-revision 0 --resolution 4k
173
+ ```bash
174
+ blitzreels generate images --options --json
175
+ blitzreels generate videos --options --json
176
+ blitzreels generate voiceovers --options --json
419
177
  ```
420
178
 
421
- Nano Banana Pro supports `1k`, `2k`, `4k`; Nano Banana 2 also supports `0.5k`.
422
- Image options include `credit_cost_by_resolution`; 4k costs twice the model's base credits.
423
- Seedance 2.5 supports `480p`/`720p`, H3 Max supports `480p`/`768p`, and Kling O3 4K has fixed `4k` output.
424
- Other video models retain configured provider output and reject explicit resolution selection.
425
- Project exports support `720p`, `1080p`, and `4k`; clip exports remain `720p`/`1080p`.
426
- Export resolution changes the output canvas, not the native detail of generated sources.
427
-
428
- Generation references use model-specific limits from `generate images --options` and `generate videos --options`.
429
- Nano Banana 2 and Pro accept 14 images; Seedance 2.0 ref2v accepts 9 images, 3 videos, and 3 audio files
430
- (12 total); Seedance 2.5 accepts 30 images, 10 videos, and 10 audio files (50 total) through BytePlus.
431
- A source image counts as the first reference in reference mode. Reference order is preserved; missing,
432
- wrong-type, duplicate, or excess assets fail instead of being dropped.
433
-
434
- Use `--reference-video-asset-id` and `--reference-audio-asset-id` with processed library assets
435
- (repeatable or comma-separated). Video references guide motion/camera; audio guides speech, sound, or rhythm.
436
- Seedance 2.0 audio references require an image or video. Seedance 2.5 permits audio-only references.
437
- Use `--end-frame FILE` or `--end-frame-asset-id ID` alongside a source image for supported first/last-frame models.
438
- End frames cannot be mixed with reference arrays. Reference images do not lock the exact opening frame.
439
-
440
- Omit `--generate-audio` for model behavior; use `--generate-audio` or `--no-generate-audio` for an explicit request.
441
- Unsupported audio toggles, seeds, negative prompts, and provider overrides fail with model-specific errors.
442
- `--enhance-prompt` uses BlitzReels model grammar, input roles, bounded image previews, duration, and audio intent.
443
- Video/audio contents are not inspected by the enhancer. Voice IDs come from `generate voiceovers --options`,
444
- which includes the provider, names, and previews. Custom voice IDs are not supported by this catalog API.
179
+ - Omitted `--resolution` uses the model default; unsupported explicit settings fail validation.
180
+ - Reference order is preserved. Missing, duplicate, wrong-type or excess assets are rejected.
181
+ - First/last-frame input requires a source image and cannot mix an end frame with reference arrays.
182
+ - Omit `--generate-audio` for model behavior; use its positive/negative form for an explicit choice.
183
+ - `--enhance-prompt` uses model grammar and bounded image previews, not video/audio content inspection.
184
+ - Choose voice IDs from the options catalog, including its provider and preview fields.
185
+ - Export resolution controls output canvas size; it does not add native detail to generated media.
445
186
 
446
187
  ## Recovery contracts
447
188
 
@@ -1 +1 @@
1
- {"version":3,"file":"command-registry.d.ts","sourceRoot":"","sources":["../src/command-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AA+BzD,eAAO,MAAM,aAAa,EAAE,WAAW,EA8BtC,CAAC"}
1
+ {"version":3,"file":"command-registry.d.ts","sourceRoot":"","sources":["../src/command-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAgCzD,eAAO,MAAM,aAAa,EAAE,WAAW,EA+BtC,CAAC"}
@@ -21,6 +21,7 @@ import { PROJECT_READ_COMMAND_SPECS } from "./commands/project-read.js";
21
21
  import { PROJECTS_COMMAND_SPECS } from "./commands/projects.js";
22
22
  import { PUBLISHING_COMMAND_SPECS } from "./commands/publishing.js";
23
23
  import { RECORDING_SET_COMMAND_SPECS } from "./commands/recording-sets.js";
24
+ import { SERIES_COMMAND_SPECS } from "./commands/series.js";
24
25
  import { STOCK_LIBRARY_COMMAND_SPECS } from "./commands/stock-library.js";
25
26
  import { STORY_KIT_COMMAND_SPECS } from "./commands/story-kits.js";
26
27
  import { SYSTEM_COMMAND_SPECS } from "./commands/system.js";
@@ -50,6 +51,7 @@ export const COMMAND_SPECS = [
50
51
  ...EXPORTS_COMMAND_SPECS,
51
52
  ...FACELESS_COMMAND_SPECS,
52
53
  ...STORY_KIT_COMMAND_SPECS,
54
+ ...SERIES_COMMAND_SPECS,
53
55
  ...FORMATS_COMMAND_SPECS,
54
56
  ...GENERATION_COMMAND_SPECS,
55
57
  ...JOBS_COMMAND_SPECS,
@@ -1 +1 @@
1
- {"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../src/command-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,GAAG,oBAAoB;IACvB,GAAG,kBAAkB;IACrB,GAAG,wBAAwB;IAC3B,GAAG,uBAAuB;IAC1B,GAAG,sBAAsB;IACzB,GAAG,2BAA2B;IAC9B,GAAG,yBAAyB;IAC5B,GAAG,2BAA2B;IAC9B,GAAG,mBAAmB;IACtB,GAAG,oBAAoB;IACvB,GAAG,0BAA0B;IAC7B,GAAG,sBAAsB;IACzB,GAAG,0BAA0B;IAC7B,GAAG,mBAAmB;IACtB,GAAG,qBAAqB;IACxB,GAAG,2BAA2B;IAC9B,GAAG,8BAA8B;IACjC,GAAG,sBAAsB;IACzB,GAAG,uBAAuB;IAC1B,GAAG,qBAAqB;IACxB,GAAG,sBAAsB;IACzB,GAAG,uBAAuB;IAC1B,GAAG,qBAAqB;IACxB,GAAG,wBAAwB;IAC3B,GAAG,kBAAkB;IACrB,GAAG,uBAAuB;IAC1B,GAAG,qBAAqB;IACxB,GAAG,iBAAiB;IACpB,GAAG,wBAAwB;CAC5B,CAAC"}
1
+ {"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../src/command-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,GAAG,oBAAoB;IACvB,GAAG,kBAAkB;IACrB,GAAG,wBAAwB;IAC3B,GAAG,uBAAuB;IAC1B,GAAG,sBAAsB;IACzB,GAAG,2BAA2B;IAC9B,GAAG,yBAAyB;IAC5B,GAAG,2BAA2B;IAC9B,GAAG,mBAAmB;IACtB,GAAG,oBAAoB;IACvB,GAAG,0BAA0B;IAC7B,GAAG,sBAAsB;IACzB,GAAG,0BAA0B;IAC7B,GAAG,mBAAmB;IACtB,GAAG,qBAAqB;IACxB,GAAG,2BAA2B;IAC9B,GAAG,8BAA8B;IACjC,GAAG,sBAAsB;IACzB,GAAG,uBAAuB;IAC1B,GAAG,qBAAqB;IACxB,GAAG,sBAAsB;IACzB,GAAG,uBAAuB;IAC1B,GAAG,oBAAoB;IACvB,GAAG,qBAAqB;IACxB,GAAG,wBAAwB;IAC3B,GAAG,kBAAkB;IACrB,GAAG,uBAAuB;IAC1B,GAAG,qBAAqB;IACxB,GAAG,iBAAiB;IACpB,GAAG,wBAAwB;CAC5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"clips.d.ts","sourceRoot":"","sources":["../../src/commands/clips.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clips.d.ts","sourceRoot":"","sources":["../../src/commands/clips.ts"],"names":[],"mappings":"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"}
@@ -206,6 +206,7 @@ export const CLIPS_COMMAND_SPECS = [
206
206
  description: "Maximum complete clip duration in seconds (1–180); no mid-sentence truncation.",
207
207
  },
208
208
  { name: "caption-theme-id" },
209
+ { name: "series-id" },
209
210
  {
210
211
  name: "studio-sound",
211
212
  type: "boolean",
@@ -1065,6 +1066,7 @@ function buildClipsDryRun({ context, spec, helpers, }) {
1065
1066
  min_duration_seconds: options.minDurationSeconds,
1066
1067
  max_duration_seconds: options.maxDurationSeconds,
1067
1068
  caption_theme_id: options.captionThemeId,
1069
+ series_id: options.seriesId,
1068
1070
  studio_sound: options.studioSound,
1069
1071
  create_flow_options: buildClipWorkflowCreateFlowOptions({ options }),
1070
1072
  branding_options: buildClipWorkflowBrandingOptions({
@@ -1241,6 +1243,9 @@ function parseClipWorkflowOptions({ flags, helpers, }) {
1241
1243
  throw new Error("--no-captions is not supported. Clip batches use captions like /dashboard/clip.");
1242
1244
  }
1243
1245
  return {
1246
+ seriesId: parseNullableWorkflowString({
1247
+ value: helpers.getStringFlag({ flags, name: "series-id" }),
1248
+ }),
1244
1249
  source: assetId !== null
1245
1250
  ? {
1246
1251
  sourceType: "asset",
@@ -1252,7 +1257,9 @@ function parseClipWorkflowOptions({ flags, helpers, }) {
1252
1257
  assetId: null,
1253
1258
  youtubeUrl: youtubeUrl ?? "",
1254
1259
  },
1255
- logoAssetId: helpers.getStringFlag({ flags, name: "logo-asset-id" }) ?? null,
1260
+ logoAssetId: parseNullableWorkflowString({
1261
+ value: helpers.getStringFlag({ flags, name: "logo-asset-id" }),
1262
+ }),
1256
1263
  outputDir: helpers.getStringFlag({ flags, name: "output" }) ?? null,
1257
1264
  count,
1258
1265
  minDurationSeconds,
@@ -1287,7 +1294,9 @@ function normalizeClipPresetId({ value }) {
1287
1294
  throw new Error("--clip-preset-id must be default, formation-clipperz, high-retention, or demo-focus.");
1288
1295
  }
1289
1296
  function parseNullableWorkflowString({ value, }) {
1290
- if (value === undefined || value === "null") {
1297
+ if (value === undefined)
1298
+ return undefined;
1299
+ if (value === "null") {
1291
1300
  return null;
1292
1301
  }
1293
1302
  const trimmed = value.trim();
@@ -1310,6 +1319,7 @@ async function createClipWorkflow({ context, helpers, }) {
1310
1319
  minDurationSeconds: options.minDurationSeconds,
1311
1320
  maxDurationSeconds: options.maxDurationSeconds,
1312
1321
  captionThemeId: options.captionThemeId,
1322
+ seriesId: options.seriesId,
1313
1323
  studioSound: options.studioSound,
1314
1324
  createFlowOptions: buildClipWorkflowCreateFlowOptions({ options }),
1315
1325
  brandingOptions: buildClipWorkflowBrandingOptions({
@@ -1323,7 +1333,7 @@ async function createClipWorkflow({ context, helpers, }) {
1323
1333
  batch_id: created.batch.batch_id,
1324
1334
  status: created.batch.status,
1325
1335
  preset: options.clipPresetId,
1326
- caption_theme_id: options.captionThemeId,
1336
+ caption_theme_id: options.captionThemeId ?? null,
1327
1337
  output_dir: null,
1328
1338
  summary: {
1329
1339
  requested: options.count,
@@ -1371,7 +1381,7 @@ async function createClipWorkflow({ context, helpers, }) {
1371
1381
  batch_id: readyBatch.batch.batch_id,
1372
1382
  status: readyBatch.batch.status,
1373
1383
  preset: options.clipPresetId,
1374
- caption_theme_id: options.captionThemeId,
1384
+ caption_theme_id: options.captionThemeId ?? null,
1375
1385
  output_dir: outputDir,
1376
1386
  summary: {
1377
1387
  requested: options.count,
@@ -1402,6 +1412,8 @@ async function waitForClipBatchEnvelope({ context, helpers, batchId, }) {
1402
1412
  }
1403
1413
  }
1404
1414
  function buildClipWorkflowBrandingOptions({ logoAssetId, }) {
1415
+ if (logoAssetId === undefined)
1416
+ return {};
1405
1417
  return {
1406
1418
  logoOverlayEnabled: logoAssetId !== null,
1407
1419
  logoMediaAssetId: logoAssetId,