@clipwright/core 0.18.0 → 0.20.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 (124) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/__fixtures__/queue-promises.d.ts +5 -84
  3. package/dist/__fixtures__/queue-promises.js +7 -84
  4. package/dist/__fixtures__/queue-promises.js.map +1 -1
  5. package/dist/account-actors.d.ts +25 -25
  6. package/dist/account-actors.js +25 -25
  7. package/dist/account-actors.js.map +1 -1
  8. package/dist/account.d.ts +4 -10
  9. package/dist/account.js +6 -12
  10. package/dist/account.js.map +1 -1
  11. package/dist/actor-bounds.d.ts +4 -4
  12. package/dist/actor-bounds.js +4 -4
  13. package/dist/actor-bounds.js.map +1 -1
  14. package/dist/actor-qualities.d.ts +3 -3
  15. package/dist/actor-qualities.js +3 -3
  16. package/dist/actor-qualities.js.map +1 -1
  17. package/dist/actors.d.ts +8 -8
  18. package/dist/actors.js +9 -9
  19. package/dist/actors.js.map +1 -1
  20. package/dist/api-failure.d.ts +28 -129
  21. package/dist/api-failure.js +52 -225
  22. package/dist/api-failure.js.map +1 -1
  23. package/dist/aspect.d.ts +26 -96
  24. package/dist/aspect.js +32 -108
  25. package/dist/aspect.js.map +1 -1
  26. package/dist/contract-dispositions.d.ts +42 -167
  27. package/dist/contract-dispositions.js +54 -184
  28. package/dist/contract-dispositions.js.map +1 -1
  29. package/dist/endpoints.d.ts +5 -5
  30. package/dist/endpoints.js +3 -3
  31. package/dist/endpoints.js.map +1 -1
  32. package/dist/errors.d.ts +33 -101
  33. package/dist/errors.js +42 -108
  34. package/dist/errors.js.map +1 -1
  35. package/dist/faceless-cut-style.d.ts +115 -0
  36. package/dist/faceless-cut-style.js +109 -0
  37. package/dist/faceless-cut-style.js.map +1 -0
  38. package/dist/faceless-image-qualification.d.ts +97 -0
  39. package/dist/faceless-image-qualification.js +145 -0
  40. package/dist/faceless-image-qualification.js.map +1 -0
  41. package/dist/faceless-short-61.d.ts +83 -0
  42. package/dist/faceless-short-61.js +152 -0
  43. package/dist/faceless-short-61.js.map +1 -0
  44. package/dist/faceless-storyboard-timing.d.ts +40 -0
  45. package/dist/faceless-storyboard-timing.js +97 -0
  46. package/dist/faceless-storyboard-timing.js.map +1 -0
  47. package/dist/faceless-storyboard-v2-plan.d.ts +3 -0
  48. package/dist/faceless-storyboard-v2-plan.js +112 -0
  49. package/dist/faceless-storyboard-v2-plan.js.map +1 -0
  50. package/dist/faceless-storyboard-v2-timing.d.ts +52 -0
  51. package/dist/faceless-storyboard-v2-timing.js +136 -0
  52. package/dist/faceless-storyboard-v2-timing.js.map +1 -0
  53. package/dist/faceless-storyboard-v2.d.ts +44 -0
  54. package/dist/faceless-storyboard-v2.js +43 -0
  55. package/dist/faceless-storyboard-v2.js.map +1 -0
  56. package/dist/faceless-storyboard.d.ts +55 -0
  57. package/dist/faceless-storyboard.js +105 -0
  58. package/dist/faceless-storyboard.js.map +1 -0
  59. package/dist/idempotency.d.ts +8 -44
  60. package/dist/idempotency.js +10 -44
  61. package/dist/idempotency.js.map +1 -1
  62. package/dist/index.js +21 -25
  63. package/dist/index.js.map +1 -1
  64. package/dist/long-form-pricing.d.ts +4 -4
  65. package/dist/long-form-pricing.js +4 -4
  66. package/dist/long-form-pricing.js.map +1 -1
  67. package/dist/long-form-profile.d.ts +2 -2
  68. package/dist/long-form-profile.js +2 -2
  69. package/dist/long-form-profile.js.map +1 -1
  70. package/dist/pacing.d.ts +1 -1
  71. package/dist/pacing.js +1 -1
  72. package/dist/pacing.js.map +1 -1
  73. package/dist/public-endpoints.d.ts +9 -11
  74. package/dist/public-endpoints.js +11 -13
  75. package/dist/public-endpoints.js.map +1 -1
  76. package/dist/rate-limit.d.ts +23 -130
  77. package/dist/rate-limit.js +27 -132
  78. package/dist/rate-limit.js.map +1 -1
  79. package/dist/render-backend.d.ts +30 -145
  80. package/dist/render-backend.js +4 -27
  81. package/dist/render-backend.js.map +1 -1
  82. package/dist/run-preflight.d.ts +4 -4
  83. package/dist/run-preflight.js +10 -10
  84. package/dist/run-preflight.js.map +1 -1
  85. package/dist/run-static-warnings.d.ts +8 -8
  86. package/dist/run-static-warnings.js +24 -24
  87. package/dist/run-static-warnings.js.map +1 -1
  88. package/dist/runs.d.ts +18 -55
  89. package/dist/runs.js +26 -94
  90. package/dist/runs.js.map +1 -1
  91. package/dist/script-integrity.d.ts +6 -7
  92. package/dist/script-integrity.js +7 -8
  93. package/dist/script-integrity.js.map +1 -1
  94. package/dist/semantic-inserts.d.ts +4 -4
  95. package/dist/semantic-inserts.js +6 -6
  96. package/dist/semantic-inserts.js.map +1 -1
  97. package/dist/skills.d.ts +33 -107
  98. package/dist/skills.js +72 -161
  99. package/dist/skills.js.map +1 -1
  100. package/dist/tts-backend.d.ts +13 -42
  101. package/dist/tts-backend.js +2 -10
  102. package/dist/tts-backend.js.map +1 -1
  103. package/dist/uploads.d.ts +4 -4
  104. package/dist/uploads.js +4 -4
  105. package/dist/uploads.js.map +1 -1
  106. package/dist/vendor-response.d.ts +17 -80
  107. package/dist/vendor-response.js +19 -67
  108. package/dist/vendor-response.js.map +1 -1
  109. package/dist/voice-admission.d.ts +5 -5
  110. package/dist/voice-admission.js +6 -6
  111. package/dist/voice-admission.js.map +1 -1
  112. package/dist/voice-catalog-data.d.ts +2 -2
  113. package/dist/voice-catalog-data.js +2 -2
  114. package/dist/voice-catalog-data.js.map +1 -1
  115. package/dist/voice-catalog.d.ts +5 -5
  116. package/dist/voice-catalog.js +6 -6
  117. package/dist/voice-catalog.js.map +1 -1
  118. package/dist/voice-listing.d.ts +4 -4
  119. package/dist/voice-listing.js +6 -6
  120. package/dist/voice-listing.js.map +1 -1
  121. package/dist/voices.d.ts +40 -82
  122. package/dist/voices.js +56 -99
  123. package/dist/voices.js.map +1 -1
  124. package/package.json +1 -1
