blitzreels 0.1.4 → 0.1.6

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 (214) hide show
  1. package/README.md +55 -25
  2. package/dist/agent-context.d.ts +68 -0
  3. package/dist/agent-context.d.ts.map +1 -0
  4. package/dist/agent-context.js +214 -0
  5. package/dist/agent-context.js.map +1 -0
  6. package/dist/cli-command-routing.d.ts +27 -0
  7. package/dist/cli-command-routing.d.ts.map +1 -0
  8. package/dist/cli-command-routing.js +236 -0
  9. package/dist/cli-command-routing.js.map +1 -0
  10. package/dist/cli-errors.d.ts +31 -0
  11. package/dist/cli-errors.d.ts.map +1 -0
  12. package/dist/cli-errors.js +27 -0
  13. package/dist/cli-errors.js.map +1 -0
  14. package/dist/cli-flag-reader.d.ts +61 -0
  15. package/dist/cli-flag-reader.d.ts.map +1 -0
  16. package/dist/cli-flag-reader.js +207 -0
  17. package/dist/cli-flag-reader.js.map +1 -0
  18. package/dist/cli-http.d.ts +6 -0
  19. package/dist/cli-http.d.ts.map +1 -0
  20. package/dist/cli-http.js +42 -0
  21. package/dist/cli-http.js.map +1 -0
  22. package/dist/cli-presenter.d.ts +24 -0
  23. package/dist/cli-presenter.d.ts.map +1 -0
  24. package/dist/cli-presenter.js +161 -0
  25. package/dist/cli-presenter.js.map +1 -0
  26. package/dist/cli-runtime.d.ts +1 -2
  27. package/dist/cli-runtime.d.ts.map +1 -1
  28. package/dist/cli-runtime.js +2 -2
  29. package/dist/cli-runtime.js.map +1 -1
  30. package/dist/cli-timing.d.ts +4 -0
  31. package/dist/cli-timing.d.ts.map +1 -0
  32. package/dist/cli-timing.js +6 -0
  33. package/dist/cli-timing.js.map +1 -0
  34. package/dist/cli-types.d.ts +52 -0
  35. package/dist/cli-types.d.ts.map +1 -1
  36. package/dist/cli-value-parsers.d.ts +76 -0
  37. package/dist/cli-value-parsers.d.ts.map +1 -0
  38. package/dist/cli-value-parsers.js +271 -0
  39. package/dist/cli-value-parsers.js.map +1 -0
  40. package/dist/command-metadata.d.ts +11 -5
  41. package/dist/command-metadata.d.ts.map +1 -1
  42. package/dist/command-metadata.js +64 -9
  43. package/dist/command-metadata.js.map +1 -1
  44. package/dist/command-registry.d.ts +1 -1
  45. package/dist/command-registry.d.ts.map +1 -1
  46. package/dist/command-registry.js +44 -853
  47. package/dist/command-registry.js.map +1 -1
  48. package/dist/commands/ai-edit.d.ts +45 -0
  49. package/dist/commands/ai-edit.d.ts.map +1 -0
  50. package/dist/commands/ai-edit.js +370 -0
  51. package/dist/commands/ai-edit.js.map +1 -0
  52. package/dist/commands/api.d.ts +20 -0
  53. package/dist/commands/api.d.ts.map +1 -0
  54. package/dist/commands/api.js +56 -0
  55. package/dist/commands/api.js.map +1 -0
  56. package/dist/commands/audio.d.ts +65 -0
  57. package/dist/commands/audio.d.ts.map +1 -0
  58. package/dist/commands/audio.js +264 -0
  59. package/dist/commands/audio.js.map +1 -0
  60. package/dist/commands/auth-runtime.d.ts +24 -0
  61. package/dist/commands/auth-runtime.d.ts.map +1 -0
  62. package/dist/commands/auth-runtime.js +169 -0
  63. package/dist/commands/auth-runtime.js.map +1 -0
  64. package/dist/commands/auth.d.ts +26 -0
  65. package/dist/commands/auth.d.ts.map +1 -0
  66. package/dist/commands/auth.js +59 -0
  67. package/dist/commands/auth.js.map +1 -0
  68. package/dist/commands/caption-command-types.d.ts +66 -0
  69. package/dist/commands/caption-command-types.d.ts.map +1 -0
  70. package/dist/commands/caption-command-types.js +2 -0
  71. package/dist/commands/caption-command-types.js.map +1 -0
  72. package/dist/commands/caption-dry-run.d.ts +66 -0
  73. package/dist/commands/caption-dry-run.d.ts.map +1 -0
  74. package/dist/commands/caption-dry-run.js +225 -0
  75. package/dist/commands/caption-dry-run.js.map +1 -0
  76. package/dist/commands/caption-overrides.d.ts +43 -0
  77. package/dist/commands/caption-overrides.d.ts.map +1 -0
  78. package/dist/commands/caption-overrides.js +245 -0
  79. package/dist/commands/caption-overrides.js.map +1 -0
  80. package/dist/commands/caption-selection.d.ts +72 -0
  81. package/dist/commands/caption-selection.d.ts.map +1 -0
  82. package/dist/commands/caption-selection.js +89 -0
  83. package/dist/commands/caption-selection.js.map +1 -0
  84. package/dist/commands/caption-style-commands.d.ts +3 -0
  85. package/dist/commands/caption-style-commands.d.ts.map +1 -0
  86. package/dist/commands/caption-style-commands.js +240 -0
  87. package/dist/commands/caption-style-commands.js.map +1 -0
  88. package/dist/commands/caption-style-flags.d.ts +30 -0
  89. package/dist/commands/caption-style-flags.d.ts.map +1 -0
  90. package/dist/commands/caption-style-flags.js +257 -0
  91. package/dist/commands/caption-style-flags.js.map +1 -0
  92. package/dist/commands/caption-text-updates.d.ts +21 -0
  93. package/dist/commands/caption-text-updates.d.ts.map +1 -0
  94. package/dist/commands/caption-text-updates.js +23 -0
  95. package/dist/commands/caption-text-updates.js.map +1 -0
  96. package/dist/commands/captions-specs.d.ts +3 -0
  97. package/dist/commands/captions-specs.d.ts.map +1 -0
  98. package/dist/commands/captions-specs.js +241 -0
  99. package/dist/commands/captions-specs.js.map +1 -0
  100. package/dist/commands/captions.d.ts +7 -0
  101. package/dist/commands/captions.d.ts.map +1 -0
  102. package/dist/commands/captions.js +203 -0
  103. package/dist/commands/captions.js.map +1 -0
  104. package/dist/commands/clip-runtime.d.ts +67 -0
  105. package/dist/commands/clip-runtime.d.ts.map +1 -0
  106. package/dist/commands/clip-runtime.js +194 -0
  107. package/dist/commands/clip-runtime.js.map +1 -0
  108. package/dist/commands/clips.d.ts +66 -0
  109. package/dist/commands/clips.d.ts.map +1 -0
  110. package/dist/commands/clips.js +625 -0
  111. package/dist/commands/clips.js.map +1 -0
  112. package/dist/commands/command-operation.d.ts +26 -0
  113. package/dist/commands/command-operation.d.ts.map +1 -0
  114. package/dist/commands/command-operation.js +18 -0
  115. package/dist/commands/command-operation.js.map +1 -0
  116. package/dist/commands/editing-workflow-runtime.d.ts +42 -0
  117. package/dist/commands/editing-workflow-runtime.d.ts.map +1 -0
  118. package/dist/commands/editing-workflow-runtime.js +128 -0
  119. package/dist/commands/editing-workflow-runtime.js.map +1 -0
  120. package/dist/commands/editing-workflows.d.ts +70 -0
  121. package/dist/commands/editing-workflows.d.ts.map +1 -0
  122. package/dist/commands/editing-workflows.js +252 -0
  123. package/dist/commands/editing-workflows.js.map +1 -0
  124. package/dist/commands/effects-runtime.d.ts +64 -0
  125. package/dist/commands/effects-runtime.d.ts.map +1 -0
  126. package/dist/commands/effects-runtime.js +100 -0
  127. package/dist/commands/effects-runtime.js.map +1 -0
  128. package/dist/commands/effects.d.ts +69 -0
  129. package/dist/commands/effects.d.ts.map +1 -0
  130. package/dist/commands/effects.js +281 -0
  131. package/dist/commands/effects.js.map +1 -0
  132. package/dist/commands/exports.d.ts +16 -5
  133. package/dist/commands/exports.d.ts.map +1 -1
  134. package/dist/commands/exports.js +119 -2
  135. package/dist/commands/exports.js.map +1 -1
  136. package/dist/commands/faceless.d.ts +44 -0
  137. package/dist/commands/faceless.d.ts.map +1 -0
  138. package/dist/commands/faceless.js +587 -0
  139. package/dist/commands/faceless.js.map +1 -0
  140. package/dist/commands/formats.d.ts +41 -0
  141. package/dist/commands/formats.d.ts.map +1 -0
  142. package/dist/commands/formats.js +140 -0
  143. package/dist/commands/formats.js.map +1 -0
  144. package/dist/commands/jobs.d.ts +20 -0
  145. package/dist/commands/jobs.d.ts.map +1 -0
  146. package/dist/commands/jobs.js +40 -0
  147. package/dist/commands/jobs.js.map +1 -0
  148. package/dist/commands/media-assets.d.ts +100 -0
  149. package/dist/commands/media-assets.d.ts.map +1 -0
  150. package/dist/commands/media-assets.js +644 -0
  151. package/dist/commands/media-assets.js.map +1 -0
  152. package/dist/commands/media-overlays.d.ts +52 -0
  153. package/dist/commands/media-overlays.d.ts.map +1 -0
  154. package/dist/commands/media-overlays.js +314 -0
  155. package/dist/commands/media-overlays.js.map +1 -0
  156. package/dist/commands/media-runtime.d.ts +61 -0
  157. package/dist/commands/media-runtime.d.ts.map +1 -0
  158. package/dist/commands/media-runtime.js +239 -0
  159. package/dist/commands/media-runtime.js.map +1 -0
  160. package/dist/commands/onboarding.d.ts +51 -0
  161. package/dist/commands/onboarding.d.ts.map +1 -0
  162. package/dist/commands/onboarding.js +452 -0
  163. package/dist/commands/onboarding.js.map +1 -0
  164. package/dist/commands/project-read.d.ts +40 -0
  165. package/dist/commands/project-read.d.ts.map +1 -0
  166. package/dist/commands/project-read.js +184 -0
  167. package/dist/commands/project-read.js.map +1 -0
  168. package/dist/commands/projects.d.ts +16 -5
  169. package/dist/commands/projects.d.ts.map +1 -1
  170. package/dist/commands/projects.js +139 -2
  171. package/dist/commands/projects.js.map +1 -1
  172. package/dist/commands/stock-library.d.ts +72 -0
  173. package/dist/commands/stock-library.d.ts.map +1 -0
  174. package/dist/commands/stock-library.js +175 -0
  175. package/dist/commands/stock-library.js.map +1 -0
  176. package/dist/commands/system.d.ts +16 -0
  177. package/dist/commands/system.d.ts.map +1 -0
  178. package/dist/commands/system.js +147 -0
  179. package/dist/commands/system.js.map +1 -0
  180. package/dist/commands/text-overlay-spec.d.ts +24 -0
  181. package/dist/commands/text-overlay-spec.d.ts.map +1 -0
  182. package/dist/commands/text-overlay-spec.js +228 -0
  183. package/dist/commands/text-overlay-spec.js.map +1 -0
  184. package/dist/commands/text-overlays.d.ts +67 -0
  185. package/dist/commands/text-overlays.d.ts.map +1 -0
  186. package/dist/commands/text-overlays.js +272 -0
  187. package/dist/commands/text-overlays.js.map +1 -0
  188. package/dist/commands/timeline-runtime.d.ts +105 -0
  189. package/dist/commands/timeline-runtime.d.ts.map +1 -0
  190. package/dist/commands/timeline-runtime.js +508 -0
  191. package/dist/commands/timeline-runtime.js.map +1 -0
  192. package/dist/commands/timeline.d.ts +120 -0
  193. package/dist/commands/timeline.d.ts.map +1 -0
  194. package/dist/commands/timeline.js +621 -0
  195. package/dist/commands/timeline.js.map +1 -0
  196. package/dist/commands/workspace-defaults.d.ts +12 -0
  197. package/dist/commands/workspace-defaults.d.ts.map +1 -0
  198. package/dist/commands/workspace-defaults.js +115 -0
  199. package/dist/commands/workspace-defaults.js.map +1 -0
  200. package/dist/commands/workspace.d.ts +50 -0
  201. package/dist/commands/workspace.d.ts.map +1 -0
  202. package/dist/commands/workspace.js +116 -0
  203. package/dist/commands/workspace.js.map +1 -0
  204. package/dist/index.js +485 -5035
  205. package/dist/index.js.map +1 -1
  206. package/dist/preview-first-edit.d.ts +9 -1
  207. package/dist/preview-first-edit.d.ts.map +1 -1
  208. package/dist/preview-first-edit.js +16 -4
  209. package/dist/preview-first-edit.js.map +1 -1
  210. package/dist/update-notifier.d.ts +43 -0
  211. package/dist/update-notifier.d.ts.map +1 -0
  212. package/dist/update-notifier.js +265 -0
  213. package/dist/update-notifier.js.map +1 -0
  214. package/package.json +2 -2
