@jtdigital/renderbox-sdk 0.4.0 → 0.5.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 (48) hide show
  1. package/README.md +28 -0
  2. package/dist/bridge.d.ts +139 -0
  3. package/dist/bridge.d.ts.map +1 -0
  4. package/dist/bridge.js +338 -0
  5. package/dist/bridge.js.map +1 -0
  6. package/dist/graph.d.ts +11 -5
  7. package/dist/graph.d.ts.map +1 -1
  8. package/dist/graph.js +7 -7
  9. package/dist/graph.js.map +1 -1
  10. package/dist/index.d.ts +4 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +4 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/pipelines.d.ts +516 -0
  15. package/dist/pipelines.d.ts.map +1 -0
  16. package/dist/pipelines.js +16 -0
  17. package/dist/pipelines.js.map +1 -0
  18. package/dist/presets/audio.d.ts +43 -0
  19. package/dist/presets/audio.d.ts.map +1 -0
  20. package/dist/presets/audio.js +148 -0
  21. package/dist/presets/audio.js.map +1 -0
  22. package/dist/presets/index.d.ts +5 -0
  23. package/dist/presets/index.d.ts.map +1 -0
  24. package/dist/presets/index.js +5 -0
  25. package/dist/presets/index.js.map +1 -0
  26. package/dist/presets/position.d.ts +39 -0
  27. package/dist/presets/position.d.ts.map +1 -0
  28. package/dist/presets/position.js +40 -0
  29. package/dist/presets/position.js.map +1 -0
  30. package/dist/presets/text.d.ts +90 -0
  31. package/dist/presets/text.d.ts.map +1 -0
  32. package/dist/presets/text.js +132 -0
  33. package/dist/presets/text.js.map +1 -0
  34. package/dist/presets/video.d.ts +46 -0
  35. package/dist/presets/video.d.ts.map +1 -0
  36. package/dist/presets/video.js +108 -0
  37. package/dist/presets/video.js.map +1 -0
  38. package/dist/recipes/makeSlideshow.d.ts +2 -1
  39. package/dist/recipes/makeSlideshow.d.ts.map +1 -1
  40. package/dist/recipes/makeSlideshow.js +3 -69
  41. package/dist/recipes/makeSlideshow.js.map +1 -1
  42. package/dist/streams.d.ts +110 -65
  43. package/dist/streams.d.ts.map +1 -1
  44. package/dist/streams.js +283 -201
  45. package/dist/streams.js.map +1 -1
  46. package/dist/types.d.ts +12 -0
  47. package/dist/types.d.ts.map +1 -1
  48. package/package.json +19 -2
