@clipwright/core 0.16.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/actors.d.ts +4 -0
  3. package/dist/actors.js +22 -0
  4. package/dist/actors.js.map +1 -1
  5. package/dist/aspect.d.ts +3 -0
  6. package/dist/aspect.js +14 -0
  7. package/dist/aspect.js.map +1 -1
  8. package/dist/billing-terms.d.ts +19 -0
  9. package/dist/billing-terms.js +8 -0
  10. package/dist/billing-terms.js.map +1 -0
  11. package/dist/broll-policy.d.ts +31 -0
  12. package/dist/broll-policy.js +24 -0
  13. package/dist/broll-policy.js.map +1 -0
  14. package/dist/contract-dispositions.d.ts +65 -3
  15. package/dist/contract-dispositions.js +25 -21
  16. package/dist/contract-dispositions.js.map +1 -1
  17. package/dist/endpoints.d.ts +2 -2
  18. package/dist/endpoints.js +18 -13
  19. package/dist/endpoints.js.map +1 -1
  20. package/dist/errors.d.ts +7 -1
  21. package/dist/errors.js +13 -0
  22. package/dist/errors.js.map +1 -1
  23. package/dist/face-billing.d.ts +116 -0
  24. package/dist/face-billing.js +83 -0
  25. package/dist/face-billing.js.map +1 -0
  26. package/dist/face-delivery.d.ts +17 -0
  27. package/dist/face-delivery.js +12 -0
  28. package/dist/face-delivery.js.map +1 -0
  29. package/dist/index.d.ts +9 -0
  30. package/dist/index.js +9 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/long-form-pricing.d.ts +48 -0
  33. package/dist/long-form-pricing.js +73 -0
  34. package/dist/long-form-pricing.js.map +1 -0
  35. package/dist/long-form-profile.d.ts +5 -0
  36. package/dist/long-form-profile.js +6 -0
  37. package/dist/long-form-profile.js.map +1 -0
  38. package/dist/media-timebase.d.ts +2 -0
  39. package/dist/media-timebase.js +3 -0
  40. package/dist/media-timebase.js.map +1 -0
  41. package/dist/public-endpoints.d.ts +2 -0
  42. package/dist/public-endpoints.js +2 -0
  43. package/dist/public-endpoints.js.map +1 -1
  44. package/dist/render-backend.d.ts +3 -1
  45. package/dist/run-static-warnings.d.ts +6 -2
  46. package/dist/run-static-warnings.js +15 -11
  47. package/dist/run-static-warnings.js.map +1 -1
  48. package/dist/runs.d.ts +115 -0
  49. package/dist/runs.js +21 -0
  50. package/dist/runs.js.map +1 -1
  51. package/dist/semantic-inserts.d.ts +63 -0
  52. package/dist/semantic-inserts.js +160 -0
  53. package/dist/semantic-inserts.js.map +1 -0
  54. package/dist/skills.d.ts +217 -1
  55. package/dist/skills.js +87 -26
  56. package/dist/skills.js.map +1 -1
  57. package/dist/speech-rhythm-contract.d.ts +20 -0
  58. package/dist/speech-rhythm-contract.js +22 -0
  59. package/dist/speech-rhythm-contract.js.map +1 -0
  60. package/dist/speech-rhythm.d.ts +21 -0
  61. package/dist/speech-rhythm.js +47 -0
  62. package/dist/speech-rhythm.js.map +1 -0
  63. package/dist/tts-backend.d.ts +1 -0
  64. package/dist/tts-backend.js.map +1 -1
  65. package/dist/voice-admission.d.ts +53 -1
  66. package/dist/voice-admission.js +32 -1
  67. package/dist/voice-admission.js.map +1 -1
  68. package/dist/voice-listing.d.ts +5 -1
  69. package/dist/voice-listing.js +11 -1
  70. package/dist/voice-listing.js.map +1 -1
  71. package/dist/voice-preview-approval.d.ts +27 -0
  72. package/dist/voice-preview-approval.js +29 -0
  73. package/dist/voice-preview-approval.js.map +1 -0
  74. package/dist/voices.d.ts +2 -0
  75. package/dist/voices.js +3 -0
  76. package/dist/voices.js.map +1 -1
  77. package/package.json +13 -1
package/dist/skills.d.ts CHANGED
@@ -82,11 +82,51 @@ export declare const ugcSegment: z.ZodObject<{
82
82
  }>;
83
83
  script: z.ZodOptional<z.ZodString>;
84
84
  media_url: z.ZodOptional<z.ZodString>;
85
+ media_type: z.ZodOptional<z.ZodEnum<{
86
+ image: "image";
87
+ video: "video";
88
+ }>>;
89
+ duration_seconds: z.ZodOptional<z.ZodNumber>;
90
+ image_motion: z.ZodOptional<z.ZodObject<{
91
+ direction: z.ZodEnum<{
92
+ in: "in";
93
+ out: "out";
94
+ }>;
95
+ amount: z.ZodNumber;
96
+ }, z.core.$strip>>;
85
97
  }, z.core.$strip>;
