@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.
Files changed (267) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +87 -0
  3. package/dist/audio-routing.d.ts +2 -0
  4. package/dist/audio-routing.d.ts.map +1 -0
  5. package/dist/audio-routing.js +4 -0
  6. package/dist/audio-routing.js.map +1 -0
  7. package/dist/audio-stage.d.ts +4 -0
  8. package/dist/audio-stage.d.ts.map +1 -0
  9. package/dist/audio-stage.js +25 -0
  10. package/dist/audio-stage.js.map +1 -0
  11. package/dist/beat-analyze.d.ts +22 -0
  12. package/dist/beat-analyze.d.ts.map +1 -0
  13. package/dist/beat-analyze.js +111 -0
  14. package/dist/beat-analyze.js.map +1 -0
  15. package/dist/beat-sync-types.d.ts +33 -0
  16. package/dist/beat-sync-types.d.ts.map +1 -0
  17. package/dist/beat-sync-types.js +4 -0
  18. package/dist/beat-sync-types.js.map +1 -0
  19. package/dist/bundle-assembler.d.ts +54 -0
  20. package/dist/bundle-assembler.d.ts.map +1 -0
  21. package/dist/bundle-assembler.js +376 -0
  22. package/dist/bundle-assembler.js.map +1 -0
  23. package/dist/bundle-durations.d.ts +5 -0
  24. package/dist/bundle-durations.d.ts.map +1 -0
  25. package/dist/bundle-durations.js +68 -0
  26. package/dist/bundle-durations.js.map +1 -0
  27. package/dist/bundle-storyboard.d.ts +11 -0
  28. package/dist/bundle-storyboard.d.ts.map +1 -0
  29. package/dist/bundle-storyboard.js +82 -0
  30. package/dist/bundle-storyboard.js.map +1 -0
  31. package/dist/captions.d.ts +25 -0
  32. package/dist/captions.d.ts.map +1 -0
  33. package/dist/captions.js +56 -0
  34. package/dist/captions.js.map +1 -0
  35. package/dist/cast-db.d.ts +61 -0
  36. package/dist/cast-db.d.ts.map +1 -0
  37. package/dist/cast-db.js +324 -0
  38. package/dist/cast-db.js.map +1 -0
  39. package/dist/cast-lora-train.d.ts +18 -0
  40. package/dist/cast-lora-train.d.ts.map +1 -0
  41. package/dist/cast-lora-train.js +215 -0
  42. package/dist/cast-lora-train.js.map +1 -0
  43. package/dist/cast-loras.d.ts +21 -0
  44. package/dist/cast-loras.d.ts.map +1 -0
  45. package/dist/cast-loras.js +69 -0
  46. package/dist/cast-loras.js.map +1 -0
  47. package/dist/clip-content-validate.d.ts +43 -0
  48. package/dist/clip-content-validate.d.ts.map +1 -0
  49. package/dist/clip-content-validate.js +115 -0
  50. package/dist/clip-content-validate.js.map +1 -0
  51. package/dist/clip-job-model.d.ts +42 -0
  52. package/dist/clip-job-model.d.ts.map +1 -0
  53. package/dist/clip-job-model.js +8 -0
  54. package/dist/clip-job-model.js.map +1 -0
  55. package/dist/clip-validate.d.ts +33 -0
  56. package/dist/clip-validate.d.ts.map +1 -0
  57. package/dist/clip-validate.js +247 -0
  58. package/dist/clip-validate.js.map +1 -0
  59. package/dist/d1-retry.d.ts +20 -0
  60. package/dist/d1-retry.d.ts.map +1 -0
  61. package/dist/d1-retry.js +67 -0
  62. package/dist/d1-retry.js.map +1 -0
  63. package/dist/db-env.d.ts +6 -0
  64. package/dist/db-env.d.ts.map +1 -0
  65. package/dist/db-env.js +2 -0
  66. package/dist/db-env.js.map +1 -0
  67. package/dist/dialogue-lines.d.ts +23 -0
  68. package/dist/dialogue-lines.d.ts.map +1 -0
  69. package/dist/dialogue-lines.js +84 -0
  70. package/dist/dialogue-lines.js.map +1 -0
  71. package/dist/film-advance-lease.d.ts +9 -0
  72. package/dist/film-advance-lease.d.ts.map +1 -0
  73. package/dist/film-advance-lease.js +19 -0
  74. package/dist/film-advance-lease.js.map +1 -0
  75. package/dist/film-model.d.ts +415 -0
  76. package/dist/film-model.d.ts.map +1 -0
  77. package/dist/film-model.js +541 -0
  78. package/dist/film-model.js.map +1 -0
  79. package/dist/film-orchestrator.d.ts +216 -0
  80. package/dist/film-orchestrator.d.ts.map +1 -0
  81. package/dist/film-orchestrator.js +2204 -0
  82. package/dist/film-orchestrator.js.map +1 -0
  83. package/dist/film-render-bridge.d.ts +26 -0
  84. package/dist/film-render-bridge.d.ts.map +1 -0
  85. package/dist/film-render-bridge.js +176 -0
  86. package/dist/film-render-bridge.js.map +1 -0
  87. package/dist/finish-hash.d.ts +10 -0
  88. package/dist/finish-hash.d.ts.map +1 -0
  89. package/dist/finish-hash.js +60 -0
  90. package/dist/finish-hash.js.map +1 -0
  91. package/dist/index.d.ts +48 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +45 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/key-safety.d.ts +5 -0
  96. package/dist/key-safety.d.ts.map +1 -0
  97. package/dist/key-safety.js +23 -0
  98. package/dist/key-safety.js.map +1 -0
  99. package/dist/lora-bundle.d.ts +19 -0
  100. package/dist/lora-bundle.d.ts.map +1 -0
  101. package/dist/lora-bundle.js +75 -0
  102. package/dist/lora-bundle.js.map +1 -0
  103. package/dist/lora-keys.d.ts +2 -0
  104. package/dist/lora-keys.d.ts.map +1 -0
  105. package/dist/lora-keys.js +4 -0
  106. package/dist/lora-keys.js.map +1 -0
  107. package/dist/modules/conformance.d.ts +58 -0
  108. package/dist/modules/conformance.d.ts.map +1 -0
  109. package/dist/modules/conformance.js +369 -0
  110. package/dist/modules/conformance.js.map +1 -0
  111. package/dist/modules/manifest-validate.d.ts +5 -0
  112. package/dist/modules/manifest-validate.d.ts.map +1 -0
  113. package/dist/modules/manifest-validate.js +60 -0
  114. package/dist/modules/manifest-validate.js.map +1 -0
  115. package/dist/modules/registry.d.ts +184 -0
  116. package/dist/modules/registry.d.ts.map +1 -0
  117. package/dist/modules/registry.js +653 -0
  118. package/dist/modules/registry.js.map +1 -0
  119. package/dist/modules/render-pipeline.d.ts +38 -0
  120. package/dist/modules/render-pipeline.d.ts.map +1 -0
  121. package/dist/modules/render-pipeline.js +40 -0
  122. package/dist/modules/render-pipeline.js.map +1 -0
  123. package/dist/modules/types.d.ts +544 -0
  124. package/dist/modules/types.d.ts.map +1 -0
  125. package/dist/modules/types.js +57 -0
  126. package/dist/modules/types.js.map +1 -0
  127. package/dist/operator-config.d.ts +20 -0
  128. package/dist/operator-config.d.ts.map +1 -0
  129. package/dist/operator-config.js +85 -0
  130. package/dist/operator-config.js.map +1 -0
  131. package/dist/output-extract.d.ts +8 -0
  132. package/dist/output-extract.d.ts.map +1 -0
  133. package/dist/output-extract.js +129 -0
  134. package/dist/output-extract.js.map +1 -0
  135. package/dist/planner-prompt.d.ts +12 -0
  136. package/dist/planner-prompt.d.ts.map +1 -0
  137. package/dist/planner-prompt.js +337 -0
  138. package/dist/planner-prompt.js.map +1 -0
  139. package/dist/planner-yaml.d.ts +15 -0
  140. package/dist/planner-yaml.d.ts.map +1 -0
  141. package/dist/planner-yaml.js +157 -0
  142. package/dist/planner-yaml.js.map +1 -0
  143. package/dist/platform/fetcher.d.ts +3 -0
  144. package/dist/platform/fetcher.d.ts.map +1 -0
  145. package/dist/platform/fetcher.js +7 -0
  146. package/dist/platform/fetcher.js.map +1 -0
  147. package/dist/platform/index.d.ts +6 -0
  148. package/dist/platform/index.d.ts.map +1 -0
  149. package/dist/platform/index.js +5 -0
  150. package/dist/platform/index.js.map +1 -0
  151. package/dist/platform/object-store-r2.d.ts +26 -0
  152. package/dist/platform/object-store-r2.d.ts.map +1 -0
  153. package/dist/platform/object-store-r2.js +74 -0
  154. package/dist/platform/object-store-r2.js.map +1 -0
  155. package/dist/platform/orchestrator-context.d.ts +20 -0
  156. package/dist/platform/orchestrator-context.d.ts.map +1 -0
  157. package/dist/platform/orchestrator-context.js +28 -0
  158. package/dist/platform/orchestrator-context.js.map +1 -0
  159. package/dist/platform/r2-types.d.ts +41 -0
  160. package/dist/platform/r2-types.d.ts.map +1 -0
  161. package/dist/platform/r2-types.js +3 -0
  162. package/dist/platform/r2-types.js.map +1 -0
  163. package/dist/platform/types.d.ts +90 -0
  164. package/dist/platform/types.d.ts.map +1 -0
  165. package/dist/platform/types.js +23 -0
  166. package/dist/platform/types.js.map +1 -0
  167. package/dist/preflight.d.ts +57 -0
  168. package/dist/preflight.d.ts.map +1 -0
  169. package/dist/preflight.js +243 -0
  170. package/dist/preflight.js.map +1 -0
  171. package/dist/presign.d.ts +5 -0
  172. package/dist/presign.d.ts.map +1 -0
  173. package/dist/presign.js +24 -0
  174. package/dist/presign.js.map +1 -0
  175. package/dist/public-id.d.ts +8 -0
  176. package/dist/public-id.d.ts.map +1 -0
  177. package/dist/public-id.js +25 -0
  178. package/dist/public-id.js.map +1 -0
  179. package/dist/render-adopt.d.ts +3 -0
  180. package/dist/render-adopt.d.ts.map +1 -0
  181. package/dist/render-adopt.js +92 -0
  182. package/dist/render-adopt.js.map +1 -0
  183. package/dist/render-log.d.ts +25 -0
  184. package/dist/render-log.d.ts.map +1 -0
  185. package/dist/render-log.js +139 -0
  186. package/dist/render-log.js.map +1 -0
  187. package/dist/render-module-config.d.ts +28 -0
  188. package/dist/render-module-config.d.ts.map +1 -0
  189. package/dist/render-module-config.js +124 -0
  190. package/dist/render-module-config.js.map +1 -0
  191. package/dist/render-mux.d.ts +18 -0
  192. package/dist/render-mux.d.ts.map +1 -0
  193. package/dist/render-mux.js +69 -0
  194. package/dist/render-mux.js.map +1 -0
  195. package/dist/render-orchestrator.d.ts +71 -0
  196. package/dist/render-orchestrator.d.ts.map +1 -0
  197. package/dist/render-orchestrator.js +376 -0
  198. package/dist/render-orchestrator.js.map +1 -0
  199. package/dist/render-sweep.d.ts +5 -0
  200. package/dist/render-sweep.d.ts.map +1 -0
  201. package/dist/render-sweep.js +62 -0
  202. package/dist/render-sweep.js.map +1 -0
  203. package/dist/renders-db.d.ts +129 -0
  204. package/dist/renders-db.d.ts.map +1 -0
  205. package/dist/renders-db.js +752 -0
  206. package/dist/renders-db.js.map +1 -0
  207. package/dist/runpod-submit.d.ts +151 -0
  208. package/dist/runpod-submit.d.ts.map +1 -0
  209. package/dist/runpod-submit.js +469 -0
  210. package/dist/runpod-submit.js.map +1 -0
  211. package/dist/runpod-types.d.ts +2 -0
  212. package/dist/runpod-types.d.ts.map +1 -0
  213. package/dist/runpod-types.js +4 -0
  214. package/dist/runpod-types.js.map +1 -0
  215. package/dist/scatter-notify.d.ts +4 -0
  216. package/dist/scatter-notify.d.ts.map +1 -0
  217. package/dist/scatter-notify.js +43 -0
  218. package/dist/scatter-notify.js.map +1 -0
  219. package/dist/scatter-orchestrator-types.d.ts +56 -0
  220. package/dist/scatter-orchestrator-types.d.ts.map +1 -0
  221. package/dist/scatter-orchestrator-types.js +3 -0
  222. package/dist/scatter-orchestrator-types.js.map +1 -0
  223. package/dist/scatter-orchestrator.d.ts +70 -0
  224. package/dist/scatter-orchestrator.d.ts.map +1 -0
  225. package/dist/scatter-orchestrator.js +614 -0
  226. package/dist/scatter-orchestrator.js.map +1 -0
  227. package/dist/scatter.d.ts +35 -0
  228. package/dist/scatter.d.ts.map +1 -0
  229. package/dist/scatter.js +171 -0
  230. package/dist/scatter.js.map +1 -0
  231. package/dist/secret-store.d.ts +5 -0
  232. package/dist/secret-store.d.ts.map +1 -0
  233. package/dist/secret-store.js +19 -0
  234. package/dist/secret-store.js.map +1 -0
  235. package/dist/shot-durations-parse.d.ts +3 -0
  236. package/dist/shot-durations-parse.d.ts.map +1 -0
  237. package/dist/shot-durations-parse.js +43 -0
  238. package/dist/shot-durations-parse.js.map +1 -0
  239. package/dist/srt.d.ts +11 -0
  240. package/dist/srt.d.ts.map +1 -0
  241. package/dist/srt.js +54 -0
  242. package/dist/srt.js.map +1 -0
  243. package/dist/storyboard-ids.d.ts +2 -0
  244. package/dist/storyboard-ids.d.ts.map +1 -0
  245. package/dist/storyboard-ids.js +12 -0
  246. package/dist/storyboard-ids.js.map +1 -0
  247. package/dist/storyboard-projects-db.d.ts +31 -0
  248. package/dist/storyboard-projects-db.d.ts.map +1 -0
  249. package/dist/storyboard-projects-db.js +153 -0
  250. package/dist/storyboard-projects-db.js.map +1 -0
  251. package/dist/storyboard-validate.d.ts +72 -0
  252. package/dist/storyboard-validate.d.ts.map +1 -0
  253. package/dist/storyboard-validate.js +595 -0
  254. package/dist/storyboard-validate.js.map +1 -0
  255. package/dist/structured-events.d.ts +6 -0
  256. package/dist/structured-events.d.ts.map +1 -0
  257. package/dist/structured-events.js +15 -0
  258. package/dist/structured-events.js.map +1 -0
  259. package/dist/tar.d.ts +9 -0
  260. package/dist/tar.d.ts.map +1 -0
  261. package/dist/tar.js +151 -0
  262. package/dist/tar.js.map +1 -0
  263. package/dist/voices.d.ts +12 -0
  264. package/dist/voices.d.ts.map +1 -0
  265. package/dist/voices.js +37 -0
  266. package/dist/voices.js.map +1 -0
  267. 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,2 @@
