@jtdigital/renderbox-sdk 0.3.0 → 0.4.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.
@@ -2,5 +2,5 @@ export { letterbox, type LetterboxOpts } from './letterbox.js';
2
2
  export { snip } from './snip.js';
3
3
  export { faceRedact, type FaceRedactOpts } from './faceRedact.js';
4
4
  export { depthBlurPipeline, type DepthBlurPipelineOpts } from './depthBlurPipeline.js';
5
- export { makeSlideshow, type MakeSlideshowOpts, type SlideConfig, type SlideshowTransition, type SlideshowMusicOpts, type KenBurnsPreset, } from './makeSlideshow.js';
5
+ export { makeSlideshow, type MakeSlideshowOpts, type SlideConfig, type SlideshowTransition, type SlideshowMusicOpts, type SlideshowVoiceoverOpts, type SlideshowWatermarkOpts, type SlideshowTextOverlay, type SlideshowVideoFilter, type SlideshowMasteringOpts, type SlideshowSmartCropOpts, type TextOverlayPreset, type WatermarkPosition, type KenBurnsPreset, } from './makeSlideshow.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recipes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EACL,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recipes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EACL,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recipes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAuB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAA8B,MAAM,wBAAwB,CAAC;AACvF,OAAO,EACL,aAAa,GAMd,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recipes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAuB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAA8B,MAAM,wBAAwB,CAAC;AACvF,OAAO,EACL,aAAa,GAcd,MAAM,oBAAoB,CAAC"}
@@ -15,12 +15,90 @@ export interface SlideshowMusicOpts {
15
15
  fadeIn?: number;
16
16
  fadeOut?: number;
17
17
  }
18
+ /**
19
+ * A voiceover narration track mixed over the render. When `autoDuck` is on and a
20
+ * music bed is present, the bed is side-chain compressed by the voiceover so it
21
+ * dips under speech and recovers in the gaps (jt-cut's SlideshowArgs auto-duck).
22
+ */
23
+ export interface SlideshowVoiceoverOpts {
24
+ path: string;
25
+ /** Narration gain (linear). Default 1.0. */
26
+ volume?: number;
27
+ /** Duck the music bed under the narration via side-chain compression. Default true. */
28
+ autoDuck?: boolean;
29
+ }
30
+ export type WatermarkPosition = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';
31
+ /** A logo lockup composited as a persistent watermark in one corner of the frame. */
32
+ export interface SlideshowWatermarkOpts {
33
+ path: string;
34
+ /** Corner to pin the logo to. Default `bottomRight`. */
35
+ position?: WatermarkPosition;
36
+ /** Logo width as a fraction of the frame width, in (0, 1]. Default 0.14. */
37
+ scale?: number;
38
+ /** Inset from the frame edges, in pixels. Default 40. */
39
+ margin?: number;
40
+ /** Logo opacity in [0, 1]. Default 1. */
41
+ opacity?: number;
42
+ }
43
+ export type TextOverlayPreset = 'title' | 'caption' | 'watermark';
44
+ /**
45
+ * A burned-in text overlay. `preset` picks the placement + weight (a lower-third
46
+ * `title` with a backing band, a bottom `caption`, or a small corner `watermark`);
47
+ * `start`/`end` (seconds) gate its visibility, omit both for the whole render.
48
+ */
49
+ export interface SlideshowTextOverlay {
50
+ text: string;
51
+ preset?: TextOverlayPreset;
52
+ start?: number;
53
+ end?: number;
54
+ fontcolor?: string;
55
+ font?: string;
56
+ }
57
+ /** A single colour-grade pass applied to the composited video (ffmpeg `eq`). */
58
+ export interface SlideshowVideoFilter {
59
+ brightness?: number;
60
+ contrast?: number;
61
+ saturation?: number;
62
+ gamma?: number;
63
+ }
64
+ /** Loudness mastering of the final audio to a broadcast target (ffmpeg `loudnorm`). */
65
+ export interface SlideshowMasteringOpts {
66
+ /** Integrated loudness target in LUFS. Default -14 (streaming). */
67
+ lufs?: number;
68
+ /** True-peak ceiling in dBTP. Default -1. */
69
+ truePeak?: number;
70
+ /** Loudness range. Default 11. */
71
+ lra?: number;
72
+ }
73
+ /**
74
+ * How slides are fitted to the target aspect. `letterbox` (default) preserves the
75
+ * whole frame with bars; `cover` fills the frame (centre crop); a `subject` runs a
76
+ * detector and keeps that class in frame (subject-aware reframe).
77
+ */
78
+ export interface SlideshowSmartCropOpts {
79
+ mode?: 'letterbox' | 'cover';
80
+ subject?: string;
81
+ detectModel?: string;
82
+ detectThreshold?: number;
83
+ }
18
84
  export interface MakeSlideshowOpts {
19
85
  slides: SlideConfig[];
20
86
  resolution: [number, number];
21
87
  fps?: number;
22
88
  transition?: SlideshowTransition;
23
89
  music?: SlideshowMusicOpts;
90
+ /** Narration track mixed over the render, optionally ducking the music bed. */
91
+ voiceover?: SlideshowVoiceoverOpts;
92
+ /** Logo lockup watermark pinned to a corner. */
93
+ watermark?: SlideshowWatermarkOpts;
94
+ /** Burned-in text overlays (title / caption / watermark presets, with timing). */
95
+ textOverlays?: SlideshowTextOverlay[];
96
+ /** A colour-grade pass over the composited video. */
97
+ videoFilter?: SlideshowVideoFilter;
98
+ /** Loudness-master the final audio to a target LUFS. */
99
+ mastering?: SlideshowMasteringOpts;
100
+ /** Aspect-fit strategy for non-Ken-Burns slides (letterbox / cover / subject-aware). */
101
+ smartCrop?: SlideshowSmartCropOpts;
24
102
  output?: SinkAvOpts;
25
103
  }