@@ -0,0 +1,115 @@
1
+ import { z } from "zod";
2
+ declare const profile: z.ZodObject<{
3
+ schema: z.ZodLiteral<"cut_style_profile_v1">;
4
+ fps: z.ZodLiteral<25>;
5
+ style_id: z.ZodString;
6
+ sources: z.ZodArray<z.ZodObject<{
7
+ sha256: z.ZodString;
8
+ reviewed_shots: z.ZodNumber;
9
+ image_shots: z.ZodNumber;
10
+ aligned_cuts: z.ZodNumber;
11
+ }, z.core.$strict>>;
12
+ speech_rules_available: z.ZodBoolean;
13
+ pacing: z.ZodObject<{
14
+ global_image_frames: z.ZodObject<{
15
+ p25: z.ZodNullable<z.ZodNumber>;
16
+ p50: z.ZodNullable<z.ZodNumber>;
17
+ p75: z.ZodNullable<z.ZodNumber>;
18
+ n: z.ZodNumber;
19
+ }, z.core.$strict>;
20
+ by_phase: z.ZodRecord<z.ZodEnum<{
21
+ climax: "climax";
22
+ development: "development";
23
+ resolution: "resolution";
24
+ setup: "setup";
25
+ }> & z.core.$partial, z.ZodObject<{
26
+ p25: z.ZodNullable<z.ZodNumber>;
27
+ p50: z.ZodNullable<z.ZodNumber>;
28
+ p75: z.ZodNullable<z.ZodNumber>;
29
+ n: z.ZodNumber;
30
+ }, z.core.$strict>>;
31
+ short_bursts: z.ZodObject<{
32
+ shot_count: z.ZodNumber;
33
+ n: z.ZodNumber;
34
+ }, z.core.$strict>;
35
+ }, z.core.$strict>;
36
+ motion: z.ZodObject<{
37
+ pan_flip_probability: z.ZodNullable<z.ZodNumber>;
38
+ pan_transition_n: z.ZodNumber;
39
+ pan_travel_fraction: z.ZodNullable<z.ZodNumber>;
40
+ pan_travel_n: z.ZodNumber;
41
+ }, z.core.$strict>;
42
+ opening_video: z.ZodObject<{
43
+ share: z.ZodNumber;
44
+ n: z.ZodNumber;
45
+ duration_frames: z.ZodObject<{
46
+ p25: z.ZodNullable<z.ZodNumber>;
47
+ p50: z.ZodNullable<z.ZodNumber>;
48
+ p75: z.ZodNullable<z.ZodNumber>;
49
+ n: z.ZodNumber;
50
+ }, z.core.$strict>;
51
+ }, z.core.$strict>;
52
+ captions: z.ZodObject<{
53
+ n: z.ZodNumber;
54
+ style: z.ZodNullable<z.ZodString>;
55
+ style_n: z.ZodNumber;
56
+ position_fraction: z.ZodNullable<z.ZodNumber>;
57
+ position_fraction_n: z.ZodNumber;
58
+ color: z.ZodNullable<z.ZodString>;
59
+ color_n: z.ZodNumber;
60
+ accent: z.ZodNullable<z.ZodString>;
61
+ accent_n: z.ZodNumber;
62
+ changes_per_sec: z.ZodObject<{
63
+ p25: z.ZodNullable<z.ZodNumber>;
64
+ p50: z.ZodNullable<z.ZodNumber>;
65
+ p75: z.ZodNullable<z.ZodNumber>;
66
+ n: z.ZodNumber;
67
+ }, z.core.$strict>;
68
+ }, z.core.$strict>;
69
+ speech: z.ZodNullable<z.ZodObject<{
70
+ n: z.ZodNumber;
71
+ unknown: z.ZodNumber;
72
+ class_counts: z.ZodRecord<z.ZodEnum<{
73
+ mid_word: "mid_word";
74
+ pause: "pause";
75
+ phrase: "phrase";
76
+ sentence: "sentence";
77
+ word: "word";
78
+ }> & z.core.$partial, z.ZodNumber>;
79
+ offset_frames: z.ZodObject<{
80
+ sentence: z.ZodObject<{
81
+ p25: z.ZodNullable<z.ZodNumber>;
82
+ p50: z.ZodNullable<z.ZodNumber>;
83
+ p75: z.ZodNullable<z.ZodNumber>;
84
+ n: z.ZodNumber;
85
+ }, z.core.$strict>;
86
+ phrase: z.ZodObject<{
87
+ p25: z.ZodNullable<z.ZodNumber>;
88
+ p50: z.ZodNullable<z.ZodNumber>;
89
+ p75: z.ZodNullable<z.ZodNumber>;
90
+ n: z.ZodNumber;
91
+ }, z.core.$strict>;
92
+ pause: z.ZodObject<{
93
+ p25: z.ZodNullable<z.ZodNumber>;
94
+ p50: z.ZodNullable<z.ZodNumber>;
95
+ p75: z.ZodNullable<z.ZodNumber>;
96
+ n: z.ZodNumber;
97
+ }, z.core.$strict>;
98
+ word: z.ZodObject<{
99
+ p25: z.ZodNullable<z.ZodNumber>;
100
+ p50: z.ZodNullable<z.ZodNumber>;
101
+ p75: z.ZodNullable<z.ZodNumber>;
102
+ n: z.ZodNumber;
103
+ }, z.core.$strict>;
104
+ mid_word: z.ZodObject<{
105
+ p25: z.ZodNullable<z.ZodNumber>;
106
+ p50: z.ZodNullable<z.ZodNumber>;
107
+ p75: z.ZodNullable<z.ZodNumber>;
108
+ n: z.ZodNumber;
109
+ }, z.core.$strict>;
110
+ }, z.core.$strict>;
111
+ }, z.core.$strict>>;
112
+ }, z.core.$strict>;
113
+ export type CutStyleProfile = z.infer<typeof profile>;
114
+ export declare function parseCutStyle(input: unknown): CutStyleProfile;
115
+ export {};
@@ -0,0 +1,109 @@
1
+ import { z } from "zod";
2
+ const count = z.number().int().nonnegative().safe();
3
+ const positiveCount = count.positive();
4
+ const finite = z.number().finite();
5
+ const nonnegative = finite.nonnegative();
6
+ const fraction = nonnegative.max(1);
7
+ const nonblank = z.string().trim().min(1);
8
+ const phase = z.enum(["setup", "development", "climax", "resolution"]);
9
+ const customIssue = "custom";
10
+ function quantiles(value) {
11
+ return z.strictObject({
12
+ p25: value.nullable(), p50: value.nullable(), p75: value.nullable(), n: count,
13
+ }).superRefine((q, ctx) => {
14
+ if (q.n === 0) {
15
+ if (q.p25 !== null || q.p50 !== null || q.p75 !== null) {
16
+ ctx.addIssue({ code: customIssue, message: "empty quantiles require null values" });
17
+ }
18
+ }
19
+ else if (q.p25 === null || q.p50 === null || q.p75 === null || q.p25 > q.p50 || q.p50 > q.p75) {
20
+ ctx.addIssue({ code: customIssue, message: "quantiles must be finite and ordered" });
21
+ }
22
+ });
23
+ }
24
+ const frameQuantiles = quantiles(count);
25
+ const signedQuantiles = quantiles(z.number().int().safe());
26
+ const speechClasses = ["sentence", "phrase", "pause", "word", "mid_word"];
27
+ const speechCounts = z.partialRecord(z.enum(speechClasses), count);
28
+ const speechOffsets = z.strictObject({
29
+ sentence: signedQuantiles,
30
+ phrase: signedQuantiles,
31
+ pause: signedQuantiles,
32
+ word: signedQuantiles,
33
+ mid_word: signedQuantiles,
34
+ });
35
+ const speech = z.strictObject({
36
+ n: positiveCount,
37
+ unknown: count,
38
+ class_counts: speechCounts,
39
+ offset_frames: speechOffsets,
40
+ }).superRefine((s, ctx) => {
41
+ if (Object.values(s.class_counts).reduce((sum, n) => sum + n, 0) !== s.n) {
42
+ ctx.addIssue({ code: customIssue, message: "speech class counts must equal n" });
43
+ }
44
+ for (const name of speechClasses) {
45
+ if (s.offset_frames[name].n !== (s.class_counts[name] ?? 0)) {
46
+ ctx.addIssue({ code: customIssue, message: `speech offset count differs for ${name}` });
47
+ }
48
+ }
49
+ });
50
+ const profile = z.strictObject({
51
+ schema: z.literal("cut_style_profile_v1"),
52
+ fps: z.literal(25),
53
+ style_id: nonblank,
54
+ sources: z.array(z.strictObject({
55
+ sha256: z.string().regex(/^[a-fA-F0-9]{64}$/),
56
+ reviewed_shots: positiveCount,
57
+ image_shots: count,
58
+ aligned_cuts: count,
59
+ })).min(1),
60
+ speech_rules_available: z.boolean(),
61
+ pacing: z.strictObject({
62
+ global_image_frames: frameQuantiles,
63
+ by_phase: z.partialRecord(phase, frameQuantiles),
64
+ short_bursts: z.strictObject({ shot_count: count, n: count }),
65
+ }),
66
+ motion: z.strictObject({
67
+ pan_flip_probability: fraction.nullable(),
68
+ pan_transition_n: count,
69
+ pan_travel_fraction: fraction.nullable(),
70
+ pan_travel_n: count,
71
+ }),
72
+ opening_video: z.strictObject({
73
+ share: fraction,
74
+ n: count,
75
+ duration_frames: frameQuantiles,
76
+ }),
77
+ captions: z.strictObject({
78
+ n: count,
79
+ style: nonblank.nullable(), style_n: count,
80
+ position_fraction: fraction.nullable(), position_fraction_n: count,
81
+ color: nonblank.nullable(), color_n: count,
82
+ accent: nonblank.nullable(), accent_n: count,
83
+ changes_per_sec: quantiles(nonnegative),
84
+ }),
85
+ speech: speech.nullable(),
86
+ }).superRefine((p, ctx) => {
87
+ if (p.pacing.global_image_frames.n === 0) {
88
+ ctx.addIssue({ code: customIssue, message: "global image pace needs observations" });
89
+ }
90
+ if (p.speech_rules_available !== (p.speech !== null)) {
91
+ ctx.addIssue({ code: customIssue, message: "speech availability requires measured speech" });
92
+ }
93
+ if (p.speech !== null && p.speech.n + p.speech.unknown !==
94
+ p.sources.reduce((sum, source) => sum + source.aligned_cuts, 0)) {
95
+ ctx.addIssue({ code: customIssue, message: "speech samples must match aligned source cuts" });
96
+ }
97
+ for (const source of p.sources) {
98
+ if (source.aligned_cuts > Math.max(0, source.reviewed_shots - 1)) {
99
+ ctx.addIssue({ code: customIssue, message: "aligned cuts exceed reviewed shot boundaries" });
100
+ }
101
+ if (source.image_shots > source.reviewed_shots) {
102
+ ctx.addIssue({ code: customIssue, message: "image shots exceed reviewed shots" });
103
+ }
104
+ }
105
+ });
106
+ export function parseCutStyle(input) {
107
+ return profile.parse(input);
108
+ }
109
+ //# sourceMappingURL=faceless-cut-style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faceless-cut-style.js","sourceRoot":"","sources":["../src/faceless-cut-style.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { z } from "zod";
2
+ declare const plan: z.ZodObject<{
3
+ version: z.ZodLiteral<"faceless_image_v1">;
4
+ script: z.ZodString;
5
+ aspectRatio: z.ZodLiteral<"9:16">;
6
+ resolution: z.ZodLiteral<"1080p">;
7
+ brollPolicy: z.ZodEnum<{
8
+ anyone: "anyone";
9
+ no_actor: "no_actor";
10
+ no_people: "no_people";
11
+ }>;
12
+ assets: z.ZodArray<z.ZodObject<{
13
+ id: z.ZodString;
14
+ role: z.ZodEnum<{
15
+ character: "character";
16
+ scene: "scene";
17
+ style: "style";
18
+ }>;
19
+ source: z.ZodDiscriminatedUnion<[z.ZodObject<{
20
+ kind: z.ZodLiteral<"supplied">;
21
+ url: z.ZodURL;
22
+ }, z.core.$strict>, z.ZodObject<{
23
+ kind: z.ZodLiteral<"generated">;
24
+ prompt: z.ZodString;
25
+ styleId: z.ZodOptional<z.ZodString>;
26
+ characterIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
27
+ }, z.core.$strict>], "kind">;
28
+ }, z.core.$strict>>;
29
+ scenes: z.ZodArray<z.ZodObject<{
30
+ id: z.ZodString;
31
+ assetId: z.ZodString;
32
+ durationFrames: z.ZodNumber;
33
+ motion: z.ZodOptional<z.ZodObject<{
34
+ direction: z.ZodEnum<{
35
+ in: "in";
36
+ out: "out";
37
+ }>;
38
+ amount: z.ZodNumber;
39
+ }, z.core.$strict>>;
40
+ }, z.core.$strict>>;
41
+ }, z.core.$strict>;
42
+ export type FacelessImagePlan = z.infer<typeof plan>;
43
+ export declare function parseFacelessImagePlan(input: unknown): FacelessImagePlan;
44
+ export declare function quoteFacelessImage(input: unknown): {
45
+ pricingVersion: "faceless-image-v1-shadow";
46
+ aspectRatio: "9:16";
47
+ resolution: "1080p";
48
+ outputFrames: number;
49
+ outputSeconds: number;
50
+ credits: number;
51
+ customerCreditCeiling: number;
52
+ baseGeneratedImages: number;
53
+ maxGeneratedImages: number;
54
+ retryHeadroom: number;
55
+ costBreakdown: {
56
+ generatedImages: {
57
+ status: "unmeasured";
58
+ usd: null;
59
+ exposureBasis: "hypothetical_two_attempts_per_generated_asset_within_shared_allowance";
60
+ maxPaidAttemptsPerAsset: number;
61
+ maxPaidImageCalls: number;
62
+ };
63
+ tts: {
64
+ status: "unmeasured";
65
+ usd: null;
66
+ };
67
+ rendering: {
68
+ status: "unmeasured";
69
+ usd: null;
70
+ };
71
+ storage: {
72
+ status: "unmeasured";
73
+ usd: null;
74
+ };
75
+ paymentFees: {
76
+ status: "unmeasured";
77
+ usd: null;
78
+ };
79
+ paidFailures: {
80
+ status: "unmeasured";
81
+ usd: null;
82
+ };
83
+ };
84
+ totalCostUsd: null;
85
+ contributionMargin: null;
86
+ costQualified: boolean;
87
+ marginQualified: boolean;
88
+ sceneCount: number;
89
+ sceneSources: {
90
+ sceneId: string;
91
+ assetId: string;
92
+ sourceKind: "generated" | "supplied";
93
+ }[];
94
+ maxPaidAttempts: 0;
95
+ maxUsdSpend: 0;
96
+ };
97
+ export {};
@@ -0,0 +1,145 @@
1
+ import { z } from "zod";
2
+ import { brollPolicy } from "./broll-policy.js";
3
+ import { CANVAS_FPS } from "./media-timebase.js";
4
+ import { MAX_URL_LENGTH } from "./skills.js";
5
+ import { DEFAULT_TTS_MODEL, speechTextFor, TTS_MODEL_CHAR_CAP } from "./voices.js";
6
+ const id = z.string().min(1);
7
+ const suppliedSource = z.strictObject({
8
+ kind: z.literal("supplied"),
9
+ // Offline source eligibility only: remote bytes and geometry remain unqualified.
10
+ url: z.url().max(MAX_URL_LENGTH).refine(url => {
11
+ const source = new URL(url);
12
+ return source.protocol === "https:" && /\.(png|jpe?g)$/i.test(source.pathname);
13
+ }, "supplied image URL must use HTTPS with a PNG or JPEG path suffix"),
14
+ });
15
+ const generatedSource = z.strictObject({
16
+ kind: z.literal("generated"),
17
+ prompt: z.string().trim().min(1),
18
+ styleId: id.optional(),
19
+ characterIds: z.array(id).optional(),
20
+ });
21
+ const asset = z.strictObject({
22
+ id,
23
+ role: z.enum(["scene", "style", "character"]),
24
+ source: z.discriminatedUnion("kind", [suppliedSource, generatedSource]),
25
+ });
26
+ const scene = z.strictObject({
27
+ id,
28
+ assetId: id,
29
+ durationFrames: z.number().int().positive().refine(Number.isSafeInteger, "durationFrames must be a safe integer"),
30
+ motion: z.strictObject({ direction: z.enum(["in", "out"]), amount: z.number().min(0).lt(1) }).optional(),
31
+ });
32
+ const plan = z.strictObject({
33
+ version: z.literal("faceless_image_v1"),
34
+ script: z.string().trim().min(1).refine(text => speechTextFor(text, DEFAULT_TTS_MODEL).length <= TTS_MODEL_CHAR_CAP[DEFAULT_TTS_MODEL], `script exceeds ${DEFAULT_TTS_MODEL} limit of ${TTS_MODEL_CHAR_CAP[DEFAULT_TTS_MODEL]} characters after stress normalization`),
35
+ aspectRatio: z.literal("9:16"),
36
+ resolution: z.literal("1080p"),
37
+ brollPolicy,
38
+ assets: z.array(asset).min(1),
39
+ scenes: z.array(scene).min(1).max(100),
40
+ });
41
+ export function parseFacelessImagePlan(input) {
42
+ const parsed = plan.parse(input);
43
+ const assets = new Map();
44
+ for (const entry of parsed.assets) {
45
+ if (assets.has(entry.id))
46
+ throw new Error(`duplicate faceless IMAGE asset ID: ${entry.id}`);
47
+ if (entry.role !== "scene" && entry.source.kind === "generated" &&
48
+ (entry.source.styleId !== undefined || entry.source.characterIds !== undefined)) {
49
+ throw new Error(`faceless IMAGE references belong on scene assets: ${entry.id}`);
50
+ }
51
+ assets.set(entry.id, entry);
52
+ }
53
+ const used = new Set();
54
+ const sceneIds = new Set();
55
+ let sharedStyleId;
56
+ for (const entry of parsed.scenes) {
57
+ if (sceneIds.has(entry.id))
58
+ throw new Error(`duplicate faceless IMAGE scene ID: ${entry.id}`);
59
+ sceneIds.add(entry.id);
60
+ const image = assets.get(entry.assetId);
61
+ if (image?.role !== "scene")
62
+ throw new Error(`faceless IMAGE scene asset missing or wrong role: ${entry.assetId}`);
63
+ used.add(image.id);
64
+ if (image.source.kind === "generated") {
65
+ const style = image.source.styleId === undefined ? undefined : assets.get(image.source.styleId);
66
+ if (style?.role !== "style")
67
+ throw new Error(`faceless IMAGE style asset missing or wrong role: ${image.id}`);
68
+ if (sharedStyleId !== undefined && sharedStyleId !== style.id)
69
+ throw new Error("faceless IMAGE scenes require one shared style anchor");
70
+ sharedStyleId = style.id;
71
+ used.add(style.id);
72
+ const characters = image.source.characterIds ?? [];
73
+ if (parsed.brollPolicy !== "anyone" && characters.length > 0)
74
+ throw new Error("character references require the anyone policy");
75
+ if (new Set(characters).size !== characters.length)
76
+ throw new Error(`duplicate character reference: ${image.id}`);
77
+ for (const characterId of characters) {
78
+ const character = assets.get(characterId);
79
+ if (character?.role !== "character")
80
+ throw new Error(`faceless IMAGE character asset missing or wrong role: ${characterId}`);
81
+ used.add(characterId);
82
+ }
83
+ }
84
+ }
85
+ for (const entry of parsed.assets) {
86
+ if (!used.has(entry.id))
87
+ throw new Error(`unreferenced faceless IMAGE asset: ${entry.id}`);
88
+ }
89
+ const outputFrames = parsed.scenes.reduce((sum, entry) => sum + entry.durationFrames, 0);
90
+ if (!Number.isSafeInteger(outputFrames) || outputFrames > 300 * CANVAS_FPS)
91
+ throw new Error("faceless IMAGE exceeds 300 seconds");
92
+ const maxGeneratedImages = Math.floor((24 * outputFrames) / (60 * CANVAS_FPS));
93
+ const baseGeneratedImages = parsed.assets.filter(entry => entry.source.kind === "generated").length;
94
+ if (baseGeneratedImages > maxGeneratedImages)
95
+ throw new Error("faceless IMAGE exceeds generated image allowance");
96
+ return parsed;
97
+ }
98
+ export function quoteFacelessImage(input) {
99
+ const parsed = parseFacelessImagePlan(input);
100
+ const outputFrames = parsed.scenes.reduce((sum, entry) => sum + entry.durationFrames, 0);
101
+ const maxGeneratedImages = Math.floor((24 * outputFrames) / (60 * CANVAS_FPS));
102
+ const baseGeneratedImages = parsed.assets.filter(entry => entry.source.kind === "generated").length;
103
+ const raw = (180n * BigInt(outputFrames) + BigInt(60 * CANVAS_FPS - 1)) / BigInt(60 * CANVAS_FPS);
104
+ const credits = Number(raw > 200n ? raw : 200n);
105
+ const assetById = new Map(parsed.assets.map(entry => [entry.id, entry]));
106
+ return {
107
+ pricingVersion: "faceless-image-v1-shadow",
108
+ aspectRatio: parsed.aspectRatio,
109
+ resolution: parsed.resolution,
110
+ outputFrames,
111
+ outputSeconds: outputFrames / CANVAS_FPS,
112
+ credits,
113
+ customerCreditCeiling: credits,
114
+ baseGeneratedImages,
115
+ maxGeneratedImages,
116
+ retryHeadroom: maxGeneratedImages - baseGeneratedImages,
117
+ costBreakdown: {
118
+ generatedImages: {
119
+ status: "unmeasured",
120
+ usd: null,
121
+ exposureBasis: "hypothetical_two_attempts_per_generated_asset_within_shared_allowance",
122
+ maxPaidAttemptsPerAsset: 2,
123
+ maxPaidImageCalls: Math.min(maxGeneratedImages, 2 * baseGeneratedImages),
124
+ },
125
+ tts: { status: "unmeasured", usd: null },
126
+ rendering: { status: "unmeasured", usd: null },
127
+ storage: { status: "unmeasured", usd: null },
128
+ paymentFees: { status: "unmeasured", usd: null },
129
+ paidFailures: { status: "unmeasured", usd: null },
130
+ },
131
+ totalCostUsd: null,
132
+ contributionMargin: null,
133
+ costQualified: false,
134
+ marginQualified: false,
135
+ sceneCount: parsed.scenes.length,
136
+ sceneSources: parsed.scenes.map(entry => ({
137
+ sceneId: entry.id,
138
+ assetId: entry.assetId,
139
+ sourceKind: assetById.get(entry.assetId).source.kind,
140
+ })),
141
+ maxPaidAttempts: 0,
142
+ maxUsdSpend: 0,
143
+ };
144
+ }
145
+ //# sourceMappingURL=faceless-image-qualification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"faceless-image-qualification.js","sourceRoot":"","sources":["../src/faceless-image-qualification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import { z } from "zod";
2
+ export declare const SHORT61_BOUNDARIES: readonly [0, 93, 162, 309, 412, 472, 562, 643, 753, 822, 902, 948, 1010, 1081, 1192, 1243, 1316, 1344, 1373, 1410, 1447, 1484, 1522];
3
+ declare const plan: z.ZodObject<{
4
+ version: z.ZodLiteral<"faceless_short_61_v1">;
5
+ pricingVersion: z.ZodLiteral<"faceless-image-v1-shadow">;
6
+ budgetVersion: z.ZodLiteral<"short61-five-usd-provisional-v1">;
7
+ aspectRatio: z.ZodLiteral<"9:16">;
8
+ resolution: z.ZodLiteral<"1080p">;
9
+ brollPolicy: z.ZodEnum<{
10
+ anyone: "anyone";
11
+ no_actor: "no_actor";
12
+ no_people: "no_people";
13
+ }>;
14
+ script: z.ZodString;
15
+ voice: z.ZodObject<{
16
+ model: z.ZodEnum<{
17
+ eleven_flash_v2_5: "eleven_flash_v2_5";
18
+ eleven_turbo_v2_5: "eleven_turbo_v2_5";
19
+ eleven_v3: "eleven_v3";
20
+ }>;
21
+ voiceId: z.ZodString;
22
+ }, z.core.$strict>;
23
+ styleAssetId: z.ZodString;
24
+ characterAssetId: z.ZodString;
25
+ imageAssets: z.ZodArray<z.ZodObject<{
26
+ id: z.ZodString;
27
+ role: z.ZodEnum<{
28
+ character: "character";
29
+ scene: "scene";
30
+ style: "style";
31
+ }>;
32
+ prompt: z.ZodString;
33
+ origin: z.ZodEnum<{
34
+ new: "new";
35
+ prior_probe: "prior_probe";
36
+ }>;
37
+ styleAssetId: z.ZodOptional<z.ZodString>;
38
+ characterAssetIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
39
+ }, z.core.$strict>>;
40
+ replacementAttempts: z.ZodArray<z.ZodObject<{
41
+ id: z.ZodString;
42
+ replacesAssetId: z.ZodString;
43
+ prompt: z.ZodString;
44
+ }, z.core.$strict>>;
45
+ openingVideo: z.ZodObject<{
46
+ assetId: z.ZodString;
47
+ prompt: z.ZodString;
48
+ }, z.core.$strict>;
49
+ shots: z.ZodArray<z.ZodObject<{
50
+ id: z.ZodString;
51
+ mediaType: z.ZodEnum<{
52
+ image: "image";
53
+ video: "video";
54
+ }>;
55
+ assetId: z.ZodString;
56
+ startFrame: z.ZodNumber;
57
+ endFrame: z.ZodNumber;
58
+ motion: z.ZodOptional<z.ZodEnum<{
59
+ PAN_DOWN: "PAN_DOWN";
60
+ PAN_UP: "PAN_UP";
61
+ }>>;
62
+ }, z.core.$strict>>;
63
+ captionPhrases: z.ZodArray<z.ZodObject<{
64
+ wordStart: z.ZodNumber;
65
+ wordEnd: z.ZodNumber;
66
+ accentWord: z.ZodNumber;
67
+ }, z.core.$strict>>;
68
+ }, z.core.$strict>;
69
+ export type Short61Plan = z.infer<typeof plan>;
70
+ export type Short61Report = {
71
+ outputFrames: 1522;
72
+ imageAllowance: 24;
73
+ baseGeneratedImages: number;
74
+ replacementAttempts: number;
75
+ retryHeadroom: number;
76
+ imageOnlyComparisonCredits: 200;
77
+ videoPriceStatus: "unpriced";
78
+ maxPaidAttempts: 0;
79
+ maxUsdSpend: 0;
80
+ };
81
+ export declare function parseShort61Plan(input: unknown): Short61Plan;
82
+ export declare function reportShort61(input: unknown): Short61Report;
83
+ export {};