@clipwright/core 0.19.0 → 0.21.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.
- package/CHANGELOG.md +55 -0
- package/dist/__fixtures__/queue-promises.d.ts +5 -84
- package/dist/__fixtures__/queue-promises.js +7 -84
- package/dist/__fixtures__/queue-promises.js.map +1 -1
- package/dist/account-actors.d.ts +25 -25
- package/dist/account-actors.js +25 -25
- package/dist/account-actors.js.map +1 -1
- package/dist/account.d.ts +4 -10
- package/dist/account.js +6 -12
- package/dist/account.js.map +1 -1
- package/dist/actor-bounds.d.ts +4 -4
- package/dist/actor-bounds.js +4 -4
- package/dist/actor-bounds.js.map +1 -1
- package/dist/actor-qualities.d.ts +3 -3
- package/dist/actor-qualities.js +3 -3
- package/dist/actor-qualities.js.map +1 -1
- package/dist/actors.d.ts +8 -8
- package/dist/actors.js +9 -9
- package/dist/actors.js.map +1 -1
- package/dist/api-failure.d.ts +28 -129
- package/dist/api-failure.js +52 -225
- package/dist/api-failure.js.map +1 -1
- package/dist/aspect.d.ts +26 -96
- package/dist/aspect.js +32 -108
- package/dist/aspect.js.map +1 -1
- package/dist/contract-dispositions.d.ts +42 -167
- package/dist/contract-dispositions.js +54 -184
- package/dist/contract-dispositions.js.map +1 -1
- package/dist/endpoints.d.ts +5 -5
- package/dist/endpoints.js +5 -3
- package/dist/endpoints.js.map +1 -1
- package/dist/errors.d.ts +33 -101
- package/dist/errors.js +42 -108
- package/dist/errors.js.map +1 -1
- package/dist/faceless-cut-style.d.ts +115 -0
- package/dist/faceless-cut-style.js +109 -0
- package/dist/faceless-cut-style.js.map +1 -0
- package/dist/faceless-image-qualification.d.ts +97 -0
- package/dist/faceless-image-qualification.js +145 -0
- package/dist/faceless-image-qualification.js.map +1 -0
- package/dist/faceless-price.d.ts +21 -0
- package/dist/faceless-price.js +25 -0
- package/dist/faceless-price.js.map +1 -0
- package/dist/faceless-public-plan.d.ts +71 -0
- package/dist/faceless-public-plan.js +166 -0
- package/dist/faceless-public-plan.js.map +1 -0
- package/dist/faceless-public.d.ts +107 -0
- package/dist/faceless-public.js +74 -0
- package/dist/faceless-public.js.map +1 -0
- package/dist/faceless-short-61.d.ts +83 -0
- package/dist/faceless-short-61.js +152 -0
- package/dist/faceless-short-61.js.map +1 -0
- package/dist/faceless-storyboard-timing.d.ts +40 -0
- package/dist/faceless-storyboard-timing.js +97 -0
- package/dist/faceless-storyboard-timing.js.map +1 -0
- package/dist/faceless-storyboard-v2-plan.d.ts +3 -0
- package/dist/faceless-storyboard-v2-plan.js +112 -0
- package/dist/faceless-storyboard-v2-plan.js.map +1 -0
- package/dist/faceless-storyboard-v2-timing.d.ts +63 -0
- package/dist/faceless-storyboard-v2-timing.js +143 -0
- package/dist/faceless-storyboard-v2-timing.js.map +1 -0
- package/dist/faceless-storyboard-v2.d.ts +44 -0
- package/dist/faceless-storyboard-v2.js +43 -0
- package/dist/faceless-storyboard-v2.js.map +1 -0
- package/dist/faceless-storyboard.d.ts +55 -0
- package/dist/faceless-storyboard.js +105 -0
- package/dist/faceless-storyboard.js.map +1 -0
- package/dist/idempotency.d.ts +10 -44
- package/dist/idempotency.js +18 -44
- package/dist/idempotency.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +24 -25
- package/dist/index.js.map +1 -1
- package/dist/long-form-pricing.d.ts +4 -4
- package/dist/long-form-pricing.js +4 -4
- package/dist/long-form-pricing.js.map +1 -1
- package/dist/long-form-profile.d.ts +2 -2
- package/dist/long-form-profile.js +2 -2
- package/dist/long-form-profile.js.map +1 -1
- package/dist/pacing.d.ts +1 -1
- package/dist/pacing.js +1 -1
- package/dist/pacing.js.map +1 -1
- package/dist/public-endpoints.d.ts +9 -11
- package/dist/public-endpoints.js +11 -13
- package/dist/public-endpoints.js.map +1 -1
- package/dist/rate-limit.d.ts +23 -130
- package/dist/rate-limit.js +27 -132
- package/dist/rate-limit.js.map +1 -1
- package/dist/render-backend.d.ts +30 -145
- package/dist/render-backend.js +4 -27
- package/dist/render-backend.js.map +1 -1
- package/dist/run-preflight.d.ts +4 -4
- package/dist/run-preflight.js +10 -10
- package/dist/run-preflight.js.map +1 -1
- package/dist/run-static-warnings.d.ts +8 -8
- package/dist/run-static-warnings.js +26 -24
- package/dist/run-static-warnings.js.map +1 -1
- package/dist/runs.d.ts +34 -55
- package/dist/runs.js +28 -94
- package/dist/runs.js.map +1 -1
- package/dist/script-integrity.d.ts +6 -7
- package/dist/script-integrity.js +7 -8
- package/dist/script-integrity.js.map +1 -1
- package/dist/semantic-inserts.d.ts +4 -4
- package/dist/semantic-inserts.js +6 -6
- package/dist/semantic-inserts.js.map +1 -1
- package/dist/skills.d.ts +37 -108
- package/dist/skills.js +77 -161
- package/dist/skills.js.map +1 -1
- package/dist/tts-backend.d.ts +13 -42
- package/dist/tts-backend.js +2 -10
- package/dist/tts-backend.js.map +1 -1
- package/dist/uploads.d.ts +4 -4
- package/dist/uploads.js +4 -4
- package/dist/uploads.js.map +1 -1
- package/dist/vendor-response.d.ts +17 -80
- package/dist/vendor-response.js +19 -67
- package/dist/vendor-response.js.map +1 -1
- package/dist/voice-admission.d.ts +5 -5
- package/dist/voice-admission.js +6 -6
- package/dist/voice-admission.js.map +1 -1
- package/dist/voice-catalog-data.d.ts +2 -2
- package/dist/voice-catalog-data.js +2 -2
- package/dist/voice-catalog-data.js.map +1 -1
- package/dist/voice-catalog.d.ts +5 -5
- package/dist/voice-catalog.generated.json +56 -54
- package/dist/voice-catalog.js +6 -6
- package/dist/voice-catalog.js.map +1 -1
- package/dist/voice-listing.d.ts +4 -4
- package/dist/voice-listing.js +6 -6
- package/dist/voice-listing.js.map +1 -1
- package/dist/voices.d.ts +40 -82
- package/dist/voices.js +56 -99
- package/dist/voices.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { FACELESS_MIN_OUTPUT_FRAMES } from "./faceless-price.js";
|
|
3
|
+
import { parseCutStyle } from "./faceless-cut-style.js";
|
|
4
|
+
import { assertStoryboardWords } from "./faceless-storyboard.js";
|
|
5
|
+
import { facelessCutScore } from "./faceless-storyboard-v2-timing.js";
|
|
6
|
+
const index = z.number().int().nonnegative().safe();
|
|
7
|
+
const phrase = z.strictObject({ wordStart: index, wordEnd: index, accentWord: index });
|
|
8
|
+
const storySchema = z.strictObject({
|
|
9
|
+
script: z.string().trim().min(1),
|
|
10
|
+
narrationStartFrame: index.max(125),
|
|
11
|
+
beats: z.array(z.strictObject({
|
|
12
|
+
id: z.string().trim().min(1), wordStart: index, wordEnd: index,
|
|
13
|
+
mediaType: z.enum(["video", "image"]),
|
|
14
|
+
reason: z.enum(["place", "reveal", "action", "emphasis"]),
|
|
15
|
+
phase: z.enum(["setup", "development", "climax", "resolution"]),
|
|
16
|
+
visualPrompt: z.string().trim().min(1),
|
|
17
|
+
})).min(2),
|
|
18
|
+
captionPhrases: z.array(phrase).min(1).optional(),
|
|
19
|
+
});
|
|
20
|
+
const lexicalWordPattern = /[\p{L}\p{N}\p{M}]+(?:['’][\p{L}\p{N}\p{M}]+)*/gu;
|
|
21
|
+
export function facelessSpeechWordSpans(script) {
|
|
22
|
+
const matches = [...script.matchAll(lexicalWordPattern)];
|
|
23
|
+
const normalizedCount = script.normalize("NFKC").match(lexicalWordPattern)?.length ?? 0;
|
|
24
|
+
if (!matches.length || matches.length !== normalizedCount)
|
|
25
|
+
throw new Error("unsupported faceless script word boundaries");
|
|
26
|
+
const compactOffset = Array(script.length + 1).fill(0);
|
|
27
|
+
for (let i = 0; i < script.length; i++)
|
|
28
|
+
compactOffset[i + 1] = compactOffset[i] + (/\s/u.test(script[i]) ? 0 : 1);
|
|
29
|
+
return matches.map((match, index) => {
|
|
30
|
+
const first = index === 0 ? 0 : match.index;
|
|
31
|
+
const last = matches[index + 1]?.index ?? script.length;
|
|
32
|
+
return { word: script.slice(first, last).replace(/\s/gu, ""), start: compactOffset[first], end: compactOffset[last] };
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
export function facelessSpeechLexicalWords(script) {
|
|
36
|
+
return facelessSpeechWordSpans(script).map(({ word }) => {
|
|
37
|
+
const normalized = word.normalize("NFKC").match(lexicalWordPattern);
|
|
38
|
+
if (normalized?.length !== 1)
|
|
39
|
+
throw new Error("unsupported faceless lexical word");
|
|
40
|
+
return normalized[0].replace(/[’]/gu, "'").normalize("NFD")
|
|
41
|
+
.replace(/\p{M}/gu, "").toLocaleLowerCase("und");
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
export function parseFacelessPublicStory(input, expectedScript) {
|
|
45
|
+
if (expectedScript !== undefined && (typeof input !== "object" || input === null ||
|
|
46
|
+
input.script !== expectedScript))
|
|
47
|
+
throw new Error("faceless story changed supplied script");
|
|
48
|
+
const story = storySchema.parse(input);
|
|
49
|
+
const wordCount = facelessSpeechWordSpans(story.script).length;
|
|
50
|
+
const phases = ["setup", "development", "climax", "resolution"];
|
|
51
|
+
let nextWord = 0, lastPhase = 0;
|
|
52
|
+
const ids = new Set();
|
|
53
|
+
for (const [index, beat] of story.beats.entries()) {
|
|
54
|
+
const phase = phases.indexOf(beat.phase);
|
|
55
|
+
if (ids.has(beat.id) || beat.wordStart !== nextWord || beat.wordEnd <= beat.wordStart || beat.wordEnd > wordCount ||
|
|
56
|
+
beat.mediaType !== (index === 0 ? "video" : "image") || phase < lastPhase) {
|
|
57
|
+
throw new Error("faceless story beats must cover all words in phase order with one opening video");
|
|
58
|
+
}
|
|
59
|
+
ids.add(beat.id);
|
|
60
|
+
nextWord = beat.wordEnd;
|
|
61
|
+
lastPhase = phase;
|
|
62
|
+
}
|
|
63
|
+
if (nextWord !== wordCount)
|
|
64
|
+
throw new Error("faceless story beats do not cover all words");
|
|
65
|
+
if (story.captionPhrases) {
|
|
66
|
+
let end = 0;
|
|
67
|
+
for (const phrase of story.captionPhrases) {
|
|
68
|
+
if (phrase.wordStart !== end || phrase.wordEnd <= end || phrase.wordEnd > wordCount ||
|
|
69
|
+
phrase.accentWord < end || phrase.accentWord >= phrase.wordEnd)
|
|
70
|
+
throw new Error("invalid faceless caption phrase");
|
|
71
|
+
end = phrase.wordEnd;
|
|
72
|
+
}
|
|
73
|
+
if (end !== wordCount)
|
|
74
|
+
throw new Error("faceless caption phrases do not cover all words");
|
|
75
|
+
}
|
|
76
|
+
return story;
|
|
77
|
+
}
|
|
78
|
+
export function planPublicFacelessStory(input, words, inputStyle, outputFrames) {
|
|
79
|
+
if (!Number.isSafeInteger(outputFrames) || outputFrames < FACELESS_MIN_OUTPUT_FRAMES || outputFrames > 2250) {
|
|
80
|
+
throw new Error("public faceless output must be 625–2250 frames");
|
|
81
|
+
}
|
|
82
|
+
const story = parseFacelessPublicStory(input);
|
|
83
|
+
const style = parseCutStyle(inputStyle);
|
|
84
|
+
assertStoryboardWords(story.script, words);
|
|
85
|
+
const speechEnd = story.narrationStartFrame + words.at(-1).endSec * 25;
|
|
86
|
+
if (speechEnd > outputFrames + 1e-9 || outputFrames - speechEnd > 12.5 + 1e-9 ||
|
|
87
|
+
story.narrationStartFrame + words[0].startSec * 25 > 125)
|
|
88
|
+
throw new Error("speech duration outside public output bounds");
|
|
89
|
+
const phases = { setup: 0, development: 1, climax: 2, resolution: 3 };
|
|
90
|
+
const ids = new Set();
|
|
91
|
+
let nextWord = 0;
|
|
92
|
+
for (const [i, beat] of story.beats.entries()) {
|
|
93
|
+
if (ids.has(beat.id) || beat.wordStart !== nextWord || beat.wordEnd <= beat.wordStart || beat.wordEnd > words.length ||
|
|
94
|
+
beat.mediaType !== (i === 0 ? "video" : "image") ||
|
|
95
|
+
(i > 0 && phases[beat.phase] < phases[story.beats[i - 1].phase])) {
|
|
96
|
+
throw new Error("story beats require unique IDs, ordered phases, complete word coverage and one opening VIDEO");
|
|
97
|
+
}
|
|
98
|
+
nextWord = beat.wordEnd;
|
|
99
|
+
ids.add(beat.id);
|
|
100
|
+
}
|
|
101
|
+
if (nextWord !== words.length)
|
|
102
|
+
throw new Error("story beats must cover every word");
|
|
103
|
+
const captionPhrases = story.captionPhrases ?? story.beats.map(b => ({ wordStart: b.wordStart, wordEnd: b.wordEnd, accentWord: b.wordStart }));
|
|
104
|
+
nextWord = 0;
|
|
105
|
+
for (const p of captionPhrases) {
|
|
106
|
+
if (p.wordStart !== nextWord || p.wordEnd <= p.wordStart || p.wordEnd > words.length ||
|
|
107
|
+
p.accentWord < p.wordStart || p.accentWord >= p.wordEnd)
|
|
108
|
+
throw new Error("caption phrases must partition all words");
|
|
109
|
+
nextWord = p.wordEnd;
|
|
110
|
+
}
|
|
111
|
+
if (nextWord !== words.length)
|
|
112
|
+
throw new Error("caption phrases must cover all words");
|
|
113
|
+
const nodes = story.beats.slice(1).map((beat, i) => {
|
|
114
|
+
const afterWord = beat.wordStart - 1;
|
|
115
|
+
const frame = story.narrationStartFrame + Math.round((words[afterWord].endSec + words[afterWord + 1].startSec) / 2 * 25);
|
|
116
|
+
return { beatIndex: i + 1, afterWord, frame };
|
|
117
|
+
});
|
|
118
|
+
if (nodes[0].frame < 50 || nodes[0].frame > 125)
|
|
119
|
+
throw new Error("mandatory opening VIDEO requires 50–125 frames");
|
|
120
|
+
nodes.push({ beatIndex: story.beats.length, afterWord: words.length - 1, frame: outputFrames });
|
|
121
|
+
const final = nodes.length - 1;
|
|
122
|
+
const states = Array(nodes.length);
|
|
123
|
+
const openerScore = facelessCutScore(story.beats[1].reason, 0, { p25: 0, p75: 0 });
|
|
124
|
+
states[0] = { total: openerScore.net, path: [0], scores: [openerScore] };
|
|
125
|
+
for (let end = 1; end <= final; end++) {
|
|
126
|
+
for (let start = 0; start < end; start++) {
|
|
127
|
+
const prior = states[start];
|
|
128
|
+
const duration = nodes[end].frame - nodes[start].frame;
|
|
129
|
+
if (!prior || duration < 25 || duration > 150)
|
|
130
|
+
continue;
|
|
131
|
+
const phase = story.beats[nodes[start].beatIndex].phase;
|
|
132
|
+
const phaseRange = style.pacing.by_phase[phase];
|
|
133
|
+
const range = phaseRange && phaseRange.n > 0 ? phaseRange : style.pacing.global_image_frames;
|
|
134
|
+
const score = facelessCutScore(end === final ? null : story.beats[nodes[end].beatIndex].reason, duration, range);
|
|
135
|
+
const candidate = { total: prior.total + score.net, path: [...prior.path, end], scores: [...prior.scores, score] };
|
|
136
|
+
const best = states[end];
|
|
137
|
+
const firstDifference = best ? candidate.path.findIndex((v, i) => v !== best.path[i]) : -1;
|
|
138
|
+
if (!best || candidate.total > best.total + 1e-9 || (Math.abs(candidate.total - best.total) <= 1e-9 &&
|
|
139
|
+
(candidate.path.length < best.path.length || (candidate.path.length === best.path.length && firstDifference >= 0 &&
|
|
140
|
+
candidate.path[firstDifference] < best.path[firstDifference]))))
|
|
141
|
+
states[end] = candidate;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const selected = states[final];
|
|
145
|
+
if (!selected)
|
|
146
|
+
throw new Error("no feasible public storyboard within IMAGE duration bounds");
|
|
147
|
+
let startFrame = 0;
|
|
148
|
+
let beatStart = 0;
|
|
149
|
+
const shots = selected.path.map((nodeIndex, i) => {
|
|
150
|
+
const node = nodes[nodeIndex];
|
|
151
|
+
const included = story.beats.slice(beatStart, node.beatIndex);
|
|
152
|
+
const hold = style.motion.pan_transition_n > 0 && style.motion.pan_flip_probability !== null && style.motion.pan_flip_probability < .5;
|
|
153
|
+
const shot = {
|
|
154
|
+
id: included[0].id, mediaType: i ? "image" : "video", startFrame, endFrame: node.frame,
|
|
155
|
+
beatIds: included.map(b => b.id), visualPrompts: included.map(b => b.visualPrompt), phase: included[0].phase,
|
|
156
|
+
...(i ? { motion: hold || i % 2 === 1 ? "PAN_UP" : "PAN_DOWN" } : {}),
|
|
157
|
+
...(nodeIndex < final ? { cutAfterWord: node.afterWord } : {}), score: selected.scores[i],
|
|
158
|
+
};
|
|
159
|
+
startFrame = node.frame;
|
|
160
|
+
beatStart = node.beatIndex;
|
|
161
|
+
return shot;
|
|
162
|
+
});
|
|
163
|
+
return { version: "faceless_public_v1", outputFrames, script: story.script, words: words.map(w => ({ ...w })),
|
|
164
|
+
narrationStartFrame: story.narrationStartFrame, captionPhrases, shots };
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=faceless-public-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faceless-public-plan.js","sourceRoot":"","sources":["../src/faceless-public-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const facelessSceneAnchor: z.ZodUnion<readonly [z.ZodObject<{
|
|
3
|
+
startWord: z.ZodNumber;
|
|
4
|
+
endWord: z.ZodNumber;
|
|
5
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
6
|
+
quote: z.ZodString;
|
|
7
|
+
occurrence: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
}, z.core.$strict>]>;
|
|
9
|
+
export type FacelessSceneAnchor = z.infer<typeof facelessSceneAnchor>;
|
|
10
|
+
export declare const facelessCustomerSceneImage: z.ZodObject<{
|
|
11
|
+
image_url: z.ZodString;
|
|
12
|
+
anchor: z.ZodUnion<readonly [z.ZodObject<{
|
|
13
|
+
startWord: z.ZodNumber;
|
|
14
|
+
endWord: z.ZodNumber;
|
|
15
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
16
|
+
quote: z.ZodString;
|
|
17
|
+
occurrence: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
}, z.core.$strict>]>;
|
|
19
|
+
}, z.core.$strict>;
|
|
20
|
+
export type FacelessCustomerSceneImage = z.infer<typeof facelessCustomerSceneImage>;
|
|
21
|
+
export declare const makeFacelessInput: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
22
|
+
duration_seconds: z.ZodNumber;
|
|
23
|
+
style_reference: z.ZodOptional<z.ZodString>;
|
|
24
|
+
character_reference: z.ZodOptional<z.ZodString>;
|
|
25
|
+
scene_images: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
26
|
+
image_url: z.ZodString;
|
|
27
|
+
anchor: z.ZodUnion<readonly [z.ZodObject<{
|
|
28
|
+
startWord: z.ZodNumber;
|
|
29
|
+
endWord: z.ZodNumber;
|
|
30
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
31
|
+
quote: z.ZodString;
|
|
32
|
+
occurrence: z.ZodOptional<z.ZodNumber>;
|
|
33
|
+
}, z.core.$strict>]>;
|
|
34
|
+
}, z.core.$strict>>>;
|
|
35
|
+
captions: z.ZodDefault<z.ZodBoolean>;
|
|
36
|
+
input_mode: z.ZodLiteral<"script">;
|
|
37
|
+
script: z.ZodString;
|
|
38
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
39
|
+
duration_seconds: z.ZodNumber;
|
|
40
|
+
style_reference: z.ZodOptional<z.ZodString>;
|
|
41
|
+
character_reference: z.ZodOptional<z.ZodString>;
|
|
42
|
+
scene_images: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
43
|
+
image_url: z.ZodString;
|
|
44
|
+
anchor: z.ZodUnion<readonly [z.ZodObject<{
|
|
45
|
+
startWord: z.ZodNumber;
|
|
46
|
+
endWord: z.ZodNumber;
|
|
47
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
48
|
+
quote: z.ZodString;
|
|
49
|
+
occurrence: z.ZodOptional<z.ZodNumber>;
|
|
50
|
+
}, z.core.$strict>]>;
|
|
51
|
+
}, z.core.$strict>>>;
|
|
52
|
+
captions: z.ZodDefault<z.ZodBoolean>;
|
|
53
|
+
input_mode: z.ZodLiteral<"brief">;
|
|
54
|
+
brief: z.ZodString;
|
|
55
|
+
}, z.core.$strict>], "input_mode">;
|
|
56
|
+
export type MakeFacelessInput = z.infer<typeof makeFacelessInput>;
|
|
57
|
+
export type MakeFacelessInputArgs = z.input<typeof makeFacelessInput>;
|
|
58
|
+
/** The API routes repeat these paths as literals, and a test keeps them equal. */
|
|
59
|
+
export declare const FACELESS_QUOTE_PATH = "/v1/skills/make_faceless/quote";
|
|
60
|
+
export declare const FACELESS_RUN_PATH = "/v1/skills/make_faceless/run";
|
|
61
|
+
/** Flat form of `makeFacelessInput` for MCP, which needs an object shape, not a union. */
|
|
62
|
+
/** Clients still parse with `makeFacelessInput` before sending, so the union stays the contract. */
|
|
63
|
+
export declare const offeredFacelessInputShape: {
|
|
64
|
+
input_mode: z.ZodEnum<{
|
|
65
|
+
brief: "brief";
|
|
66
|
+
script: "script";
|
|
67
|
+
}>;
|
|
68
|
+
script: z.ZodOptional<z.ZodString>;
|
|
69
|
+
brief: z.ZodOptional<z.ZodString>;
|
|
70
|
+
duration_seconds: z.ZodNumber;
|
|
71
|
+
style_reference: z.ZodOptional<z.ZodString>;
|
|
72
|
+
character_reference: z.ZodOptional<z.ZodString>;
|
|
73
|
+
scene_images: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
74
|
+
image_url: z.ZodString;
|
|
75
|
+
anchor: z.ZodUnion<readonly [z.ZodObject<{
|
|
76
|
+
startWord: z.ZodNumber;
|
|
77
|
+
endWord: z.ZodNumber;
|
|
78
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
79
|
+
quote: z.ZodString;
|
|
80
|
+
occurrence: z.ZodOptional<z.ZodNumber>;
|
|
81
|
+
}, z.core.$strict>]>;
|
|
82
|
+
}, z.core.$strict>>>;
|
|
83
|
+
captions: z.ZodDefault<z.ZodBoolean>;
|
|
84
|
+
};
|
|
85
|
+
export declare const facelessPlannerInput: z.ZodObject<{
|
|
86
|
+
script: z.ZodString;
|
|
87
|
+
outputFrames: z.ZodNumber;
|
|
88
|
+
captions: z.ZodBoolean;
|
|
89
|
+
words: z.ZodArray<z.ZodObject<{
|
|
90
|
+
word: z.ZodString;
|
|
91
|
+
startSec: z.ZodNumber;
|
|
92
|
+
endSec: z.ZodNumber;
|
|
93
|
+
}, z.core.$strict>>;
|
|
94
|
+
}, z.core.$strict>;
|
|
95
|
+
export type FacelessPlannerInput = z.infer<typeof facelessPlannerInput>;
|
|
96
|
+
export declare const facelessQuoteResponse: z.ZodObject<{
|
|
97
|
+
outputFrames: z.ZodNumber;
|
|
98
|
+
baseCredits: z.ZodNumber;
|
|
99
|
+
openerCredits: z.ZodNumber;
|
|
100
|
+
totalCredits: z.ZodNumber;
|
|
101
|
+
tariffId: z.ZodLiteral<"faceless-image-i2v-v1">;
|
|
102
|
+
captions: z.ZodBoolean;
|
|
103
|
+
skill: z.ZodLiteral<"make_faceless">;
|
|
104
|
+
warnings: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
105
|
+
contract_version: z.ZodString;
|
|
106
|
+
}, z.core.$strict>;
|
|
107
|
+
export type FacelessQuoteResponse = z.infer<typeof facelessQuoteResponse>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { uploadResponse } from "./uploads.js";
|
|
3
|
+
import { MAX_URL_LENGTH } from "./skills.js";
|
|
4
|
+
import { FACELESS_MIN_OUTPUT_FRAMES, facelessQuote } from "./faceless-price.js";
|
|
5
|
+
const qualifiedImageUrl = uploadResponse.shape.url.max(MAX_URL_LENGTH).refine((value) => {
|
|
6
|
+
const host = new URL(value).hostname.toLowerCase();
|
|
7
|
+
return host !== "localhost" && !host.endsWith(".localhost") &&
|
|
8
|
+
host !== "127.0.0.1" && host !== "[::1]" &&
|
|
9
|
+
!/^10\.|^192\.168\.|^169\.254\.|^172\.(1[6-9]|2\d|3[01])\./.test(host);
|
|
10
|
+
}, "image must use a qualified public https source");
|
|
11
|
+
export const facelessSceneAnchor = z.union([
|
|
12
|
+
z.object({ startWord: z.number().int().nonnegative(), endWord: z.number().int().positive() })
|
|
13
|
+
.strict().refine((range) => range.endWord > range.startWord),
|
|
14
|
+
z.object({ quote: z.string().trim().min(1).max(500), occurrence: z.number().int().nonnegative().optional() }).strict(),
|
|
15
|
+
]);
|
|
16
|
+
export const facelessCustomerSceneImage = z.object({
|
|
17
|
+
image_url: qualifiedImageUrl,
|
|
18
|
+
anchor: facelessSceneAnchor,
|
|
19
|
+
}).strict();
|
|
20
|
+
const common = {
|
|
21
|
+
duration_seconds: z.number().min(30).max(90).refine((seconds) => Number.isInteger(seconds * 25), "duration_seconds must align to a 25 fps frame boundary"),
|
|
22
|
+
style_reference: qualifiedImageUrl.optional(),
|
|
23
|
+
character_reference: qualifiedImageUrl.optional(),
|
|
24
|
+
scene_images: z.array(facelessCustomerSceneImage).max(30).optional(),
|
|
25
|
+
captions: z.boolean().default(true),
|
|
26
|
+
};
|
|
27
|
+
const scriptInput = z.object({ ...common,
|
|
28
|
+
input_mode: z.literal("script"),
|
|
29
|
+
script: z.string().trim().min(1).max(10_000),
|
|
30
|
+
}).strict();
|
|
31
|
+
const briefInput = z.object({ ...common,
|
|
32
|
+
input_mode: z.literal("brief"),
|
|
33
|
+
brief: z.string().trim().min(1).max(5_000),
|
|
34
|
+
}).strict();
|
|
35
|
+
export const makeFacelessInput = z.discriminatedUnion("input_mode", [scriptInput, briefInput]);
|
|
36
|
+
/** The API routes repeat these paths as literals, and a test keeps them equal. */
|
|
37
|
+
export const FACELESS_QUOTE_PATH = "/v1/skills/make_faceless/quote";
|
|
38
|
+
export const FACELESS_RUN_PATH = "/v1/skills/make_faceless/run";
|
|
39
|
+
/** Flat form of `makeFacelessInput` for MCP, which needs an object shape, not a union. */
|
|
40
|
+
/** Clients still parse with `makeFacelessInput` before sending, so the union stays the contract. */
|
|
41
|
+
export const offeredFacelessInputShape = {
|
|
42
|
+
input_mode: z.enum(["script", "brief"])
|
|
43
|
+
.describe("'script' narrates your exact text; 'brief' writes the narration from a short description. Send exactly one of script or brief, matching this mode."),
|
|
44
|
+
script: scriptInput.shape.script.optional()
|
|
45
|
+
.describe("The narration, read as written. Required when input_mode is 'script'; must be absent when it is 'brief'."),
|
|
46
|
+
brief: briefInput.shape.brief.optional()
|
|
47
|
+
.describe("What the video is about; the narration is written from it. Required when input_mode is 'brief'; must be absent when it is 'script'."),
|
|
48
|
+
duration_seconds: common.duration_seconds
|
|
49
|
+
.describe("Selected length, 30 to 90 seconds, on a 1/25 s frame boundary. The video ends with its narration, runs at least 25 seconds and may exceed the selection by up to 5 seconds, never beyond 90 seconds. The charge never exceeds the quote. A script must fit this output range."),
|
|
50
|
+
style_reference: common.style_reference
|
|
51
|
+
.describe("Optional public https image whose visual style the scenes follow."),
|
|
52
|
+
character_reference: common.character_reference
|
|
53
|
+
.describe("Optional public https image of a person or figure to keep consistent across scenes."),
|
|
54
|
+
scene_images: common.scene_images
|
|
55
|
+
.describe("Optional images of your own, each placed at a word range or quote of the narration."),
|
|
56
|
+
captions: common.captions.describe("Burned-in captions; on by default."),
|
|
57
|
+
};
|
|
58
|
+
const wordTiming = z.object({
|
|
59
|
+
word: z.string().trim().min(1),
|
|
60
|
+
startSec: z.number().nonnegative(),
|
|
61
|
+
endSec: z.number().positive(),
|
|
62
|
+
}).strict().refine((word) => word.endSec > word.startSec);
|
|
63
|
+
export const facelessPlannerInput = z.object({
|
|
64
|
+
script: z.string().trim().min(1),
|
|
65
|
+
outputFrames: z.number().int().min(FACELESS_MIN_OUTPUT_FRAMES).max(2250),
|
|
66
|
+
captions: z.boolean(),
|
|
67
|
+
words: z.array(wordTiming).min(1),
|
|
68
|
+
}).strict();
|
|
69
|
+
export const facelessQuoteResponse = facelessQuote.extend({
|
|
70
|
+
skill: z.literal("make_faceless"),
|
|
71
|
+
warnings: z.array(z.string()).default([]),
|
|
72
|
+
contract_version: z.string().min(1),
|
|
73
|
+
}).strict();
|
|
74
|
+
//# sourceMappingURL=faceless-public.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faceless-public.js","sourceRoot":"","sources":["../src/faceless-public.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 {};
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { brollPolicy } from "./broll-policy.js";
|
|
3
|
+
import { CANVAS_FPS } from "./media-timebase.js";
|
|
4
|
+
import { speechTextFor, TTS_MODEL_CHAR_CAP, TTS_MODELS } from "./voices.js";
|
|
5
|
+
export const SHORT61_BOUNDARIES = [
|
|
6
|
+
0, 93, 162, 309, 412, 472, 562, 643, 753, 822, 902, 948,
|
|
7
|
+
1010, 1081, 1192, 1243, 1316, 1344, 1373, 1410, 1447, 1484, 1522,
|
|
8
|
+
];
|
|
9
|
+
const id = z.string().trim().min(1);
|
|
10
|
+
const imageAsset = z.strictObject({
|
|
11
|
+
id,
|
|
12
|
+
role: z.enum(["scene", "style", "character"]),
|
|
13
|
+
prompt: z.string().trim().min(1),
|
|
14
|
+
origin: z.enum(["prior_probe", "new"]),
|
|
15
|
+
styleAssetId: id.optional(),
|
|
16
|
+
characterAssetIds: z.array(id).optional(),
|
|
17
|
+
});
|
|
18
|
+
const replacementAttempt = z.strictObject({
|
|
19
|
+
id,
|
|
20
|
+
replacesAssetId: id,
|
|
21
|
+
prompt: z.string().trim().min(1),
|
|
22
|
+
});
|
|
23
|
+
const shot = z.strictObject({
|
|
24
|
+
id,
|
|
25
|
+
mediaType: z.enum(["video", "image"]),
|
|
26
|
+
assetId: id,
|
|
27
|
+
startFrame: z.number().int().nonnegative().safe(),
|
|
28
|
+
endFrame: z.number().int().positive().safe(),
|
|
29
|
+
motion: z.enum(["PAN_UP", "PAN_DOWN"]).optional(),
|
|
30
|
+
});
|
|
31
|
+
const captionPhrase = z.strictObject({
|
|
32
|
+
wordStart: z.number().int().nonnegative(),
|
|
33
|
+
wordEnd: z.number().int().positive(),
|
|
34
|
+
accentWord: z.number().int().nonnegative(),
|
|
35
|
+
});
|
|
36
|
+
const plan = z.strictObject({
|
|
37
|
+
version: z.literal("faceless_short_61_v1"),
|
|
38
|
+
pricingVersion: z.literal("faceless-image-v1-shadow"),
|
|
39
|
+
budgetVersion: z.literal("short61-five-usd-provisional-v1"),
|
|
40
|
+
aspectRatio: z.literal("9:16"),
|
|
41
|
+
resolution: z.literal("1080p"),
|
|
42
|
+
brollPolicy,
|
|
43
|
+
script: z.string().trim().min(1),
|
|
44
|
+
voice: z.strictObject({ model: z.enum(TTS_MODELS), voiceId: id }),
|
|
45
|
+
styleAssetId: id,
|
|
46
|
+
characterAssetId: id,
|
|
47
|
+
imageAssets: z.array(imageAsset),
|
|
48
|
+
replacementAttempts: z.array(replacementAttempt),
|
|
49
|
+
openingVideo: z.strictObject({ assetId: id, prompt: z.string().trim().min(1) }),
|
|
50
|
+
shots: z.array(shot).length(22),
|
|
51
|
+
captionPhrases: z.array(captionPhrase).min(1),
|
|
52
|
+
});
|
|
53
|
+
export function parseShort61Plan(input) {
|
|
54
|
+
const parsed = plan.parse(input);
|
|
55
|
+
if (speechTextFor(parsed.script, parsed.voice.model).length > TTS_MODEL_CHAR_CAP[parsed.voice.model]) {
|
|
56
|
+
throw new Error("short61 script exceeds the selected speech model limit");
|
|
57
|
+
}
|
|
58
|
+
if (parsed.brollPolicy !== "anyone")
|
|
59
|
+
throw new Error("short61 Mira scenes require the anyone policy");
|
|
60
|
+
const assets = new Map();
|
|
61
|
+
for (const asset of parsed.imageAssets) {
|
|
62
|
+
if (assets.has(asset.id) || asset.id === parsed.openingVideo.assetId)
|
|
63
|
+
throw new Error(`duplicate short61 asset ID: ${asset.id}`);
|
|
64
|
+
assets.set(asset.id, asset);
|
|
65
|
+
}
|
|
66
|
+
if (assets.get(parsed.styleAssetId)?.role !== "style" || assets.get(parsed.characterAssetId)?.role !== "character") {
|
|
67
|
+
throw new Error("short61 style and character references have wrong roles");
|
|
68
|
+
}
|
|
69
|
+
if (parsed.styleAssetId === parsed.characterAssetId)
|
|
70
|
+
throw new Error("short61 reference IDs must differ");
|
|
71
|
+
const sceneAssets = parsed.imageAssets.filter(asset => asset.role === "scene");
|
|
72
|
+
if (sceneAssets.length !== 21 || parsed.imageAssets.length !== 23) {
|
|
73
|
+
throw new Error("short61 requires 21 scenes and two shared references");
|
|
74
|
+
}
|
|
75
|
+
for (const asset of parsed.imageAssets) {
|
|
76
|
+
if (asset.role !== "scene") {
|
|
77
|
+
if (asset.styleAssetId !== undefined || asset.characterAssetIds !== undefined) {
|
|
78
|
+
throw new Error(`short61 references belong only on scene assets: ${asset.id}`);
|
|
79
|
+
}
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (asset.styleAssetId !== parsed.styleAssetId ||
|
|
83
|
+
asset.characterAssetIds?.length !== 1 ||
|
|
84
|
+
asset.characterAssetIds[0] !== parsed.characterAssetId) {
|
|
85
|
+
throw new Error(`short61 scene ${asset.id} must use shared style and Mira references`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const usedImages = new Set();
|
|
89
|
+
const shotIds = new Set();
|
|
90
|
+
for (let i = 0; i < parsed.shots.length; i++) {
|
|
91
|
+
const current = parsed.shots[i];
|
|
92
|
+
if (shotIds.has(current.id))
|
|
93
|
+
throw new Error(`duplicate short61 shot ID: ${current.id}`);
|
|
94
|
+
shotIds.add(current.id);
|
|
95
|
+
if (current.id !== `shot_${i + 1}` ||
|
|
96
|
+
current.startFrame !== SHORT61_BOUNDARIES[i] ||
|
|
97
|
+
current.endFrame !== SHORT61_BOUNDARIES[i + 1] ||
|
|
98
|
+
current.mediaType !== (i === 0 ? "video" : "image") ||
|
|
99
|
+
(i === 0 && (current.assetId !== parsed.openingVideo.assetId || current.motion !== undefined)) ||
|
|
100
|
+
(i > 0 && current.motion !== (i % 2 === 1 ? "PAN_UP" : "PAN_DOWN"))) {
|
|
101
|
+
throw new Error(`short61 shot ${i + 1} differs from the frozen frame plan`);
|
|
102
|
+
}
|
|
103
|
+
if (i > 0) {
|
|
104
|
+
if (assets.get(current.assetId)?.role !== "scene" || usedImages.has(current.assetId)) {
|
|
105
|
+
throw new Error(`short61 shot ${i + 1} needs a distinct scene image`);
|
|
106
|
+
}
|
|
107
|
+
usedImages.add(current.assetId);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
for (const asset of sceneAssets) {
|
|
111
|
+
if (!usedImages.has(asset.id))
|
|
112
|
+
throw new Error(`unreferenced short61 scene image: ${asset.id}`);
|
|
113
|
+
}
|
|
114
|
+
const attemptIds = new Set(assets.keys());
|
|
115
|
+
attemptIds.add(parsed.openingVideo.assetId);
|
|
116
|
+
for (const attempt of parsed.replacementAttempts) {
|
|
117
|
+
if (attemptIds.has(attempt.id))
|
|
118
|
+
throw new Error(`duplicate short61 replacement ID: ${attempt.id}`);
|
|
119
|
+
attemptIds.add(attempt.id);
|
|
120
|
+
if (assets.get(attempt.replacesAssetId)?.role !== "scene") {
|
|
121
|
+
throw new Error(`short61 replacement target is not a scene: ${attempt.replacesAssetId}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const outputFrames = SHORT61_BOUNDARIES.at(-1);
|
|
125
|
+
const imageAllowance = Math.floor(24 * outputFrames / (60 * CANVAS_FPS));
|
|
126
|
+
if (parsed.imageAssets.length + parsed.replacementAttempts.length > imageAllowance) {
|
|
127
|
+
throw new Error("short61 image allowance exceeded");
|
|
128
|
+
}
|
|
129
|
+
for (const phrase of parsed.captionPhrases) {
|
|
130
|
+
if (phrase.wordEnd <= phrase.wordStart || phrase.accentWord < phrase.wordStart || phrase.accentWord >= phrase.wordEnd) {
|
|
131
|
+
throw new Error("short61 caption phrase indices are invalid");
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return parsed;
|
|
135
|
+
}
|
|
136
|
+
export function reportShort61(input) {
|
|
137
|
+
const parsed = parseShort61Plan(input);
|
|
138
|
+
const baseGeneratedImages = parsed.imageAssets.length;
|
|
139
|
+
const replacementAttempts = parsed.replacementAttempts.length;
|
|
140
|
+
return {
|
|
141
|
+
outputFrames: 1522,
|
|
142
|
+
imageAllowance: 24,
|
|
143
|
+
baseGeneratedImages,
|
|
144
|
+
replacementAttempts,
|
|
145
|
+
retryHeadroom: 24 - baseGeneratedImages - replacementAttempts,
|
|
146
|
+
imageOnlyComparisonCredits: 200,
|
|
147
|
+
videoPriceStatus: "unpriced",
|
|
148
|
+
maxPaidAttempts: 0,
|
|
149
|
+
maxUsdSpend: 0,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=faceless-short-61.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faceless-short-61.js","sourceRoot":"","sources":["../src/faceless-short-61.ts"],"names":[],"mappings":"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"}
|