@nodetool-ai/video-nodes 0.8.1

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 (152) hide show
  1. package/README.md +58 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/index.d.ts +9 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +11 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/nodes/ffmpeg-helpers.d.ts +77 -0
  8. package/dist/nodes/ffmpeg-helpers.d.ts.map +1 -0
  9. package/dist/nodes/ffmpeg-helpers.js +220 -0
  10. package/dist/nodes/ffmpeg-helpers.js.map +1 -0
  11. package/dist/nodes/lib-video-download.d.ts +29 -0
  12. package/dist/nodes/lib-video-download.d.ts.map +1 -0
  13. package/dist/nodes/lib-video-download.js +353 -0
  14. package/dist/nodes/lib-video-download.js.map +1 -0
  15. package/dist/nodes/model3d/analysis.d.ts +16 -0
  16. package/dist/nodes/model3d/analysis.d.ts.map +1 -0
  17. package/dist/nodes/model3d/analysis.js +38 -0
  18. package/dist/nodes/model3d/analysis.js.map +1 -0
  19. package/dist/nodes/model3d/base.d.ts +28 -0
  20. package/dist/nodes/model3d/base.d.ts.map +1 -0
  21. package/dist/nodes/model3d/base.js +20 -0
  22. package/dist/nodes/model3d/base.js.map +1 -0
  23. package/dist/nodes/model3d/boolean-ops.d.ts +2 -0
  24. package/dist/nodes/model3d/boolean-ops.d.ts.map +1 -0
  25. package/dist/nodes/model3d/boolean-ops.js +172 -0
  26. package/dist/nodes/model3d/boolean-ops.js.map +1 -0
  27. package/dist/nodes/model3d/cleanup.d.ts +56 -0
  28. package/dist/nodes/model3d/cleanup.d.ts.map +1 -0
  29. package/dist/nodes/model3d/cleanup.js +144 -0
  30. package/dist/nodes/model3d/cleanup.js.map +1 -0
  31. package/dist/nodes/model3d/convert.d.ts +27 -0
  32. package/dist/nodes/model3d/convert.d.ts.map +1 -0
  33. package/dist/nodes/model3d/convert.js +66 -0
  34. package/dist/nodes/model3d/convert.js.map +1 -0
  35. package/dist/nodes/model3d/defaults.d.ts +34 -0
  36. package/dist/nodes/model3d/defaults.d.ts.map +1 -0
  37. package/dist/nodes/model3d/defaults.js +28 -0
  38. package/dist/nodes/model3d/defaults.js.map +1 -0
  39. package/dist/nodes/model3d/document-ops.d.ts +4 -0
  40. package/dist/nodes/model3d/document-ops.d.ts.map +1 -0
  41. package/dist/nodes/model3d/document-ops.js +40 -0
  42. package/dist/nodes/model3d/document-ops.js.map +1 -0
  43. package/dist/nodes/model3d/generation.d.ts +56 -0
  44. package/dist/nodes/model3d/generation.d.ts.map +1 -0
  45. package/dist/nodes/model3d/generation.js +203 -0
  46. package/dist/nodes/model3d/generation.js.map +1 -0
  47. package/dist/nodes/model3d/glb.d.ts +29 -0
  48. package/dist/nodes/model3d/glb.d.ts.map +1 -0
  49. package/dist/nodes/model3d/glb.js +255 -0
  50. package/dist/nodes/model3d/glb.js.map +1 -0
  51. package/dist/nodes/model3d/index.d.ts +22 -0
  52. package/dist/nodes/model3d/index.d.ts.map +1 -0
  53. package/dist/nodes/model3d/index.js +41 -0
  54. package/dist/nodes/model3d/index.js.map +1 -0
  55. package/dist/nodes/model3d/io.d.ts +81 -0
  56. package/dist/nodes/model3d/io.d.ts.map +1 -0
  57. package/dist/nodes/model3d/io.js +162 -0
  58. package/dist/nodes/model3d/io.js.map +1 -0
  59. package/dist/nodes/model3d/mesh-ops.d.ts +40 -0
  60. package/dist/nodes/model3d/mesh-ops.d.ts.map +1 -0
  61. package/dist/nodes/model3d/mesh-ops.js +775 -0
  62. package/dist/nodes/model3d/mesh-ops.js.map +1 -0
  63. package/dist/nodes/model3d/nodes.d.ts +2 -0
  64. package/dist/nodes/model3d/nodes.d.ts.map +1 -0
  65. package/dist/nodes/model3d/nodes.js +2 -0
  66. package/dist/nodes/model3d/nodes.js.map +1 -0
  67. package/dist/nodes/model3d/ops.d.ts +44 -0
  68. package/dist/nodes/model3d/ops.d.ts.map +1 -0
  69. package/dist/nodes/model3d/ops.js +142 -0
  70. package/dist/nodes/model3d/ops.js.map +1 -0
  71. package/dist/nodes/model3d/render.d.ts +51 -0
  72. package/dist/nodes/model3d/render.d.ts.map +1 -0
  73. package/dist/nodes/model3d/render.js +124 -0
  74. package/dist/nodes/model3d/render.js.map +1 -0
  75. package/dist/nodes/model3d/render3d-core.d.ts +177 -0
  76. package/dist/nodes/model3d/render3d-core.d.ts.map +1 -0
  77. package/dist/nodes/model3d/render3d-core.js +366 -0
  78. package/dist/nodes/model3d/render3d-core.js.map +1 -0
  79. package/dist/nodes/model3d/render3d-headless.d.ts +75 -0
  80. package/dist/nodes/model3d/render3d-headless.d.ts.map +1 -0
  81. package/dist/nodes/model3d/render3d-headless.js +190 -0
  82. package/dist/nodes/model3d/render3d-headless.js.map +1 -0
  83. package/dist/nodes/model3d/render3d-page.d.ts +16 -0
  84. package/dist/nodes/model3d/render3d-page.d.ts.map +1 -0
  85. package/dist/nodes/model3d/render3d-page.js +51 -0
  86. package/dist/nodes/model3d/render3d-page.js.map +1 -0
  87. package/dist/nodes/model3d/transforms.d.ts +56 -0
  88. package/dist/nodes/model3d/transforms.d.ts.map +1 -0
  89. package/dist/nodes/model3d/transforms.js +148 -0
  90. package/dist/nodes/model3d/transforms.js.map +1 -0
  91. package/dist/nodes/model3d/types.d.ts +82 -0
  92. package/dist/nodes/model3d/types.d.ts.map +1 -0
  93. package/dist/nodes/model3d/types.js +2 -0
  94. package/dist/nodes/model3d/types.js.map +1 -0
  95. package/dist/nodes/model3d/utils.d.ts +46 -0
  96. package/dist/nodes/model3d/utils.d.ts.map +1 -0
  97. package/dist/nodes/model3d/utils.js +190 -0
  98. package/dist/nodes/model3d/utils.js.map +1 -0
  99. package/dist/nodes/model3d.d.ts +2 -0
  100. package/dist/nodes/model3d.d.ts.map +1 -0
  101. package/dist/nodes/model3d.js +2 -0
  102. package/dist/nodes/model3d.js.map +1 -0
  103. package/dist/nodes/placeholder-values.d.ts +10 -0
  104. package/dist/nodes/placeholder-values.d.ts.map +1 -0
  105. package/dist/nodes/placeholder-values.js +19 -0
  106. package/dist/nodes/placeholder-values.js.map +1 -0
  107. package/dist/nodes/script.d.ts +161 -0
  108. package/dist/nodes/script.d.ts.map +1 -0
  109. package/dist/nodes/script.js +673 -0
  110. package/dist/nodes/script.js.map +1 -0
  111. package/dist/nodes/storyboard.d.ts +269 -0
  112. package/dist/nodes/storyboard.d.ts.map +1 -0
  113. package/dist/nodes/storyboard.js +1017 -0
  114. package/dist/nodes/storyboard.js.map +1 -0
  115. package/dist/nodes/timeline/assetFiles.d.ts +19 -0
  116. package/dist/nodes/timeline/assetFiles.d.ts.map +1 -0
  117. package/dist/nodes/timeline/assetFiles.js +52 -0
  118. package/dist/nodes/timeline/assetFiles.js.map +1 -0
  119. package/dist/nodes/timeline/compositeRender.d.ts +60 -0
  120. package/dist/nodes/timeline/compositeRender.d.ts.map +1 -0
  121. package/dist/nodes/timeline/compositeRender.js +508 -0
  122. package/dist/nodes/timeline/compositeRender.js.map +1 -0
  123. package/dist/nodes/timeline/contactSheet.d.ts +43 -0
  124. package/dist/nodes/timeline/contactSheet.d.ts.map +1 -0
  125. package/dist/nodes/timeline/contactSheet.js +78 -0
  126. package/dist/nodes/timeline/contactSheet.js.map +1 -0
  127. package/dist/nodes/timeline/outputFormats.d.ts +69 -0
  128. package/dist/nodes/timeline/outputFormats.d.ts.map +1 -0
  129. package/dist/nodes/timeline/outputFormats.js +173 -0
  130. package/dist/nodes/timeline/outputFormats.js.map +1 -0
  131. package/dist/nodes/timeline/pngSequence.d.ts +44 -0
  132. package/dist/nodes/timeline/pngSequence.d.ts.map +1 -0
  133. package/dist/nodes/timeline/pngSequence.js +172 -0
  134. package/dist/nodes/timeline/pngSequence.js.map +1 -0
  135. package/dist/nodes/timeline/rasterizers.d.ts +47 -0
  136. package/dist/nodes/timeline/rasterizers.d.ts.map +1 -0
  137. package/dist/nodes/timeline/rasterizers.js +103 -0
  138. package/dist/nodes/timeline/rasterizers.js.map +1 -0
  139. package/dist/nodes/timeline/rawFrames.d.ts +149 -0
  140. package/dist/nodes/timeline/rawFrames.d.ts.map +1 -0
  141. package/dist/nodes/timeline/rawFrames.js +598 -0
  142. package/dist/nodes/timeline/rawFrames.js.map +1 -0
  143. package/dist/nodes/timeline.d.ts +206 -0
  144. package/dist/nodes/timeline.d.ts.map +1 -0
  145. package/dist/nodes/timeline.js +1395 -0
  146. package/dist/nodes/timeline.js.map +1 -0
  147. package/dist/nodes/video.d.ts +705 -0
  148. package/dist/nodes/video.d.ts.map +1 -0
  149. package/dist/nodes/video.js +2672 -0
  150. package/dist/nodes/video.js.map +1 -0
  151. package/dist/render3d-page.js +4118 -0
  152. package/package.json +95 -0
