blitzreels 0.1.22 → 0.1.24
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 +28 -283
- package/dist/command-registry.d.ts.map +1 -1
- package/dist/command-registry.js +2 -0
- package/dist/command-registry.js.map +1 -1
- package/dist/commands/clips.d.ts.map +1 -1
- package/dist/commands/clips.js +26 -13
- package/dist/commands/clips.js.map +1 -1
- package/dist/commands/faceless.d.ts.map +1 -1
- package/dist/commands/faceless.js +2 -0
- package/dist/commands/faceless.js.map +1 -1
- package/dist/commands/generation.d.ts.map +1 -1
- package/dist/commands/generation.js +2 -0
- package/dist/commands/generation.js.map +1 -1
- package/dist/commands/projects.d.ts.map +1 -1
- package/dist/commands/projects.js +6 -0
- package/dist/commands/projects.js.map +1 -1
- package/dist/commands/series.d.ts +41 -0
- package/dist/commands/series.d.ts.map +1 -0
- package/dist/commands/series.js +202 -0
- package/dist/commands/series.js.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
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:
|
|
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
|
-
##
|
|
83
|
+
## Choose a workflow
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
blitzreels
|
|
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
|
-
|
|
305
|
-
|
|
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
|
-
|
|
308
|
-
|
|
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
|
|
|
@@ -341,6 +124,10 @@ blitzreels exports start --project-id PROJECT_ID --idempotency-key export:PROJEC
|
|
|
341
124
|
|
|
342
125
|
Reuse a key only with identical inputs. A changed request returns a conflict.
|
|
343
126
|
|
|
127
|
+
`clips create` selects the source's qualifying clips automatically when `--count` is omitted.
|
|
128
|
+
`--count 1..30` caps created clips; suggestion discovery still scans the source independently of that export cap.
|
|
129
|
+
`--output` downloads every rendered result in automatic mode.
|
|
130
|
+
|
|
344
131
|
`--dry-run` is available on mutating commands and prints the API request that
|
|
345
132
|
would be made without making the write request. Destructive dry-runs still require
|
|
346
133
|
the same explicit confirmation flags as real destructive commands.
|
|
@@ -365,25 +152,7 @@ Set `BLITZREELS_NO_UPDATE_NOTIFIER=1` to disable passive update notices.
|
|
|
365
152
|
The CLI validates commands and flags before making API calls. Faulty commands
|
|
366
153
|
print the closest known command or flag, then the command-specific usage.
|
|
367
154
|
|
|
368
|
-
|
|
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
|
-
```
|
|
155
|
+
With `--json`, errors are structured on stderr with their code, message, suggestions and usage.
|
|
387
156
|
|
|
388
157
|
Plan-limit failures use `upgrade_required`, exit code `3`, and include an
|
|
389
158
|
`upgrade_url`. Human output prints the same billing link after the error.
|
|
@@ -394,8 +163,6 @@ auth.
|
|
|
394
163
|
## Source, releases, and license
|
|
395
164
|
|
|
396
165
|
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
166
|
|
|
400
167
|
Admin recovery and other internal operator commands are not part of the public CLI artifact.
|
|
401
168
|
|
|
@@ -403,45 +170,23 @@ Published behavior depends on the installed version; inspect it with `blitzreels
|
|
|
403
170
|
See `LICENSE` for the package terms.
|
|
404
171
|
|
|
405
172
|
|
|
406
|
-
|
|
173
|
+
## Generation inputs
|
|
407
174
|
|
|
408
|
-
|
|
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.
|
|
175
|
+
Discover current models, resolution values/costs and reference limits with:
|
|
414
176
|
|
|
415
|
-
```
|
|
416
|
-
blitzreels generate images --
|
|
417
|
-
blitzreels generate videos --
|
|
418
|
-
blitzreels
|
|
177
|
+
```bash
|
|
178
|
+
blitzreels generate images --options --json
|
|
179
|
+
blitzreels generate videos --options --json
|
|
180
|
+
blitzreels generate voiceovers --options --json
|
|
419
181
|
```
|
|
420
182
|
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
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.
|
|
183
|
+
- Omitted `--resolution` uses the model default; unsupported explicit settings fail validation.
|
|
184
|
+
- Reference order is preserved. Missing, duplicate, wrong-type or excess assets are rejected.
|
|
185
|
+
- First/last-frame input requires a source image and cannot mix an end frame with reference arrays.
|
|
186
|
+
- Omit `--generate-audio` for model behavior; use its positive/negative form for an explicit choice.
|
|
187
|
+
- `--enhance-prompt` uses model grammar and bounded image previews, not video/audio content inspection.
|
|
188
|
+
- Choose voice IDs from the options catalog, including its provider and preview fields.
|
|
189
|
+
- Export resolution controls output canvas size; it does not add native detail to generated media.
|
|
445
190
|
|
|
446
191
|
## Recovery contracts
|
|
447
192
|
|
|
@@ -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;
|
|
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"}
|
package/dist/command-registry.js
CHANGED
|
@@ -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":"AAEA,OAAO,EAIL,KAAK,YAAY,EAGjB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EAEtB,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,eAAO,MAAM,mBAAmB,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"clips.d.ts","sourceRoot":"","sources":["../../src/commands/clips.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/clips.js
CHANGED
|
@@ -178,8 +178,7 @@ export const CLIPS_COMMAND_SPECS = [
|
|
|
178
178
|
{
|
|
179
179
|
name: "count",
|
|
180
180
|
type: "number",
|
|
181
|
-
|
|
182
|
-
description: "Maximum clips created by the batch.",
|
|
181
|
+
description: "Maximum clips created, 1–30. Omit for automatic selection.",
|
|
183
182
|
},
|
|
184
183
|
{
|
|
185
184
|
name: "preset",
|
|
@@ -206,6 +205,7 @@ export const CLIPS_COMMAND_SPECS = [
|
|
|
206
205
|
description: "Maximum complete clip duration in seconds (1–180); no mid-sentence truncation.",
|
|
207
206
|
},
|
|
208
207
|
{ name: "caption-theme-id" },
|
|
208
|
+
{ name: "series-id" },
|
|
209
209
|
{
|
|
210
210
|
name: "studio-sound",
|
|
211
211
|
type: "boolean",
|
|
@@ -1065,6 +1065,7 @@ function buildClipsDryRun({ context, spec, helpers, }) {
|
|
|
1065
1065
|
min_duration_seconds: options.minDurationSeconds,
|
|
1066
1066
|
max_duration_seconds: options.maxDurationSeconds,
|
|
1067
1067
|
caption_theme_id: options.captionThemeId,
|
|
1068
|
+
series_id: options.seriesId,
|
|
1068
1069
|
studio_sound: options.studioSound,
|
|
1069
1070
|
create_flow_options: buildClipWorkflowCreateFlowOptions({ options }),
|
|
1070
1071
|
branding_options: buildClipWorkflowBrandingOptions({
|
|
@@ -1084,7 +1085,9 @@ function buildClipsDryRun({ context, spec, helpers, }) {
|
|
|
1084
1085
|
notes: [
|
|
1085
1086
|
options.outputDir === null
|
|
1086
1087
|
? "Queues clips through the web app batch pipeline."
|
|
1087
|
-
:
|
|
1088
|
+
: options.count === null
|
|
1089
|
+
? "Downloads every rendered clip from the web app batch pipeline."
|
|
1090
|
+
: `Downloads up to ${options.count} rendered clips from the web app batch pipeline.`,
|
|
1088
1091
|
"Caption themes, AI edit, exports, and batch status follow /dashboard/clip defaults.",
|
|
1089
1092
|
],
|
|
1090
1093
|
});
|
|
@@ -1225,9 +1228,9 @@ function parseClipWorkflowOptions({ flags, helpers, }) {
|
|
|
1225
1228
|
maxDurationSeconds !== null &&
|
|
1226
1229
|
minDurationSeconds > maxDurationSeconds)
|
|
1227
1230
|
throw new Error("--min-duration must not exceed --max-duration.");
|
|
1228
|
-
const count = helpers.getNumberFlag({ flags, name: "count" }) ??
|
|
1229
|
-
if (!Number.isInteger(count) || count < 1 || count >
|
|
1230
|
-
throw new Error("--count must be an integer between 1 and
|
|
1231
|
+
const count = helpers.getNumberFlag({ flags, name: "count" }) ?? null;
|
|
1232
|
+
if (count !== null && (!Number.isInteger(count) || count < 1 || count > 30)) {
|
|
1233
|
+
throw new Error("--count must be an integer between 1 and 30.");
|
|
1231
1234
|
}
|
|
1232
1235
|
const assetId = helpers.getStringFlag({ flags, name: "asset-id" }) ?? null;
|
|
1233
1236
|
const youtubeUrl = helpers.getStringFlag({ flags, name: "youtube-url" }) ?? null;
|
|
@@ -1241,6 +1244,9 @@ function parseClipWorkflowOptions({ flags, helpers, }) {
|
|
|
1241
1244
|
throw new Error("--no-captions is not supported. Clip batches use captions like /dashboard/clip.");
|
|
1242
1245
|
}
|
|
1243
1246
|
return {
|
|
1247
|
+
seriesId: parseNullableWorkflowString({
|
|
1248
|
+
value: helpers.getStringFlag({ flags, name: "series-id" }),
|
|
1249
|
+
}),
|
|
1244
1250
|
source: assetId !== null
|
|
1245
1251
|
? {
|
|
1246
1252
|
sourceType: "asset",
|
|
@@ -1252,7 +1258,9 @@ function parseClipWorkflowOptions({ flags, helpers, }) {
|
|
|
1252
1258
|
assetId: null,
|
|
1253
1259
|
youtubeUrl: youtubeUrl ?? "",
|
|
1254
1260
|
},
|
|
1255
|
-
logoAssetId:
|
|
1261
|
+
logoAssetId: parseNullableWorkflowString({
|
|
1262
|
+
value: helpers.getStringFlag({ flags, name: "logo-asset-id" }),
|
|
1263
|
+
}),
|
|
1256
1264
|
outputDir: helpers.getStringFlag({ flags, name: "output" }) ?? null,
|
|
1257
1265
|
count,
|
|
1258
1266
|
minDurationSeconds,
|
|
@@ -1287,7 +1295,9 @@ function normalizeClipPresetId({ value }) {
|
|
|
1287
1295
|
throw new Error("--clip-preset-id must be default, formation-clipperz, high-retention, or demo-focus.");
|
|
1288
1296
|
}
|
|
1289
1297
|
function parseNullableWorkflowString({ value, }) {
|
|
1290
|
-
if (value === undefined
|
|
1298
|
+
if (value === undefined)
|
|
1299
|
+
return undefined;
|
|
1300
|
+
if (value === "null") {
|
|
1291
1301
|
return null;
|
|
1292
1302
|
}
|
|
1293
1303
|
const trimmed = value.trim();
|
|
@@ -1310,6 +1320,7 @@ async function createClipWorkflow({ context, helpers, }) {
|
|
|
1310
1320
|
minDurationSeconds: options.minDurationSeconds,
|
|
1311
1321
|
maxDurationSeconds: options.maxDurationSeconds,
|
|
1312
1322
|
captionThemeId: options.captionThemeId,
|
|
1323
|
+
seriesId: options.seriesId,
|
|
1313
1324
|
studioSound: options.studioSound,
|
|
1314
1325
|
createFlowOptions: buildClipWorkflowCreateFlowOptions({ options }),
|
|
1315
1326
|
brandingOptions: buildClipWorkflowBrandingOptions({
|
|
@@ -1323,10 +1334,10 @@ async function createClipWorkflow({ context, helpers, }) {
|
|
|
1323
1334
|
batch_id: created.batch.batch_id,
|
|
1324
1335
|
status: created.batch.status,
|
|
1325
1336
|
preset: options.clipPresetId,
|
|
1326
|
-
caption_theme_id: options.captionThemeId,
|
|
1337
|
+
caption_theme_id: options.captionThemeId ?? null,
|
|
1327
1338
|
output_dir: null,
|
|
1328
1339
|
summary: {
|
|
1329
|
-
requested: options.count,
|
|
1340
|
+
requested: options.count ?? created.batch.estimated_clip_count,
|
|
1330
1341
|
completed: created.batch.rendered_count,
|
|
1331
1342
|
},
|
|
1332
1343
|
clips: [],
|
|
@@ -1341,7 +1352,7 @@ async function createClipWorkflow({ context, helpers, }) {
|
|
|
1341
1352
|
});
|
|
1342
1353
|
const renderedClips = readyBatch.batch.clips
|
|
1343
1354
|
.filter((clip) => clip.status === "rendered" && clip.download_url !== null)
|
|
1344
|
-
.slice(0, options.count);
|
|
1355
|
+
.slice(0, options.count ?? readyBatch.batch.clips.length);
|
|
1345
1356
|
if (renderedClips.length === 0) {
|
|
1346
1357
|
throw new Error("Clip batch completed without rendered clips to download.");
|
|
1347
1358
|
}
|
|
@@ -1371,10 +1382,10 @@ async function createClipWorkflow({ context, helpers, }) {
|
|
|
1371
1382
|
batch_id: readyBatch.batch.batch_id,
|
|
1372
1383
|
status: readyBatch.batch.status,
|
|
1373
1384
|
preset: options.clipPresetId,
|
|
1374
|
-
caption_theme_id: options.captionThemeId,
|
|
1385
|
+
caption_theme_id: options.captionThemeId ?? null,
|
|
1375
1386
|
output_dir: outputDir,
|
|
1376
1387
|
summary: {
|
|
1377
|
-
requested: options.count,
|
|
1388
|
+
requested: options.count ?? readyBatch.batch.estimated_clip_count,
|
|
1378
1389
|
completed: receipts.length,
|
|
1379
1390
|
},
|
|
1380
1391
|
clips: receipts,
|
|
@@ -1402,6 +1413,8 @@ async function waitForClipBatchEnvelope({ context, helpers, batchId, }) {
|
|
|
1402
1413
|
}
|
|
1403
1414
|
}
|
|
1404
1415
|
function buildClipWorkflowBrandingOptions({ logoAssetId, }) {
|
|
1416
|
+
if (logoAssetId === undefined)
|
|
1417
|
+
return {};
|
|
1405
1418
|
return {
|
|
1406
1419
|
logoOverlayEnabled: logoAssetId !== null,
|
|
1407
1420
|
logoMediaAssetId: logoAssetId,
|