86
98
  export type UgcSegment = z.infer<typeof ugcSegment>;
99
+ export declare const ugcInsert: z.ZodObject<{
100
+ id: z.ZodString;
101
+ media_url: z.ZodString;
102
+ media_type: z.ZodEnum<{
103
+ image: "image";
104
+ video: "video";
105
+ }>;
106
+ anchor: z.ZodUnion<readonly [z.ZodObject<{
107
+ startWord: z.ZodNumber;
108
+ endWord: z.ZodNumber;
109
+ }, z.core.$strict>, z.ZodObject<{
110
+ quote: z.ZodString;
111
+ occurrence: z.ZodOptional<z.ZodNumber>;
112
+ }, z.core.$strict>]>;
113
+ cover_words: z.ZodOptional<z.ZodNumber>;
114
+ image_motion: z.ZodOptional<z.ZodObject<{
115
+ direction: z.ZodEnum<{
116
+ in: "in";
117
+ out: "out";
118
+ }>;
119
+ amount: z.ZodNumber;
120
+ }, z.core.$strict>>;
121
+ }, z.core.$strict>;
122
+ export type UgcInsert = z.infer<typeof ugcInsert>;
87
123
  /** Потолок актёрских сегментов — ограничение ОДНОГО рана, не суточных трат. */
88
124
  export declare const MAX_ACTOR_SEGMENTS = 3;
89
125
  export declare const MAX_SEGMENTS = 5;
126
+ /** Потолки НАРРАТИВНОГО пути — другие, потому что медиа-шот денег не стоит, */
127
+ /** а актёрский стоит: вставок столько, сколько вмещает таймлайн (ADR #265). */
128
+ export declare const MAX_INSERTS: number;
129
+ export declare const MAX_NARRATED_ACTOR_SHOTS = 6;
90
130
  export declare const actorId: z.ZodString;
91
131
  export declare const makeUgcInputShape: {
92
132
  readonly script: z.ZodOptional<z.ZodString>;
@@ -97,7 +137,42 @@ export declare const makeUgcInputShape: {
97
137
  }>;
98
138
  script: z.ZodOptional<z.ZodString>;
99
139
  media_url: z.ZodOptional<z.ZodString>;
140
+ media_type: z.ZodOptional<z.ZodEnum<{
141
+ image: "image";
142
+ video: "video";
143
+ }>>;
144
+ duration_seconds: z.ZodOptional<z.ZodNumber>;
145
+ image_motion: z.ZodOptional<z.ZodObject<{
146
+ direction: z.ZodEnum<{
147
+ in: "in";
148
+ out: "out";
149
+ }>;
150
+ amount: z.ZodNumber;
151
+ }, z.core.$strip>>;
100
152
  }, z.core.$strip>>>;
153
+ readonly inserts: z.ZodOptional<z.ZodArray<z.ZodObject<{
154
+ id: z.ZodString;
155
+ media_url: z.ZodString;
156
+ media_type: z.ZodEnum<{
157
+ image: "image";
158
+ video: "video";
159
+ }>;
160
+ anchor: z.ZodUnion<readonly [z.ZodObject<{
161
+ startWord: z.ZodNumber;
162
+ endWord: z.ZodNumber;
163
+ }, z.core.$strict>, z.ZodObject<{
164
+ quote: z.ZodString;
165
+ occurrence: z.ZodOptional<z.ZodNumber>;
166
+ }, z.core.$strict>]>;
167
+ cover_words: z.ZodOptional<z.ZodNumber>;
168
+ image_motion: z.ZodOptional<z.ZodObject<{
169
+ direction: z.ZodEnum<{
170
+ in: "in";
171
+ out: "out";
172
+ }>;
173
+ amount: z.ZodNumber;
174
+ }, z.core.$strict>>;
175
+ }, z.core.$strict>>>;
101
176
  readonly person: z.ZodOptional<z.ZodString>;
102
177
  readonly actor_id: z.ZodOptional<z.ZodString>;
103
178
  readonly image: z.ZodOptional<z.ZodString>;
