@clipwright/core 0.26.1 → 0.28.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 +80 -0
- package/README.md +5 -0
- package/dist/api-failure.d.ts +68 -1
- package/dist/api-failure.js +119 -1
- package/dist/api-failure.js.map +1 -1
- package/dist/contract-dispositions.js +3 -3
- package/dist/contract-dispositions.js.map +1 -1
- package/dist/contracts/v1/workflow-brief.d.ts +402 -0
- package/dist/contracts/v1/workflow-brief.js +40 -0
- package/dist/contracts/v1/workflow-brief.js.map +1 -0
- package/dist/contracts/v1/workflow-catalog.d.ts +1060 -0
- package/dist/contracts/v1/workflow-catalog.js +45 -0
- package/dist/contracts/v1/workflow-catalog.js.map +1 -0
- package/dist/contracts/v1/workflow-dto.d.ts +18 -0
- package/dist/contracts/v1/workflow-dto.js +25 -0
- package/dist/contracts/v1/workflow-dto.js.map +1 -0
- package/dist/contracts/v1/workflow-evidence.d.ts +115 -0
- package/dist/contracts/v1/workflow-evidence.js +33 -0
- package/dist/contracts/v1/workflow-evidence.js.map +1 -0
- package/dist/contracts/v1/workflow-execution.d.ts +235 -0
- package/dist/contracts/v1/workflow-execution.js +33 -0
- package/dist/contracts/v1/workflow-execution.js.map +1 -0
- package/dist/contracts/v1/workflow-plan.d.ts +1057 -0
- package/dist/contracts/v1/workflow-plan.js +26 -0
- package/dist/contracts/v1/workflow-plan.js.map +1 -0
- package/dist/contracts/v1/workflow-primitives.d.ts +62 -0
- package/dist/contracts/v1/workflow-primitives.js +16 -0
- package/dist/contracts/v1/workflow-primitives.js.map +1 -0
- package/dist/edit-billing.d.ts +65 -0
- package/dist/edit-billing.js +30 -0
- package/dist/edit-billing.js.map +1 -0
- package/dist/edit-document.d.ts +335 -0
- package/dist/edit-document.js +110 -0
- package/dist/edit-document.js.map +1 -0
- package/dist/edit-faceless.d.ts +24 -0
- package/dist/edit-faceless.js +39 -0
- package/dist/edit-faceless.js.map +1 -0
- package/dist/edit-operations.d.ts +34 -0
- package/dist/edit-operations.js +13 -0
- package/dist/edit-operations.js.map +1 -0
- package/dist/edit-primitives.d.ts +8 -0
- package/dist/edit-primitives.js +12 -0
- package/dist/edit-primitives.js.map +1 -0
- package/dist/edit-revision.d.ts +162 -0
- package/dist/edit-revision.js +36 -0
- package/dist/edit-revision.js.map +1 -0
- package/dist/edit-rules.d.ts +60 -0
- package/dist/edit-rules.js +44 -0
- package/dist/edit-rules.js.map +1 -0
- package/dist/edit-shots.d.ts +548 -0
- package/dist/edit-shots.js +61 -0
- package/dist/edit-shots.js.map +1 -0
- package/dist/edit-validate.d.ts +57 -0
- package/dist/edit-validate.js +248 -0
- package/dist/edit-validate.js.map +1 -0
- package/dist/edit.d.ts +8 -0
- package/dist/edit.js +10 -0
- package/dist/edit.js.map +1 -0
- package/dist/endpoints.d.ts +5 -0
- package/dist/endpoints.js +35 -19
- package/dist/endpoints.js.map +1 -1
- package/dist/errors.d.ts +125 -1
- package/dist/errors.js +129 -0
- package/dist/errors.js.map +1 -1
- package/dist/faceless-media-record.d.ts +100 -0
- package/dist/faceless-media-record.js +25 -0
- package/dist/faceless-media-record.js.map +1 -0
- package/dist/faceless-public-plan.d.ts +1 -0
- package/dist/faceless-public-plan.js +2 -1
- package/dist/faceless-public-plan.js.map +1 -1
- package/dist/faceless-public.d.ts +254 -0
- package/dist/faceless-public.js +11 -0
- package/dist/faceless-public.js.map +1 -1
- package/dist/idempotency.d.ts +2 -0
- package/dist/idempotency.js +9 -0
- package/dist/idempotency.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/runs.d.ts +52 -0
- package/dist/runs.js +15 -2
- package/dist/runs.js.map +1 -1
- package/dist/uploads.d.ts +4 -2
- package/dist/uploads.js +5 -3
- package/dist/uploads.js.map +1 -1
- package/dist/workflows/catalog.d.ts +4 -0
- package/dist/workflows/catalog.js +57 -0
- package/dist/workflows/catalog.js.map +1 -0
- package/dist/workflows/index.d.ts +9 -0
- package/dist/workflows/index.js +10 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/methods/faceless-explainer.d.ts +175 -0
- package/dist/workflows/methods/faceless-explainer.js +20 -0
- package/dist/workflows/methods/faceless-explainer.js.map +1 -0
- package/dist/workflows/methods/kinetic-launch.d.ts +175 -0
- package/dist/workflows/methods/kinetic-launch.js +19 -0
- package/dist/workflows/methods/kinetic-launch.js.map +1 -0
- package/dist/workflows/methods/product-image-story.d.ts +175 -0
- package/dist/workflows/methods/product-image-story.js +20 -0
- package/dist/workflows/methods/product-image-story.js.map +1 -0
- package/dist/workflows/methods/shared.d.ts +190 -0
- package/dist/workflows/methods/shared.js +13 -0
- package/dist/workflows/methods/shared.js.map +1 -0
- package/dist/workflows/methods/ugc-faq-answer.d.ts +175 -0
- package/dist/workflows/methods/ugc-faq-answer.js +19 -0
- package/dist/workflows/methods/ugc-faq-answer.js.map +1 -0
- package/dist/workflows/methods/ugc-product-intro.d.ts +175 -0
- package/dist/workflows/methods/ugc-product-intro.js +19 -0
- package/dist/workflows/methods/ugc-product-intro.js.map +1 -0
- package/dist/workflows/methods/website-proof-demo.d.ts +175 -0
- package/dist/workflows/methods/website-proof-demo.js +19 -0
- package/dist/workflows/methods/website-proof-demo.js.map +1 -0
- package/dist/workflows/validate.d.ts +10 -0
- package/dist/workflows/validate.js +203 -0
- package/dist/workflows/validate.js.map +1 -0
- package/dist/workflows.d.ts +1 -0
- package/dist/workflows.js +2 -0
- package/dist/workflows.js.map +1 -0
- package/package.json +9 -1
- package/dist/__fixtures__/queue-promises.d.ts +0 -8
- package/dist/__fixtures__/queue-promises.js +0 -22
- package/dist/__fixtures__/queue-promises.js.map +0 -1
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { aspectDistance } from "./aspect.js";
|
|
2
|
+
import { SHOT_OPERATION_MODES } from "./edit-operations.js";
|
|
3
|
+
/** In the order issues are reported. */
|
|
4
|
+
export const EDIT_ISSUE_CODES = [
|
|
5
|
+
"source_mismatch", "timebase_mismatch", "duration_mismatch", "duplicate_shot_id", "span_out_of_range", "kind_changed",
|
|
6
|
+
"shot_added_not_allowed", "too_short", "too_long", "action_not_allowed", "not_movable", "not_resizable", "overlap",
|
|
7
|
+
"tracks_overlap", "uncovered", "first_shot_fixed", "foreign_source_asset", "kind_asset_mismatch", "candidate_for_other_shot",
|
|
8
|
+
"unknown_asset", "upload_shape_refused", "duplicate_picture_asset", "too_many_generated", "footage_exceeded",
|
|
9
|
+
"presenter_out_of_sync", "presenter_outside_recording",
|
|
10
|
+
];
|
|
11
|
+
const spanOf = (shot) => ({ start: shot.start_frame, end: shot.end_frame });
|
|
12
|
+
const framesOf = (shot) => shot.end_frame - shot.start_frame;
|
|
13
|
+
const overlapOf = (a, b) => ({ start: Math.max(a.start_frame, b.start_frame), end: Math.min(a.end_frame, b.end_frame) });
|
|
14
|
+
const overlaps = (a, b) => a.start_frame < b.end_frame && b.start_frame < a.end_frame;
|
|
15
|
+
/** Sorted, merged union; empty and inverted spans drop out. */
|
|
16
|
+
function union(spans) {
|
|
17
|
+
const merged = [];
|
|
18
|
+
for (const span of spans.filter(s => s.end > s.start).sort((a, b) => a.start - b.start)) {
|
|
19
|
+
const last = merged.at(-1);
|
|
20
|
+
if (last && span.start <= last.end)
|
|
21
|
+
last.end = Math.max(last.end, span.end);
|
|
22
|
+
else
|
|
23
|
+
merged.push({ ...span });
|
|
24
|
+
}
|
|
25
|
+
return merged;
|
|
26
|
+
}
|
|
27
|
+
/** Frames two unions share. */
|
|
28
|
+
function sharedFrames(a, b) {
|
|
29
|
+
let frames = 0;
|
|
30
|
+
for (const x of a)
|
|
31
|
+
for (const y of b)
|
|
32
|
+
frames += Math.max(0, Math.min(x.end, y.end) - Math.max(x.start, y.start));
|
|
33
|
+
return frames;
|
|
34
|
+
}
|
|
35
|
+
const sourceShots = (shots) => new Map(shots.tracks.flatMap(track => track.shots).map(shot => [shot.id, shot]));
|
|
36
|
+
const own = (record, key) => Object.hasOwn(record, key) ? record[key] : undefined;
|
|
37
|
+
const offsetOf = (shot, source) => shot.media_offset_frames ?? source?.media_offset_frames ?? 0;
|
|
38
|
+
const retimed = (shot, source) => shot.start_frame !== source.start_frame ||
|
|
39
|
+
shot.end_frame !== source.end_frame || offsetOf(shot, source) !== (source.media_offset_frames ?? 0);
|
|
40
|
+
/** The one check that reads the output's shape, and only its ratio. */
|
|
41
|
+
function uploadShapeIssue(frame, upload, rule) {
|
|
42
|
+
const distance = aspectDistance(upload.width / upload.height, frame.width / frame.height);
|
|
43
|
+
return distance <= rule.max_distance ? null
|
|
44
|
+
: `the upload is ${upload.width}×${upload.height}, ${Math.round(distance * 100)}% away from the output's shape; ` +
|
|
45
|
+
`at most ${Math.round(rule.max_distance * 100)}% is accepted`;
|
|
46
|
+
}
|
|
47
|
+
/** Presenter frames no visual shot covers. */
|
|
48
|
+
export function presenterVisibleFrames(shots) {
|
|
49
|
+
const all = shots.tracks.flatMap(track => track.shots);
|
|
50
|
+
const presenter = union(all.filter(shot => shot.track === "presenter").map(spanOf));
|
|
51
|
+
const visual = union(all.filter(shot => shot.track === "visual").map(spanOf));
|
|
52
|
+
return presenter.reduce((sum, span) => sum + span.end - span.start, 0) - sharedFrames(presenter, visual);
|
|
53
|
+
}
|
|
54
|
+
export function diffEditDocument(document, shots) {
|
|
55
|
+
const source = sourceShots(shots);
|
|
56
|
+
const present = new Set(document.shots.map(shot => shot.id));
|
|
57
|
+
const summary = { retimed: [], deleted: [...source.keys()].filter(id => !present.has(id)), added: [],
|
|
58
|
+
replaced: [], generated: [], changed: false };
|
|
59
|
+
for (const shot of document.shots) {
|
|
60
|
+
const from = source.get(shot.id);
|
|
61
|
+
if (!from)
|
|
62
|
+
summary.added.push(shot.id);
|
|
63
|
+
else if (retimed(shot, from))
|
|
64
|
+
summary.retimed.push(shot.id);
|
|
65
|
+
if (shot.asset.from === "candidate" || shot.asset.from === "upload")
|
|
66
|
+
summary.replaced.push({ shot_id: shot.id, from: shot.asset.from });
|
|
67
|
+
if (shot.asset.from === "generate")
|
|
68
|
+
summary.generated.push({ shot_id: shot.id, kind: shot.kind, mode: shot.asset.operation.mode });
|
|
69
|
+
}
|
|
70
|
+
summary.changed = [summary.retimed, summary.deleted, summary.added, summary.replaced, summary.generated].some(list => list.length > 0);
|
|
71
|
+
return summary;
|
|
72
|
+
}
|
|
73
|
+
/** Checks a document against the view it edits. Every issue is collected; the rules come from the view. */
|
|
74
|
+
export function validateEditDocument(document, shots, facts) {
|
|
75
|
+
const issues = [];
|
|
76
|
+
const add = (code, message, where = {}) => {
|
|
77
|
+
issues.push({ code, ...where, message });
|
|
78
|
+
};
|
|
79
|
+
const rules = shots.rules, duration = shots.duration_frames;
|
|
80
|
+
const source = sourceShots(shots);
|
|
81
|
+
const laid = document.shots.filter(shot => shot.end_frame > shot.start_frame);
|
|
82
|
+
const presenterShots = laid.filter(shot => shot.track === "presenter");
|
|
83
|
+
const visualShots = laid.filter(shot => shot.track === "visual");
|
|
84
|
+
const presenterTime = union(presenterShots.map(spanOf));
|
|
85
|
+
if (document.source_run_id !== shots.run_id)
|
|
86
|
+
add("source_mismatch", `the document edits ${document.source_run_id}, the run is ${shots.run_id}`);
|
|
87
|
+
if (document.timebase.fps !== shots.timebase.fps)
|
|
88
|
+
add("timebase_mismatch", `the run is ${shots.timebase.fps} fps, the document says ${document.timebase.fps}`);
|
|
89
|
+
if (document.duration_frames !== duration)
|
|
90
|
+
add("duration_mismatch", `the run is ${duration} frames long, the document says ${document.duration_frames}`);
|
|
91
|
+
const ids = new Set(), repeated = new Set();
|
|
92
|
+
for (const shot of document.shots)
|
|
93
|
+
(ids.has(shot.id) ? repeated : ids).add(shot.id);
|
|
94
|
+
for (const id of repeated)
|
|
95
|
+
add("duplicate_shot_id", "two shots share this id", { shot_id: id });
|
|
96
|
+
const pictureAssets = new Set();
|
|
97
|
+
let generated = 0;
|
|
98
|
+
for (const shot of document.shots) {
|
|
99
|
+
const from = source.get(shot.id), at = { shot_id: shot.id }, frames = framesOf(shot), asset = shot.asset;
|
|
100
|
+
const rule = rules.kinds[shot.kind];
|
|
101
|
+
const denied = [], mismatched = [];
|
|
102
|
+
if (shot.end_frame <= shot.start_frame || shot.end_frame > duration)
|
|
103
|
+
add("span_out_of_range", `a shot must end after it starts and by frame ${duration}`, at);
|
|
104
|
+
if (from && (shot.kind !== from.kind || shot.track !== from.track))
|
|
105
|
+
add("kind_changed", `this shot is a ${from.kind} on the ${from.track} track`, at);
|
|
106
|
+
if (!from && (rules.add_visual === "never" || shot.track !== "visual" ||
|
|
107
|
+
!presenterTime.some(span => span.start <= shot.start_frame && shot.end_frame <= span.end))) {
|
|
108
|
+
add("shot_added_not_allowed", rules.add_visual === "never" ? "this timeline takes no new shots"
|
|
109
|
+
: "a new shot must be a visual shot lying wholly inside presenter time", at);
|
|
110
|
+
}
|
|
111
|
+
if (!rule)
|
|
112
|
+
add("too_short", "this kind is not allowed here", at);
|
|
113
|
+
else if (frames < rule.min_frames)
|
|
114
|
+
add("too_short", `a ${shot.kind} lasts at least ${rule.min_frames} frames, this one ${frames}`, at);
|
|
115
|
+
else if (frames > rule.max_frames)
|
|
116
|
+
add("too_long", `a ${shot.kind} lasts at most ${rule.max_frames} frames, this one ${frames}`, at);
|
|
117
|
+
if (from) {
|
|
118
|
+
const offered = new Set(from.operations);
|
|
119
|
+
if (asset.from === "generate" && !offered.has(asset.operation.mode))
|
|
120
|
+
denied.push(`${asset.operation.mode} is not offered for this shot`);
|
|
121
|
+
if (asset.from === "upload" && !offered.has("upload"))
|
|
122
|
+
denied.push("this shot takes no upload");
|
|
123
|
+
if (asset.from === "candidate" && !SHOT_OPERATION_MODES.some(mode => offered.has(mode)))
|
|
124
|
+
denied.push("this shot takes no generated candidate");
|
|
125
|
+
if (retimed(shot, from) && !offered.has("retime"))
|
|
126
|
+
denied.push("this shot may not be retimed");
|
|
127
|
+
if (shot.start_frame !== from.start_frame && rule && !rule.movable)
|
|
128
|
+
add("not_movable", `a ${shot.kind} keeps its start frame, ${from.start_frame}`, at);
|
|
129
|
+
if (frames !== framesOf(from) && rule && !rule.resizable)
|
|
130
|
+
add("not_resizable", `a ${shot.kind} keeps its length, ${framesOf(from)} frames`, at);
|
|
131
|
+
}
|
|
132
|
+
else if (shot.track === "visual") {
|
|
133
|
+
const uncoverable = presenterShots.find(presenter => overlaps(presenter, shot) && !source.get(presenter.id)?.operations.includes("cover"));
|
|
134
|
+
if (uncoverable)
|
|
135
|
+
denied.push(`presenter shot ${uncoverable.id} may not be covered`);
|
|
136
|
+
}
|
|
137
|
+
if (denied.length)
|
|
138
|
+
add("action_not_allowed", denied.join("; "), at);
|
|
139
|
+
let footage = null;
|
|
140
|
+
if (asset.from === "source") {
|
|
141
|
+
const named = source.get(asset.shot_id);
|
|
142
|
+
if (!named)
|
|
143
|
+
add("unknown_asset", `the run has no shot ${asset.shot_id}`, at);
|
|
144
|
+
else if (asset.shot_id !== shot.id && !rules.reuse_source_asset)
|
|
145
|
+
add("foreign_source_asset", `shot ${asset.shot_id}'s media may not be reused here`, at);
|
|
146
|
+
footage = named?.media_frames ?? null;
|
|
147
|
+
}
|
|
148
|
+
else if (asset.from === "candidate") {
|
|
149
|
+
const fact = own(facts.candidates, asset.run_id);
|
|
150
|
+
if (!fact)
|
|
151
|
+
add("unknown_asset", `${asset.run_id} is not a candidate of this run`, at);
|
|
152
|
+
else {
|
|
153
|
+
if (fact.shot_id !== shot.id)
|
|
154
|
+
add("candidate_for_other_shot", `${asset.run_id} was made for shot ${fact.shot_id}`, at);
|
|
155
|
+
if (fact.kind !== shot.kind)
|
|
156
|
+
mismatched.push(`the candidate is a ${fact.kind}, the shot a ${shot.kind}`);
|
|
157
|
+
footage = fact.media_frames;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else if (asset.from === "upload") {
|
|
161
|
+
const fact = own(facts.uploads, asset.upload_id);
|
|
162
|
+
if (!fact)
|
|
163
|
+
add("unknown_asset", `${asset.upload_id} is not an upload of this account`, at);
|
|
164
|
+
const refusal = fact && rules.upload_aspect ? uploadShapeIssue(shots.frame, fact, rules.upload_aspect) : null;
|
|
165
|
+
if (refusal)
|
|
166
|
+
add("upload_shape_refused", refusal, at);
|
|
167
|
+
if (shot.kind !== "picture")
|
|
168
|
+
mismatched.push("only a picture takes an upload");
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
generated++;
|
|
172
|
+
if (asset.operation.mode === "animate" && shot.kind !== "clip")
|
|
173
|
+
mismatched.push("only a clip is animated");
|
|
174
|
+
if (!from && asset.operation.mode !== "new_picture")
|
|
175
|
+
mismatched.push(`a new shot has nothing to ${asset.operation.mode}`);
|
|
176
|
+
}
|
|
177
|
+
if ((shot.track === "presenter" || shot.kind === "presenter") && asset.from !== "source")
|
|
178
|
+
mismatched.push("a presenter shot keeps its own recording");
|
|
179
|
+
if (mismatched.length)
|
|
180
|
+
add("kind_asset_mismatch", mismatched.join("; "), at);
|
|
181
|
+
if (rules.picture_assets_unique && shot.kind === "picture" && asset.from !== "generate") {
|
|
182
|
+
const key = `${asset.from}:${asset.from === "source" ? asset.shot_id : asset.from === "candidate" ? asset.run_id : asset.upload_id}`;
|
|
183
|
+
if (pictureAssets.has(key))
|
|
184
|
+
add("duplicate_picture_asset", "another picture already shows this image", at);
|
|
185
|
+
pictureAssets.add(key);
|
|
186
|
+
}
|
|
187
|
+
const offset = offsetOf(shot, from);
|
|
188
|
+
if (shot.kind === "clip" && footage !== null && offset + frames > footage) {
|
|
189
|
+
add("footage_exceeded", `the clip has ${footage} frames of footage, the shot asks for ${offset + frames}`, at);
|
|
190
|
+
}
|
|
191
|
+
if (shot.track === "presenter" && from) {
|
|
192
|
+
const synced = (from.media_offset_frames ?? 0) + (shot.start_frame - from.start_frame);
|
|
193
|
+
if (offset !== synced)
|
|
194
|
+
add("presenter_out_of_sync", `at this start the recording plays from frame ${synced}, not ${offset}`, at);
|
|
195
|
+
if (from.media_frames !== null && offset + frames > from.media_frames) {
|
|
196
|
+
add("presenter_outside_recording", `the recording has ${from.media_frames} frames, the shot asks for ${offset + frames}`, at);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
for (const [id, shot] of source) {
|
|
201
|
+
if (!ids.has(id) && !shot.operations.includes("delete"))
|
|
202
|
+
add("action_not_allowed", "this shot may not be deleted", { shot_id: id });
|
|
203
|
+
}
|
|
204
|
+
for (const track of [visualShots, presenterShots]) {
|
|
205
|
+
let reach;
|
|
206
|
+
for (const shot of [...track].sort((a, b) => a.start_frame - b.start_frame)) {
|
|
207
|
+
if (reach && shot.start_frame < reach.end_frame) {
|
|
208
|
+
const shared = overlapOf(reach, shot);
|
|
209
|
+
add("overlap", `overlaps shot ${reach.id}`, { shot_id: shot.id, from_frame: shared.start, to_frame: shared.end });
|
|
210
|
+
}
|
|
211
|
+
if (!reach || shot.end_frame > reach.end_frame)
|
|
212
|
+
reach = shot;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (!rules.visual_covers_presenter) {
|
|
216
|
+
for (const visual of visualShots)
|
|
217
|
+
for (const presenter of presenterShots.filter(shot => overlaps(visual, shot))) {
|
|
218
|
+
const shared = overlapOf(visual, presenter);
|
|
219
|
+
add("tracks_overlap", `covers presenter shot ${presenter.id}`, { shot_id: visual.id, from_frame: shared.start, to_frame: shared.end });
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
const covering = rules.output_coverage === "visual" ? visualShots : [...visualShots, ...presenterShots];
|
|
223
|
+
let covered = 0;
|
|
224
|
+
for (const span of [...union(covering.map(spanOf)), { start: duration, end: duration }]) {
|
|
225
|
+
if (span.start > covered && covered < duration) {
|
|
226
|
+
add("uncovered", "no shot is on screen here", { from_frame: covered, to_frame: Math.min(span.start, duration) });
|
|
227
|
+
}
|
|
228
|
+
covered = Math.max(covered, span.end);
|
|
229
|
+
}
|
|
230
|
+
if (rules.first_visual_kind !== null) {
|
|
231
|
+
const earliest = (list) => list.filter(shot => shot.track === "visual")
|
|
232
|
+
.reduce((first, shot) => !first || shot.start_frame < first.start_frame ? shot : first, undefined);
|
|
233
|
+
const was = earliest([...source.values()]), now = earliest(document.shots), subject = was ?? now;
|
|
234
|
+
if (subject && (now?.id !== was?.id || now?.kind !== rules.first_visual_kind)) {
|
|
235
|
+
add("first_shot_fixed", `the video opens with its own ${rules.first_visual_kind}`, { shot_id: subject.id });
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (generated > rules.max_generated_per_revision) {
|
|
239
|
+
add("too_many_generated", `a revision generates at most ${rules.max_generated_per_revision} shots, this one asks for ${generated}`);
|
|
240
|
+
}
|
|
241
|
+
if (!issues.length)
|
|
242
|
+
return { ok: true, summary: diffEditDocument(document, shots) };
|
|
243
|
+
const order = (issue) => EDIT_ISSUE_CODES.indexOf(issue.code);
|
|
244
|
+
const idOf = (issue) => issue.shot_id ?? "";
|
|
245
|
+
issues.sort((a, b) => order(a) - order(b) || (idOf(a) < idOf(b) ? -1 : idOf(a) > idOf(b) ? 1 : 0));
|
|
246
|
+
return { ok: false, issues };
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=edit-validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-validate.js","sourceRoot":"","sources":["../src/edit-validate.ts"],"names":[],"mappings":"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"}
|
package/dist/edit.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./edit-rules.js";
|
|
2
|
+
export * from "./edit-operations.js";
|
|
3
|
+
export * from "./edit-document.js";
|
|
4
|
+
export * from "./edit-shots.js";
|
|
5
|
+
export * from "./edit-validate.js";
|
|
6
|
+
export * from "./edit-faceless.js";
|
|
7
|
+
export * from "./edit-billing.js";
|
|
8
|
+
export * from "./edit-revision.js";
|
package/dist/edit.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// The editor contract in one subpath: rules, operations, the edit document, the shots view, validation, the faceless projection, the revision and its price.
|
|
2
|
+
export * from "./edit-rules.js";
|
|
3
|
+
export * from "./edit-operations.js";
|
|
4
|
+
export * from "./edit-document.js";
|
|
5
|
+
export * from "./edit-shots.js";
|
|
6
|
+
export * from "./edit-validate.js";
|
|
7
|
+
export * from "./edit-faceless.js";
|
|
8
|
+
export * from "./edit-billing.js";
|
|
9
|
+
export * from "./edit-revision.js";
|
|
10
|
+
//# sourceMappingURL=edit.js.map
|
package/dist/edit.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../src/edit.ts"],"names":[],"mappings":"AAAA,6JAA6J;AAC7J,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
package/dist/endpoints.d.ts
CHANGED
|
@@ -8,8 +8,13 @@ export interface ApiEndpoint {
|
|
|
8
8
|
onQuickstart: boolean;
|
|
9
9
|
/** Whether the route parses the body as JSON. `POST /v1/uploads` takes bytes. */
|
|
10
10
|
jsonBody: boolean;
|
|
11
|
+
/** Whether the cabinet may call it on a user's behalf. */
|
|
12
|
+
cabinet: boolean;
|
|
11
13
|
}
|
|
12
14
|
export declare const API_ENDPOINTS: readonly ApiEndpoint[];
|
|
13
15
|
/** `GET /v1/runs/{id}`: the human notation, with the parameter in curly braces. */
|
|
14
16
|
export declare function endpointLabel(endpoint: ApiEndpoint): string;
|
|
17
|
+
/** The row a request falls on, or `null`. Exact on purpose: the method as HTTP spells it (upper case) and the pathname alone,
|
|
18
|
+
* so a path with a query string matches no row; a caller that binds the query (the cabinet assertion) splits it off first. */
|
|
19
|
+
export declare function matchEndpoint(method: string, path: string): ApiEndpoint | null;
|
|
15
20
|
export declare const QUICKSTART_ENDPOINTS: readonly ApiEndpoint[];
|
package/dist/endpoints.js
CHANGED
|
@@ -2,29 +2,45 @@
|
|
|
2
2
|
/** prints the "what costs money" list from here. */
|
|
3
3
|
import { ACTOR_DEFAULTS_PATH } from "./broll-policy.js";
|
|
4
4
|
export const API_ENDPOINTS = [
|
|
5
|
-
{ method: "POST", path: "/v1/skills/make_faceless/quote", billed: false, onQuickstart:
|
|
6
|
-
{ method: "POST", path: "/v1/skills/make_faceless/run", billed: true, onQuickstart:
|
|
7
|
-
{ method: "GET", path: "/health", billed: false, onQuickstart: true, jsonBody: false },
|
|
8
|
-
{ method: "GET", path: "/", billed: false, onQuickstart: false, jsonBody: false },
|
|
9
|
-
{ method: "GET", path: "/robots.txt", billed: false, onQuickstart: false, jsonBody: false },
|
|
10
|
-
{ method: "GET", path: "/v1/voices", billed: false, onQuickstart: true, jsonBody: false },
|
|
11
|
-
{ method: "GET", path: "/v1/account", billed: false, onQuickstart: true, jsonBody: false },
|
|
12
|
-
{ method: "POST", path: "/v1/skills/make_ugc/quote", billed: false, onQuickstart: true, jsonBody: true },
|
|
13
|
-
{ method: "GET", path: "/v1/runs/:id", billed: false, onQuickstart: true, jsonBody: false },
|
|
14
|
-
{ method: "
|
|
15
|
-
{ method: "GET", path: "/v1/
|
|
16
|
-
{ method: "
|
|
17
|
-
{ method: "
|
|
18
|
-
{ method: "
|
|
19
|
-
{ method: "POST", path:
|
|
20
|
-
{ method: "
|
|
21
|
-
{ method: "
|
|
22
|
-
{ method: "
|
|
23
|
-
{ method: "GET", path:
|
|
5
|
+
{ method: "POST", path: "/v1/skills/make_faceless/quote", billed: false, onQuickstart: true, jsonBody: true, cabinet: false },
|
|
6
|
+
{ method: "POST", path: "/v1/skills/make_faceless/run", billed: true, onQuickstart: true, jsonBody: true, cabinet: false },
|
|
7
|
+
{ method: "GET", path: "/health", billed: false, onQuickstart: true, jsonBody: false, cabinet: false },
|
|
8
|
+
{ method: "GET", path: "/", billed: false, onQuickstart: false, jsonBody: false, cabinet: false },
|
|
9
|
+
{ method: "GET", path: "/robots.txt", billed: false, onQuickstart: false, jsonBody: false, cabinet: false },
|
|
10
|
+
{ method: "GET", path: "/v1/voices", billed: false, onQuickstart: true, jsonBody: false, cabinet: false },
|
|
11
|
+
{ method: "GET", path: "/v1/account", billed: false, onQuickstart: true, jsonBody: false, cabinet: false },
|
|
12
|
+
{ method: "POST", path: "/v1/skills/make_ugc/quote", billed: false, onQuickstart: true, jsonBody: true, cabinet: false },
|
|
13
|
+
{ method: "GET", path: "/v1/runs/:id", billed: false, onQuickstart: true, jsonBody: false, cabinet: true },
|
|
14
|
+
{ method: "GET", path: "/v1/runs/:id/shots", billed: false, onQuickstart: false, jsonBody: false, cabinet: true },
|
|
15
|
+
{ method: "GET", path: "/v1/runs/:id/edit", billed: false, onQuickstart: false, jsonBody: false, cabinet: true },
|
|
16
|
+
{ method: "POST", path: "/v1/runs/:id/edit", billed: false, onQuickstart: false, jsonBody: true, cabinet: true },
|
|
17
|
+
{ method: "POST", path: "/v1/runs/:id/revisions/quote", billed: false, onQuickstart: false, jsonBody: true, cabinet: false },
|
|
18
|
+
{ method: "POST", path: "/v1/runs/:id/revisions", billed: true, onQuickstart: false, jsonBody: true, cabinet: false },
|
|
19
|
+
{ method: "POST", path: "/v1/skills/make_ugc/run", billed: true, onQuickstart: true, jsonBody: true, cabinet: false },
|
|
20
|
+
{ method: "GET", path: "/v1/public/skills", billed: false, onQuickstart: false, jsonBody: false, cabinet: false },
|
|
21
|
+
{ method: "GET", path: "/v1/actors", billed: false, onQuickstart: false, jsonBody: false, cabinet: false },
|
|
22
|
+
{ method: "DELETE", path: "/v1/actors/:id", billed: false, onQuickstart: false, jsonBody: false, cabinet: false },
|
|
23
|
+
{ method: "GET", path: ACTOR_DEFAULTS_PATH, billed: false, onQuickstart: false, jsonBody: false, cabinet: false },
|
|
24
|
+
{ method: "POST", path: ACTOR_DEFAULTS_PATH, billed: false, onQuickstart: false, jsonBody: true, cabinet: false },
|
|
25
|
+
{ method: "POST", path: "/v1/skills/create_actor/quote", billed: false, onQuickstart: false, jsonBody: true, cabinet: false },
|
|
26
|
+
{ method: "POST", path: "/v1/skills/create_actor/run", billed: true, onQuickstart: false, jsonBody: true, cabinet: false },
|
|
27
|
+
{ method: "POST", path: "/v1/uploads", billed: false, onQuickstart: false, jsonBody: false, cabinet: false },
|
|
28
|
+
{ method: "GET", path: "/internal/portfolio-metrics", billed: false, onQuickstart: false, jsonBody: false, cabinet: false },
|
|
24
29
|
];
|
|
25
30
|
/** `GET /v1/runs/{id}`: the human notation, with the parameter in curly braces. */
|
|
26
31
|
export function endpointLabel(endpoint) {
|
|
27
32
|
return `${endpoint.method} ${endpoint.path.replace(/:(\w+)/g, "{$1}")}`;
|
|
28
33
|
}
|
|
34
|
+
/** The row a request falls on, or `null`. Exact on purpose: the method as HTTP spells it (upper case) and the pathname alone,
|
|
35
|
+
* so a path with a query string matches no row; a caller that binds the query (the cabinet assertion) splits it off first. */
|
|
36
|
+
export function matchEndpoint(method, path) {
|
|
37
|
+
const segments = path.split("/");
|
|
38
|
+
return API_ENDPOINTS.find((endpoint) => {
|
|
39
|
+
const pattern = endpoint.path.split("/");
|
|
40
|
+
return endpoint.method === method && pattern.length === segments.length &&
|
|
41
|
+
// A parameter is one plain identifier: a dot segment or a percent escape would name another path to a router.
|
|
42
|
+
pattern.every((part, index) => (part.startsWith(":") ? /^[A-Za-z0-9_-]+$/.test(segments[index]) : part === segments[index]));
|
|
43
|
+
}) ?? null;
|
|
44
|
+
}
|
|
29
45
|
export const QUICKSTART_ENDPOINTS = API_ENDPOINTS.filter((endpoint) => endpoint.onQuickstart);
|
|
30
46
|
//# sourceMappingURL=endpoints.js.map
|
package/dist/endpoints.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,oDAAoD;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -108,6 +108,130 @@ export declare function scriptEncodingLostBody(args: {
|
|
|
108
108
|
paths: readonly string[];
|
|
109
109
|
charCount: number;
|
|
110
110
|
}): ScriptEncodingLostError;
|
|
111
|
+
/** A save of a draft lost to a newer one: `version` is what is stored now, 0 when nothing is. */
|
|
112
|
+
export declare const editConflictError: z.ZodObject<{
|
|
113
|
+
error: z.ZodObject<{
|
|
114
|
+
code: z.ZodLiteral<"edit_conflict">;
|
|
115
|
+
message: z.ZodString;
|
|
116
|
+
version: z.ZodNumber;
|
|
117
|
+
}, z.core.$strip>;
|
|
118
|
+
}, z.core.$strip>;
|
|
119
|
+
export type EditConflictError = z.infer<typeof editConflictError>;
|
|
120
|
+
/** Builds the "the draft moved on" body. Nothing was stored. */
|
|
121
|
+
export declare function editConflictBody(args: {
|
|
122
|
+
baseVersion: number;
|
|
123
|
+
version: number;
|
|
124
|
+
}): EditConflictError;
|
|
125
|
+
/** The run has no draft to read or to save: `state` and `reason` are the ones its shots state. */
|
|
126
|
+
export declare const runNotEditableError: z.ZodObject<{
|
|
127
|
+
error: z.ZodObject<{
|
|
128
|
+
code: z.ZodLiteral<"run_not_editable">;
|
|
129
|
+
message: z.ZodString;
|
|
130
|
+
state: z.ZodString;
|
|
131
|
+
reason: z.ZodNullable<z.ZodString>;
|
|
132
|
+
}, z.core.$strip>;
|
|
133
|
+
}, z.core.$strip>;
|
|
134
|
+
export type RunNotEditableError = z.infer<typeof runNotEditableError>;
|
|
135
|
+
/** Builds the "this run cannot be edited" body. Nothing was stored. */
|
|
136
|
+
export declare function runNotEditableBody(args: {
|
|
137
|
+
runId: string;
|
|
138
|
+
state: string;
|
|
139
|
+
reason: string | null;
|
|
140
|
+
}): RunNotEditableError;
|
|
141
|
+
/** Paid edits are closed: the flag is off, or a ceiling the owner sets is not set yet. */
|
|
142
|
+
export declare const editingDisabledError: z.ZodObject<{
|
|
143
|
+
error: z.ZodObject<{
|
|
144
|
+
code: z.ZodLiteral<"editing_disabled">;
|
|
145
|
+
message: z.ZodString;
|
|
146
|
+
reason: z.ZodEnum<{
|
|
147
|
+
ceiling_not_set: "ceiling_not_set";
|
|
148
|
+
flag_off: "flag_off";
|
|
149
|
+
}>;
|
|
150
|
+
}, z.core.$strip>;
|
|
151
|
+
}, z.core.$strip>;
|
|
152
|
+
export type EditingDisabledError = z.infer<typeof editingDisabledError>;
|
|
153
|
+
export declare function editingDisabledBody(args: {
|
|
154
|
+
reason: EditingDisabledError["error"]["reason"];
|
|
155
|
+
}): EditingDisabledError;
|
|
156
|
+
/** A revision has no price: each seam still unset is named, and an empty list is a total of zero no rule allows. */
|
|
157
|
+
export declare const editingNotPricedError: z.ZodObject<{
|
|
158
|
+
error: z.ZodObject<{
|
|
159
|
+
code: z.ZodLiteral<"editing_not_priced">;
|
|
160
|
+
message: z.ZodString;
|
|
161
|
+
seams: z.ZodArray<z.ZodEnum<{
|
|
162
|
+
render: "render";
|
|
163
|
+
unit: "unit";
|
|
164
|
+
zero_unit: "zero_unit";
|
|
165
|
+
}>>;
|
|
166
|
+
}, z.core.$strip>;
|
|
167
|
+
}, z.core.$strip>;
|
|
168
|
+
export type EditingNotPricedError = z.infer<typeof editingNotPricedError>;
|
|
169
|
+
export declare function editingNotPricedBody(args: {
|
|
170
|
+
seams: EditingNotPricedError["error"]["seams"];
|
|
171
|
+
}): EditingNotPricedError;
|
|
172
|
+
/** The document breaks the rules of the run it edits; `issues` are the validator's, in its order. */
|
|
173
|
+
export declare const editInvalidError: z.ZodObject<{
|
|
174
|
+
error: z.ZodObject<{
|
|
175
|
+
code: z.ZodLiteral<"edit_invalid">;
|
|
176
|
+
message: z.ZodString;
|
|
177
|
+
issues: z.ZodArray<z.ZodObject<{
|
|
178
|
+
code: z.ZodEnum<{
|
|
179
|
+
action_not_allowed: "action_not_allowed";
|
|
180
|
+
candidate_for_other_shot: "candidate_for_other_shot";
|
|
181
|
+
duplicate_picture_asset: "duplicate_picture_asset";
|
|
182
|
+
duplicate_shot_id: "duplicate_shot_id";
|
|
183
|
+
duration_mismatch: "duration_mismatch";
|
|
184
|
+
first_shot_fixed: "first_shot_fixed";
|
|
185
|
+
footage_exceeded: "footage_exceeded";
|
|
186
|
+
foreign_source_asset: "foreign_source_asset";
|
|
187
|
+
kind_asset_mismatch: "kind_asset_mismatch";
|
|
188
|
+
kind_changed: "kind_changed";
|
|
189
|
+
not_movable: "not_movable";
|
|
190
|
+
not_resizable: "not_resizable";
|
|
191
|
+
overlap: "overlap";
|
|
192
|
+
presenter_out_of_sync: "presenter_out_of_sync";
|
|
193
|
+
presenter_outside_recording: "presenter_outside_recording";
|
|
194
|
+
shot_added_not_allowed: "shot_added_not_allowed";
|
|
195
|
+
source_mismatch: "source_mismatch";
|
|
196
|
+
span_out_of_range: "span_out_of_range";
|
|
197
|
+
timebase_mismatch: "timebase_mismatch";
|
|
198
|
+
too_long: "too_long";
|
|
199
|
+
too_many_generated: "too_many_generated";
|
|
200
|
+
too_short: "too_short";
|
|
201
|
+
tracks_overlap: "tracks_overlap";
|
|
202
|
+
uncovered: "uncovered";
|
|
203
|
+
unknown_asset: "unknown_asset";
|
|
204
|
+
upload_shape_refused: "upload_shape_refused";
|
|
205
|
+
}>;
|
|
206
|
+
shot_id: z.ZodOptional<z.ZodString>;
|
|
207
|
+
from_frame: z.ZodOptional<z.ZodNumber>;
|
|
208
|
+
to_frame: z.ZodOptional<z.ZodNumber>;
|
|
209
|
+
message: z.ZodString;
|
|
210
|
+
}, z.core.$strip>>;
|
|
211
|
+
}, z.core.$strip>;
|
|
212
|
+
}, z.core.$strip>;
|
|
213
|
+
export type EditInvalidError = z.infer<typeof editInvalidError>;
|
|
214
|
+
export declare function editInvalidBody(args: {
|
|
215
|
+
issues: EditInvalidError["error"]["issues"];
|
|
216
|
+
}): EditInvalidError;
|
|
217
|
+
/** A root has as many revisions running, or failed and unfinished, as it may have; `run_ids` are the ones counted. */
|
|
218
|
+
export declare const editCeilingReachedError: z.ZodObject<{
|
|
219
|
+
error: z.ZodObject<{
|
|
220
|
+
code: z.ZodLiteral<"edit_ceiling_reached">;
|
|
221
|
+
message: z.ZodString;
|
|
222
|
+
limit: z.ZodEnum<{
|
|
223
|
+
failed_or_unfinished: "failed_or_unfinished";
|
|
224
|
+
free_renders: "free_renders";
|
|
225
|
+
in_flight: "in_flight";
|
|
226
|
+
}>;
|
|
227
|
+
root_run_id: z.ZodString;
|
|
228
|
+
allowed: z.ZodNumber;
|
|
229
|
+
counted: z.ZodNumber;
|
|
230
|
+
run_ids: z.ZodArray<z.ZodString>;
|
|
231
|
+
}, z.core.$strip>;
|
|
232
|
+
}, z.core.$strip>;
|
|
233
|
+
export type EditCeilingReachedError = z.infer<typeof editCeilingReachedError>;
|
|
234
|
+
export declare function editCeilingReachedBody(args: Omit<EditCeilingReachedError["error"], "code" | "message">): EditCeilingReachedError;
|
|
111
235
|
/** Keeps the tool description's promise ("refused before any charge"): an unusable */
|
|
112
236
|
/** source is refused, not estimated. */
|
|
113
237
|
export declare function unusableSourceMessage(errorClass: string, detail: string): string;
|
|
@@ -116,7 +240,7 @@ export declare function unusableSourceMessage(errorClass: string, detail: string
|
|
|
116
240
|
export declare const MALFORMED_BODY_MESSAGE: string;
|
|
117
241
|
/** Codes with a bare envelope, in one registry: the published list of error codes is */
|
|
118
242
|
/** declared exhaustive. */
|
|
119
|
-
declare const BARE_ERROR_CODES: readonly ["aspect_conflict", "actor_unavailable", "actor_format_unavailable", "actor_storage_unavailable", "actor_generation_disabled", "actor_in_use", "idempotency_key_required", "idempotency_key_reused", "internal_error", "invalid_image", "invalid_request", "malformed_body", "not_found", "paid_render_disabled", "payload_too_large", "unauthorized", "unsupported_media_type", "unusable_source", "upload_cap_exceeded", "upstream_error"];
|
|
243
|
+
declare const BARE_ERROR_CODES: readonly ["aspect_conflict", "actor_unavailable", "actor_format_unavailable", "actor_storage_unavailable", "actor_generation_disabled", "actor_in_use", "editing_window_not_set", "idempotency_key_required", "idempotency_key_reused", "internal_error", "invalid_image", "invalid_request", "malformed_body", "no_changes", "not_found", "paid_render_disabled", "payload_too_large", "revision_needs_generated_unit", "unauthorized", "unsupported_media_type", "unusable_source", "upload_cap_exceeded", "upstream_error"];
|
|
120
244
|
/** A refusal code whose body carries only `code` and `message`. */
|
|
121
245
|
export type BareApiErrorCode = (typeof BARE_ERROR_CODES)[number];
|
|
122
246
|
/** EVERY code the API can return: bare plus typed. Typed values come from their schemas, */
|