@@ -0,0 +1,625 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { join, resolve } from "node:path";
3
+ import { commandSpec } from "../command-metadata.js";
4
+ export const CLIPS_COMMAND_SPECS = [
5
+ commandSpec({
6
+ command: ["clips", "list"],
7
+ usage: "blitzreels clips list [--asset-id ID] [--project-id ID] [--status ready|exported|failed|needs_repair] [--limit 20] [--offset 0] [--json]",
8
+ flags: [
9
+ "asset-id",
10
+ "project-id",
11
+ {
12
+ name: "status",
13
+ enum: [
14
+ "preparing_source",
15
+ "awaiting_suggestions",
16
+ "selecting_clip",
17
+ "assembling",
18
+ "qa_running",
19
+ "needs_reselection",
20
+ "needs_repair",
21
+ "ready",
22
+ "exporting",
23
+ "exported",
24
+ "failed",
25
+ ],
26
+ },
27
+ "limit",
28
+ "offset",
29
+ ],
30
+ description: "List managed clip runs with bounded output.",
31
+ }),
32
+ commandSpec({
33
+ command: ["clips", "create"],
34
+ usage: "blitzreels clips create [--asset-id ID|--youtube-url URL] [--output ./clips] [--count 5] [--idempotency-key KEY]",
35
+ flags: [
36
+ { name: "asset-id", enum: [] },
37
+ "youtube-url",
38
+ {
39
+ name: "output",
40
+ description: "Directory for exported MP4 downloads.",
41
+ },
42
+ "logo-asset-id",
43
+ {
44
+ name: "count",
45
+ type: "number",
46
+ default: 5,
47
+ description: "Maximum rendered clips to download from the batch.",
48
+ },
49
+ {
50
+ name: "preset",
51
+ enum: ["default", "high-retention", "formation-clipperz", "demo-focus"],
52
+ default: "default",
53
+ description: "Override clip preset.",
54
+ hidden: true,
55
+ },
56
+ {
57
+ name: "clip-preset-id",
58
+ enum: ["default", "high-retention", "formation-clipperz", "demo-focus"],
59
+ default: "default",
60
+ description: "Override clip preset id.",
61
+ hidden: false,
62
+ },
63
+ { name: "caption-theme-id" },
64
+ {
65
+ name: "idempotency-key",
66
+ description: "Stable retry key; reuse only with identical inputs.",
67
+ },
68
+ { name: "interval-ms", type: "number", hidden: true },
69
+ { name: "timeout-ms", type: "number", hidden: true },
70
+ ],
71
+ description: "Create clips from a workspace asset or YouTube URL; with --output it exports 1080p MP4 files.",
72
+ examples: [
73
+ "blitzreels clips create --asset-id ID --output ./clips",
74
+ "blitzreels clips create --asset-id ID --logo-asset-id LOGO_ID --output ./clips --count 5",
75
+ "blitzreels clips create --youtube-url https://youtube.com/watch?v=...",
76
+ ],
77
+ }),
78
+ commandSpec({
79
+ command: ["clips", "get"],
80
+ usage: "blitzreels clips get --clip-id ID [--json]",
81
+ flags: ["clip-id"],
82
+ description: "Fetch current clip status and next action.",
83
+ }),
84
+ commandSpec({
85
+ command: ["clips", "wait"],
86
+ usage: "blitzreels clips wait --clip-id ID [--interval-ms 3000] [--timeout-ms 600000] [--json]",
87
+ flags: ["clip-id", "interval-ms", "timeout-ms"],
88
+ description: "Poll a clip until it needs action, exports, or fails.",
89
+ }),
90
+ commandSpec({
91
+ command: ["clips", "reselect"],
92
+ usage: "blitzreels clips reselect --clip-id ID [--suggestion-id ID | --start-seconds 52 --end-seconds 64]",
93
+ flags: [
94
+ "clip-id",
95
+ "suggestion-id",
96
+ "start-seconds",
97
+ "end-seconds",
98
+ {
99
+ name: "selection-mode",
100
+ enum: ["auto_best", "suggestion", "time_range"],
101
+ hidden: true,
102
+ },
103
+ { name: "min-duration", hidden: true },
104
+ { name: "max-duration", hidden: true },
105
+ ],
106
+ description: "Choose a different suggestion or time range for a clip.",
107
+ mutates: true,
108
+ }),
109
+ commandSpec({
110
+ command: ["clips", "repair"],
111
+ usage: "blitzreels clips repair --clip-id ID",
112
+ flags: [
113
+ "clip-id",
114
+ {
115
+ name: "repair-mode",
116
+ enum: [
117
+ "auto",
118
+ "prefer_split",
119
+ "prefer_focus",
120
+ "prefer_tutorial",
121
+ "prefer_demo",
122
+ "move_captions_off_faces",
123
+ ],
124
+ default: "auto",
125
+ hidden: true,
126
+ },
127
+ ],
128
+ description: "Run a repair pass on an assembled clip.",
129
+ mutates: true,
130
+ }),
131
+ commandSpec({
132
+ command: ["clips", "export"],
133
+ usage: "blitzreels clips export --clip-id ID",
134
+ flags: [
135
+ "clip-id",
136
+ {
137
+ name: "resolution",
138
+ enum: ["720p", "1080p"],
139
+ default: "1080p",
140
+ hidden: true,
141
+ },
142
+ { name: "format", enum: ["mp4", "mov"], default: "mp4", hidden: true },
143
+ ],
144
+ description: "Export a managed clip that has passed QA.",
145
+ mutates: true,
146
+ }),
147
+ ];
148
+ export function createClipsCommandOperation({ helpers, }) {
149
+ return {
150
+ name: "clips",
151
+ matches: ({ command }) => command[0] === "clips",
152
+ handle: ({ context }) => handleClipsCommand({ context, helpers }),
153
+ buildDryRun: ({ context, spec }) => buildClipsDryRun({ context, spec, helpers }),
154
+ };
155
+ }
156
+ async function handleClipsCommand({ context, helpers, }) {
157
+ const action = context.args.command[1];
158
+ const flags = context.args.flags;
159
+ if (action === "create") {
160
+ const result = await createClipWorkflow({ context, helpers });
161
+ helpers.printResult({
162
+ json: context.json,
163
+ value: result,
164
+ human: result.output_dir === null
165
+ ? [
166
+ `Clip batch created: ${result.batch_id}`,
167
+ `Status: ${result.status}`,
168
+ ]
169
+ : [
170
+ `Clips created: ${result.summary.completed}/${result.summary.requested}`,
171
+ `Output: ${result.output_dir}`,
172
+ ],
173
+ });
174
+ return true;
175
+ }
176
+ if (action === "list") {
177
+ const result = await context.client.clips.list({
178
+ assetId: helpers.getStringFlag({ flags, name: "asset-id" }),
179
+ projectId: helpers.getStringFlag({ flags, name: "project-id" }),
180
+ status: parseClipStatus({
181
+ value: helpers.getStringFlag({ flags, name: "status" }),
182
+ }),
183
+ limit: helpers.getNumberFlag({ flags, name: "limit" }),
184
+ offset: helpers.getNumberFlag({ flags, name: "offset" }),
185
+ });
186
+ helpers.printResult({
187
+ json: context.json,
188
+ value: result,
189
+ human: [
190
+ `Returned ${result.bounds.returned}/${result.bounds.total} clip(s).`,
191
+ ...result.clips.map((clip) => formatClipListLine({ clip })),
192
+ ],
193
+ });
194
+ return true;
195
+ }
196
+ if (action === "get") {
197
+ const result = await context.client.clips.get({
198
+ clipId: helpers.requireStringFlag({ flags, name: "clip-id" }),
199
+ });
200
+ helpers.printClipResult({ context, result });
201
+ return true;
202
+ }
203
+ if (action === "wait") {
204
+ const result = await helpers.waitForClip({ context });
205
+ helpers.printClipResult({ context, result });
206
+ return true;
207
+ }
208
+ if (action === "reselect") {
209
+ const clipId = helpers.requireStringFlag({ flags, name: "clip-id" });
210
+ const selection = helpers.buildClipSelection({ flags });
211
+ const target = helpers.buildClipTarget({
212
+ flags,
213
+ requireMaxDuration: false,
214
+ });
215
+ const selectionMode = helpers.getStringFlag({
216
+ flags,
217
+ name: "selection-mode",
218
+ });
219
+ const result = await context.client.clips.reselect({
220
+ clipId,
221
+ ...(selectionMode === undefined
222
+ ? {
223
+ suggestionId: selection.suggestionId,
224
+ startSeconds: selection.startSeconds,
225
+ endSeconds: selection.endSeconds,
226
+ target,
227
+ }
228
+ : {
229
+ selection,
230
+ target,
231
+ }),
232
+ });
233
+ helpers.printClipResult({ context, result });
234
+ return true;
235
+ }
236
+ if (action === "repair") {
237
+ const repairMode = helpers.getStringFlag({ flags, name: "repair-mode" });
238
+ const result = await context.client.clips.repair({
239
+ clipId: helpers.requireStringFlag({ flags, name: "clip-id" }),
240
+ ...(repairMode === undefined
241
+ ? {}
242
+ : {
243
+ repairMode: helpers.parseClipRepairMode({ value: repairMode }),
244
+ }),
245
+ });
246
+ helpers.printClipResult({ context, result });
247
+ return true;
248
+ }
249
+ if (action === "export") {
250
+ const result = await context.client.clips.export({
251
+ clipId: helpers.requireStringFlag({ flags, name: "clip-id" }),
252
+ resolution: helpers.parseClipExportResolution({
253
+ value: helpers.getStringFlag({ flags, name: "resolution" }),
254
+ }),
255
+ format: helpers.parseClipExportFormat({
256
+ value: helpers.getStringFlag({ flags, name: "format" }),
257
+ }),
258
+ allowBlockingQaBypass: false,
259
+ });
260
+ helpers.printClipResult({ context, result });
261
+ return true;
262
+ }
263
+ return false;
264
+ }
265
+ function parseClipStatus({ value, }) {
266
+ if (value === undefined) {
267
+ return undefined;
268
+ }
269
+ if (value === "preparing_source" ||
270
+ value === "awaiting_suggestions" ||
271
+ value === "selecting_clip" ||
272
+ value === "assembling" ||
273
+ value === "qa_running" ||
274
+ value === "needs_reselection" ||
275
+ value === "needs_repair" ||
276
+ value === "ready" ||
277
+ value === "exporting" ||
278
+ value === "exported" ||
279
+ value === "failed") {
280
+ return value;
281
+ }
282
+ throw new Error(`Unsupported clip status: ${value}`);
283
+ }
284
+ function formatClipListLine({ clip }) {
285
+ const clipId = String(clip.clip_id ?? "");
286
+ const status = String(clip.status ?? "");
287
+ const nextAction = String(clip.next_action ?? "");
288
+ const projectId = clip.project_id === null ? "-" : String(clip.project_id);
289
+ const exportRecord = clip.export !== null &&
290
+ typeof clip.export === "object" &&
291
+ !Array.isArray(clip.export)
292
+ ? clip.export
293
+ : {};
294
+ const exportId = exportRecord.export_id === null || exportRecord.export_id === undefined
295
+ ? "-"
296
+ : String(exportRecord.export_id);
297
+ return `${clipId} ${status} next=${nextAction} project=${projectId} export=${exportId}`;
298
+ }
299
+ function buildClipsDryRun({ context, spec, helpers, }) {
300
+ const action = context.args.command[1];
301
+ const flags = context.args.flags;
302
+ if (action === "list") {
303
+ return helpers.dryRunRequest({
304
+ spec,
305
+ method: "GET",
306
+ path: "/clips",
307
+ query: {
308
+ asset_id: helpers.getStringFlag({ flags, name: "asset-id" }),
309
+ project_id: helpers.getStringFlag({ flags, name: "project-id" }),
310
+ status: helpers.getStringFlag({ flags, name: "status" }),
311
+ limit: helpers.getNumberFlag({ flags, name: "limit" }),
312
+ offset: helpers.getNumberFlag({ flags, name: "offset" }),
313
+ },
314
+ body: undefined,
315
+ });
316
+ }
317
+ if (action === "create") {
318
+ const options = parseClipWorkflowOptions({ flags, helpers });
319
+ return helpers.dryRunRequest({
320
+ spec,
321
+ method: "POST",
322
+ path: "/clips",
323
+ body: {
324
+ source: {
325
+ source_type: options.source.sourceType,
326
+ asset_id: options.source.assetId,
327
+ youtube_url: options.source.youtubeUrl,
328
+ quality: null,
329
+ },
330
+ clip_preset_id: options.clipPresetId,
331
+ caption_theme_id: options.captionThemeId,
332
+ create_flow_options: {},
333
+ branding_options: buildClipWorkflowBrandingOptions({
334
+ logoAssetId: options.logoAssetId,
335
+ }),
336
+ },
337
+ followUpRequests: options.outputDir === null
338
+ ? []
339
+ : [
340
+ {
341
+ reason: "Poll the batch until rendered clips have download URLs.",
342
+ method: "GET",
343
+ path: "/clip-batches/{batch_id}",
344
+ body: undefined,
345
+ },
346
+ ],
347
+ notes: [
348
+ options.outputDir === null
349
+ ? "Queues clips through the web app batch pipeline."
350
+ : `Downloads up to ${options.count} rendered clips from the web app batch pipeline.`,
351
+ "Caption themes, AI edit, exports, and batch status follow /dashboard/clip defaults.",
352
+ ],
353
+ });
354
+ }
355
+ if (action === "reselect") {
356
+ const target = helpers.buildClipTarget({
357
+ flags,
358
+ requireMaxDuration: false,
359
+ });
360
+ const selection = helpers.buildClipSelection({ flags });
361
+ const selectionMode = helpers.getStringFlag({
362
+ flags,
363
+ name: "selection-mode",
364
+ });
365
+ return helpers.dryRunRequest({
366
+ spec,
367
+ method: "POST",
368
+ path: `/clips/${encodeURIComponent(helpers.requireStringFlag({ flags, name: "clip-id" }))}/reselect`,
369
+ body: selectionMode === undefined
370
+ ? {
371
+ ...(selection.suggestionId === null
372
+ ? {}
373
+ : { suggestion_id: selection.suggestionId }),
374
+ ...(selection.startSeconds === null
375
+ ? {}
376
+ : { start_seconds: selection.startSeconds }),
377
+ ...(selection.endSeconds === null
378
+ ? {}
379
+ : { end_seconds: selection.endSeconds }),
380
+ ...(target === null
381
+ ? {}
382
+ : {
383
+ target: {
384
+ min_duration_seconds: target.minDurationSeconds,
385
+ max_duration_seconds: target.maxDurationSeconds,
386
+ },
387
+ }),
388
+ }
389
+ : {
390
+ selection: toApiClipSelection({ selection }),
391
+ target: target === null
392
+ ? null
393
+ : {
394
+ min_duration_seconds: target.minDurationSeconds,
395
+ max_duration_seconds: target.maxDurationSeconds,
396
+ },
397
+ },
398
+ });
399
+ }
400
+ if (action === "repair") {
401
+ const repairMode = helpers.getStringFlag({ flags, name: "repair-mode" });
402
+ return helpers.dryRunRequest({
403
+ spec,
404
+ method: "POST",
405
+ path: `/clips/${encodeURIComponent(helpers.requireStringFlag({ flags, name: "clip-id" }))}/repair`,
406
+ body: repairMode === undefined
407
+ ? {}
408
+ : {
409
+ repair_mode: helpers.parseClipRepairMode({ value: repairMode }),
410
+ },
411
+ });
412
+ }
413
+ if (action === "export") {
414
+ return helpers.dryRunRequest({
415
+ spec,
416
+ method: "POST",
417
+ path: `/clips/${encodeURIComponent(helpers.requireStringFlag({ flags, name: "clip-id" }))}/export`,
418
+ body: {
419
+ resolution: helpers.parseClipExportResolution({
420
+ value: helpers.getStringFlag({ flags, name: "resolution" }),
421
+ }),
422
+ format: helpers.parseClipExportFormat({
423
+ value: helpers.getStringFlag({ flags, name: "format" }),
424
+ }),
425
+ allow_blocking_qa_bypass: false,
426
+ },
427
+ });
428
+ }
429
+ return undefined;
430
+ }
431
+ function parseClipWorkflowOptions({ flags, helpers, }) {
432
+ const count = helpers.getNumberFlag({ flags, name: "count" }) ?? 5;
433
+ if (!Number.isInteger(count) || count < 1 || count > 10) {
434
+ throw new Error("--count must be an integer between 1 and 10.");
435
+ }
436
+ const assetId = helpers.getStringFlag({ flags, name: "asset-id" }) ?? null;
437
+ const youtubeUrl = helpers.getStringFlag({ flags, name: "youtube-url" }) ?? null;
438
+ if (assetId === null && youtubeUrl === null) {
439
+ throw new Error("Provide --asset-id or --youtube-url.");
440
+ }
441
+ if (assetId !== null && youtubeUrl !== null) {
442
+ throw new Error("Use only one of --asset-id or --youtube-url.");
443
+ }
444
+ if (helpers.getOptionalBooleanFlag({ flags, name: "no-captions" }) === true) {
445
+ throw new Error("--no-captions is not supported. Clip batches use captions like /dashboard/clip.");
446
+ }
447
+ return {
448
+ source: assetId !== null
449
+ ? {
450
+ sourceType: "asset",
451
+ assetId,
452
+ youtubeUrl: null,
453
+ }
454
+ : {
455
+ sourceType: "youtube",
456
+ assetId: null,
457
+ youtubeUrl: youtubeUrl ?? "",
458
+ },
459
+ logoAssetId: helpers.getStringFlag({ flags, name: "logo-asset-id" }) ?? null,
460
+ outputDir: helpers.getStringFlag({ flags, name: "output" }) ?? null,
461
+ count,
462
+ clipPresetId: normalizeClipPresetId({
463
+ value: helpers.getStringFlag({ flags, name: "clip-preset-id" }) ??
464
+ helpers.getStringFlag({ flags, name: "preset" }) ??
465
+ "default",
466
+ }),
467
+ captionThemeId: parseNullableWorkflowString({
468
+ value: helpers.getStringFlag({ flags, name: "caption-theme-id" }),
469
+ }),
470
+ idempotencyKey: helpers.getStringFlag({ flags, name: "idempotency-key" }) ?? null,
471
+ };
472
+ }
473
+ function normalizeClipPresetId({ value }) {
474
+ if (value === "high-retention") {
475
+ return "formation-clipperz";
476
+ }
477
+ if (value === "default" ||
478
+ value === "formation-clipperz" ||
479
+ value === "demo-focus") {
480
+ return value;
481
+ }
482
+ throw new Error("--clip-preset-id must be default, formation-clipperz, high-retention, or demo-focus.");
483
+ }
484
+ function parseNullableWorkflowString({ value, }) {
485
+ if (value === undefined || value === "null") {
486
+ return null;
487
+ }
488
+ const trimmed = value.trim();
489
+ return trimmed.length > 0 ? trimmed : null;
490
+ }
491
+ async function createClipWorkflow({ context, helpers, }) {
492
+ const options = parseClipWorkflowOptions({
493
+ flags: context.args.flags,
494
+ helpers,
495
+ });
496
+ const created = await context.client.clips.create({
497
+ source: {
498
+ sourceType: options.source.sourceType,
499
+ assetId: options.source.assetId,
500
+ youtubeUrl: options.source.youtubeUrl,
501
+ quality: null,
502
+ },
503
+ clipPresetId: options.clipPresetId,
504
+ captionThemeId: options.captionThemeId,
505
+ createFlowOptions: {},
506
+ brandingOptions: buildClipWorkflowBrandingOptions({
507
+ logoAssetId: options.logoAssetId,
508
+ }),
509
+ idempotencyKey: options.idempotencyKey ?? undefined,
510
+ });
511
+ if (options.outputDir === null) {
512
+ return {
513
+ operation: "clips.create",
514
+ batch_id: created.batch.batch_id,
515
+ status: created.batch.status,
516
+ preset: options.clipPresetId,
517
+ caption_theme_id: options.captionThemeId,
518
+ output_dir: null,
519
+ summary: {
520
+ requested: options.count,
521
+ completed: created.batch.rendered_count,
522
+ },
523
+ clips: [],
524
+ };
525
+ }
526
+ const outputDir = resolve(options.outputDir);
527
+ await mkdir(outputDir, { recursive: true });
528
+ const readyBatch = await waitForClipBatchEnvelope({
529
+ context,
530
+ helpers,
531
+ batchId: created.batch.batch_id,
532
+ });
533
+ const renderedClips = readyBatch.batch.clips
534
+ .filter((clip) => clip.status === "rendered" && clip.download_url !== null)
535
+ .slice(0, options.count);
536
+ if (renderedClips.length === 0) {
537
+ throw new Error("Clip batch completed without rendered clips to download.");
538
+ }
539
+ const receipts = [];
540
+ for (let index = 0; index < renderedClips.length; index++) {
541
+ const clip = renderedClips[index];
542
+ if (clip === undefined || clip.download_url === null) {
543
+ continue;
544
+ }
545
+ const bytes = await downloadSignedClip({
546
+ url: clip.download_url,
547
+ });
548
+ const outputPath = join(outputDir, `${String(index + 1).padStart(2, "0")}-${slugifyFileName({
549
+ value: clip.title,
550
+ })}.mp4`);
551
+ await writeFile(outputPath, Buffer.from(bytes));
552
+ receipts.push({
553
+ clip_id: clip.clip_id,
554
+ project_id: clip.project_id,
555
+ suggestion_id: clip.suggestion_id,
556
+ export_id: clip.export_id,
557
+ output_path: outputPath,
558
+ });
559
+ }
560
+ return {
561
+ operation: "clips.create",
562
+ batch_id: readyBatch.batch.batch_id,
563
+ status: readyBatch.batch.status,
564
+ preset: options.clipPresetId,
565
+ caption_theme_id: options.captionThemeId,
566
+ output_dir: outputDir,
567
+ summary: {
568
+ requested: options.count,
569
+ completed: receipts.length,
570
+ },
571
+ clips: receipts,
572
+ };
573
+ }
574
+ async function waitForClipBatchEnvelope({ context, helpers, batchId, }) {
575
+ const timeoutMs = helpers.getNumberFlag({ flags: context.args.flags, name: "timeout-ms" }) ??
576
+ 1_800_000;
577
+ const intervalMs = helpers.getNumberFlag({ flags: context.args.flags, name: "interval-ms" }) ??
578
+ 5_000;
579
+ const startedAt = Date.now();
580
+ while (true) {
581
+ const batch = await context.client.clipBatches.get({ batchId });
582
+ if (batch.batch.status === "completed" ||
583
+ batch.batch.status === "completed_with_errors" ||
584
+ batch.batch.status === "failed") {
585
+ return batch;
586
+ }
587
+ if (Date.now() - startedAt > timeoutMs) {
588
+ throw new Error(`Timed out waiting for clip batch ${batchId}.`);
589
+ }
590
+ await new Promise((resolvePromise) => {
591
+ setTimeout(resolvePromise, intervalMs);
592
+ });
593
+ }
594
+ }
595
+ function buildClipWorkflowBrandingOptions({ logoAssetId, }) {
596
+ return {
597
+ logoOverlayEnabled: logoAssetId !== null,
598
+ logoMediaAssetId: logoAssetId,
599
+ logoPosition: "top-right",
600
+ };
601
+ }
602
+ async function downloadSignedClip({ url, }) {
603
+ const response = await fetch(url);
604
+ if (!response.ok) {
605
+ throw new Error(`Download failed with ${response.status}.`);
606
+ }
607
+ return response.arrayBuffer();
608
+ }
609
+ function slugifyFileName({ value }) {
610
+ const slug = value
611
+ .toLowerCase()
612
+ .replace(/[^a-z0-9]+/g, "-")
613
+ .replace(/^-+|-+$/g, "")
614
+ .slice(0, 56);
615
+ return slug.length > 0 ? slug : "clip";
616
+ }
617
+ function toApiClipSelection({ selection, }) {
618
+ return {
619
+ selection_mode: selection.mode,
620
+ suggestion_id: selection.suggestionId,
621
+ start_seconds: selection.startSeconds,
622
+ end_seconds: selection.endSeconds,
623
+ };
624
+ }
625
+ //# sourceMappingURL=clips.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clips.js","sourceRoot":"","sources":["../../src/commands/clips.ts"],"names":[],"mappings":"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"}