@@ -108,6 +183,11 @@ export declare const makeUgcInputShape: {
108
183
  readonly character: z.ZodOptional<z.ZodString>;
109
184
  readonly name: z.ZodOptional<z.ZodString>;
110
185
  readonly broll_url: z.ZodOptional<z.ZodString>;
186
+ readonly broll_policy: z.ZodOptional<z.ZodEnum<{
187
+ anyone: "anyone";
188
+ no_actor: "no_actor";
189
+ no_people: "no_people";
190
+ }>>;
111
191
  readonly captions: z.ZodDefault<z.ZodBoolean>;
112
192
  readonly caption_style: z.ZodDefault<z.ZodEnum<{
113
193
  hormozi: "hormozi";
@@ -182,7 +262,42 @@ export declare const makeUgcInput: z.ZodObject<{
182
262
  }>;
183
263
  script: z.ZodOptional<z.ZodString>;
184
264
  media_url: z.ZodOptional<z.ZodString>;
265
+ media_type: z.ZodOptional<z.ZodEnum<{
266
+ image: "image";
267
+ video: "video";
268
+ }>>;
269
+ duration_seconds: z.ZodOptional<z.ZodNumber>;
270
+ image_motion: z.ZodOptional<z.ZodObject<{
271
+ direction: z.ZodEnum<{
272
+ in: "in";
273
+ out: "out";
274
+ }>;
275
+ amount: z.ZodNumber;
276
+ }, z.core.$strip>>;
185
277
  }, z.core.$strip>>>;
278
+ inserts: z.ZodOptional<z.ZodArray<z.ZodObject<{
279
+ id: z.ZodString;
280
+ media_url: z.ZodString;
281
+ media_type: z.ZodEnum<{
282
+ image: "image";
283
+ video: "video";
284
+ }>;
285
+ anchor: z.ZodUnion<readonly [z.ZodObject<{
286
+ startWord: z.ZodNumber;
287
+ endWord: z.ZodNumber;
288
+ }, z.core.$strict>, z.ZodObject<{
289
+ quote: z.ZodString;
290
+ occurrence: z.ZodOptional<z.ZodNumber>;
291
+ }, z.core.$strict>]>;
292
+ cover_words: z.ZodOptional<z.ZodNumber>;
293
+ image_motion: z.ZodOptional<z.ZodObject<{
294
+ direction: z.ZodEnum<{
295
+ in: "in";
296
+ out: "out";
297
+ }>;
298
+ amount: z.ZodNumber;
299
+ }, z.core.$strict>>;
300
+ }, z.core.$strict>>>;
186
301
  person: z.ZodOptional<z.ZodString>;
187
302
  actor_id: z.ZodOptional<z.ZodString>;
188
303
  image: z.ZodOptional<z.ZodString>;
@@ -193,6 +308,11 @@ export declare const makeUgcInput: z.ZodObject<{
193
308
  character: z.ZodOptional<z.ZodString>;
194
309
  name: z.ZodOptional<z.ZodString>;
195
310
  broll_url: z.ZodOptional<z.ZodString>;
311
+ broll_policy: z.ZodOptional<z.ZodEnum<{
312
+ anyone: "anyone";
313
+ no_actor: "no_actor";
314
+ no_people: "no_people";
315
+ }>>;
196
316
  captions: z.ZodDefault<z.ZodBoolean>;
197
317
  caption_style: z.ZodDefault<z.ZodEnum<{
198
318
  hormozi: "hormozi";
@@ -240,7 +360,42 @@ export declare function serverUgcInputWith(voiceRefusal: (voice: string) => stri
240
360
  }>;
241
361
  script: z.ZodOptional<z.ZodString>;
242
362
  media_url: z.ZodOptional<z.ZodString>;
363
+ media_type: z.ZodOptional<z.ZodEnum<{
364
+ image: "image";
365
+ video: "video";
366
+ }>>;
367
+ duration_seconds: z.ZodOptional<z.ZodNumber>;
368
+ image_motion: z.ZodOptional<z.ZodObject<{
369
+ direction: z.ZodEnum<{
370
+ in: "in";
371
+ out: "out";
372
+ }>;
373
+ amount: z.ZodNumber;
374
+ }, z.core.$strip>>;
243
375
  }, z.core.$strip>>>;
376
+ inserts: z.ZodOptional<z.ZodArray<z.ZodObject<{
377
+ id: z.ZodString;
378
+ media_url: z.ZodString;
379
+ media_type: z.ZodEnum<{
380
+ image: "image";
381
+ video: "video";
382
+ }>;
383
+ anchor: z.ZodUnion<readonly [z.ZodObject<{
384
+ startWord: z.ZodNumber;
385
+ endWord: z.ZodNumber;
386
+ }, z.core.$strict>, z.ZodObject<{
387
+ quote: z.ZodString;
388
+ occurrence: z.ZodOptional<z.ZodNumber>;
389
+ }, z.core.$strict>]>;
390
+ cover_words: z.ZodOptional<z.ZodNumber>;
391
+ image_motion: z.ZodOptional<z.ZodObject<{
392
+ direction: z.ZodEnum<{
393
+ in: "in";
394
+ out: "out";
395
+ }>;
396
+ amount: z.ZodNumber;
397
+ }, z.core.$strict>>;
398
+ }, z.core.$strict>>>;
244
399
  person: z.ZodOptional<z.ZodString>;
245
400
  actor_id: z.ZodOptional<z.ZodString>;
246
401
  image: z.ZodOptional<z.ZodString>;
@@ -251,6 +406,11 @@ export declare function serverUgcInputWith(voiceRefusal: (voice: string) => stri
251
406
  character: z.ZodOptional<z.ZodString>;
252
407
  name: z.ZodOptional<z.ZodString>;
253
408
  broll_url: z.ZodOptional<z.ZodString>;
409
+ broll_policy: z.ZodOptional<z.ZodEnum<{
410
+ anyone: "anyone";
411
+ no_actor: "no_actor";
412
+ no_people: "no_people";
413
+ }>>;
254
414
  captions: z.ZodDefault<z.ZodBoolean>;
255
415
  caption_style: z.ZodDefault<z.ZodEnum<{
256
416
  hormozi: "hormozi";
@@ -288,7 +448,7 @@ export declare function serverUgcInputWith(voiceRefusal: (voice: string) => stri
288
448
  }>>;
289
449
  }, z.core.$strip>;
290
450
  /** Сохранённый вход рана: правила допуска он уже прошёл, и смена модели или */
291
- /** потолка не должна делать старый ран нечитаемым (#145). */
451
+ /** потолка не должна делать старый ран нечитаемым (#145). Снимок — ради пола (#210). */
292
452
  export declare const storedUgcInput: z.ZodObject<{
293
453
  script: z.ZodOptional<z.ZodString>;
294
454
  segments: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -298,7 +458,42 @@ export declare const storedUgcInput: z.ZodObject<{
298
458
  }>;
299
459
  script: z.ZodOptional<z.ZodString>;
300
460
  media_url: z.ZodOptional<z.ZodString>;
461
+ media_type: z.ZodOptional<z.ZodEnum<{
462
+ image: "image";
463
+ video: "video";
464
+ }>>;
465
+ duration_seconds: z.ZodOptional<z.ZodNumber>;
466
+ image_motion: z.ZodOptional<z.ZodObject<{
467
+ direction: z.ZodEnum<{
468
+ in: "in";
469
+ out: "out";
470
+ }>;
471
+ amount: z.ZodNumber;
472
+ }, z.core.$strip>>;
301
473
  }, z.core.$strip>>>;
474
+ inserts: z.ZodOptional<z.ZodArray<z.ZodObject<{
475
+ id: z.ZodString;
476
+ media_url: z.ZodString;
477
+ media_type: z.ZodEnum<{
478
+ image: "image";
479
+ video: "video";
480
+ }>;
481
+ anchor: z.ZodUnion<readonly [z.ZodObject<{
482
+ startWord: z.ZodNumber;
483
+ endWord: z.ZodNumber;
484
+ }, z.core.$strict>, z.ZodObject<{
485
+ quote: z.ZodString;
486
+ occurrence: z.ZodOptional<z.ZodNumber>;
487
+ }, z.core.$strict>]>;
488
+ cover_words: z.ZodOptional<z.ZodNumber>;
489
+ image_motion: z.ZodOptional<z.ZodObject<{
490
+ direction: z.ZodEnum<{
491
+ in: "in";
492
+ out: "out";
493
+ }>;
494
+ amount: z.ZodNumber;
495
+ }, z.core.$strict>>;
496
+ }, z.core.$strict>>>;
302
497
  person: z.ZodOptional<z.ZodString>;
303
498
  actor_id: z.ZodOptional<z.ZodString>;
304
499
  image: z.ZodOptional<z.ZodString>;
@@ -309,6 +504,11 @@ export declare const storedUgcInput: z.ZodObject<{
309
504
  character: z.ZodOptional<z.ZodString>;
310
505
  name: z.ZodOptional<z.ZodString>;
311
506
  broll_url: z.ZodOptional<z.ZodString>;
507
+ broll_policy: z.ZodOptional<z.ZodEnum<{
508
+ anyone: "anyone";
509
+ no_actor: "no_actor";
510
+ no_people: "no_people";
511
+ }>>;
312
512
  captions: z.ZodDefault<z.ZodBoolean>;
313
513
  caption_style: z.ZodDefault<z.ZodEnum<{
314
514
  hormozi: "hormozi";
@@ -340,6 +540,12 @@ export declare const storedUgcInput: z.ZodObject<{
340
540
  white: "white";
341
541
  }>>;
342
542
  tts_model: z.ZodOptional<z.ZodString>;
543
+ actor_snapshot: z.ZodOptional<z.ZodObject<{
544
+ gender: z.ZodOptional<z.ZodEnum<{
545
+ female: "female";
546
+ male: "male";
547
+ }>>;
548
+ }, z.core.$strip>>;
343
549
  }, z.core.$strip>;
344
550
  /** Минимум, из которого выводится произносимый текст: сам скрипт или сегменты. */
345
551
  export interface SpokenTextInput {
@@ -361,6 +567,16 @@ export interface SpokenTextInput {
361
567
  export declare function resolvedScript(input: SpokenTextInput): string;
362
568
  export type MakeUgcInput = z.infer<typeof makeUgcInput>;
363
569
  export declare const quoteResponse: z.ZodObject<{
570
+ long_form_pricing: z.ZodOptional<z.ZodReadonly<z.ZodObject<{
571
+ pricingVersion: z.ZodString;
572
+ rateCreditsPerFaceSecond: z.ZodNumber;
573
+ minimumCredits: z.ZodNumber;
574
+ estimatedTotalDurationSec: z.ZodNumber;
575
+ estimatedFaceSeconds: z.ZodNumber;
576
+ estimatedCredits: z.ZodNumber;
577
+ estimatedFaceWordShare: z.ZodOptional<z.ZodNumber>;
578
+ minimumApplied: z.ZodBoolean;
579
+ }, z.core.$strict>>>;
364
580
  skill: z.ZodString;
365
581
  credits_estimate: z.ZodNumber;
366
582
  duration_estimate_sec: z.ZodNumber;
package/dist/skills.js CHANGED
@@ -1,4 +1,7 @@
1
1
  import { z } from "zod";
2
+ import { longFormQuoteSchema } from "./long-form-pricing.js";
3
+ import { RESOLVED_TIMELINE_MAX_SLOTS } from "./long-form-profile.js";
4
+ import { brollPolicy } from "./broll-policy.js";
2
5
  import { countWords } from "./pacing.js";
3
6
  import { resolveTtsModel, MAX_SCRIPT_CHARS, SCRIPT_LENGTH_DESCRIPTION, STRESS_MARKING_DESCRIPTION, ttsScriptLimitError, TTS_MODELS, isVoicePresetName, VOICE_ID_PATTERN, VOICE_NAME_PATTERN, VOICE_PRESET_NAMES, } from "./voices.js";
4
7
  export const CAPTION_STYLES = ["hormozi", "tiktok", "minimal"];
@@ -93,10 +96,57 @@ export const ugcSegment = z.object({
93
96
  script: z.string().min(1).max(MAX_SCRIPT_CHARS).optional(),
94
97
  /** Полнокадровый врез. Обязателен у `media`, запрещён у `actor`. */
95
98
  media_url: z.string().url().max(MAX_URL_LENGTH).optional(),
99
+ media_type: z.enum(["image", "video"]).optional()
100
+ .describe("Explicit media source type; omission means video, regardless of URL suffix. Availability follows the segments field."),
101
+ duration_seconds: z.number().positive().optional()
102
+ .describe("Required for an image segment; its display duration in seconds. Not accepted for actor or video segments."),
103
+ image_motion: z.object({
104
+ direction: z.enum(["in", "out"]),
105
+ amount: z.number().min(0).lt(1),
106
+ }).optional().describe("Optional image zoom: amount is the fractional reduction from fully contained size. No motion by default; no foreground crop."),
107
+ }).superRefine((segment, context) => {
108
+ if (segment.kind === "actor") {
109
+ for (const field of ["media_type", "duration_seconds", "image_motion"]) {
110
+ if (segment[field] !== undefined)
111
+ context.addIssue({ code: z.ZodIssueCode.custom, path: [field], message: `${field} is only accepted on media segments` });
112
+ }
113
+ }
114
+ else if (segment.media_type === "image") {
115
+ if (segment.duration_seconds === undefined)
116
+ context.addIssue({ code: z.ZodIssueCode.custom, path: ["duration_seconds"], message: "image segment requires duration_seconds" });
117
+ }
118
+ else {
119
+ for (const field of ["duration_seconds", "image_motion"]) {
120
+ if (segment[field] !== undefined)
121
+ context.addIssue({ code: z.ZodIssueCode.custom, path: [field], message: `${field} requires media_type=image` });
122
+ }
123
+ }
124
+ });
125
+ export const ugcInsert = z.object({
126
+ id: z.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/),
127
+ media_url: z.string().url().max(MAX_URL_LENGTH).startsWith("https://"),
128
+ media_type: z.enum(["image", "video"]),
129
+ anchor: z.union([
130
+ z.object({ startWord: z.number().int().nonnegative(), endWord: z.number().int().positive() })
131
+ .strict().refine(range => range.endWord > range.startWord, { message: "endWord must be greater than startWord" }),
132
+ z.object({ quote: z.string().min(1).max(MAX_SCRIPT_CHARS).refine(text => text.trim().length > 0),
133
+ occurrence: z.number().int().nonnegative().optional() }).strict(),
134
+ ]),
135
+ cover_words: z.number().int().positive().max(10000).optional()
136
+ .describe("How many spoken words this insert covers, counted from the first word of its anchor. " +
137
+ "Omitted means the anchored words only. The insert ends where the first uncovered word begins, " +
138
+ "so inserts whose coverage meets are adjacent frame for frame and leave no actor shot between them."),
139
+ image_motion: z.object({ direction: z.enum(["in", "out"]), amount: z.number().min(0).lt(1) }).strict().optional(),
140
+ }).strict().refine(insert => insert.image_motion === undefined || insert.media_type === "image", {
141
+ path: ["image_motion"], message: "image_motion requires media_type=image",
96
142
  });
97
143
  /** Потолок актёрских сегментов — ограничение ОДНОГО рана, не суточных трат. */
98
144
  export const MAX_ACTOR_SEGMENTS = 3;
99
145
  export const MAX_SEGMENTS = 5;
146
+ /** Потолки НАРРАТИВНОГО пути — другие, потому что медиа-шот денег не стоит, */
147
+ /** а актёрский стоит: вставок столько, сколько вмещает таймлайн (ADR #265). */
148
+ export const MAX_INSERTS = Math.floor((RESOLVED_TIMELINE_MAX_SLOTS - 1) / 2);
149
+ export const MAX_NARRATED_ACTOR_SHOTS = 6;
100
150
  export const actorId = z.string().regex(/^actor_[a-z0-9][a-z0-9_-]{0,63}$/);
101
151
  export const makeUgcInputShape = {
102
152
  // НЕОБЯЗАТЕЛЬНЫЙ, но не «необязательный к заполнению»: ровно одно из
@@ -104,13 +154,20 @@ export const makeUgcInputShape = {
104
154
  // JSON-Schema не умеет выразить «ровно одно из двух» через `required[]`,
105
155
  // поэтому информативность возвращается текстом описания (блокер B9).
106
156
  script: z
107
- .string()
108
- .min(1)
109
- .max(MAX_SCRIPT_CHARS)
157
+ .string({ error: "script must be the text the actor says, as a string" })
158
+ .min(1, "script is empty: pass the words the actor says")
159
+ .max(MAX_SCRIPT_CHARS, `script is longer than ${MAX_SCRIPT_CHARS} characters`)
110
160
  .optional()
111
- .describe(`required unless \`segments\` is provided; \`segments\` is currently rejected. ${SCRIPT_LENGTH_DESCRIPTION} ` +
112
- STRESS_MARKING_DESCRIPTION),
113
- segments: z.array(ugcSegment).min(1).max(MAX_SEGMENTS).optional(),
161
+ .describe("The words the actor says; required unless segments supplies the spoken text. " +
162
+ "Segments and text-anchored inserts require long-form qualification on the server. " +
163
+ `${SCRIPT_LENGTH_DESCRIPTION} ${STRESS_MARKING_DESCRIPTION}`),
164
+ segments: z.array(ugcSegment).min(1).max(MAX_SEGMENTS).optional()
165
+ .describe("Ordered actor and image segments; requires long-form qualification on the server, captions=false and 1080p. Image media requires explicit broll_policy=anyone."),
166
+ inserts: z.array(ugcInsert).min(1).max(MAX_INSERTS)
167
+ .refine(inserts => new Set(inserts.map(insert => insert.id)).size === inserts.length, {
168
+ message: "insert IDs must be unique",
169
+ }).optional().describe("Text-anchored image inserts over full narration, each covering cover_words spoken words from its anchor; " +
170
+ "requires long-form qualification on the server, captions=false, 1080p and explicit broll_policy=anyone."),
114
171
  person: z.string().min(1).max(500).optional(),
115
172
  actor_id: actorId
116
173
  .optional()
@@ -121,14 +178,15 @@ export const makeUgcInputShape = {
121
178
  // вскрыла бы инвариант Этапа 4 «R2-URL вендору не передаются». Отказ на входе
122
179
  // честнее, чем приём поля, которое некуда деть.
123
180
  image: z
124
- .string()
125
- .url()
126
- .startsWith("https://")
127
- .max(MAX_URL_LENGTH)
181
+ .string({ error: "image must be the https url of the photo, as a string" })
182
+ .url("image is not a url: pass the https address of the photo, or upload it first")
183
+ .startsWith("https://", "image must start with https:// — http sources are refused before any charge")
184
+ .max(MAX_URL_LENGTH, `image url is longer than ${MAX_URL_LENGTH} characters`)
128
185
  .optional()
129
186
  .describe("Public https url of the actor's photo (PNG, JPEG or WebP, up to 10 MB). A file on disk goes " +
130
- "through upload_image (POST /v1/uploads) first — pass the url it returns. Private or loopback " +
131
- "hosts, http and unreachable sources are refused before any charge. We do not detect the " +
187
+ "through upload_image (POST /v1/uploads) first — pass the url it returns. A source we cannot " +
188
+ "use — private or loopback host, http, unreachable, redirecting, over 10 MB, or not one of " +
189
+ "those image types — is refused (unusable_source) before any charge. We do not detect the " +
132
190
  "face's gender: pass actor_gender or voice, or the default male voice is used with a warning."),
133
191
  // Без .default(): молчание отличимо от подсказки, и на молчании приходит warning (clipwright#183).
134
192
  actor_gender: z
@@ -140,6 +198,7 @@ export const makeUgcInputShape = {
140
198
  character: z.string().regex(/^char_[a-zA-Z0-9]+$/).optional(),
141
199
  name: z.string().max(100).optional(),
142
200
  broll_url: z.string().url().max(MAX_URL_LENGTH).optional(),
201
+ broll_policy: brollPolicy.optional(),
143
202
  captions: z.boolean().default(false),
144
203
  caption_style: z.enum(CAPTION_STYLES).default("hormozi"),
145
204
  look: z.enum(LOOKS).default("natural"),
@@ -165,8 +224,8 @@ export const makeUgcInputShape = {
165
224
  // Без .default(), как resolution: явный выбор голоса отличим от молчания (US-517).
166
225
  // voice — форма имени, список сверяет `serverUgcInput` (#164); voice_id — сырой id вендора.
167
226
  voice: z
168
- .string()
169
- .regex(VOICE_NAME_PATTERN)
227
+ .string({ error: "voice must be a voice name from list_voices, as a string" })
228
+ .regex(VOICE_NAME_PATTERN, "voice is not a voice name: take one from list_voices, or pass voice_id")
170
229
  .optional()
171
230
  .describe(`Voice name from list_voices. Curated presets: ${VOICE_PRESET_NAMES.join(" | ")} ` +
172
231
  "(owner_ru_clone is the Russian cloned voice). The API refuses a name list_voices does not " +
@@ -175,8 +234,8 @@ export const makeUgcInputShape = {
175
234
  "without actor_gender. " +
176
235
  "Mutually exclusive with voice_id."),
177
236
  voice_id: z
178
- .string()
179
- .regex(VOICE_ID_PATTERN)
237
+ .string({ error: "voice_id must be a vendor voice id, as a string" })
238
+ .regex(VOICE_ID_PATTERN, "voice_id is not a vendor voice id: 16 to 32 letters and digits")
180
239
  .optional()
181
240
  .describe("Raw vendor voice id (16–32 letters and digits) for a voice outside the catalog. Checked " +
182
241
  "lazily: an unknown id fails the run, not the request. Mutually exclusive with voice."),
@@ -229,6 +288,9 @@ export const makeUgcInput = z
229
288
  // молчаливую подмену.
230
289
  .refine((v) => (v.script === undefined) !== (v.segments === undefined), {
231
290
  message: "pass exactly one of script | segments",
291
+ })
292
+ .refine(v => v.inserts === undefined || (v.script !== undefined && v.segments === undefined), {
293
+ path: ["inserts"], message: "inserts requires script and cannot be combined with segments",
232
294
  })
233
295
  // Потолок символов — по модели: v3 короче v2 вдвое; отказ здесь, до резерва и вендора (#101).
234
296
  // Модель незнакомого клиенту голоса знает только сервер, и потолок он проверит сам (#164).
@@ -251,14 +313,8 @@ export const makeUgcInput = z
251
313
  path: ["actor_gender"],
252
314
  message: "actor_gender requires image: it describes the face in your photo; omit it, or pass image",
253
315
  })
254
- // ПРАВИЛА СЕГМЕНТОВ (US-526). Каждое — ОТДЕЛЬНЫЙ .refine, а не одна проверка
255
- // с общим текстом: сообщение обязано называть нарушенное правило, иначе агент
256
- // получает «invalid input» и чинит вход перебором. Порядок правил — от того,
257
- // что делает ролик невозможным, к тому, что делает его противоречивым.
258
- //
259
- // Правила живут ЗДЕСЬ, а не в `ugcSegment`: они про массив целиком (сколько
260
- // актёров) либо про связь двух полей внутри элемента, а `z.object` элемента
261
- // видит только сам элемент.
316
+ // Общие ограничения списка и обязательные поля ролей проверяются здесь.
317
+ // Тип картинки, длительность и движение проверяет ugcSegment.
262
318
  .refine((v) => v.segments === undefined || v.segments.some((s) => s.kind === "actor"), {
263
319
  message: "segments must contain at least one actor segment: nobody speaks otherwise",
264
320
  })
@@ -305,8 +361,12 @@ export function serverUgcInputWith(voiceRefusal) {
305
361
  });
306
362
  }
307
363
  /** Сохранённый вход рана: правила допуска он уже прошёл, и смена модели или */
308
- /** потолка не должна делать старый ран нечитаемым (#145). */
309
- export const storedUgcInput = z.object({ ...makeUgcInputShape, tts_model: z.string().optional() });
364
+ /** потолка не должна делать старый ран нечитаемым (#145). Снимок — ради пола (#210). */
365
+ export const storedUgcInput = z.object({
366
+ ...makeUgcInputShape,
367
+ tts_model: z.string().optional(),
368
+ actor_snapshot: z.object({ gender: z.enum(["female", "male"]).optional() }).optional(),
369
+ });
310
370
  /** Склейка произносимого текста без проверок — общая база для гейтов и хелпера. */
311
371
  function spokenTextOf(input) {
312
372
  if (input.script !== undefined)
@@ -339,6 +399,7 @@ export function resolvedScript(input) {
339
399
  // из ПРЕДЛАГАЕМОГО shape, а не из полного, иначе автокомплит SDK показывал бы
340
400
  // отклонённые поля, которые сервер отбивает четырёхсотым (блокер B4).
341
401
  export const quoteResponse = z.object({
402
+ long_form_pricing: longFormQuoteSchema.optional(),
342
403
  skill: z.string(),
343
404
  credits_estimate: z.number().int().nonnegative(),
344
405
  duration_estimate_sec: z.number().positive(),
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ export declare const speechRhythmResult: z.ZodDiscriminatedUnion<[z.ZodObject<{
3
+ status: z.ZodLiteral<"available">;
4
+ durationSec: z.ZodNumber;
5
+ wordGapDurationSec: z.ZodNumber;
6
+ wordGapFraction: z.ZodNumber;
7
+ leadingGapSec: z.ZodNumber;
8
+ trailingGapSec: z.ZodNumber;
9
+ interWordGapsSec: z.ZodArray<z.ZodNumber>;
10
+ measuredSentenceGapCount: z.ZodNumber;
11
+ sentenceGapMedianSec: z.ZodNullable<z.ZodNumber>;
12
+ }, z.core.$strip>, z.ZodObject<{
13
+ status: z.ZodLiteral<"unavailable">;
14
+ reason: z.ZodEnum<{
15
+ invalid_duration: "invalid_duration";
16
+ invalid_timings: "invalid_timings";
17
+ missing_timings: "missing_timings";
18
+ unsupported_mode: "unsupported_mode";
19
+ }>;
20
+ }, z.core.$strip>], "status">;
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ const seconds = z.number().finite().nonnegative();
3
+ export const speechRhythmResult = z.discriminatedUnion("status", [
4
+ z.object({
5
+ status: z.literal("available"),
6
+ durationSec: z.number().finite().positive(),
7
+ wordGapDurationSec: seconds,
8
+ wordGapFraction: z.number().finite().min(0).max(1),
9
+ leadingGapSec: seconds,
10
+ trailingGapSec: seconds,
11
+ interWordGapsSec: z.array(seconds),
12
+ measuredSentenceGapCount: z.number().int().nonnegative(),
13
+ sentenceGapMedianSec: seconds.nullable(),
14
+ }),
15
+ z.object({
16
+ status: z.literal("unavailable"),
17
+ reason: z.enum(["missing_timings", "invalid_duration", "invalid_timings", "unsupported_mode"]),
18
+ }),
19
+ ]).describe("Gaps outside persisted TTS word intervals over the delivered clip duration, including leading and trailing gaps. " +
20
+ "These are timing gaps, not acoustic silence. Sentence boundaries use terminal punctuation. " +
21
+ "Timings extending beyond the delivered duration are unavailable, not clipped. Older runs may omit this field.");
22
+ //# sourceMappingURL=speech-rhythm-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speech-rhythm-contract.js","sourceRoot":"","sources":["../src/speech-rhythm-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;AAClD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE;IAC/D,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3C,kBAAkB,EAAE,OAAO;QAC3B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,aAAa,EAAE,OAAO;QACtB,cAAc,EAAE,OAAO;QACvB,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QAClC,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACxD,oBAAoB,EAAE,OAAO,CAAC,QAAQ,EAAE;KACzC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QAChC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;KAC/F,CAAC;CACH,CAAC,CAAC,QAAQ,CACT,mHAAmH;IACnH,6FAA6F;IAC7F,+GAA+G,CACxE,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { WordTiming } from "./tts-backend.js";
2
+ export interface SpeechRhythmMetrics {
3
+ status: "available";
4
+ durationSec: number;
5
+ /** Time outside the union of word intervals, including leading/trailing gaps. */
6
+ wordGapDurationSec: number;
7
+ /** Uncovered duration divided by measured full duration; not acoustic silence. */
8
+ wordGapFraction: number;
9
+ leadingGapSec: number;
10
+ trailingGapSec: number;
11
+ /** One gap per adjacent pair; earlier overlapping words can cover that gap. */
12
+ interWordGapsSec: number[];
13
+ measuredSentenceGapCount: number;
14
+ /** Seconds; null when no punctuation boundary has a following timed word. */
15
+ sentenceGapMedianSec: number | null;
16
+ }
17
+ export type SpeechRhythmResult = SpeechRhythmMetrics | {
18
+ status: "unavailable";
19
+ reason: "missing_timings" | "invalid_duration" | "invalid_timings" | "unsupported_mode";
20
+ };
21
+ export declare function measureSpeechRhythm(words: readonly WordTiming[] | null | undefined, durationSec: number): SpeechRhythmResult;