1
+ export declare function needsAudioCrossBucketCopy(key: string): boolean;
2
+ //# sourceMappingURL=audio-routing.d.ts.map
@@ -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,4 @@
1
+ export function needsAudioCrossBucketCopy(key) {
2
+ return key.startsWith("out/");
3
+ }
4
+ //# sourceMappingURL=audio-routing.js.map
@@ -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":"AAAA,oFAAoF;AACpF,EAAE;AACF,iGAAiG;AACjG,iGAAiG;AACjG,uEAAuE;AAGvE,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAGL,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAM5B,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB,CAAC,OAA2B;IAC9D,OAAO,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,YAAY,IAAI,IAAI,CACvE,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAQ,EAAE,GAAqB;IACvD,OAAO,cAAc,CAAC,GAAyC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAA2B,EAC3B,UAAmB;IAEnB,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,IAAI,CAAC;IAC7E,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAQD,MAAM,UAAU,wBAAwB,CAAC,MAA+C;IACtF,MAAM,IAAI,GAAG,MAAM,EAAE,SAAS,CAAC;IAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAwB;IACrD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ;QAAE,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,WAAW,CAAC;IAC5E,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;QAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACxE,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ;QAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC;IACvE,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ;QAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC;IACvE,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC;IACzE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,GAAQ,EACR,QAAgB,EAChB,GAAwB;IAExB,MAAM,GAAG,GAAG,GAAG,CAAC,mBAA8C,CAAC;IAC/D,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;IAC5E,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE;QAC7D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,QAAQ;YACR,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC;YACjC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,MAAM;YACxB,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,GAAG;YAC/B,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;YAC9B,UAAU,EAAE,GAAG,CAAC,UAAU;SAC3B,CAAC;KACH,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mDAAmD,EAAE,CAAC;IAC5F,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAQ,EACR,GAAwB,EACxB,UAAmB;IAEnB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAEhE,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IAC/E,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,GAAyC,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC;IAE5E,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,OAAO,mBAAmB,EAAE,CAAC;QACxG,CAAC;QAED,MAAM,MAAM,GAAG;YACb,GAAG,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC;YAChE,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,QAAQ;SACpB,CAAC;QAEF,MAAM,CAAC,GAAG,MAAM,YAAY,CAAmC,OAAO,EAAE;YACtE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,EAAE;YACvD,MAAM;YACN,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;SAC7D,CAAC,CAAC;QAEH,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG,GAAG,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC/E,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,qDAAqD,EAAE,CAAC;QAChG,CAAC;QACD,MAAM,IAAI,GAAG,wBAAwB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,qCAAqC,EAAE,CAAC;QACzF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAC7D,CAAC"}
@@ -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,4 @@
1
+ // Beat-sync / planner analyze types. Upstream keeps these in modules/beat-sync/src/contract.ts;
2
+ // vivijure-core keeps them out of modules/types.ts so that file stays verbatim with vivijure main.
3
+ export {};
4
+ //# sourceMappingURL=beat-sync-types.js.map
@@ -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"}