@@ -0,0 +1,190 @@
1
+ import path from "node:path";
2
+ import { fetchExternalMedia } from "@nodetool-ai/runtime";
3
+ import { isNonEmptyString, isObjectLike } from "@nodetool-ai/node-sdk";
4
+ export function toBytes(data) {
5
+ if (!data)
6
+ return new Uint8Array();
7
+ if (data instanceof Uint8Array)
8
+ return data;
9
+ return Uint8Array.from(Buffer.from(data, "base64"));
10
+ }
11
+ export function modelBytes(model) {
12
+ if (!isObjectLike(model))
13
+ return new Uint8Array();
14
+ return toBytes(model.data);
15
+ }
16
+ export async function modelRefToBytes(model, context) {
17
+ if (!isObjectLike(model))
18
+ return new Uint8Array();
19
+ const obj = model;
20
+ const inline = toBytes(obj.data);
21
+ if (inline.length > 0)
22
+ return inline;
23
+ const uri = obj.uri ?? "";
24
+ if (!uri)
25
+ return new Uint8Array();
26
+ if (context?.storage) {
27
+ const stored = await context.storage.retrieve(uri);
28
+ if (stored && stored.length > 0)
29
+ return new Uint8Array(stored);
30
+ }
31
+ if (uri.startsWith("file://")) {
32
+ const { readFile } = await import("node:fs/promises");
33
+ const { fileURLToPath } = await import("node:url");
34
+ return new Uint8Array(await readFile(fileURLToPath(uri)));
35
+ }
36
+ if (uri.startsWith("http://") || uri.startsWith("https://")) {
37
+ // Caller-supplied uri — the media-ref egress policy decides whether this
38
+ // host opens the socket; a refusal throws and names the URL.
39
+ const res = await fetchExternalMedia(uri);
40
+ if (!res.ok)
41
+ throw new Error(`Failed to fetch model (${res.status}): ${uri}`);
42
+ return new Uint8Array(await res.arrayBuffer());
43
+ }
44
+ return new Uint8Array();
45
+ }
46
+ /**
47
+ * Resolve an image-ref-shaped value (`{uri, data, asset_id, ...}`) to raw
48
+ * image bytes. Accepts inline `data` (base64 string or Uint8Array), a
49
+ * `data:` URI, or — given a `ProcessingContext` — a storage URI / file://
50
+ * URI / http(s) URL.
51
+ *
52
+ * Throws when nothing resolvable is present so the caller can surface a
53
+ * clear "missing image" error rather than silently sending zero bytes.
54
+ */
55
+ export async function imageRefToBytes(ref, context) {
56
+ if (!isObjectLike(ref)) {
57
+ throw new Error("Image input is empty");
58
+ }
59
+ const obj = ref;
60
+ if (obj.data instanceof Uint8Array && obj.data.length > 0) {
61
+ return new Uint8Array(obj.data);
62
+ }
63
+ if (isNonEmptyString(obj.data)) {
64
+ return Uint8Array.from(Buffer.from(obj.data, "base64"));
65
+ }
66
+ const uri = obj.uri ?? "";
67
+ if (!uri)
68
+ throw new Error("Image input has no data or uri");
69
+ if (uri.startsWith("data:")) {
70
+ const comma = uri.indexOf(",");
71
+ if (comma === -1)
72
+ throw new Error(`Malformed data URI: ${uri.slice(0, 32)}…`);
73
+ const meta = uri.slice(0, comma);
74
+ const payload = uri.slice(comma + 1);
75
+ if (meta.includes(";base64")) {
76
+ return Uint8Array.from(Buffer.from(payload, "base64"));
77
+ }
78
+ return Uint8Array.from(Buffer.from(decodeURIComponent(payload), "utf-8"));
79
+ }
80
+ if (context?.storage) {
81
+ const stored = await context.storage.retrieve(uri);
82
+ if (stored && stored.length > 0)
83
+ return new Uint8Array(stored);
84
+ }
85
+ if (uri.startsWith("file://")) {
86
+ const { readFile } = await import("node:fs/promises");
87
+ const { fileURLToPath } = await import("node:url");
88
+ return new Uint8Array(await readFile(fileURLToPath(uri)));
89
+ }
90
+ if (uri.startsWith("http://") || uri.startsWith("https://")) {
91
+ // Same policy as every other caller-supplied media uri.
92
+ const res = await fetchExternalMedia(uri);
93
+ if (!res.ok) {
94
+ throw new Error(`Failed to fetch image (${res.status}): ${uri}`);
95
+ }
96
+ return new Uint8Array(await res.arrayBuffer());
97
+ }
98
+ throw new Error(`Unable to resolve image uri: ${uri}`);
99
+ }
100
+ export function modelRef(data, extras = {}) {
101
+ return {
102
+ ...extras,
103
+ type: "model_3d",
104
+ asset_id: null,
105
+ metadata: null,
106
+ data: Buffer.from(data).toString("base64")
107
+ };
108
+ }
109
+ export function filePath(uriOrPath) {
110
+ if (uriOrPath.startsWith("file://"))
111
+ return uriOrPath.slice("file://".length);
112
+ return uriOrPath;
113
+ }
114
+ export function dateName(name) {
115
+ const now = new Date();
116
+ const pad = (v) => String(v).padStart(2, "0");
117
+ return name
118
+ .replaceAll("%Y", String(now.getFullYear()))
119
+ .replaceAll("%m", pad(now.getMonth() + 1))
120
+ .replaceAll("%d", pad(now.getDate()))
121
+ .replaceAll("%H", pad(now.getHours()))
122
+ .replaceAll("%M", pad(now.getMinutes()))
123
+ .replaceAll("%S", pad(now.getSeconds()));
124
+ }
125
+ export function extFormat(filename) {
126
+ const ext = path.extname(filename).replace(".", "").toLowerCase();
127
+ return ext || "glb";
128
+ }
129
+ export function pad4(length) {
130
+ return (4 - (length % 4)) % 4;
131
+ }
132
+ export function replaceExtension(uriOrPath, format) {
133
+ if (!uriOrPath)
134
+ return "";
135
+ const isFileUri = uriOrPath.startsWith("file://");
136
+ const rawPath = isFileUri ? filePath(uriOrPath) : uriOrPath;
137
+ const ext = path.extname(rawPath);
138
+ const nextPath = ext
139
+ ? `${rawPath.slice(0, -ext.length)}.${format}`
140
+ : `${rawPath}.${format}`;
141
+ return isFileUri ? `file://${nextPath}` : nextPath;
142
+ }
143
+ export function modelFormat(model) {
144
+ const explicit = String(model.format ?? "").toLowerCase();
145
+ if (explicit)
146
+ return explicit;
147
+ const uri = model.uri ?? "";
148
+ return uri ? extFormat(uri) : "glb";
149
+ }
150
+ export function mimeTypeForResource(uri) {
151
+ const ext = path.extname(uri).replace(".", "").toLowerCase();
152
+ switch (ext) {
153
+ case "png":
154
+ return "image/png";
155
+ case "jpg":
156
+ case "jpeg":
157
+ return "image/jpeg";
158
+ case "webp":
159
+ return "image/webp";
160
+ case "ktx2":
161
+ return "image/ktx2";
162
+ case "bin":
163
+ default:
164
+ return "application/octet-stream";
165
+ }
166
+ }
167
+ export function bytesToDataUri(bytes, uri) {
168
+ const mimeType = mimeTypeForResource(uri);
169
+ return `data:${mimeType};base64,${Buffer.from(bytes).toString("base64")}`;
170
+ }
171
+ export function embedJsonResourceUris(refs, resources) {
172
+ for (const ref of refs ?? []) {
173
+ if (!ref.uri)
174
+ continue;
175
+ const resource = resources[ref.uri];
176
+ if (!resource)
177
+ continue;
178
+ ref.uri = bytesToDataUri(resource, ref.uri);
179
+ }
180
+ }
181
+ export function passthroughModel(model) {
182
+ const bytes = modelBytes(model);
183
+ return {
184
+ output: modelRef(bytes, {
185
+ uri: model.uri ?? "",
186
+ format: model.format ?? "glb"
187
+ })
188
+ };
189
+ }
190
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/nodes/model3d/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./model3d/nodes.js";
2
+ //# sourceMappingURL=model3d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model3d.d.ts","sourceRoot":"","sources":["../../src/nodes/model3d.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./model3d/nodes.js";
2
+ //# sourceMappingURL=model3d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model3d.js","sourceRoot":"","sources":["../../src/nodes/model3d.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The `values` bag a template-filling node takes, as strings.
3
+ *
4
+ * `nodetool.script.FillScript` and `nodetool.timeline.FillTimelineText` both
5
+ * accept a `dict` — typically a dataframe row — and both fill the same
6
+ * `{{key}}` grammar, so the coercion lives in one place. A price of `79` must
7
+ * fill as "79" rather than being skipped for not being a string.
8
+ */
9
+ export declare function stringValues(values: Record<string, unknown> | null | undefined): Record<string, string>;
10
+ //# sourceMappingURL=placeholder-values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder-values.d.ts","sourceRoot":"","sources":["../../src/nodes/placeholder-values.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GACjD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The `values` bag a template-filling node takes, as strings.
3
+ *
4
+ * `nodetool.script.FillScript` and `nodetool.timeline.FillTimelineText` both
5
+ * accept a `dict` — typically a dataframe row — and both fill the same
6
+ * `{{key}}` grammar, so the coercion lives in one place. A price of `79` must
7
+ * fill as "79" rather than being skipped for not being a string.
8
+ */
9
+ export function stringValues(values) {
10
+ const out = {};
11
+ for (const [key, value] of Object.entries(values ?? {})) {
12
+ if (value === null || value === undefined)
13
+ continue;
14
+ out[key] =
15
+ typeof value === "object" ? JSON.stringify(value) : String(value);
16
+ }
17
+ return out;
18
+ }
19
+ //# sourceMappingURL=placeholder-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder-values.js","sourceRoot":"","sources":["../../src/nodes/placeholder-values.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAkD;IAElD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QACpD,GAAG,CAAC,GAAG,CAAC;YACN,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Script nodes — operate on persisted scripts (the script editor's documents)
3
+ * referenced by the `script` type. A script owns its text; audio is derived.
4
+ *
5
+ * - LoadScript reads a script's text and metadata for downstream LLM/text nodes.
6
+ * - VoiceScript batch-synthesizes every draft/stale line with its cast voice,
7
+ * appending a take per line and persisting the script.
8
+ * - ScriptToTimeline assembles the current takes into a voiceover sequence,
9
+ * the headless mirror of the editor's "Send to timeline".
10
+ * - WriteScript writes a new script from a brief through the same authoring
11
+ * rules the script surface and the `write_script` capability use.
12
+ * - FillScript derives a new script from a template by filling its `{{key}}`
13
+ * placeholders. Both create a row; neither writes the script it read.
14
+ */
15
+ import { BaseNode } from "@nodetool-ai/node-sdk";
16
+ import type { Entity, LanguageModel, ScriptRef } from "@nodetool-ai/protocol";
17
+ import { type ScriptPaceId } from "@nodetool-ai/protocol";
18
+ import type { ProcessingContext } from "@nodetool-ai/runtime";
19
+ import { type SubtitleFormat, type SubtitleGranularity } from "@nodetool-ai/timeline";
20
+ /** Output handles LoadScriptNode.process() emits. */
21
+ type LoadScriptNodeOutputs = {
22
+ text: string;
23
+ lines: string[];
24
+ name: string;
25
+ line_count: number;
26
+ };
27
+ export declare class LoadScriptNode extends BaseNode {
28
+ static readonly nodeType = "nodetool.script.LoadScript";
29
+ static readonly title = "Load Script";
30
+ static readonly description = "Read a persisted script's text and metadata.\n script, text, voiceover, narration, load\n\n Use cases:\n - Feed a script's text into an LLM or text node\n - Inspect line count and cast before voicing\n - Branch a workflow on a script's contents";
31
+ static readonly metadataOutputTypes: {
32
+ text: string;
33
+ lines: string;
34
+ name: string;
35
+ line_count: string;
36
+ };
37
+ static readonly inlineFields: string[];
38
+ static readonly inputFields: string[];
39
+ script: ScriptRef;
40
+ process(context?: ProcessingContext): Promise<LoadScriptNodeOutputs>;
41
+ }
42
+ /** Output handles VoiceScriptNode.process() emits. */
43
+ type VoiceScriptNodeOutputs = {
44
+ output: {
45
+ type: string;
46
+ id: string;
47
+ };
48
+ voiced_count: number;
49
+ };
50
+ export declare class VoiceScriptNode extends BaseNode {
51
+ static readonly nodeType = "nodetool.script.VoiceScript";
52
+ static readonly title = "Voice Script";
53
+ static readonly description = "Synthesize speech for every draft or stale line of a script, using each line's cast voice, and save the takes back onto the script. Lines already up to date, or with no text or no voice, are skipped.\n script, voiceover, tts, narration, batch\n\n Use cases:\n - Voice an LLM-written script in one step\n - Re-voice lines whose text or voice changed\n - Produce narration assets for timeline assembly";
54
+ static readonly requiredRuntimes: string[];
55
+ static readonly metadataOutputTypes: {
56
+ output: string;
57
+ voiced_count: string;
58
+ };
59
+ static readonly inlineFields: string[];
60
+ static readonly inputFields: string[];
61
+ script: ScriptRef;
62
+ speed: number;
63
+ process(context?: ProcessingContext): Promise<VoiceScriptNodeOutputs>;
64
+ }
65
+ /** Output handles ScriptToTimelineNode.process() emits. */
66
+ type ScriptToTimelineNodeOutputs = {
67
+ output: {
68
+ type: string;
69
+ id: string;
70
+ };
71
+ };
72
+ export declare class ScriptToTimelineNode extends BaseNode {
73
+ static readonly nodeType = "nodetool.script.ScriptToTimeline";
74
+ static readonly title = "Script To Timeline";
75
+ static readonly description = "Assemble a script's current takes into a voiceover timeline \u2014 one audio clip per voiced line, laid end to end with the authored pauses, each linked back to its script line. Updates the linked timeline in place when the script already has one. Voice the script first.\n script, timeline, voiceover, assemble, sequence\n\n Use cases:\n - Turn a voiced script into an editable sequence\n - Build a narration track for a video edit\n - Round-trip re-voiced lines into an existing timeline";
76
+ static readonly metadataOutputTypes: {
77
+ output: string;
78
+ };
79
+ static readonly inlineFields: string[];
80
+ static readonly inputFields: string[];
81
+ script: ScriptRef;
82
+ process(context?: ProcessingContext): Promise<ScriptToTimelineNodeOutputs>;
83
+ }
84
+ /** Output handles ScriptToSubtitlesNode.process() emits. */
85
+ type ScriptToSubtitlesNodeOutputs = {
86
+ subtitles: string;
87
+ cue_count: number;
88
+ };
89
+ export declare class ScriptToSubtitlesNode extends BaseNode {
90
+ static readonly nodeType = "nodetool.script.ScriptToSubtitles";
91
+ static readonly title = "Script To Subtitles";
92
+ static readonly description = "Export a voiced script as SRT or WebVTT subtitles, straight from each current take's word timings \u2014 one cue per line (or per word), laid out end to end with the authored pauses. Voice the script first; unvoiced lines are skipped.\n script, subtitles, srt, vtt, captions, export\n\n Use cases:\n - Produce a subtitle sidecar for a voiced narration\n - Generate word-timed captions from take timings\n - Feed subtitles into a burn-in or upload step";
93
+ static readonly metadataOutputTypes: {
94
+ subtitles: string;
95
+ cue_count: string;
96
+ };
97
+ static readonly inlineFields: string[];
98
+ static readonly inputFields: string[];
99
+ script: ScriptRef;
100
+ format: SubtitleFormat;
101
+ granularity: SubtitleGranularity;
102
+ process(context?: ProcessingContext): Promise<ScriptToSubtitlesNodeOutputs>;
103
+ }
104
+ /** Output handles WriteScriptNode.process() emits. */
105
+ type WriteScriptNodeOutputs = {
106
+ script: {
107
+ type: string;
108
+ id: string;
109
+ };
110
+ line_count: number;
111
+ };
112
+ export declare class WriteScriptNode extends BaseNode {
113
+ static readonly nodeType = "nodetool.script.WriteScript";
114
+ static readonly title = "Write Script";
115
+ static readonly description = "Write a new script from a brief, using the same writer rules the script editor and the agent use, and save it as a new script. Cast entities become speakers, each carrying its entity link and its voice.\n script, write, brief, narration, cast\n\n Use cases:\n - Turn a per-row brief into a script inside a batch\n - Write one script per language from the same brief\n - Author narration for a board without opening the editor";
116
+ static readonly metadataOutputTypes: {
117
+ script: string;
118
+ line_count: string;
119
+ };
120
+ static readonly inlineFields: string[];
121
+ static readonly inputFields: string[];
122
+ model: LanguageModel;
123
+ brief: string;
124
+ format: string;
125
+ cast: Entity[];
126
+ language: string;
127
+ pace: ScriptPaceId;
128
+ length_seconds: number;
129
+ voice_provider: string;
130
+ voice_model: string;
131
+ name: string;
132
+ process(context?: ProcessingContext): Promise<WriteScriptNodeOutputs>;
133
+ }
134
+ /** Output handles FillScriptNode.process() emits. */
135
+ type FillScriptNodeOutputs = {
136
+ script: {
137
+ type: string;
138
+ id: string;
139
+ };
140
+ filled: string[];
141
+ unresolved: string[];
142
+ };
143
+ export declare class FillScriptNode extends BaseNode {
144
+ static readonly nodeType = "nodetool.script.FillScript";
145
+ static readonly title = "Fill Script";
146
+ static readonly description = "Fill a template script's {{key}} placeholders from a value bag and save the result as a new script. The template is never written. A key with no value stays in the text and is reported, and every take is kept, so a later Voice Script pays only for the lines whose text moved.\n script, template, fill, placeholder, batch\n\n Use cases:\n - Produce one script per row of a product feed\n - Localize a template by swapping its values\n - Re-run a batch and re-voice only what changed";
147
+ static readonly metadataOutputTypes: {
148
+ script: string;
149
+ filled: string;
150
+ unresolved: string;
151
+ };
152
+ static readonly inlineFields: string[];
153
+ static readonly inputFields: string[];
154
+ script: ScriptRef;
155
+ values: Record<string, unknown>;
156
+ name: string;
157
+ process(context?: ProcessingContext): Promise<FillScriptNodeOutputs>;
158
+ }
159
+ export declare const SCRIPT_NODES: (typeof LoadScriptNode | typeof VoiceScriptNode | typeof ScriptToTimelineNode | typeof ScriptToSubtitlesNode | typeof WriteScriptNode | typeof FillScriptNode)[];
160
+ export {};
161
+ //# sourceMappingURL=script.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../src/nodes/script.ts"],"names":[],"mappings":"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"}