@skyphusion-labs/vivijure-core 1.12.0 → 1.13.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/dist/film-orchestrator.d.ts +9 -2
- package/dist/film-orchestrator.d.ts.map +1 -1
- package/dist/film-orchestrator.js +79 -0
- package/dist/film-orchestrator.js.map +1 -1
- package/dist/modules/types.d.ts +8 -0
- package/dist/modules/types.d.ts.map +1 -1
- package/dist/render-sweep.d.ts +32 -0
- package/dist/render-sweep.d.ts.map +1 -1
- package/dist/render-sweep.js +74 -6
- package/dist/render-sweep.js.map +1 -1
- package/dist/renders-db.d.ts +6 -2
- package/dist/renders-db.d.ts.map +1 -1
- package/dist/renders-db.js +60 -8
- package/dist/renders-db.js.map +1 -1
- package/dist/storage-quota.d.ts +97 -1
- package/dist/storage-quota.d.ts.map +1 -1
- package/dist/storage-quota.js +197 -12
- package/dist/storage-quota.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Env } from "./platform/orchestrator-context.js";
|
|
2
|
-
import { type FilmScene, type FilmKeyframeRef, type FilmJob } from "./film-model.js";
|
|
3
|
-
import type { RegisteredModule, DialogueLine } from "./modules/types.js";
|
|
2
|
+
import { type FilmScene, type FinishShot, type FilmKeyframeRef, type FilmJob } from "./film-model.js";
|
|
3
|
+
import type { RegisteredModule, FinishInput, DialogueLine } from "./modules/types.js";
|
|
4
4
|
import { clipFileMatchesShot, type ClipJob } from "./render-orchestrator.js";
|
|
5
5
|
export * from "./film-model.js";
|
|
6
6
|
/** Collect finished clip keys from a terminal clips_only (or full) film job doc. */
|
|
@@ -25,6 +25,13 @@ export declare function finishOrderReorderDialogue(finishConfig?: Record<string,
|
|
|
25
25
|
* `finish_consumes_audio` module (lip-sync) so the planner never routes to RunPod musetalk; module-level
|
|
26
26
|
* noop alone is not enough (a stale sidecar can still submit and spin workers). */
|
|
27
27
|
export declare function resolveFinishChainForShot(serving: RegisteredModule[], isDialogueShot: boolean, finishConfig?: Record<string, Record<string, unknown>>): RegisteredModule[];
|
|
28
|
+
/** Mirror of modules/speech-upscale enhancedAudioKey so the core can presign the speech step's PUT
|
|
29
|
+
* without importing a module. Keep in lockstep with that helper (tests pin both sides). */
|
|
30
|
+
export declare function speechEnhancedAudioKey(audioKey: string): string;
|
|
31
|
+
/** cf#312: attach presigned GET/PUT URLs onto a FinishInput so credentialless satellites (upscale,
|
|
32
|
+
* lipsync) can run without shared-bucket R2 env. Best-effort: a missing presigner or unsafe key
|
|
33
|
+
* leaves the input key-only and the module falls back to R2 mode. Never throws into the chain. */
|
|
34
|
+
export declare function attachFinishPresigns(env: Env, job: FilmJob, fs: FinishShot, input: FinishInput, modules: RegisteredModule[]): Promise<void>;
|
|
28
35
|
/** Advance the finish chain: per shot, submit its current finish module or poll the in-flight one,
|
|
29
36
|
* chaining to the next module on completion. Phase -> assemble when every shot is terminal. */
|
|
30
37
|
/** cf#507b: the MEASURED dimensions of each finished clip, read from the clip job at dispatch time.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"film-orchestrator.d.ts","sourceRoot":"","sources":["../src/film-orchestrator.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oCAAoC,CAAC;AAuB9D,OAAO,EAGL,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"film-orchestrator.d.ts","sourceRoot":"","sources":["../src/film-orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -522,6 +522,8 @@ async function advanceSpeechPhase(env, job) {
|
|
|
522
522
|
context: { project: job.project, job_id: job.film_id },
|
|
523
523
|
};
|
|
524
524
|
if (!ss.poll) {
|
|
525
|
+
// cf#312: credentialless audio-upscale path when PRESIGNER is bound.
|
|
526
|
+
await attachSpeechPresigns(env, req.input);
|
|
525
527
|
const r = await invokeModule(fetcher, req);
|
|
526
528
|
if (!r.ok) {
|
|
527
529
|
blipOrDegrade(ss, r.error, false);
|
|
@@ -630,6 +632,80 @@ async function adoptFinishStepFromR2(env, job, fs, preModules) {
|
|
|
630
632
|
adoptFinishStepOutput(fs, expected, finishStepAppliedTag(fs, modules));
|
|
631
633
|
return true;
|
|
632
634
|
}
|
|
635
|
+
// cf#312: satellite finish/speech jobs queue + cold-start + GPU work. Same 30min envelope as
|
|
636
|
+
// keyframe_url / film.finish / master (cast REF_TTL is also 1800).
|
|
637
|
+
const FINISH_PRESIGN_TTL_SECONDS = 1800;
|
|
638
|
+
/** Mirror of modules/speech-upscale enhancedAudioKey so the core can presign the speech step's PUT
|
|
639
|
+
* without importing a module. Keep in lockstep with that helper (tests pin both sides). */
|
|
640
|
+
export function speechEnhancedAudioKey(audioKey) {
|
|
641
|
+
const slash = audioKey.lastIndexOf("/");
|
|
642
|
+
const dot = audioKey.lastIndexOf(".");
|
|
643
|
+
return dot > slash ? `${audioKey.slice(0, dot)}_enh.wav` : `${audioKey}_enh.wav`;
|
|
644
|
+
}
|
|
645
|
+
/** cf#312: attach presigned GET/PUT URLs onto a FinishInput so credentialless satellites (upscale,
|
|
646
|
+
* lipsync) can run without shared-bucket R2 env. Best-effort: a missing presigner or unsafe key
|
|
647
|
+
* leaves the input key-only and the module falls back to R2 mode. Never throws into the chain. */
|
|
648
|
+
export async function attachFinishPresigns(env, job, fs, input, modules) {
|
|
649
|
+
const outKey = finishStepOutputKey(job.project, fs, modules);
|
|
650
|
+
if (!outKey)
|
|
651
|
+
return;
|
|
652
|
+
try {
|
|
653
|
+
// `<output_key>.hash`, NOT `<output_key minus .mp4>.hash`. ONE key, three call sites that must
|
|
654
|
+
// agree: the #583 adoption gate reads `${artifactKey}.hash` (finishArtifactHashMatches), the
|
|
655
|
+
// satellites write f"{output_key}.hash" (vivijure-upscale / vivijure-musetalk handler.py), and
|
|
656
|
+
// finish-hash.ts calls itself the SINGLE source of the `<output_key>.hash` sidecar. Stripping the
|
|
657
|
+
// extension is the .srt / .meta.json sidecar convention (filmFinishSeed, metaKeyFor) and does not
|
|
658
|
+
// apply here. Getting it wrong is silent and expensive: the gate takes its no-sidecar refusal on
|
|
659
|
+
// every presigned step, so adoptFinishStepFromR2 (#166 GC/frozen-job recovery) and the final
|
|
660
|
+
// artifact adoption permanently refuse, and the step re-runs paid GPU work with nothing saying so.
|
|
661
|
+
const hashKey = `${outKey}.hash`;
|
|
662
|
+
// ALL-OR-NOTHING, matching the sibling attachSpeechPresigns: resolve EVERY leg before assigning
|
|
663
|
+
// ANY. Assigning as we go leaves presigned transport set with audio_url absent when a later leg
|
|
664
|
+
// throws, and musetalk's presigned branch REQUIRES audio_url -- it returns a top-level `error`,
|
|
665
|
+
// which is a hard job failure, not the key-only R2 fallback this function's contract promises.
|
|
666
|
+
// The catch below would then log finish.presign_skip for what was really a partial application.
|
|
667
|
+
const [videoUrl, outputUrl, audioUrl, hashUrl] = await Promise.all([
|
|
668
|
+
presignR2Get(env, fs.clip_key, FINISH_PRESIGN_TTL_SECONDS),
|
|
669
|
+
presignR2Put(env, outKey, FINISH_PRESIGN_TTL_SECONDS),
|
|
670
|
+
input.audio_key ? presignR2Get(env, input.audio_key, FINISH_PRESIGN_TTL_SECONDS) : undefined,
|
|
671
|
+
input.output_hash ? presignR2Put(env, hashKey, FINISH_PRESIGN_TTL_SECONDS) : undefined,
|
|
672
|
+
]);
|
|
673
|
+
input.video_url = videoUrl;
|
|
674
|
+
input.output_url = outputUrl;
|
|
675
|
+
input.output_key = outKey;
|
|
676
|
+
if (audioUrl)
|
|
677
|
+
input.audio_url = audioUrl;
|
|
678
|
+
if (hashUrl)
|
|
679
|
+
input.hash_url = hashUrl;
|
|
680
|
+
}
|
|
681
|
+
catch (e) {
|
|
682
|
+
console.warn(JSON.stringify({
|
|
683
|
+
ev: "finish.presign_skip",
|
|
684
|
+
shot: fs.shot_id,
|
|
685
|
+
reason: e instanceof Error ? e.message : String(e),
|
|
686
|
+
}));
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
/** cf#312: attach presigned URLs for a speech step. Same best-effort posture as attachFinishPresigns. */
|
|
690
|
+
async function attachSpeechPresigns(env, input) {
|
|
691
|
+
try {
|
|
692
|
+
const outKey = speechEnhancedAudioKey(input.audio_key);
|
|
693
|
+
const [audioUrl, outputUrl] = await Promise.all([
|
|
694
|
+
presignR2Get(env, input.audio_key, FINISH_PRESIGN_TTL_SECONDS),
|
|
695
|
+
presignR2Put(env, outKey, FINISH_PRESIGN_TTL_SECONDS),
|
|
696
|
+
]);
|
|
697
|
+
input.audio_url = audioUrl;
|
|
698
|
+
input.output_url = outputUrl;
|
|
699
|
+
input.output_key = outKey;
|
|
700
|
+
}
|
|
701
|
+
catch (e) {
|
|
702
|
+
console.warn(JSON.stringify({
|
|
703
|
+
ev: "speech.presign_skip",
|
|
704
|
+
shot: input.shot_id,
|
|
705
|
+
reason: e instanceof Error ? e.message : String(e),
|
|
706
|
+
}));
|
|
707
|
+
}
|
|
708
|
+
}
|
|
633
709
|
/** Advance the finish chain: per shot, submit its current finish module or poll the in-flight one,
|
|
634
710
|
* chaining to the next module on completion. Phase -> assemble when every shot is terminal. */
|
|
635
711
|
/** cf#507b: the MEASURED dimensions of each finished clip, read from the clip job at dispatch time.
|
|
@@ -744,6 +820,9 @@ async function advanceFinishPhase(env, job, preModules) {
|
|
|
744
820
|
headEtag(env, dialogueAudioKey),
|
|
745
821
|
]);
|
|
746
822
|
req.input.output_hash = await finishStepInputHash(clipEtag, audioEtag, fs.configs?.[fs.idx]);
|
|
823
|
+
// cf#312: presign after output_hash so hash_url can ride with it. Modules that understand
|
|
824
|
+
// video_url/output_url use the credentialless satellite branch; others ignore the fields.
|
|
825
|
+
await attachFinishPresigns(env, job, fs, req.input, modules);
|
|
747
826
|
const r = await invokeModule(fetcher, req);
|
|
748
827
|
if (!r.ok) {
|
|
749
828
|
failOrRetry(fs, r.error, false);
|