@@ -0,0 +1,16 @@
1
+ // GENERATED FILE — DO NOT EDIT.
2
+ // Regenerate from renderbox-pipelines: `cargo run --bin gen-ts-pipelines`.
3
+ //
4
+ // Typed args for renderbox's named pipelines. Each interface is rendered from
5
+ // the exact serde struct the pipeline's Rust builder parses, so a compile-clean
6
+ // submission is also a parse-clean one. Submit as `{ pipeline_id, args }` on a
7
+ // JobMessage (named-pipeline path — no graph_ir).
8
+ /** Edge-only pipelines (mqtt I/O) — the worker security gate rejects them
9
+ * on the remote fleet; submit only to local/edge runners. */
10
+ export const LOCAL_ONLY_PIPELINES = ['detect-mqtt', 'helmet-detect-mqtt', 'mqtt-to-jsonl'];
11
+ /** The `{ pipeline_id, args }` slice of a named-pipeline JobMessage, with
12
+ * `args` typechecked against the pipeline's schema. */
13
+ export function pipelineArgs(pipelineId, args) {
14
+ return { pipeline_id: pipelineId, args };
15
+ }
16
+ //# sourceMappingURL=pipelines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipelines.js","sourceRoot":"","sources":["../src/pipelines.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,2EAA2E;AAC3E,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,kDAAkD;AAyiBlD;6DAC6D;AAC7D,MAAM,CAAC,MAAM,oBAAoB,GAA0B,CAAC,aAAa,EAAE,oBAAoB,EAAE,eAAe,CAAC,CAAC;AAElH;uDACuD;AACvD,MAAM,UAAU,YAAY,CAC1B,UAAa,EACb,IAAwB;IAExB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Audio presets — dynamics, effects, mastering, mixing, routing, and synthesis
3
+ * chains. The TS port of the Rust SDK's `presets::audio`.
4
+ */
5
+ import type { Graph } from '../graph.js';
6
+ import type { AudioStream, AmixOpts, SidechaincompressOpts } from '../streams.js';
7
+ /** Mastering profile for {@link masterAudio}. */
8
+ export type MasterProfile = 'podcast' | 'music' | 'broadcast' | 'youtube';
9
+ /** Channel-mapping preset for {@link channelMapPreset}. */
10
+ export type ChannelPreset = 'mono' | 'stereo' | 'swapLr' | 'leftOnly' | 'rightOnly';
11
+ /** Notification tone profile for {@link notification}. */
12
+ export type NotificationProfile = 'beep' | 'chime' | 'ding';
13
+ /** Ambient background profile for {@link ambience}. */
14
+ export type AmbienceProfile = 'rain' | 'cafe' | 'wind' | 'ocean';
15
+ /** Noise gate with podcast-friendly defaults. */
16
+ export declare function noiseGate(input: AudioStream): AudioStream;
17
+ /** Limiter with mastering defaults. */
18
+ export declare function limiter(input: AudioStream): AudioStream;
19
+ /** Bandpass to simulate a radio voice (300 Hz – 5000 Hz + compression). */
20
+ export declare function radioVoice(input: AudioStream): AudioStream;
21
+ /** Bandpass to simulate a telephone voice (300 Hz – 3400 Hz). */
22
+ export declare function telephone(input: AudioStream): AudioStream;
23
+ /**
24
+ * Mastering chain matched to a {@link MasterProfile}:
25
+ * - `podcast` — speechnorm + deesser + compressor + loudnorm -16 LUFS
26
+ * - `music` — bass EQ + treble EQ + compand + limiter + loudnorm -14 LUFS
27
+ * - `broadcast` — gate + dynaudnorm + compressor + loudnorm -24 LUFS
28
+ * - `youtube` — speechnorm + gate + loudnorm -14 LUFS
29
+ */
30
+ export declare function masterAudio(input: AudioStream, profile: MasterProfile): AudioStream;
31
+ /** Sidechain ducking with sensible defaults for voice-over-music. */
32
+ export declare function ducking(target: AudioStream, sidechain: AudioStream, opts?: SidechaincompressOpts): AudioStream;
33
+ /** Mix streams into one via `amix`. Requires at least 2 streams. */
34
+ export declare function audioMix(streams: AudioStream[], opts?: AmixOpts): AudioStream;
35
+ /** Named channel-mapping presets via {@link ChannelPreset}. */
36
+ export declare function channelMapPreset(input: AudioStream, preset: ChannelPreset): AudioStream;
37
+ /** Short notification tone from a {@link NotificationProfile}. */
38
+ export declare function notification(g: Graph, profile: NotificationProfile): AudioStream;
39
+ /** Ambient background sound (approximated with noise + filtering + echo). */
40
+ export declare function ambience(g: Graph, profile: AmbienceProfile, duration: number): AudioStream;
41
+ /** Sustained drone: multiple sine harmonics mixed together. */
42
+ export declare function drone(g: Graph, freq: number, harmonics: number, duration: number): AudioStream;
43
+ //# sourceMappingURL=audio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/presets/audio.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAElF,iDAAiD;AACjD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1E,2DAA2D;AAC3D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;AAEpF,0DAA0D;AAC1D,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5D,uDAAuD;AACvD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAMjE,iDAAiD;AACjD,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAEzD;AAED,uCAAuC;AACvC,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAEvD;AAMD,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAK1D;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAEzD;AAMD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,WAAW,CA2BnF;AAMD,qEAAqE;AACrE,wBAAgB,OAAO,CACrB,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,WAAW,EACtB,IAAI,CAAC,EAAE,qBAAqB,GAC3B,WAAW,CAQb;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,CAK7E;AAMD,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,GAAG,WAAW,CASvF;AAMD,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,GAAG,WAAW,CAWhF;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAqB1F;AAED,+DAA+D;AAC/D,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAW9F"}
@@ -0,0 +1,148 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Dynamics
3
+ // ---------------------------------------------------------------------------
4
+ /** Noise gate with podcast-friendly defaults. */
5
+ export function noiseGate(input) {
6
+ return input.agate({ threshold: 0.01, ratio: 2, attack: 20, release: 250 });
7
+ }
8
+ /** Limiter with mastering defaults. */
9
+ export function limiter(input) {
10
+ return input.alimiter({ limit: 0.95, attack: 5, release: 50 });
11
+ }
12
+ // ---------------------------------------------------------------------------
13
+ // Effects
14
+ // ---------------------------------------------------------------------------
15
+ /** Bandpass to simulate a radio voice (300 Hz – 5000 Hz + compression). */
16
+ export function radioVoice(input) {
17
+ return input
18
+ .highpass({ f: 300 })
19
+ .lowpass({ f: 5000 })
20
+ .acompressor({ threshold: 0.1, ratio: 4 });
21
+ }
22
+ /** Bandpass to simulate a telephone voice (300 Hz – 3400 Hz). */
23
+ export function telephone(input) {
24
+ return input.highpass({ f: 300 }).lowpass({ f: 3400 });
25
+ }
26
+ // ---------------------------------------------------------------------------
27
+ // Mastering
28
+ // ---------------------------------------------------------------------------
29
+ /**
30
+ * Mastering chain matched to a {@link MasterProfile}:
31
+ * - `podcast` — speechnorm + deesser + compressor + loudnorm -16 LUFS
32
+ * - `music` — bass EQ + treble EQ + compand + limiter + loudnorm -14 LUFS
33
+ * - `broadcast` — gate + dynaudnorm + compressor + loudnorm -24 LUFS
34
+ * - `youtube` — speechnorm + gate + loudnorm -14 LUFS
35
+ */
36
+ export function masterAudio(input, profile) {
37
+ switch (profile) {
38
+ case 'podcast':
39
+ return input
40
+ .speechnorm({ peak: 0.95 })
41
+ .deesser({ i: 0.4 })
42
+ .acompressor({ threshold: 0.1, ratio: 3 })
43
+ .loudnorm({ I: -16, TP: -1.5, LRA: 11 });
44
+ case 'music':
45
+ return input
46
+ .bass({ gain: 2, frequency: 100 })
47
+ .treble({ gain: 1.5, frequency: 8000 })
48
+ .compand({ attacks: '0.3', decays: '0.8', points: '-70/-90|-24/-12|0/-6' })
49
+ .alimiter({ limit: 0.95 })
50
+ .loudnorm({ I: -14, TP: -1 });
51
+ case 'broadcast':
52
+ return input
53
+ .agate({ threshold: 0.01 })
54
+ .dynaudnorm({ peak: 0.95 })
55
+ .acompressor({ threshold: 0.125, ratio: 4 })
56
+ .loudnorm({ I: -24, TP: -2, LRA: 7 });
57
+ case 'youtube':
58
+ return input
59
+ .speechnorm({ peak: 0.95 })
60
+ .agate({ threshold: 0.01 })
61
+ .loudnorm({ I: -14, TP: -1 });
62
+ }
63
+ }
64
+ // ---------------------------------------------------------------------------
65
+ // Mixing
66
+ // ---------------------------------------------------------------------------
67
+ /** Sidechain ducking with sensible defaults for voice-over-music. */
68
+ export function ducking(target, sidechain, opts) {
69
+ return target.sidechaincompress(sidechain, {
70
+ ...opts,
71
+ threshold: opts?.threshold ?? 0.05,
72
+ ratio: opts?.ratio ?? 6,
73
+ attack: opts?.attack ?? 10,
74
+ release: opts?.release ?? 200,
75
+ });
76
+ }
77
+ /** Mix streams into one via `amix`. Requires at least 2 streams. */
78
+ export function audioMix(streams, opts) {
79
+ if (streams.length < 2) {
80
+ throw new Error(`audioMix: requires at least 2 streams, got ${streams.length}`);
81
+ }
82
+ return streams[0].amix(streams.slice(1), opts);
83
+ }
84
+ // ---------------------------------------------------------------------------
85
+ // Routing
86
+ // ---------------------------------------------------------------------------
87
+ /** Named channel-mapping presets via {@link ChannelPreset}. */
88
+ export function channelMapPreset(input, preset) {
89
+ const map = {
90
+ mono: 'FC',
91
+ stereo: 'FL|FR',
92
+ swapLr: 'FR|FL',
93
+ leftOnly: 'FL|FL',
94
+ rightOnly: 'FR|FR',
95
+ }[preset];
96
+ return input.channelmap({ map });
97
+ }
98
+ // ---------------------------------------------------------------------------
99
+ // Synthesis
100
+ // ---------------------------------------------------------------------------
101
+ /** Short notification tone from a {@link NotificationProfile}. */
102
+ export function notification(g, profile) {
103
+ const [frequency, duration] = {
104
+ beep: [880, 0.2],
105
+ chime: [1046.5, 0.5],
106
+ ding: [523.25, 0.3],
107
+ }[profile];
108
+ const fadeDur = Math.max(duration * 0.25, 0.01);
109
+ return g.sine({ frequency, duration })
110
+ .volume({ volume: 0.7 })
111
+ .afade({ type: 'in', duration: 0.01 })
112
+ .afade({ type: 'out', start_time: duration - fadeDur, duration: fadeDur });
113
+ }
114
+ /** Ambient background sound (approximated with noise + filtering + echo). */
115
+ export function ambience(g, profile, duration) {
116
+ const src = g.anoisesrc({ d: duration });
117
+ switch (profile) {
118
+ case 'rain':
119
+ return src
120
+ .bandpass({ f: 4000, width: 2000 })
121
+ .volume({ volume: 0.3 })
122
+ .aecho({ delays: '100', decays: '0.3' });
123
+ case 'cafe':
124
+ return src
125
+ .bandpass({ f: 1500, width: 1000 })
126
+ .volume({ volume: 0.2 })
127
+ .aecho({ delays: '200|400', decays: '0.4|0.2' });
128
+ case 'wind':
129
+ return src.lowpass({ f: 800 }).volume({ volume: 0.4 });
130
+ case 'ocean':
131
+ return src
132
+ .bandpass({ f: 500, width: 300 })
133
+ .volume({ volume: 0.5 })
134
+ .aecho({ delays: '500|1000', decays: '0.5|0.3' });
135
+ }
136
+ }
137
+ /** Sustained drone: multiple sine harmonics mixed together. */
138
+ export function drone(g, freq, harmonics, duration) {
139
+ if (harmonics < 1) {
140
+ throw new Error(`drone: harmonics must be at least 1, got ${harmonics}`);
141
+ }
142
+ const streams = [];
143
+ for (let h = 1; h <= harmonics; h++) {
144
+ streams.push(g.sine({ frequency: freq * h, duration }).volume({ volume: h === 1 ? 0.5 : 1 / h }));
145
+ }
146
+ return streams.length === 1 ? streams[0] : audioMix(streams);
147
+ }
148
+ //# sourceMappingURL=audio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/presets/audio.ts"],"names":[],"mappings":"AAmBA,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,iDAAiD;AACjD,MAAM,UAAU,SAAS,CAAC,KAAkB;IAC1C,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,OAAO,CAAC,KAAkB;IACxC,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CAAC,KAAkB;IAC3C,OAAO,KAAK;SACT,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;SACpB,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;SACpB,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,SAAS,CAAC,KAAkB;IAC1C,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAkB,EAAE,OAAsB;IACpE,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,KAAK;iBACT,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;iBAC1B,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;iBACnB,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;iBACzC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7C,KAAK,OAAO;YACV,OAAO,KAAK;iBACT,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;iBACjC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;iBACtC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;iBAC1E,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBACzB,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAClC,KAAK,WAAW;YACd,OAAO,KAAK;iBACT,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;iBAC1B,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;iBAC1B,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;iBAC3C,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1C,KAAK,SAAS;YACZ,OAAO,KAAK;iBACT,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;iBAC1B,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;iBAC1B,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,qEAAqE;AACrE,MAAM,UAAU,OAAO,CACrB,MAAmB,EACnB,SAAsB,EACtB,IAA4B;IAE5B,OAAO,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE;QACzC,GAAG,IAAI;QACP,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,IAAI;QAClC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;QACvB,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE;QAC1B,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,GAAG;KAC9B,CAAC,CAAC;AACL,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,QAAQ,CAAC,OAAsB,EAAE,IAAe;IAC9D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,8CAA8C,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,+DAA+D;AAC/D,MAAM,UAAU,gBAAgB,CAAC,KAAkB,EAAE,MAAqB;IACxE,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,OAAO;QACf,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,OAAO;KACnB,CAAC,MAAM,CAAC,CAAC;IACV,OAAO,KAAK,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,kEAAkE;AAClE,MAAM,UAAU,YAAY,CAAC,CAAQ,EAAE,OAA4B;IACjE,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG;QAC5B,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;QAChB,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC;QACpB,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC;KACpB,CAAC,OAAO,CAAC,CAAC;IACX,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;SACnC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;SACvB,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SACrC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,QAAQ,CAAC,CAAQ,EAAE,OAAwB,EAAE,QAAgB;IAC3E,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,GAAG;iBACP,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBAClC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;iBACvB,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7C,KAAK,MAAM;YACT,OAAO,GAAG;iBACP,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBAClC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;iBACvB,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACrD,KAAK,MAAM;YACT,OAAO,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,KAAK,OAAO;YACV,OAAO,GAAG;iBACP,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;iBAChC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;iBACvB,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,KAAK,CAAC,CAAQ,EAAE,IAAY,EAAE,SAAiB,EAAE,QAAgB;IAC/E,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4CAA4C,SAAS,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CACV,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CACpF,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { type AxisVars, type Axis, type Position, OVERLAY_NS, DRAWTEXT_NS, pos, resolvePos, } from './position.js';
2
+ export { escapeDrawtext, type Shadow, type Background, type TextOpts, text, title, caption, textWatermark, type LowerThirdOpts, lowerThird, } from './text.js';
3
+ export { type MasterProfile, type ChannelPreset, type NotificationProfile, type AmbienceProfile, noiseGate, limiter, radioVoice, telephone, masterAudio, ducking, audioMix, channelMapPreset, notification, ambience, drone, } from './audio.js';
4
+ export { type TimedClip, xfadeChain, concatChain, fadeBookend, type KenBurnsPreset, kenBurnsExprs, kenBurns, type KenBurnsSlide, kenBurnsChain, } from './video.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,UAAU,EACV,WAAW,EACX,GAAG,EACH,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,IAAI,EACJ,KAAK,EACL,OAAO,EACP,aAAa,EACb,KAAK,cAAc,EACnB,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,SAAS,EACT,OAAO,EACP,UAAU,EACV,SAAS,EACT,WAAW,EACX,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,KAAK,GACN,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,SAAS,EACd,UAAU,EACV,WAAW,EACX,WAAW,EACX,KAAK,cAAc,EACnB,aAAa,EACb,QAAQ,EACR,KAAK,aAAa,EAClB,aAAa,GACd,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { OVERLAY_NS, DRAWTEXT_NS, pos, resolvePos, } from './position.js';
2
+ export { escapeDrawtext, text, title, caption, textWatermark, lowerThird, } from './text.js';
3
+ export { noiseGate, limiter, radioVoice, telephone, masterAudio, ducking, audioMix, channelMapPreset, notification, ambience, drone, } from './audio.js';
4
+ export { xfadeChain, concatChain, fadeBookend, kenBurnsExprs, kenBurns, kenBurnsChain, } from './video.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,UAAU,EACV,WAAW,EACX,GAAG,EACH,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EAId,IAAI,EACJ,KAAK,EACL,OAAO,EACP,aAAa,EAEb,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,OAAO,EAKL,SAAS,EACT,OAAO,EACP,UAAU,EACV,SAAS,EACT,WAAW,EACX,OAAO,EACP,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,KAAK,GACN,MAAM,YAAY,CAAC;AAEpB,OAAO,EAEL,UAAU,EACV,WAAW,EACX,WAAW,EAEX,aAAa,EACb,QAAQ,EAER,aAAa,GACd,MAAM,YAAY,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Position system for FFmpeg placement expressions — the TS port of the Rust
3
+ * SDK's `ops::position`. An {@link Axis} names where content sits along one
4
+ * dimension; a namespace ({@link DRAWTEXT_NS}, {@link OVERLAY_NS}) supplies the
5
+ * FFmpeg variable names the expression resolves against.
6
+ */
7
+ /** FFmpeg variable names for one filter's coordinate space. */
8
+ export interface AxisVars {
9
+ containerW: string;
10
+ contentW: string;
11
+ containerH: string;
12
+ contentH: string;
13
+ }
14
+ /** Coordinate space of `overlay` (main_w/overlay_w). */
15
+ export declare const OVERLAY_NS: AxisVars;
16
+ /** Coordinate space of `drawtext` (w/text_w). */
17
+ export declare const DRAWTEXT_NS: AxisVars;
18
+ /**
19
+ * Placement along one axis: `{ start }` / `{ end }` inset from an edge by a
20
+ * pixel margin, `'center'`, or a raw FFmpeg expression as the escape hatch.
21
+ */
22
+ export type Axis = {
23
+ start: number;
24
+ } | {
25
+ end: number;
26
+ } | 'center' | {
27
+ expr: string;
28
+ };
29
+ export interface Position {
30
+ x: Axis;
31
+ y: Axis;
32
+ }
33
+ export declare function pos(x: Axis, y: Axis): Position;
34
+ /** Resolve a position to `(x, y)` FFmpeg expressions in the given namespace. */
35
+ export declare function resolvePos(p: Position, ns: AxisVars): {
36
+ x: string;
37
+ y: string;
38
+ };
39
+ //# sourceMappingURL=position.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../src/presets/position.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wDAAwD;AACxD,eAAO,MAAM,UAAU,EAAE,QAKxB,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,WAAW,EAAE,QAKzB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,IAAI,GACZ;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACf,QAAQ,GACR;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,IAAI,CAAC;IACR,CAAC,EAAE,IAAI,CAAC;CACT;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,QAAQ,CAE9C;AASD,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAK9E"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Position system for FFmpeg placement expressions — the TS port of the Rust
3
+ * SDK's `ops::position`. An {@link Axis} names where content sits along one
4
+ * dimension; a namespace ({@link DRAWTEXT_NS}, {@link OVERLAY_NS}) supplies the
5
+ * FFmpeg variable names the expression resolves against.
6
+ */
7
+ /** Coordinate space of `overlay` (main_w/overlay_w). */
8
+ export const OVERLAY_NS = {
9
+ containerW: 'main_w',
10
+ contentW: 'overlay_w',
11
+ containerH: 'main_h',
12
+ contentH: 'overlay_h',
13
+ };
14
+ /** Coordinate space of `drawtext` (w/text_w). */
15
+ export const DRAWTEXT_NS = {
16
+ containerW: 'w',
17
+ contentW: 'text_w',
18
+ containerH: 'h',
19
+ contentH: 'text_h',
20
+ };
21
+ export function pos(x, y) {
22
+ return { x, y };
23
+ }
24
+ function resolveAxis(a, container, content) {
25
+ if (a === 'center')
26
+ return `(${container}-${content})/2`;
27
+ if ('start' in a)
28
+ return `${a.start}`;
29
+ if ('end' in a)
30
+ return `${container}-${content}-${a.end}`;
31
+ return a.expr;
32
+ }
33
+ /** Resolve a position to `(x, y)` FFmpeg expressions in the given namespace. */
34
+ export function resolvePos(p, ns) {
35
+ return {
36
+ x: resolveAxis(p.x, ns.containerW, ns.contentW),
37
+ y: resolveAxis(p.y, ns.containerH, ns.contentH),
38
+ };
39
+ }
40
+ //# sourceMappingURL=position.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position.js","sourceRoot":"","sources":["../../src/presets/position.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,wDAAwD;AACxD,MAAM,CAAC,MAAM,UAAU,GAAa;IAClC,UAAU,EAAE,QAAQ;IACpB,QAAQ,EAAE,WAAW;IACrB,UAAU,EAAE,QAAQ;IACpB,QAAQ,EAAE,WAAW;CACtB,CAAC;AAEF,iDAAiD;AACjD,MAAM,CAAC,MAAM,WAAW,GAAa;IACnC,UAAU,EAAE,GAAG;IACf,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,GAAG;IACf,QAAQ,EAAE,QAAQ;CACnB,CAAC;AAiBF,MAAM,UAAU,GAAG,CAAC,CAAO,EAAE,CAAO;IAClC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,CAAO,EAAE,SAAiB,EAAE,OAAe;IAC9D,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,SAAS,IAAI,OAAO,KAAK,CAAC;IACzD,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;IACtC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,GAAG,SAAS,IAAI,OAAO,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1D,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,UAAU,CAAC,CAAW,EAAE,EAAY;IAClD,OAAO;QACL,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC;QAC/C,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC;KAChD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Text presets — ergonomic `drawtext` compositions, the TS port of the Rust
3
+ * SDK's `presets::text`. Positions resolve against {@link DRAWTEXT_NS}; text is
4
+ * escaped via {@link escapeDrawtext} before reaching the filter.
5
+ */
6
+ import type { VideoStream } from '../streams.js';
7
+ import { type Position } from './position.js';
8
+ /** Escape drawtext-special characters (`\`, `:`, `'`). */
9
+ export declare function escapeDrawtext(text: string): string;
10
+ /** Drop-shadow for {@link TextOpts}. */
11
+ export interface Shadow {
12
+ color?: string;
13
+ x?: number;
14
+ y?: number;
15
+ }
16
+ /** Semi-transparent background box for {@link TextOpts}. */
17
+ export interface Background {
18
+ color: string;
19
+ borderWidth?: number;
20
+ }
21
+ /**
22
+ * Options for the {@link text} atom. Everything is optional; the preset
23
+ * molecules ({@link title}, {@link caption}, {@link textWatermark}) fill their
24
+ * own defaults into the fields a caller leaves unset, then delegate here.
25
+ */
26
+ export interface TextOpts {
27
+ position?: Position;
28
+ font?: string;
29
+ fontSize?: number;
30
+ fontColor?: string;
31
+ shadow?: Shadow;
32
+ background?: Background;
33
+ /** Constant opacity in `[0, 1]`. For a time-varying ramp, drive the
34
+ * underlying `drawtext` op directly. */
35
+ alpha?: number;
36
+ /** Raw FFmpeg `enable` guard, e.g. `"between(t,2,8)"`. */
37
+ enable?: string;
38
+ }
39
+ /**
40
+ * Positioned text with sensible defaults: centred, font size `48`, white.
41
+ * Throws if `alpha` falls outside `[0, 1]`.
42
+ */
43
+ export declare function text(input: VideoStream, textStr: string, opts?: TextOpts): VideoStream;
44
+ /**
45
+ * Large centred title, white with a soft black shadow.
46
+ * Defaults: centred, font size `72`, shadow `black@0.8` offset `(2, 2)`.
47
+ */
48
+ export declare function title(input: VideoStream, textStr: string, opts?: TextOpts): VideoStream;
49
+ /**
50
+ * Bottom caption with a semi-transparent background box.
51
+ * Defaults: bottom-centre 20px margin, font size `36`, box `black@0.5` border `5`.
52
+ */
53
+ export declare function caption(input: VideoStream, textStr: string, opts?: TextOpts): VideoStream;
54
+ /**
55
+ * Semi-transparent corner watermark text.
56
+ * Defaults: bottom-right 20px margin, font size `24`, alpha `0.3`.
57
+ */
58
+ export declare function textWatermark(input: VideoStream, textStr: string, opts?: TextOpts): VideoStream;
59
+ /** Options for {@link lowerThird}. `startTime` and `endTime` are required. */
60
+ export interface LowerThirdOpts {
61
+ /** When the lower third appears (seconds). */
62
+ startTime: number;
63
+ /** When the lower third disappears (seconds). */
64
+ endTime: number;
65
+ /** Background bar colour. Default `"black@0.7"`. */
66
+ backgroundColor?: string;
67
+ /** Name (top line) colour. Default `"white"`. */
68
+ nameColor?: string;
69
+ /** Title (bottom line) colour. Default `"white@0.8"`. */
70
+ titleColor?: string;
71
+ /** Name font size. Default `42`. */
72
+ nameFontSize?: number;
73
+ /** Title font size. Default `28`. */
74
+ titleFontSize?: number;
75
+ /** Font family. */
76
+ font?: string;
77
+ /** Horizontal margin from the left edge. Default `40`. */
78
+ margin?: number;
79
+ /** Fade in/out duration in seconds. Default `0.3`. */
80
+ fadeDuration?: number;
81
+ }
82
+ /**
83
+ * Name + title on a semi-transparent bar (`drawbox` + 2× `drawtext`), all timed
84
+ * together with a synchronized fade in/out. The bar height is
85
+ * `nameFontSize + titleFontSize + 30`, anchored `margin` px above the bottom;
86
+ * the `enable` guard and alpha ramp are shared across all three filters so the
87
+ * whole unit appears and disappears as one.
88
+ */
89
+ export declare function lowerThird(input: VideoStream, name: string, titleStr: string, opts: LowerThirdOpts): VideoStream;
90
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/presets/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAgC,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE5E,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED,wCAAwC;AACxC,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,4DAA4D;AAC5D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;4CACwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,CAqBtF;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,CAQvF;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,CAQzF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,CAQ/F;AAkBD,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,cAAc,GACnB,WAAW,CAyCb"}
@@ -0,0 +1,132 @@
1
+ import { DRAWTEXT_NS, pos, resolvePos } from './position.js';
2
+ /** Escape drawtext-special characters (`\`, `:`, `'`). */
3
+ export function escapeDrawtext(text) {
4
+ return text
5
+ .replaceAll('\\', '\\\\')
6
+ .replaceAll(':', '\\:')
7
+ .replaceAll("'", "'\\\\\\''");
8
+ }
9
+ /**
10
+ * Positioned text with sensible defaults: centred, font size `48`, white.
11
+ * Throws if `alpha` falls outside `[0, 1]`.
12
+ */
13
+ export function text(input, textStr, opts) {
14
+ if (opts?.alpha !== undefined && !(opts.alpha >= 0 && opts.alpha <= 1)) {
15
+ throw new Error(`text: alpha must be in [0, 1], got ${opts.alpha}`);
16
+ }
17
+ const { x, y } = resolvePos(opts?.position ?? pos('center', 'center'), DRAWTEXT_NS);
18
+ const dt = {
19
+ text: escapeDrawtext(textStr),
20
+ fontsize: opts?.fontSize ?? 48,
21
+ fontcolor: opts?.fontColor ?? 'white',
22
+ x,
23
+ y,
24
+ ...(opts?.font !== undefined ? { font: opts.font } : {}),
25
+ ...(opts?.background ? { boxcolor: opts.background.color } : {}),
26
+ ...(opts?.background?.borderWidth !== undefined ? { borderw: opts.background.borderWidth } : {}),
27
+ ...(opts?.shadow?.color !== undefined ? { shadowcolor: opts.shadow.color } : {}),
28
+ ...(opts?.shadow?.x !== undefined ? { shadowx: opts.shadow.x } : {}),
29
+ ...(opts?.shadow?.y !== undefined ? { shadowy: opts.shadow.y } : {}),
30
+ ...(opts?.alpha !== undefined ? { alpha: `${opts.alpha}` } : {}),
31
+ ...(opts?.enable !== undefined ? { enable: opts.enable } : {}),
32
+ };
33
+ return input.drawtext(dt);
34
+ }
35
+ /**
36
+ * Large centred title, white with a soft black shadow.
37
+ * Defaults: centred, font size `72`, shadow `black@0.8` offset `(2, 2)`.
38
+ */
39
+ export function title(input, textStr, opts) {
40
+ return text(input, textStr, {
41
+ ...opts,
42
+ position: opts?.position ?? pos('center', 'center'),
43
+ fontSize: opts?.fontSize ?? 72,
44
+ fontColor: opts?.fontColor ?? 'white',
45
+ shadow: opts?.shadow ?? { color: 'black@0.8', x: 2, y: 2 },
46
+ });
47
+ }
48
+ /**
49
+ * Bottom caption with a semi-transparent background box.
50
+ * Defaults: bottom-centre 20px margin, font size `36`, box `black@0.5` border `5`.
51
+ */
52
+ export function caption(input, textStr, opts) {
53
+ return text(input, textStr, {
54
+ ...opts,
55
+ position: opts?.position ?? pos('center', { end: 20 }),
56
+ fontSize: opts?.fontSize ?? 36,
57
+ fontColor: opts?.fontColor ?? 'white',
58
+ background: opts?.background ?? { color: 'black@0.5', borderWidth: 5 },
59
+ });
60
+ }
61
+ /**
62
+ * Semi-transparent corner watermark text.
63
+ * Defaults: bottom-right 20px margin, font size `24`, alpha `0.3`.
64
+ */
65
+ export function textWatermark(input, textStr, opts) {
66
+ return text(input, textStr, {
67
+ ...opts,
68
+ position: opts?.position ?? pos({ end: 20 }, { end: 20 }),
69
+ fontSize: opts?.fontSize ?? 24,
70
+ fontColor: opts?.fontColor ?? 'white',
71
+ alpha: opts?.alpha ?? 0.3,
72
+ });
73
+ }
74
+ // ---------------------------------------------------------------------------
75
+ // Lower third
76
+ // ---------------------------------------------------------------------------
77
+ /** Opacity ramp: `0` before `start`, linear to `1` by `end`. */
78
+ function fadeInExpr(start, end) {
79
+ const dur = end - start;
80
+ return `if(lt(t,${start}),0,if(lt(t,${end}),(t-${start})/${dur},1))`;
81
+ }
82
+ /** Opacity ramp: `1` before `start`, linear to `0` by `end`. */
83
+ function fadeOutExpr(start, end) {
84
+ const dur = end - start;
85
+ return `if(lt(t,${start}),1,if(lt(t,${end}),1-(t-${start})/${dur},0))`;
86
+ }
87
+ /**
88
+ * Name + title on a semi-transparent bar (`drawbox` + 2× `drawtext`), all timed
89
+ * together with a synchronized fade in/out. The bar height is
90
+ * `nameFontSize + titleFontSize + 30`, anchored `margin` px above the bottom;
91
+ * the `enable` guard and alpha ramp are shared across all three filters so the
92
+ * whole unit appears and disappears as one.
93
+ */
94
+ export function lowerThird(input, name, titleStr, opts) {
95
+ const bg = opts.backgroundColor ?? 'black@0.7';
96
+ const nameColor = opts.nameColor ?? 'white';
97
+ const titleColor = opts.titleColor ?? 'white@0.8';
98
+ const nameFs = opts.nameFontSize ?? 42;
99
+ const titleFs = opts.titleFontSize ?? 28;
100
+ const margin = opts.margin ?? 40;
101
+ const fade = opts.fadeDuration ?? 0.3;
102
+ const start = opts.startTime;
103
+ const end = opts.endTime;
104
+ // Bar dimensions — bottom-anchored, full width, tall enough for two lines.
105
+ const barHeight = nameFs + titleFs + 30;
106
+ const barY = `h-${barHeight}-${margin}`;
107
+ // Name on the top line, title below it.
108
+ const nameY = `h-${barHeight}-${margin}+10`;
109
+ const titleY = `h-${barHeight}-${margin}+${nameFs + 15}`;
110
+ const enable = `between(t,${start},${end})`;
111
+ const alpha = `min(${fadeInExpr(start, start + fade)},${fadeOutExpr(end - fade, end)})`;
112
+ return input
113
+ .drawbox({
114
+ x: '0', y: barY, w: 'w', h: `${barHeight}`,
115
+ color: bg, t: 'fill', enable,
116
+ })
117
+ .drawtext({
118
+ text: escapeDrawtext(name),
119
+ fontsize: nameFs, fontcolor: nameColor,
120
+ x: `${margin}`, y: nameY,
121
+ alpha, enable,
122
+ ...(opts.font !== undefined ? { font: opts.font } : {}),
123
+ })
124
+ .drawtext({
125
+ text: escapeDrawtext(titleStr),
126
+ fontsize: titleFs, fontcolor: titleColor,
127
+ x: `${margin}`, y: titleY,
128
+ alpha, enable,
129
+ ...(opts.font !== undefined ? { font: opts.font } : {}),
130
+ });
131
+ }
132
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/presets/text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Video presets — crossfade/concat sequencing, fade bookends, and Ken Burns
3
+ * motion. The TS port of the Rust SDK's `presets::video`; also the single
4
+ * home of the Ken Burns implementation the `makeSlideshow` recipe uses.
5
+ */
6
+ import type { VideoStream } from '../streams.js';
7
+ /** A clip paired with its content duration in seconds. */
8
+ export interface TimedClip {
9
+ stream: VideoStream;
10
+ duration: number;
11
+ }
12
+ /**
13
+ * Chain clips with `xfade` transitions, computing each cumulative offset from
14
+ * the clip durations: every transition overlaps `crossfade` seconds of the
15
+ * outgoing and incoming clips. Requires at least 2 clips.
16
+ */
17
+ export declare function xfadeChain(clips: TimedClip[], transition: string, crossfade: number): VideoStream;
18
+ /** Concatenate clips back-to-back. Requires at least 2 clips. */
19
+ export declare function concatChain(clips: VideoStream[]): VideoStream;
20
+ export declare function fadeBookend(video: VideoStream, fadeInDur: number, fadeOutStart: number, fadeOutDur: number): VideoStream;
21
+ export type KenBurnsPreset = 'gentleZoomIn' | 'gentleZoomOut' | 'gentlePan' | 'zoomIn' | 'zoomOut' | 'panRight' | 'panLeft' | 'punchIn' | 'pullBack' | 'spiral' | 'diagonal' | 'parallax';
22
+ /** The zoompan `z`/`x`/`y` expressions for a preset over `frames` frames. */
23
+ export declare function kenBurnsExprs(preset: KenBurnsPreset, frames: number): {
24
+ z: string;
25
+ x: string;
26
+ y: string;
27
+ };
28
+ /**
29
+ * Apply a Ken Burns move to a clip, emitting `w`×`h` at `fps`.
30
+ *
31
+ * Modest 2x working size for zoom headroom. NOT 4x: that produced ~8K
32
+ * intermediate frames which, with the deflicker/tmix/gblur smoothing stack,
33
+ * OOM'd render workers (ffmpeg exit 254). Integer (trunc'd) pan positions keep
34
+ * the motion jitter-free without any of that smoothing — the lean approach
35
+ * proven in production.
36
+ */
37
+ export declare function kenBurns(input: VideoStream, preset: KenBurnsPreset, duration: number, w: number, h: number, fps: number): VideoStream;
38
+ /** A slide for {@link kenBurnsChain}. */
39
+ export interface KenBurnsSlide {
40
+ stream: VideoStream;
41
+ preset: KenBurnsPreset;
42
+ duration: number;
43
+ }
44
+ /** Prepare slides with Ken Burns moves, ready to feed {@link xfadeChain}. */
45
+ export declare function kenBurnsChain(slides: KenBurnsSlide[], w: number, h: number, fps: number): TimedClip[];
46
+ //# sourceMappingURL=video.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../src/presets/video.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,0DAA0D;AAC1D,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,EAAE,EAClB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,WAAW,CAWb;AAMD,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,WAAW,CAK7D;AAMD,wBAAgB,WAAW,CACzB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,WAAW,CAIb;AAMD,MAAM,MAAM,cAAc,GACtB,cAAc,GAAG,eAAe,GAAG,WAAW,GAC9C,QAAQ,GAAG,SAAS,GACpB,UAAU,GAAG,SAAS,GACtB,SAAS,GAAG,UAAU,GACtB,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAiBvC,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CA2BzG;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,MAAM,GACV,WAAW,CAWb;AAED,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EAAE,EACvB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,MAAM,GACV,SAAS,EAAE,CAKb"}