@skyphusion-labs/vivijure-core 0.9.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/LICENSE +661 -0
- package/README.md +87 -0
- package/dist/audio-routing.d.ts +2 -0
- package/dist/audio-routing.d.ts.map +1 -0
- package/dist/audio-routing.js +4 -0
- package/dist/audio-routing.js.map +1 -0
- package/dist/audio-stage.d.ts +4 -0
- package/dist/audio-stage.d.ts.map +1 -0
- package/dist/audio-stage.js +25 -0
- package/dist/audio-stage.js.map +1 -0
- package/dist/beat-analyze.d.ts +22 -0
- package/dist/beat-analyze.d.ts.map +1 -0
- package/dist/beat-analyze.js +111 -0
- package/dist/beat-analyze.js.map +1 -0
- package/dist/beat-sync-types.d.ts +33 -0
- package/dist/beat-sync-types.d.ts.map +1 -0
- package/dist/beat-sync-types.js +4 -0
- package/dist/beat-sync-types.js.map +1 -0
- package/dist/bundle-assembler.d.ts +54 -0
- package/dist/bundle-assembler.d.ts.map +1 -0
- package/dist/bundle-assembler.js +376 -0
- package/dist/bundle-assembler.js.map +1 -0
- package/dist/bundle-durations.d.ts +5 -0
- package/dist/bundle-durations.d.ts.map +1 -0
- package/dist/bundle-durations.js +68 -0
- package/dist/bundle-durations.js.map +1 -0
- package/dist/bundle-storyboard.d.ts +11 -0
- package/dist/bundle-storyboard.d.ts.map +1 -0
- package/dist/bundle-storyboard.js +82 -0
- package/dist/bundle-storyboard.js.map +1 -0
- package/dist/captions.d.ts +25 -0
- package/dist/captions.d.ts.map +1 -0
- package/dist/captions.js +56 -0
- package/dist/captions.js.map +1 -0
- package/dist/cast-db.d.ts +61 -0
- package/dist/cast-db.d.ts.map +1 -0
- package/dist/cast-db.js +324 -0
- package/dist/cast-db.js.map +1 -0
- package/dist/cast-lora-train.d.ts +18 -0
- package/dist/cast-lora-train.d.ts.map +1 -0
- package/dist/cast-lora-train.js +215 -0
- package/dist/cast-lora-train.js.map +1 -0
- package/dist/cast-loras.d.ts +21 -0
- package/dist/cast-loras.d.ts.map +1 -0
- package/dist/cast-loras.js +69 -0
- package/dist/cast-loras.js.map +1 -0
- package/dist/clip-content-validate.d.ts +43 -0
- package/dist/clip-content-validate.d.ts.map +1 -0
- package/dist/clip-content-validate.js +115 -0
- package/dist/clip-content-validate.js.map +1 -0
- package/dist/clip-job-model.d.ts +42 -0
- package/dist/clip-job-model.d.ts.map +1 -0
- package/dist/clip-job-model.js +8 -0
- package/dist/clip-job-model.js.map +1 -0
- package/dist/clip-validate.d.ts +33 -0
- package/dist/clip-validate.d.ts.map +1 -0
- package/dist/clip-validate.js +247 -0
- package/dist/clip-validate.js.map +1 -0
- package/dist/d1-retry.d.ts +20 -0
- package/dist/d1-retry.d.ts.map +1 -0
- package/dist/d1-retry.js +67 -0
- package/dist/d1-retry.js.map +1 -0
- package/dist/db-env.d.ts +6 -0
- package/dist/db-env.d.ts.map +1 -0
- package/dist/db-env.js +2 -0
- package/dist/db-env.js.map +1 -0
- package/dist/dialogue-lines.d.ts +23 -0
- package/dist/dialogue-lines.d.ts.map +1 -0
- package/dist/dialogue-lines.js +84 -0
- package/dist/dialogue-lines.js.map +1 -0
- package/dist/film-advance-lease.d.ts +9 -0
- package/dist/film-advance-lease.d.ts.map +1 -0
- package/dist/film-advance-lease.js +19 -0
- package/dist/film-advance-lease.js.map +1 -0
- package/dist/film-model.d.ts +415 -0
- package/dist/film-model.d.ts.map +1 -0
- package/dist/film-model.js +541 -0
- package/dist/film-model.js.map +1 -0
- package/dist/film-orchestrator.d.ts +216 -0
- package/dist/film-orchestrator.d.ts.map +1 -0
- package/dist/film-orchestrator.js +2204 -0
- package/dist/film-orchestrator.js.map +1 -0
- package/dist/film-render-bridge.d.ts +26 -0
- package/dist/film-render-bridge.d.ts.map +1 -0
- package/dist/film-render-bridge.js +176 -0
- package/dist/film-render-bridge.js.map +1 -0
- package/dist/finish-hash.d.ts +10 -0
- package/dist/finish-hash.d.ts.map +1 -0
- package/dist/finish-hash.js +60 -0
- package/dist/finish-hash.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/key-safety.d.ts +5 -0
- package/dist/key-safety.d.ts.map +1 -0
- package/dist/key-safety.js +23 -0
- package/dist/key-safety.js.map +1 -0
- package/dist/lora-bundle.d.ts +19 -0
- package/dist/lora-bundle.d.ts.map +1 -0
- package/dist/lora-bundle.js +75 -0
- package/dist/lora-bundle.js.map +1 -0
- package/dist/lora-keys.d.ts +2 -0
- package/dist/lora-keys.d.ts.map +1 -0
- package/dist/lora-keys.js +4 -0
- package/dist/lora-keys.js.map +1 -0
- package/dist/modules/conformance.d.ts +58 -0
- package/dist/modules/conformance.d.ts.map +1 -0
- package/dist/modules/conformance.js +369 -0
- package/dist/modules/conformance.js.map +1 -0
- package/dist/modules/manifest-validate.d.ts +5 -0
- package/dist/modules/manifest-validate.d.ts.map +1 -0
- package/dist/modules/manifest-validate.js +60 -0
- package/dist/modules/manifest-validate.js.map +1 -0
- package/dist/modules/registry.d.ts +184 -0
- package/dist/modules/registry.d.ts.map +1 -0
- package/dist/modules/registry.js +653 -0
- package/dist/modules/registry.js.map +1 -0
- package/dist/modules/render-pipeline.d.ts +38 -0
- package/dist/modules/render-pipeline.d.ts.map +1 -0
- package/dist/modules/render-pipeline.js +40 -0
- package/dist/modules/render-pipeline.js.map +1 -0
- package/dist/modules/types.d.ts +544 -0
- package/dist/modules/types.d.ts.map +1 -0
- package/dist/modules/types.js +57 -0
- package/dist/modules/types.js.map +1 -0
- package/dist/operator-config.d.ts +20 -0
- package/dist/operator-config.d.ts.map +1 -0
- package/dist/operator-config.js +85 -0
- package/dist/operator-config.js.map +1 -0
- package/dist/output-extract.d.ts +8 -0
- package/dist/output-extract.d.ts.map +1 -0
- package/dist/output-extract.js +129 -0
- package/dist/output-extract.js.map +1 -0
- package/dist/planner-prompt.d.ts +12 -0
- package/dist/planner-prompt.d.ts.map +1 -0
- package/dist/planner-prompt.js +337 -0
- package/dist/planner-prompt.js.map +1 -0
- package/dist/planner-yaml.d.ts +15 -0
- package/dist/planner-yaml.d.ts.map +1 -0
- package/dist/planner-yaml.js +157 -0
- package/dist/planner-yaml.js.map +1 -0
- package/dist/platform/fetcher.d.ts +3 -0
- package/dist/platform/fetcher.d.ts.map +1 -0
- package/dist/platform/fetcher.js +7 -0
- package/dist/platform/fetcher.js.map +1 -0
- package/dist/platform/index.d.ts +6 -0
- package/dist/platform/index.d.ts.map +1 -0
- package/dist/platform/index.js +5 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/object-store-r2.d.ts +26 -0
- package/dist/platform/object-store-r2.d.ts.map +1 -0
- package/dist/platform/object-store-r2.js +74 -0
- package/dist/platform/object-store-r2.js.map +1 -0
- package/dist/platform/orchestrator-context.d.ts +20 -0
- package/dist/platform/orchestrator-context.d.ts.map +1 -0
- package/dist/platform/orchestrator-context.js +28 -0
- package/dist/platform/orchestrator-context.js.map +1 -0
- package/dist/platform/r2-types.d.ts +41 -0
- package/dist/platform/r2-types.d.ts.map +1 -0
- package/dist/platform/r2-types.js +3 -0
- package/dist/platform/r2-types.js.map +1 -0
- package/dist/platform/types.d.ts +90 -0
- package/dist/platform/types.d.ts.map +1 -0
- package/dist/platform/types.js +23 -0
- package/dist/platform/types.js.map +1 -0
- package/dist/preflight.d.ts +57 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +243 -0
- package/dist/preflight.js.map +1 -0
- package/dist/presign.d.ts +5 -0
- package/dist/presign.d.ts.map +1 -0
- package/dist/presign.js +24 -0
- package/dist/presign.js.map +1 -0
- package/dist/public-id.d.ts +8 -0
- package/dist/public-id.d.ts.map +1 -0
- package/dist/public-id.js +25 -0
- package/dist/public-id.js.map +1 -0
- package/dist/render-adopt.d.ts +3 -0
- package/dist/render-adopt.d.ts.map +1 -0
- package/dist/render-adopt.js +92 -0
- package/dist/render-adopt.js.map +1 -0
- package/dist/render-log.d.ts +25 -0
- package/dist/render-log.d.ts.map +1 -0
- package/dist/render-log.js +139 -0
- package/dist/render-log.js.map +1 -0
- package/dist/render-module-config.d.ts +28 -0
- package/dist/render-module-config.d.ts.map +1 -0
- package/dist/render-module-config.js +124 -0
- package/dist/render-module-config.js.map +1 -0
- package/dist/render-mux.d.ts +18 -0
- package/dist/render-mux.d.ts.map +1 -0
- package/dist/render-mux.js +69 -0
- package/dist/render-mux.js.map +1 -0
- package/dist/render-orchestrator.d.ts +71 -0
- package/dist/render-orchestrator.d.ts.map +1 -0
- package/dist/render-orchestrator.js +376 -0
- package/dist/render-orchestrator.js.map +1 -0
- package/dist/render-sweep.d.ts +5 -0
- package/dist/render-sweep.d.ts.map +1 -0
- package/dist/render-sweep.js +62 -0
- package/dist/render-sweep.js.map +1 -0
- package/dist/renders-db.d.ts +129 -0
- package/dist/renders-db.d.ts.map +1 -0
- package/dist/renders-db.js +752 -0
- package/dist/renders-db.js.map +1 -0
- package/dist/runpod-submit.d.ts +151 -0
- package/dist/runpod-submit.d.ts.map +1 -0
- package/dist/runpod-submit.js +469 -0
- package/dist/runpod-submit.js.map +1 -0
- package/dist/runpod-types.d.ts +2 -0
- package/dist/runpod-types.d.ts.map +1 -0
- package/dist/runpod-types.js +4 -0
- package/dist/runpod-types.js.map +1 -0
- package/dist/scatter-notify.d.ts +4 -0
- package/dist/scatter-notify.d.ts.map +1 -0
- package/dist/scatter-notify.js +43 -0
- package/dist/scatter-notify.js.map +1 -0
- package/dist/scatter-orchestrator-types.d.ts +56 -0
- package/dist/scatter-orchestrator-types.d.ts.map +1 -0
- package/dist/scatter-orchestrator-types.js +3 -0
- package/dist/scatter-orchestrator-types.js.map +1 -0
- package/dist/scatter-orchestrator.d.ts +70 -0
- package/dist/scatter-orchestrator.d.ts.map +1 -0
- package/dist/scatter-orchestrator.js +614 -0
- package/dist/scatter-orchestrator.js.map +1 -0
- package/dist/scatter.d.ts +35 -0
- package/dist/scatter.d.ts.map +1 -0
- package/dist/scatter.js +171 -0
- package/dist/scatter.js.map +1 -0
- package/dist/secret-store.d.ts +5 -0
- package/dist/secret-store.d.ts.map +1 -0
- package/dist/secret-store.js +19 -0
- package/dist/secret-store.js.map +1 -0
- package/dist/shot-durations-parse.d.ts +3 -0
- package/dist/shot-durations-parse.d.ts.map +1 -0
- package/dist/shot-durations-parse.js +43 -0
- package/dist/shot-durations-parse.js.map +1 -0
- package/dist/srt.d.ts +11 -0
- package/dist/srt.d.ts.map +1 -0
- package/dist/srt.js +54 -0
- package/dist/srt.js.map +1 -0
- package/dist/storyboard-ids.d.ts +2 -0
- package/dist/storyboard-ids.d.ts.map +1 -0
- package/dist/storyboard-ids.js +12 -0
- package/dist/storyboard-ids.js.map +1 -0
- package/dist/storyboard-projects-db.d.ts +31 -0
- package/dist/storyboard-projects-db.d.ts.map +1 -0
- package/dist/storyboard-projects-db.js +153 -0
- package/dist/storyboard-projects-db.js.map +1 -0
- package/dist/storyboard-validate.d.ts +72 -0
- package/dist/storyboard-validate.d.ts.map +1 -0
- package/dist/storyboard-validate.js +595 -0
- package/dist/storyboard-validate.js.map +1 -0
- package/dist/structured-events.d.ts +6 -0
- package/dist/structured-events.d.ts.map +1 -0
- package/dist/structured-events.js +15 -0
- package/dist/structured-events.js.map +1 -0
- package/dist/tar.d.ts +9 -0
- package/dist/tar.d.ts.map +1 -0
- package/dist/tar.js +151 -0
- package/dist/tar.js.map +1 -0
- package/dist/voices.d.ts +12 -0
- package/dist/voices.d.ts.map +1 -0
- package/dist/voices.js +37 -0
- package/dist/voices.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { RegisteredModule, RenderConfigProjection } from "./modules/types.js";
|
|
2
|
+
export type RenderTier = "draft" | "standard" | "final";
|
|
3
|
+
export interface QualityTierOption {
|
|
4
|
+
value: RenderTier;
|
|
5
|
+
label: string;
|
|
6
|
+
blurb: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const QUALITY_TIERS: readonly QualityTierOption[];
|
|
9
|
+
export declare const DEFAULT_QUALITY_TIER: RenderTier;
|
|
10
|
+
export declare function renderConfigProjection(): RenderConfigProjection;
|
|
11
|
+
export interface ModuleRenderOverridesWire {
|
|
12
|
+
motion_backend?: string;
|
|
13
|
+
keyframe_backend?: string;
|
|
14
|
+
config?: Record<string, Record<string, unknown>>;
|
|
15
|
+
}
|
|
16
|
+
export interface ResolvedModuleRenderConfigs {
|
|
17
|
+
motion_backend?: string;
|
|
18
|
+
keyframe_backend?: string;
|
|
19
|
+
keyframe_config: Record<string, unknown>;
|
|
20
|
+
motion_config: Record<string, unknown>;
|
|
21
|
+
finish_config: Record<string, Record<string, unknown>>;
|
|
22
|
+
speech_config: Record<string, Record<string, unknown>>;
|
|
23
|
+
film_finish_config: Record<string, Record<string, unknown>>;
|
|
24
|
+
master_config: Record<string, Record<string, unknown>>;
|
|
25
|
+
}
|
|
26
|
+
export declare function parseModuleRenderOverrides(raw: unknown): ModuleRenderOverridesWire;
|
|
27
|
+
export declare function resolveModuleRenderConfigs(overrides: unknown, tier: RenderTier, modules: RegisteredModule[]): ResolvedModuleRenderConfigs;
|
|
28
|
+
//# sourceMappingURL=render-module-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-module-config.d.ts","sourceRoot":"","sources":["../src/render-module-config.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,aAAa,EAAE,SAAS,iBAAiB,EAIrD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,UAAoB,CAAC;AAExD,wBAAgB,sBAAsB,IAAI,sBAAsB,CAK/D;AAED,MAAM,WAAW,yBAAyB;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,2BAA2B;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACxD;AAMD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,yBAAyB,CA6ClF;AAuBD,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,OAAO,EAClB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,gBAAgB,EAAE,GAC1B,2BAA2B,CAiC7B"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// Registry-driven render module config: the wire shape the planner sends as render_overrides
|
|
2
|
+
// and the core resolves into per-hook module configs before starting a film job.
|
|
3
|
+
import { resolveRenderPipeline, pickOneForHook, } from "./modules/render-pipeline.js";
|
|
4
|
+
import { servingForHook } from "./modules/registry.js";
|
|
5
|
+
export const QUALITY_TIERS = [
|
|
6
|
+
{ value: "draft", label: "draft", blurb: "33 frames, 8 steps; fastest, lowest quality" },
|
|
7
|
+
{ value: "standard", label: "standard", blurb: "8-step keyframes + 20-step EasyCache i2v; balanced" },
|
|
8
|
+
{ value: "final", label: "final", blurb: "97 frames, 22 steps; production quality" },
|
|
9
|
+
];
|
|
10
|
+
export const DEFAULT_QUALITY_TIER = "final";
|
|
11
|
+
export function renderConfigProjection() {
|
|
12
|
+
return {
|
|
13
|
+
quality_tiers: QUALITY_TIERS.map((t) => ({ value: t.value, label: t.label, blurb: t.blurb })),
|
|
14
|
+
default_tier: DEFAULT_QUALITY_TIER,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function isRecord(v) {
|
|
18
|
+
return !!v && typeof v === "object" && !Array.isArray(v);
|
|
19
|
+
}
|
|
20
|
+
export function parseModuleRenderOverrides(raw) {
|
|
21
|
+
if (!isRecord(raw))
|
|
22
|
+
return {};
|
|
23
|
+
if (isRecord(raw.config) || typeof raw.motion_backend === "string" || typeof raw.keyframe_backend === "string") {
|
|
24
|
+
const out = {};
|
|
25
|
+
if (typeof raw.motion_backend === "string" && raw.motion_backend.trim()) {
|
|
26
|
+
out.motion_backend = raw.motion_backend.trim();
|
|
27
|
+
}
|
|
28
|
+
if (typeof raw.keyframe_backend === "string" && raw.keyframe_backend.trim()) {
|
|
29
|
+
out.keyframe_backend = raw.keyframe_backend.trim();
|
|
30
|
+
}
|
|
31
|
+
if (isRecord(raw.config)) {
|
|
32
|
+
const config = {};
|
|
33
|
+
for (const [name, cfg] of Object.entries(raw.config)) {
|
|
34
|
+
if (isRecord(cfg))
|
|
35
|
+
config[name] = { ...cfg };
|
|
36
|
+
}
|
|
37
|
+
if (Object.keys(config).length)
|
|
38
|
+
out.config = config;
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
const config = {};
|
|
43
|
+
const kf = raw.keyframe;
|
|
44
|
+
if (isRecord(kf)) {
|
|
45
|
+
const mapped = {};
|
|
46
|
+
if (typeof kf.steps === "number")
|
|
47
|
+
mapped.steps = kf.steps;
|
|
48
|
+
if (typeof kf.guidance_scale === "number")
|
|
49
|
+
mapped.guidance_scale = kf.guidance_scale;
|
|
50
|
+
if (typeof kf.seed === "number" && kf.seed >= 0)
|
|
51
|
+
mapped.seed = kf.seed;
|
|
52
|
+
if (typeof kf.resolution === "string") {
|
|
53
|
+
const m = kf.resolution.trim().match(/^(\d+)x(\d+)$/i);
|
|
54
|
+
if (m) {
|
|
55
|
+
mapped.width = parseInt(m[1], 10);
|
|
56
|
+
mapped.height = parseInt(m[2], 10);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (Object.keys(mapped).length)
|
|
60
|
+
config.keyframe = mapped;
|
|
61
|
+
}
|
|
62
|
+
const i2v = raw.i2v;
|
|
63
|
+
if (isRecord(i2v)) {
|
|
64
|
+
const mapped = {};
|
|
65
|
+
if (typeof i2v.fps === "number")
|
|
66
|
+
mapped.fps = i2v.fps;
|
|
67
|
+
if (typeof i2v.flow_shift === "number")
|
|
68
|
+
mapped.flow_shift = i2v.flow_shift;
|
|
69
|
+
if (typeof i2v.seed === "number" && i2v.seed >= 0)
|
|
70
|
+
mapped.seed = i2v.seed;
|
|
71
|
+
if (Object.keys(mapped).length)
|
|
72
|
+
config["own-gpu"] = mapped;
|
|
73
|
+
}
|
|
74
|
+
return Object.keys(config).length ? { config } : {};
|
|
75
|
+
}
|
|
76
|
+
function injectQualityTier(config, tier, modules, keyframeChoice) {
|
|
77
|
+
const out = {};
|
|
78
|
+
for (const [name, cfg] of Object.entries(config))
|
|
79
|
+
out[name] = { ...cfg };
|
|
80
|
+
const kf = pickOneForHook(modules, "keyframe", keyframeChoice) ?? servingForHook(modules, "keyframe")[0];
|
|
81
|
+
if (kf) {
|
|
82
|
+
out[kf.name] = { ...(out[kf.name] ?? {}), quality_tier: tier };
|
|
83
|
+
}
|
|
84
|
+
for (const m of servingForHook(modules, "motion.backend")) {
|
|
85
|
+
if (m.config_schema?.quality) {
|
|
86
|
+
out[m.name] = { ...(out[m.name] ?? {}), quality: tier };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
91
|
+
export function resolveModuleRenderConfigs(overrides, tier, modules) {
|
|
92
|
+
const parsed = parseModuleRenderOverrides(overrides);
|
|
93
|
+
const config = injectQualityTier(parsed.config ?? {}, tier, modules, parsed.keyframe_backend);
|
|
94
|
+
const selection = {
|
|
95
|
+
motion_backend_choice: parsed.motion_backend,
|
|
96
|
+
keyframe_backend_choice: parsed.keyframe_backend,
|
|
97
|
+
config,
|
|
98
|
+
};
|
|
99
|
+
const pipeline = resolveRenderPipeline(modules, selection);
|
|
100
|
+
const keyframe_config = pipeline.keyframe ? pipeline.keyframe.config : { quality_tier: tier };
|
|
101
|
+
const finish_config = {};
|
|
102
|
+
for (const m of pipeline.finish)
|
|
103
|
+
finish_config[m.name] = m.config;
|
|
104
|
+
const speech_config = {};
|
|
105
|
+
for (const m of pipeline.speech)
|
|
106
|
+
speech_config[m.name] = m.config;
|
|
107
|
+
const film_finish_config = {};
|
|
108
|
+
for (const m of pipeline.filmFinish)
|
|
109
|
+
film_finish_config[m.name] = m.config;
|
|
110
|
+
const master_config = {};
|
|
111
|
+
for (const m of pipeline.master)
|
|
112
|
+
master_config[m.name] = m.config;
|
|
113
|
+
return {
|
|
114
|
+
motion_backend: pipeline.motion_backend?.name,
|
|
115
|
+
keyframe_backend: pipeline.keyframe?.name,
|
|
116
|
+
keyframe_config,
|
|
117
|
+
motion_config: pipeline.motion_backend?.config ?? {},
|
|
118
|
+
finish_config,
|
|
119
|
+
speech_config,
|
|
120
|
+
film_finish_config,
|
|
121
|
+
master_config,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=render-module-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-module-config.js","sourceRoot":"","sources":["../src/render-module-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Env } from "./platform/orchestrator-context.js";
|
|
2
|
+
export { stageAudioKeyForRenders } from "./audio-stage.js";
|
|
3
|
+
/** Mux an audio bed onto a finished silent MP4 via video-finish (VPC). */
|
|
4
|
+
export declare function muxAudioOntoVideoKey(env: Env, videoKey: string, audioKey: string): Promise<{
|
|
5
|
+
ok: true;
|
|
6
|
+
output_key: string;
|
|
7
|
+
} | {
|
|
8
|
+
ok: false;
|
|
9
|
+
error: string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare function muxAudioOntoRender(env: Env, renderId: number, audioKey: string): Promise<{
|
|
12
|
+
ok: true;
|
|
13
|
+
output_key: string;
|
|
14
|
+
} | {
|
|
15
|
+
ok: false;
|
|
16
|
+
error: string;
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=render-mux.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-mux.d.ts","sourceRoot":"","sources":["../src/render-mux.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oCAAoC,CAAC;AAQ9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,0EAA0E;AAC1E,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAyC1E;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAY1E"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// Off-GPU audio mux onto a finished render via the video-finish container (remuxAudioOnly).
|
|
2
|
+
//
|
|
3
|
+
// Used by POST /api/storyboard/renders/:id/add-audio after the caller supplies an R2 audio key.
|
|
4
|
+
// Narration flows synthesize audio through a score module first, then call the same mux path.
|
|
5
|
+
import { callVideoFinish } from "./film-orchestrator.js";
|
|
6
|
+
import { stageAudioKeyForRenders } from "./audio-stage.js";
|
|
7
|
+
import { getRenderByIdForUser, setRenderAudioOutput } from "./renders-db.js";
|
|
8
|
+
import { presignR2Get, presignR2Put } from "./presign.js";
|
|
9
|
+
const TERMINAL_OK = new Set(["COMPLETED"]);
|
|
10
|
+
export { stageAudioKeyForRenders } from "./audio-stage.js";
|
|
11
|
+
/** Mux an audio bed onto a finished silent MP4 via video-finish (VPC). */
|
|
12
|
+
export async function muxAudioOntoVideoKey(env, videoKey, audioKey) {
|
|
13
|
+
if (!env.VIDEO_FINISH_VPC)
|
|
14
|
+
return { ok: false, error: "video-finish VPC binding not configured" };
|
|
15
|
+
let stagedKey;
|
|
16
|
+
try {
|
|
17
|
+
stagedKey = await stageAudioKeyForRenders(env, audioKey);
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
return { ok: false, error: e.message };
|
|
21
|
+
}
|
|
22
|
+
const outKey = videoKey.replace(/\.mp4$/i, "") + "-audio-" + crypto.randomUUID().slice(0, 8) + ".mp4";
|
|
23
|
+
const [videoUrl, audioUrl, outputUrl] = await Promise.all([
|
|
24
|
+
presignR2Get(env, videoKey, 1800),
|
|
25
|
+
presignR2Get(env, stagedKey, 1800),
|
|
26
|
+
presignR2Put(env, outKey, 1800),
|
|
27
|
+
]);
|
|
28
|
+
const resp = await callVideoFinish(env, {
|
|
29
|
+
clips: [{ url: videoUrl }],
|
|
30
|
+
outputUrl,
|
|
31
|
+
outputKey: outKey,
|
|
32
|
+
audioUrl,
|
|
33
|
+
remuxAudioOnly: true,
|
|
34
|
+
});
|
|
35
|
+
if (!resp || !resp.ok) {
|
|
36
|
+
const errBody = resp ? await resp.text().catch(() => "") : "video-finish unreachable";
|
|
37
|
+
return {
|
|
38
|
+
ok: false,
|
|
39
|
+
error: "video-finish mux failed: " + (errBody.slice(0, 200) || String(resp?.status ?? "network")),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
let body;
|
|
43
|
+
try {
|
|
44
|
+
body = (await resp.json());
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return { ok: false, error: "video-finish returned invalid JSON" };
|
|
48
|
+
}
|
|
49
|
+
if (!body.ok)
|
|
50
|
+
return { ok: false, error: body.error || "video-finish mux failed" };
|
|
51
|
+
return { ok: true, output_key: outKey };
|
|
52
|
+
}
|
|
53
|
+
export async function muxAudioOntoRender(env, renderId, audioKey) {
|
|
54
|
+
const row = await getRenderByIdForUser(env, renderId);
|
|
55
|
+
if (!row)
|
|
56
|
+
return { ok: false, error: "render not found" };
|
|
57
|
+
if (!TERMINAL_OK.has(row.status))
|
|
58
|
+
return { ok: false, error: "render is not completed" };
|
|
59
|
+
if (!row.output_key)
|
|
60
|
+
return { ok: false, error: "render has no output video" };
|
|
61
|
+
const muxed = await muxAudioOntoVideoKey(env, row.output_key, audioKey);
|
|
62
|
+
if (!muxed.ok)
|
|
63
|
+
return muxed;
|
|
64
|
+
const updated = await setRenderAudioOutput(env, renderId, muxed.output_key, null);
|
|
65
|
+
if (!updated)
|
|
66
|
+
return { ok: false, error: "could not update render row" };
|
|
67
|
+
return { ok: true, output_key: muxed.output_key };
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=render-mux.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-mux.js","sourceRoot":"","sources":["../src/render-mux.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Env } from "./platform/orchestrator-context.js";
|
|
2
|
+
import { summarizeJob, type ClipShot, type ClipShotInput, type ClipJob, type JobSummary } from "./clip-job-model.js";
|
|
3
|
+
import type { MotionBackendOutput, PollResponse, RegisteredModule } from "./modules/types.js";
|
|
4
|
+
export type { ClipShotInput, ClipShot, ClipJob, JobSummary };
|
|
5
|
+
export { summarizeJob };
|
|
6
|
+
/** Pure: aggregate the per-shot failure reasons into one honest string (#754). */
|
|
7
|
+
export declare function describeClipFailures(job: ClipJob): string;
|
|
8
|
+
/** Pure: is a poll/invoke error TRANSIENT or DETERMINISTIC? Shared classifier (#719). */
|
|
9
|
+
export declare function classifyTransientFailure(error: string | undefined): "transient" | "deterministic";
|
|
10
|
+
/** Consecutive transient poll errors a clip shot tolerates before failing loud (#719). */
|
|
11
|
+
export declare const CLIP_POLL_MAX_ATTEMPTS = 3;
|
|
12
|
+
/** Apply a /poll outcome to a shot (pure): failure -> failed; still pending -> unchanged; output ->
|
|
13
|
+
* done with the clip key. */
|
|
14
|
+
export declare function applyPoll(shot: ClipShot, r: PollResponse<MotionBackendOutput>): void;
|
|
15
|
+
/** Pure: does an R2 clips-object filename belong to this shot? The backend writes a finished motion clip
|
|
16
|
+
* per shot under `renders/<project>/clips/`, named with the shot id followed by a NON-digit separator
|
|
17
|
+
* (e.g. `shot_09_i2v.mp4`, `shot_09_seedance.mp4`). Match the shot id only at a digit boundary so
|
|
18
|
+
* `shot_1` never swallows `shot_10`; exclude `_finished*` (finish-chain outputs, not motion clips);
|
|
19
|
+
* require a video extension. Matches by shot-id boundary, NOT the backend's exact slug, so it stays
|
|
20
|
+
* independent of the backend naming convention (the core never hardcodes where the backend wrote). */
|
|
21
|
+
export declare function clipFileMatchesShot(file: string, shotId: string): boolean;
|
|
22
|
+
/** Pure: does an R2 clips-object filename belong to this shot's FINISH-chain output? The finish modules
|
|
23
|
+
* write `renders/<project>/clips/<shot_id>_finished.mp4`. Same shot-id digit boundary as the motion-clip
|
|
24
|
+
* matcher, but here the `_finished` marker is REQUIRED (it is the finish output, not the raw motion clip)
|
|
25
|
+
* and a video extension is required. Matches by boundary + the `finished` marker, not a hardcoded full
|
|
26
|
+
* slug, so it stays independent of the backend convention. */
|
|
27
|
+
export declare function finishedClipFileMatchesShot(file: string, shotId: string): boolean;
|
|
28
|
+
/** Map shot_id -> R2 key for the objects under `renders/<project>/clips/` that match `matches` (by shot-id
|
|
29
|
+
* boundary). Makes R2 PRESENCE the authority on completion: an artifact in R2 beats a module's poll
|
|
30
|
+
* verdict (the backend wrote it even if its RunPod job was later GC'd and the module fast-failed the
|
|
31
|
+
* poll; issue #141). `matches` selects the raw motion clip (default) or the finish output. Only the
|
|
32
|
+
* requested shot ids are returned. */
|
|
33
|
+
export declare function listClipsByShotId(env: Env, project: string, shotIds: string[], matches?: (file: string, shotId: string) => boolean, minUploadedMs?: number): Promise<Map<string, string>>;
|
|
34
|
+
/** Start a clip job: resolve the motion.backend module per shot, submit, persist poll tokens. */
|
|
35
|
+
export declare function startClipJob(env: Env, args: {
|
|
36
|
+
project: string;
|
|
37
|
+
shots: ClipShotInput[];
|
|
38
|
+
motion_backend?: string;
|
|
39
|
+
config?: Record<string, unknown>;
|
|
40
|
+
module_configs?: Record<string, Record<string, unknown>>;
|
|
41
|
+
}, preModules?: RegisteredModule[]): Promise<ClipJob>;
|
|
42
|
+
/** Advance a clip job: poll the shots still pending; the module finalizes a clip to R2 on done. */
|
|
43
|
+
export declare function advanceClipJob(env: Env, jobId: string, preModules?: RegisteredModule[]): Promise<ClipJob | null>;
|
|
44
|
+
/** #536: teardown cancel -- STOP every in-flight (pending, poll-token-bearing) shot RunPod job when a clip
|
|
45
|
+
* job is cancelled/torn down, so a user-cancelled render does not leave the GPU running (the motion-phase
|
|
46
|
+
* sibling of cancelInFlightKeyframe; cancelFilmJob calls this off the clips phase). Persists cancel_sent.
|
|
47
|
+
* No-op when nothing is in flight. */
|
|
48
|
+
export declare function cancelInFlightClips(env: Env, jobId: string, preModules?: RegisteredModule[]): Promise<void>;
|
|
49
|
+
/** R2 PRESENCE IS THE SOURCE OF TRUTH for clip completion. Mutates the clip job in place: any shot that
|
|
50
|
+
* is NOT done but whose motion clip is present in R2 (matched by shot-id boundary) is marked done with
|
|
51
|
+
* that key (pending OR failed -- the artifact overrides a module's premature fast-fail; issue #141). A
|
|
52
|
+
* shot with no R2 clip is left as-is (a genuine non-render). Only lists R2 when there is at least one
|
|
53
|
+
* not-done shot to reclaim (the all-done happy path pays nothing). Returns the number adopted. This is
|
|
54
|
+
* the single reclaim used both inside advanceClipJob AND by the film orchestrator before it judges the
|
|
55
|
+
* clip job complete, so a fast-fail at 150s can never advance the film with a clip dropped. */
|
|
56
|
+
export declare function reclaimClipsFromR2(env: Env, job: ClipJob): Promise<number>;
|
|
57
|
+
/** #523 Layer 1: validate each newly-done clip's STRUCTURE (mp4 box tree) before the finish / dialogue /
|
|
58
|
+
* upscale chain spends anything. Engine-agnostic: every motion.backend clip (cloud backend, both local
|
|
59
|
+
* doors, any future module) funnels through this one chokepoint. Idempotent per shot via `validated`, so
|
|
60
|
+
* it runs at most once and can be called from more than one seam. A structural FAILURE flips the shot to
|
|
61
|
+
* failed with the real reason (honest-failure #245/#249: never a silent advance, never applied=[]) and
|
|
62
|
+
* clears its poll token so the orphan-cancel pass ignores a clip that already landed. A "skip" (artifact
|
|
63
|
+
* unreadable / validation disabled) leaves the shot untouched -- an I/O blip must never false-reject a
|
|
64
|
+
* real render. Emits one `clip.validate` structured event per shot (docs/observability.md) so smoke tests
|
|
65
|
+
* assert on the event, not prose. Returns true iff it changed any shot; the CALLER owns the job-doc write.
|
|
66
|
+
*
|
|
67
|
+
* HONEST SCOPE: this catches the STRUCTURAL-corruption class (truncated / empty / zero-frame /
|
|
68
|
+
* zero-duration / non-mp4). It does NOT catch the local-16gb#35 pure-noise clip, which is a structurally
|
|
69
|
+
* valid mp4 -- that needs a pixel decode (Layer 2, a video-finish-container pre-gate, filed separately). */
|
|
70
|
+
export declare function validateDoneClips(env: Env, job: ClipJob): Promise<boolean>;
|
|
71
|
+
//# sourceMappingURL=render-orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-orchestrator.d.ts","sourceRoot":"","sources":["../src/render-orchestrator.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oCAAoC,CAAC;AAY9D,OAAO,EACL,YAAY,EACZ,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAEV,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,CAAC;AAIxB,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAIzD;AAED,yFAAyF;AACzF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,eAAe,CAWjG;AAED,0FAA0F;AAC1F,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;8BAC8B;AAC9B,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAuCpF;AAED;;;;;uGAKuG;AACvG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAOzE;AAED;;;;+DAI+D;AAC/D,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAMjF;AAED;;;;uCAIuC;AACvC,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,GAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAA6B,EACxE,aAAa,SAAI,GAChB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAqB9B;AAED,iGAAiG;AACjG,wBAAsB,YAAY,CAChC,GAAG,EAAE,GAAG,EACR,IAAI,EAAE;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1D,EACD,UAAU,CAAC,EAAE,gBAAgB,EAAE,GAC9B,OAAO,CAAC,OAAO,CAAC,CAkElB;AAED,mGAAmG;AACnG,wBAAsB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CA8BtH;AAqCD;;;uCAGuC;AACvC,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAUjH;AAED;;;;;;gGAMgG;AAChG,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBhF;AAED;;;;;;;;;;;;6GAY6G;AAC7G,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBhF"}
|