26
104
  export declare function makeSlideshow(outputPath: string, opts: MakeSlideshowOpts): Graph;
@@ -1 +1 @@
1
- {"version":3,"file":"makeSlideshow.d.ts","sourceRoot":"","sources":["../../src/recipes/makeSlideshow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAGjE,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;AAEvC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AA2GD,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,KAAK,CA+ChF"}
1
+ {"version":3,"file":"makeSlideshow.d.ts","sourceRoot":"","sources":["../../src/recipes/makeSlideshow.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ const EDGE_X = 'iw-(iw/zoom)';
5
5
  const EDGE_Y = 'ih-(ih/zoom)';
6
6
  const DRIFT_X = 'iw/6';
7
7
  const DRIFT_Y = 'ih/6';
8
+ const DEFAULT_DETECT_MODEL = 'yolov9-c';
8
9
  function lerp(frames, from, to) {
9
10
  return `${from}+(${to}-(${from}))*on/${frames}`;
10
11
  }
@@ -69,6 +70,36 @@ function applyLetterbox(input, w, h) {
69
70
  .setsar({ sar: '1' })
70
71
  .format({ pix_fmts: 'yuv420p' });
71
72
  }
73
+ /** Fill the frame (centre crop, no bars). */
74
+ function applyCover(input, w, h) {
75
+ return input
76
+ .scale({ w, h, force_original_aspect_ratio: 'increase', flags: 'lanczos' })
77
+ .crop({ w, h, x: '(iw-ow)/2', y: '(ih-oh)/2' })
78
+ .setsar({ sar: '1' })
79
+ .format({ pix_fmts: 'yuv420p' });
80
+ }
81
+ /** Subject-aware reframe: detect the subject class and crop to the target aspect around it. */
82
+ function applySubjectCrop(input, w, h, smart) {
83
+ const detections = input.detect({
84
+ model: smart.detectModel ?? DEFAULT_DETECT_MODEL,
85
+ ...(smart.detectThreshold !== undefined ? { threshold: smart.detectThreshold } : {}),
86
+ ...(smart.subject ? { classes: smart.subject } : {}),
87
+ });
88
+ return input
89
+ .dynamicCrop(detections, { target_aspect_w: w, target_aspect_h: h })
90
+ .scale({ w, h, force_original_aspect_ratio: 'increase', flags: 'lanczos' })
91
+ .crop({ w, h, x: '(iw-ow)/2', y: '(ih-oh)/2' })
92
+ .setsar({ sar: '1' })
93
+ .format({ pix_fmts: 'yuv420p' });
94
+ }
95
+ /** Fit a non-Ken-Burns slide to the frame per the smart-crop strategy. */
96
+ function fitSlide(input, w, h, smart) {
97
+ if (smart?.subject)
98
+ return applySubjectCrop(input, w, h, smart);
99
+ if (smart?.mode === 'cover')
100
+ return applyCover(input, w, h);
101
+ return applyLetterbox(input, w, h);
102
+ }
72
103
  function buildXfadeChain(clips, durations, transition, transitionDur) {
73
104
  let result = clips[0];
74
105
  let elapsedContent = durations[0];
@@ -81,9 +112,93 @@ function buildXfadeChain(clips, durations, transition, transitionDur) {
81
112
  }
82
113
  return result;
83
114
  }
115
+ function watermarkXY(position, margin) {
116
+ switch (position) {
117
+ case 'topLeft': return { x: `${margin}`, y: `${margin}` };
118
+ case 'topRight': return { x: `main_w-overlay_w-${margin}`, y: `${margin}` };
119
+ case 'bottomLeft': return { x: `${margin}`, y: `main_h-overlay_h-${margin}` };
120
+ case 'bottomRight':
121
+ default: return { x: `main_w-overlay_w-${margin}`, y: `main_h-overlay_h-${margin}` };
122
+ }
123
+ }
124
+ /** Composite the logo lockup as a persistent corner watermark. */
125
+ function applyWatermark(g, video, w, opts) {
126
+ const scaleFrac = opts.scale ?? 0.14;
127
+ const margin = opts.margin ?? 40;
128
+ const [logoRaw] = g.open(opts.path);
129
+ const logo = logoRaw
130
+ .loop({ loop: -1, size: 1, start: 0 })
131
+ .scale({ w: Math.round(w * scaleFrac), h: -1, flags: 'lanczos' });
132
+ const { x, y } = watermarkXY(opts.position ?? 'bottomRight', margin);
133
+ return video.overlay(logo, { x, y, ...(opts.opacity !== undefined ? { alpha: opts.opacity } : {}) });
134
+ }
135
+ /** Placement + weight per text-overlay preset, as fractions of frame width/height. */
136
+ function textPreset(preset) {
137
+ switch (preset) {
138
+ case 'title': return { fontsize: 'h/14', y: 'h*0.72', band: { y: 'h*0.70', h: 'h*0.14' } };
139
+ case 'watermark': return { fontsize: 'h/30', y: 'h*0.05' };
140
+ case 'caption':
141
+ default: return { fontsize: 'h/24', y: 'h*0.85' };
142
+ }
143
+ }
144
+ /** Burn a text overlay onto the video, with an optional backing band and time gate. */
145
+ function applyTextOverlay(video, overlay) {
146
+ const preset = overlay.preset ?? 'caption';
147
+ const spec = textPreset(preset);
148
+ const enable = overlay.start !== undefined || overlay.end !== undefined
149
+ ? `between(t,${overlay.start ?? 0},${overlay.end ?? 1e9})`
150
+ : undefined;
151
+ let out = video;
152
+ if (spec.band) {
153
+ out = out.drawbox({
154
+ x: '0', y: spec.band.y, w: 'iw', h: spec.band.h, color: 'black@0.45', t: 'fill',
155
+ ...(enable ? { enable } : {}),
156
+ });
157
+ }
158
+ return out.drawtext({
159
+ text: overlay.text,
160
+ fontsize: spec.fontsize,
161
+ fontcolor: overlay.fontcolor ?? 'white',
162
+ x: '(w-text_w)/2',
163
+ y: spec.y,
164
+ shadowcolor: 'black',
165
+ shadowx: 2,
166
+ shadowy: 2,
167
+ ...(overlay.font ? { font: overlay.font } : {}),
168
+ ...(preset === 'watermark' ? { alpha: 0.7 } : {}),
169
+ ...(enable ? { enable } : {}),
170
+ });
171
+ }
172
+ /** Build the music-bed audio (volume + fades), independent of the voiceover. */
173
+ function buildMusic(g, music, totalDur) {
174
+ let a = g.open(music.path)[1];
175
+ if (music.volume !== undefined)
176
+ a = a.volume({ volume: music.volume });
177
+ if (music.fadeIn !== undefined)
178
+ a = a.afade({ type: 'in', duration: music.fadeIn });
179
+ if (music.fadeOut !== undefined) {
180
+ a = a.afade({ type: 'out', start_time: totalDur - music.fadeOut, duration: music.fadeOut });
181
+ }
182
+ return a;
183
+ }
184
+ /**
185
+ * Combine the music bed and/or voiceover into the final audio track. With both and
186
+ * `autoDuck`, the bed is side-chain compressed by the voiceover (ducks under speech)
187
+ * before the two are mixed.
188
+ */
189
+ function buildAudio(g, music, voiceover) {
190
+ if (!voiceover)
191
+ return music;
192
+ const vo = g.open(voiceover.path)[1].volume({ volume: voiceover.volume ?? 1.0 });
193
+ if (!music)
194
+ return vo;
195
+ const autoDuck = voiceover.autoDuck ?? true;
196
+ const bed = autoDuck ? music.sidechaincompress(vo, { threshold: 0.05, ratio: 8, release: 250 }) : music;
197
+ return bed.amix([vo], { normalize: false, duration: 'first' });
198
+ }
84
199
  export function makeSlideshow(outputPath, opts) {
85
- if (opts.slides.length < 2)
86
- throw new Error('makeSlideshow: requires at least 2 slides');
200
+ if (opts.slides.length < 1)
201
+ throw new Error('makeSlideshow: requires at least 1 slide');
87
202
  const [w, h] = opts.resolution;
88
203
  const fpsRate = opts.fps ?? 25;
89
204
  const g = graph();
@@ -91,30 +206,33 @@ export function makeSlideshow(outputPath, opts) {
91
206
  const clip = imageClip(g, slide.path, slide.duration, fpsRate);
92
207
  return slide.kenBurns
93
208
  ? applyKenBurns(clip, slide.kenBurns, slide.duration, w, h, fpsRate)
94
- : applyLetterbox(clip, w, h);
209
+ : fitSlide(clip, w, h, opts.smartCrop);
95
210
  });
96
211
  const durations = opts.slides.map((s) => s.duration);
97
212
  const transitionType = opts.transition?.type ?? 'dissolve';
98
213
  const transitionDur = opts.transition?.duration ?? 1.0;
99
- const video = transitionDur > 0 && clips.length > 1
100
- ? buildXfadeChain(clips, durations, transitionType, transitionDur)
101
- : clips[0].concat(clips.slice(1));
102
- let audio;
103
- if (opts.music) {
104
- const [, musicAudio] = g.open(opts.music.path);
105
- let a = musicAudio;
106
- if (opts.music.volume !== undefined) {
107
- a = a.volume({ volume: opts.music.volume });
108
- }
109
- if (opts.music.fadeIn !== undefined) {
110
- a = a.afade({ type: 'in', duration: opts.music.fadeIn });
111
- }
112
- const totalDur = durations.reduce((sum, d) => sum + d, 0)
113
- - (clips.length - 1) * transitionDur;
114
- if (opts.music.fadeOut !== undefined) {
115
- a = a.afade({ type: 'out', start_time: totalDur - opts.music.fadeOut, duration: opts.music.fadeOut });
116
- }
117
- audio = a;
214
+ let video;
215
+ if (clips.length === 1) {
216
+ video = clips[0];
217
+ }
218
+ else if (transitionDur > 0) {
219
+ video = buildXfadeChain(clips, durations, transitionType, transitionDur);
220
+ }
221
+ else {
222
+ video = clips[0].concat(clips.slice(1));
223
+ }
224
+ // Colour grade -> watermark -> text overlays, so text sits on top of everything.
225
+ if (opts.videoFilter)
226
+ video = video.eq(opts.videoFilter);
227
+ if (opts.watermark)
228
+ video = applyWatermark(g, video, w, opts.watermark);
229
+ for (const overlay of opts.textOverlays ?? [])
230
+ video = applyTextOverlay(video, overlay);
231
+ const totalDur = durations.reduce((sum, d) => sum + d, 0) - Math.max(0, clips.length - 1) * transitionDur;
232
+ const music = opts.music ? buildMusic(g, opts.music, totalDur) : undefined;
233
+ let audio = buildAudio(g, music, opts.voiceover);
234
+ if (audio && opts.mastering) {
235
+ audio = audio.loudnorm({ I: opts.mastering.lufs ?? -14, TP: opts.mastering.truePeak ?? -1, LRA: opts.mastering.lra ?? 11 });
118
236
  }
119
237
  if (audio) {
120
238
  g.write(outputPath, video, audio, opts.output);
@@ -1 +1 @@
1
- {"version":3,"file":"makeSlideshow.js","sourceRoot":"","sources":["../../src/recipes/makeSlideshow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"makeSlideshow.js","sourceRoot":"","sources":["../../src/recipes/makeSlideshow.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jtdigital/renderbox-sdk",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Typed TypeScript SDK for renderbox video processing — compose video/audio/AI pipelines and build job messages.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",