@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
package/README.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# @skyphusion-labs/vivijure-core
|
|
2
|
+
|
|
3
|
+
Shared orchestration for [Vivijure Studio](https://github.com/skyphusion-labs/vivijure): module
|
|
4
|
+
registry, film pipeline, planner helpers, and the **Platform ICD** that lets one codebase run on
|
|
5
|
+
Cloudflare Workers or a provider-neutral Node host.
|
|
6
|
+
|
|
7
|
+
| Consumer | Role |
|
|
8
|
+
|----------|------|
|
|
9
|
+
| [`vivijure`](https://github.com/skyphusion-labs/vivijure) | CF-native control plane (D1, R2, service bindings) |
|
|
10
|
+
| [`vivijure-local`](https://github.com/skyphusion-labs/vivijure-local) | Homelab control plane (SQLite, S3/MinIO, HTTP sidecars) |
|
|
11
|
+
|
|
12
|
+
**Status:** Parity with `vivijure` orchestration established (see [docs/PARITY.md](docs/PARITY.md)).
|
|
13
|
+
Published on npm as `@skyphusion-labs/vivijure-core`. `vivijure-local` consumes semver; `vivijure` (CF)
|
|
14
|
+
still carries duplicate `src/` copies until [docs/HOST-ADOPTION.md](docs/HOST-ADOPTION.md).
|
|
15
|
+
|
|
16
|
+
## Layout
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
src/
|
|
20
|
+
platform/ Platform ICD + orchestratorContextFromPlatform()
|
|
21
|
+
modules/ vivijure-module/2 contract, registry, conformance
|
|
22
|
+
film-*.ts Film + clip orchestration
|
|
23
|
+
*-db.ts D1-shaped metadata helpers (DbEnv)
|
|
24
|
+
preflight.ts Planner pre-render validation
|
|
25
|
+
...
|
|
26
|
+
docs/
|
|
27
|
+
PLATFORM.md Frozen adapter contract (ICD v1)
|
|
28
|
+
ARCHITECTURE.md Package boundary + dependency rules
|
|
29
|
+
HOST-ADOPTION.md CF + local host migration checklist
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Install
|
|
33
|
+
|
|
34
|
+
**npm (consumers):**
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npm install @skyphusion-labs/vivijure-core
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Sibling clone (vivijure-local / vivijure dev):**
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
~/dev/
|
|
44
|
+
vivijure-core/
|
|
45
|
+
vivijure-local/ # package.json: "^0.9.0" — override with file:../vivijure-core locally
|
|
46
|
+
vivijure/
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
cd vivijure-core
|
|
51
|
+
npm ci
|
|
52
|
+
npm run build # emits dist/ (also runs on npm install via prepare)
|
|
53
|
+
npm run typecheck && npm test
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Publish** (maintainers): merge to `main`, ensure repo secret `NPM_TOKEN` is set, then:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
git tag vivijure-core-v0.9.0
|
|
60
|
+
git push origin vivijure-core-v0.9.0
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Or trigger the **Publish npm package** workflow manually after bumping `package.json` version.
|
|
64
|
+
|
|
65
|
+
**flatliners** (Hetzner test box): clone/pull from GitHub `main` via `gh`, not laptop rsync.
|
|
66
|
+
See [docs/FLATLINERS-DEV.md](docs/FLATLINERS-DEV.md) and `scripts/flatliners-sync.sh`.
|
|
67
|
+
|
|
68
|
+
## Key exports
|
|
69
|
+
|
|
70
|
+
| Entry | Contents |
|
|
71
|
+
|-------|----------|
|
|
72
|
+
| `@skyphusion-labs/vivijure-core` | Barrel: registry, orchestrators, conformance, ... |
|
|
73
|
+
| `@skyphusion-labs/vivijure-core/platform` | `Platform`, `orchestratorContextFromPlatform`, R2 shim |
|
|
74
|
+
| `@skyphusion-labs/vivijure-core/film-orchestrator` | Full film state machine |
|
|
75
|
+
| `@skyphusion-labs/vivijure-core/preflight` | Storyboard pre-render checks |
|
|
76
|
+
|
|
77
|
+
Full subpath list: `package.json` `exports` field.
|
|
78
|
+
|
|
79
|
+
## Platform ICD
|
|
80
|
+
|
|
81
|
+
Orchestration never touches Worker bindings or `process.env` directly. Hosts implement `Platform`
|
|
82
|
+
(see [docs/PLATFORM.md](docs/PLATFORM.md)) and pass `orchestratorContextFromPlatform(platform)`
|
|
83
|
+
into ported handlers.
|
|
84
|
+
|
|
85
|
+
## License
|
|
86
|
+
|
|
87
|
+
AGPL-3.0-only. Same as Vivijure Studio upstream.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-routing.d.ts","sourceRoot":"","sources":["../src/audio-routing.ts"],"names":[],"mappings":"AAAA,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-routing.js","sourceRoot":"","sources":["../src/audio-routing.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Env } from "./platform/orchestrator-context.js";
|
|
2
|
+
export declare function stageAudioKeyForRenders(env: Env, audioKey: string): Promise<string>;
|
|
3
|
+
export declare function resolveStagedAudioKey(env: Env, audioKey: string | undefined): Promise<string | undefined>;
|
|
4
|
+
//# sourceMappingURL=audio-stage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-stage.d.ts","sourceRoot":"","sources":["../src/audio-stage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oCAAoC,CAAC;AAG9D,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAazF;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG/G"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { needsAudioCrossBucketCopy } from "./audio-routing.js";
|
|
2
|
+
export async function stageAudioKeyForRenders(env, audioKey) {
|
|
3
|
+
const key = audioKey.trim();
|
|
4
|
+
if (!key)
|
|
5
|
+
throw new Error("audioKey required");
|
|
6
|
+
if (!needsAudioCrossBucketCopy(key))
|
|
7
|
+
return key;
|
|
8
|
+
if (await env.R2_RENDERS.head(key))
|
|
9
|
+
return key;
|
|
10
|
+
const src = await env.R2.get(key);
|
|
11
|
+
if (!src)
|
|
12
|
+
throw new Error(`audio source not found: ${key}`);
|
|
13
|
+
const ext = key.split(".").pop() || "mp3";
|
|
14
|
+
const dest = `audio/${crypto.randomUUID()}.${ext}`;
|
|
15
|
+
const head = await env.R2.head(key);
|
|
16
|
+
const mime = head?.httpMetadata?.contentType || "audio/mpeg";
|
|
17
|
+
await env.R2_RENDERS.put(dest, await src.arrayBuffer(), { httpMetadata: { contentType: mime } });
|
|
18
|
+
return dest;
|
|
19
|
+
}
|
|
20
|
+
export async function resolveStagedAudioKey(env, audioKey) {
|
|
21
|
+
if (!audioKey?.trim())
|
|
22
|
+
return undefined;
|
|
23
|
+
return stageAudioKeyForRenders(env, audioKey.trim());
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=audio-stage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-stage.js","sourceRoot":"","sources":["../src/audio-stage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,GAAQ,EAAE,QAAgB;IACtE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC/C,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAChD,IAAI,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC;IAC1C,MAAM,IAAI,GAAG,SAAS,MAAM,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,EAAE,YAAY,EAAE,WAAW,IAAI,YAAY,CAAC;IAC7D,MAAM,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACjG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAQ,EAAE,QAA4B;IAChF,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,uBAAuB,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Env } from "./platform/orchestrator-context.js";
|
|
2
|
+
import type { RegisteredModule } from "./modules/types.js";
|
|
3
|
+
import { type AudioAnalyzeRequest, type AudioBeatPlan } from "./runpod-submit.js";
|
|
4
|
+
/** Score modules that analyze beat timing (config_schema.clip_seconds). */
|
|
5
|
+
export declare function beatSyncScoreModules(modules: RegisteredModule[]): RegisteredModule[];
|
|
6
|
+
interface BeatSyncModuleOutput {
|
|
7
|
+
film_key: string;
|
|
8
|
+
applied: string[];
|
|
9
|
+
beat_plan?: AudioBeatPlan;
|
|
10
|
+
}
|
|
11
|
+
export declare function beatPlanFromModuleOutput(output: BeatSyncModuleOutput | null | undefined): AudioBeatPlan | null;
|
|
12
|
+
export type BeatAnalyzeResult = {
|
|
13
|
+
ok: true;
|
|
14
|
+
plan: AudioBeatPlan;
|
|
15
|
+
module: string;
|
|
16
|
+
} | {
|
|
17
|
+
ok: false;
|
|
18
|
+
error: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function analyzeAudioBeats(env: Env, req: AudioAnalyzeRequest, moduleName?: string): Promise<BeatAnalyzeResult>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=beat-analyze.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beat-analyze.d.ts","sourceRoot":"","sources":["../src/beat-analyze.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oCAAoC,CAAC;AAQ9D,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAEnB,MAAM,oBAAoB,CAAC;AAM5B,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAIpF;AAgBD,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,GAAG,aAAa,GAAG,IAAI,CAI9G;AAqCD,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,mBAAmB,EACxB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC,CA8C5B"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// Planner beat analysis via the installed beat-sync score module (registry-driven).
|
|
2
|
+
//
|
|
3
|
+
// When MODULE_BEAT_SYNC is bound, POST /api/audio/analyze invokes the module worker, which calls
|
|
4
|
+
// the always-on audio-beat-sync container on the Hetzner fleet over Workers VPC. Falls back to a
|
|
5
|
+
// direct core VPC call when the module is not installed (legacy path).
|
|
6
|
+
import { discoverModules, invokeModule, resolveFetcher, servingForHook, validateConfig, } from "./modules/registry.js";
|
|
7
|
+
import { presignR2Get } from "./presign.js";
|
|
8
|
+
import { parseAudioBeatPlan, } from "./runpod-submit.js";
|
|
9
|
+
/** Score modules that analyze beat timing (config_schema.clip_seconds). */
|
|
10
|
+
export function beatSyncScoreModules(modules) {
|
|
11
|
+
return servingForHook(modules, "score").filter((m) => m.config_schema != null && m.config_schema.clip_seconds != null);
|
|
12
|
+
}
|
|
13
|
+
function fetcherForModule(env, mod) {
|
|
14
|
+
return resolveFetcher(env, mod.binding);
|
|
15
|
+
}
|
|
16
|
+
function resolveBeatSyncModule(modules, moduleName) {
|
|
17
|
+
const candidates = beatSyncScoreModules(modules);
|
|
18
|
+
if (candidates.length === 0)
|
|
19
|
+
return null;
|
|
20
|
+
if (moduleName)
|
|
21
|
+
return candidates.find((m) => m.name === moduleName) ?? null;
|
|
22
|
+
return candidates[0];
|
|
23
|
+
}
|
|
24
|
+
export function beatPlanFromModuleOutput(output) {
|
|
25
|
+
const plan = output?.beat_plan;
|
|
26
|
+
if (!plan || (plan.mode !== "beat" && plan.mode !== "duration"))
|
|
27
|
+
return null;
|
|
28
|
+
return plan;
|
|
29
|
+
}
|
|
30
|
+
function userConfigFromRequest(req) {
|
|
31
|
+
const out = {};
|
|
32
|
+
if (typeof req.clipSeconds === "number")
|
|
33
|
+
out.clip_seconds = req.clipSeconds;
|
|
34
|
+
if (req.mode === "beat" || req.mode === "duration")
|
|
35
|
+
out.mode = req.mode;
|
|
36
|
+
if (typeof req.minSceneS === "number")
|
|
37
|
+
out.min_scene_s = req.minSceneS;
|
|
38
|
+
if (typeof req.maxSceneS === "number")
|
|
39
|
+
out.max_scene_s = req.maxSceneS;
|
|
40
|
+
if (typeof req.forceShots === "number")
|
|
41
|
+
out.force_shots = req.forceShots;
|
|
42
|
+
return out;
|
|
43
|
+
}
|
|
44
|
+
async function analyzeViaVpc(env, audioUrl, req) {
|
|
45
|
+
const vpc = env.AUDIO_BEAT_SYNC_VPC;
|
|
46
|
+
if (!vpc)
|
|
47
|
+
return { ok: false, error: "AUDIO_BEAT_SYNC_VPC not configured" };
|
|
48
|
+
const resp = await vpc.fetch("http://audio-beat-sync/analyze", {
|
|
49
|
+
method: "POST",
|
|
50
|
+
headers: { "content-type": "application/json" },
|
|
51
|
+
body: JSON.stringify({
|
|
52
|
+
audioUrl,
|
|
53
|
+
audioKey: req.audioKey,
|
|
54
|
+
clipSeconds: req.clipSeconds ?? 8,
|
|
55
|
+
mode: req.mode ?? "beat",
|
|
56
|
+
minSceneS: req.minSceneS ?? 2.5,
|
|
57
|
+
maxSceneS: req.maxSceneS ?? 12,
|
|
58
|
+
forceShots: req.forceShots,
|
|
59
|
+
}),
|
|
60
|
+
});
|
|
61
|
+
const plan = parseAudioBeatPlan(await resp.json());
|
|
62
|
+
if (!plan)
|
|
63
|
+
return { ok: false, error: "beat-sync container returned an unrecognized plan" };
|
|
64
|
+
return { ok: true, plan };
|
|
65
|
+
}
|
|
66
|
+
export async function analyzeAudioBeats(env, req, moduleName) {
|
|
67
|
+
const audioKey = req.audioKey?.trim();
|
|
68
|
+
if (!audioKey)
|
|
69
|
+
return { ok: false, error: "audioKey required" };
|
|
70
|
+
let audioUrl;
|
|
71
|
+
try {
|
|
72
|
+
audioUrl = await presignR2Get(env, audioKey, 300);
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
76
|
+
return { ok: false, error: "could not presign audio: " + msg.slice(0, 200) };
|
|
77
|
+
}
|
|
78
|
+
const modules = await discoverModules(env);
|
|
79
|
+
const mod = resolveBeatSyncModule(modules, moduleName?.trim() || undefined);
|
|
80
|
+
if (mod) {
|
|
81
|
+
const fetcher = fetcherForModule(env, mod);
|
|
82
|
+
if (!fetcher) {
|
|
83
|
+
return { ok: false, error: `beat-sync module "${mod.name}" binding ${mod.binding} is not reachable` };
|
|
84
|
+
}
|
|
85
|
+
const config = {
|
|
86
|
+
...validateConfig(mod.config_schema, userConfigFromRequest(req)),
|
|
87
|
+
audio_url: audioUrl,
|
|
88
|
+
audio_key: audioKey,
|
|
89
|
+
};
|
|
90
|
+
const r = await invokeModule(fetcher, {
|
|
91
|
+
hook: "score",
|
|
92
|
+
input: { film_key: "beat-analyze/planner", seconds: 0 },
|
|
93
|
+
config,
|
|
94
|
+
context: { job_id: crypto.randomUUID(), project: "planner" },
|
|
95
|
+
});
|
|
96
|
+
if (!r.ok)
|
|
97
|
+
return { ok: false, error: r.error || `${mod.name} invoke failed` };
|
|
98
|
+
if (!("output" in r)) {
|
|
99
|
+
return { ok: false, error: `${mod.name} returned async poll (beat analysis is synchronous)` };
|
|
100
|
+
}
|
|
101
|
+
const plan = beatPlanFromModuleOutput(r.output);
|
|
102
|
+
if (!plan)
|
|
103
|
+
return { ok: false, error: `${mod.name} finished but returned no beat plan` };
|
|
104
|
+
return { ok: true, plan, module: mod.name };
|
|
105
|
+
}
|
|
106
|
+
const direct = await analyzeViaVpc(env, audioUrl, req);
|
|
107
|
+
if (!direct.ok)
|
|
108
|
+
return direct;
|
|
109
|
+
return { ok: true, plan: direct.plan, module: "core-vpc" };
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=beat-analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beat-analyze.js","sourceRoot":"","sources":["../src/beat-analyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ScoreOutput } from "./modules/types.js";
|
|
2
|
+
export interface TimedScene {
|
|
3
|
+
index: number;
|
|
4
|
+
start: number;
|
|
5
|
+
end: number;
|
|
6
|
+
targetSeconds: number;
|
|
7
|
+
}
|
|
8
|
+
export interface AudioBeatPlan {
|
|
9
|
+
mode: "beat" | "duration";
|
|
10
|
+
audioKey: string;
|
|
11
|
+
durationSeconds: number;
|
|
12
|
+
bpm?: number;
|
|
13
|
+
beatCount?: number;
|
|
14
|
+
suggestedShots: number;
|
|
15
|
+
clipSeconds: number;
|
|
16
|
+
filmSeconds: number;
|
|
17
|
+
remainderSeconds: number;
|
|
18
|
+
timedScenes: TimedScene[];
|
|
19
|
+
note: string;
|
|
20
|
+
}
|
|
21
|
+
/** POST /api/audio/analyze request (camelCase). */
|
|
22
|
+
export interface AudioAnalyzeRequest {
|
|
23
|
+
audioKey: string;
|
|
24
|
+
clipSeconds?: number;
|
|
25
|
+
mode?: "beat" | "duration";
|
|
26
|
+
minSceneS?: number;
|
|
27
|
+
maxSceneS?: number;
|
|
28
|
+
forceShots?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface BeatSyncOutput extends ScoreOutput {
|
|
31
|
+
beat_plan?: AudioBeatPlan;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=beat-sync-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beat-sync-types.d.ts","sourceRoot":"","sources":["../src/beat-sync-types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beat-sync-types.js","sourceRoot":"","sources":["../src/beat-sync-types.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,mGAAmG"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { OrchestratorEnv } from "./platform/orchestrator-context.js";
|
|
2
|
+
import { type SlotId, type StoryboardValidated } from "./storyboard-validate.js";
|
|
3
|
+
export { gunzipBytes } from "./bundle-durations.js";
|
|
4
|
+
export interface TrainingImage {
|
|
5
|
+
key?: string;
|
|
6
|
+
dataUrl?: string;
|
|
7
|
+
filename?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface CharacterRef {
|
|
10
|
+
name: string;
|
|
11
|
+
prompt: string;
|
|
12
|
+
trainingImages: TrainingImage[];
|
|
13
|
+
portrait?: TrainingImage;
|
|
14
|
+
}
|
|
15
|
+
export interface AssembleBundleArgs {
|
|
16
|
+
storyboard: StoryboardValidated;
|
|
17
|
+
characterRefs: Partial<Record<SlotId, CharacterRef>>;
|
|
18
|
+
startImage?: TrainingImage;
|
|
19
|
+
sceneStartImages?: Record<string, TrainingImage>;
|
|
20
|
+
}
|
|
21
|
+
export type AssembleBundleResult = {
|
|
22
|
+
ok: true;
|
|
23
|
+
bundleKey: string;
|
|
24
|
+
sizeBytes: number;
|
|
25
|
+
fileCount: number;
|
|
26
|
+
} | {
|
|
27
|
+
ok: false;
|
|
28
|
+
errors: string[];
|
|
29
|
+
};
|
|
30
|
+
export declare function safeCharFilename(slot: SlotId, name: string): string;
|
|
31
|
+
export declare function detectImageExt(bytes: Uint8Array): "png" | "jpg" | "webp";
|
|
32
|
+
export declare function decodeDataUrl(dataUrl: string): Uint8Array | null;
|
|
33
|
+
export declare function overlayKeyframesIntoBundle(env: OrchestratorEnv, srcBundleKey: string, outBundleKey: string, keyframes: Array<{
|
|
34
|
+
shot_id: string;
|
|
35
|
+
key: string;
|
|
36
|
+
}>): Promise<{
|
|
37
|
+
ok: true;
|
|
38
|
+
bundleKey: string;
|
|
39
|
+
} | {
|
|
40
|
+
ok: false;
|
|
41
|
+
error: string;
|
|
42
|
+
}>;
|
|
43
|
+
export declare function bundleKeyFor(projectName: string, tarBytes: Uint8Array): Promise<string>;
|
|
44
|
+
export declare function callImagePrep(env: OrchestratorEnv, payload: {
|
|
45
|
+
inputUrl: string;
|
|
46
|
+
outputUrl: string;
|
|
47
|
+
outputKey: string;
|
|
48
|
+
background: "alpha" | "black";
|
|
49
|
+
}, opts?: {
|
|
50
|
+
retries?: number;
|
|
51
|
+
backoffMs?: number;
|
|
52
|
+
}): Promise<Response | null>;
|
|
53
|
+
export declare function assembleBundle(env: OrchestratorEnv, args: AssembleBundleArgs): Promise<AssembleBundleResult>;
|
|
54
|
+
//# sourceMappingURL=bundle-assembler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-assembler.d.ts","sourceRoot":"","sources":["../src/bundle-assembler.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKpD,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,aAAa,EAAE,CAAC;IAEhC,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,mBAAmB,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IACrD,UAAU,CAAC,EAAE,aAAa,CAAC;IAQ3B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAClD;AAED,MAAM,MAAM,oBAAoB,GAC5B;IACE,EAAE,EAAE,IAAI,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAON,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAInE;AAOD,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAmBxE;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAWhE;AAiCD,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,eAAe,EACpB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GACjD,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBzE;AAsBD,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7F;AAOD,wBAAsB,aAAa,CACjC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAA;CAAE,EAClG,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA2B1B;AAqDD,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,oBAAoB,CAAC,CA2K/B"}
|