@jtdigital/renderbox-sdk 0.3.0 → 0.4.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.
@@ -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
  }
@@ -50,16 +51,18 @@ function imageClip(g, path, duration, fpsRate) {
50
51
  function applyKenBurns(input, preset, duration, w, h, fpsRate) {
51
52
  const frames = Math.round(duration * fpsRate);
52
53
  const exprs = presetExprs(preset, frames);
53
- const scaledW = w * 4;
54
- const scaledH = h * 4;
54
+ // Modest 2x working size for zoom headroom. NOT 4x: that produced ~8K intermediate
55
+ // frames which, with the deflicker/tmix/gblur smoothing stack, OOM'd render workers
56
+ // (ffmpeg exit 254). Integer (trunc'd) pan positions keep the motion jitter-free
57
+ // without any of that smoothing — the lean approach proven in production (slideshow
58
+ // pipelines running hundreds of videos on this same fleet).
59
+ const scaledW = w * 2;
60
+ const scaledH = h * 2;
55
61
  return input
56
62
  .scale({ w: scaledW, h: scaledH, force_original_aspect_ratio: 'decrease', flags: 'lanczos' })
57
63
  .pad({ w: scaledW, h: scaledH, x: '(ow-iw)/2', y: '(oh-ih)/2', color: 'black' })
58
64
  .setsar({ sar: '1' })
59
- .zoompan({ z: exprs.z, x: exprs.x, y: exprs.y, d: frames, fps: fpsRate, s: `${w}x${h}` })
60
- .deflicker({ size: 11, mode: 'pm' })
61
- .tmix({ frames: 3, weights: '1 2 1' })
62
- .gblur({ sigma: 0.5 })
65
+ .zoompan({ z: exprs.z, x: `trunc(${exprs.x})`, y: `trunc(${exprs.y})`, d: frames, fps: fpsRate, s: `${w}x${h}` })
63
66
  .format({ pix_fmts: 'yuv420p' });
64
67
  }
65
68
  function applyLetterbox(input, w, h) {
@@ -69,6 +72,36 @@ function applyLetterbox(input, w, h) {
69
72
  .setsar({ sar: '1' })
70
73
  .format({ pix_fmts: 'yuv420p' });
71
74
  }
75
+ /** Fill the frame (centre crop, no bars). */
76
+ function applyCover(input, w, h) {
77
+ return input
78
+ .scale({ w, h, force_original_aspect_ratio: 'increase', flags: 'lanczos' })
79
+ .crop({ w, h, x: '(iw-ow)/2', y: '(ih-oh)/2' })
80
+ .setsar({ sar: '1' })
81
+ .format({ pix_fmts: 'yuv420p' });
82
+ }
83
+ /** Subject-aware reframe: detect the subject class and crop to the target aspect around it. */
84
+ function applySubjectCrop(input, w, h, smart) {
85
+ const detections = input.detect({
86
+ model: smart.detectModel ?? DEFAULT_DETECT_MODEL,
87
+ ...(smart.detectThreshold !== undefined ? { threshold: smart.detectThreshold } : {}),
88
+ ...(smart.subject ? { classes: smart.subject } : {}),
89
+ });
90
+ return input
91
+ .dynamicCrop(detections, { target_aspect_w: w, target_aspect_h: h })
92
+ .scale({ w, h, force_original_aspect_ratio: 'increase', flags: 'lanczos' })
93
+ .crop({ w, h, x: '(iw-ow)/2', y: '(ih-oh)/2' })
94
+ .setsar({ sar: '1' })
95
+ .format({ pix_fmts: 'yuv420p' });
96
+ }
97
+ /** Fit a non-Ken-Burns slide to the frame per the smart-crop strategy. */
98
+ function fitSlide(input, w, h, smart) {
99
+ if (smart?.subject)
100
+ return applySubjectCrop(input, w, h, smart);
101
+ if (smart?.mode === 'cover')
102
+ return applyCover(input, w, h);
103
+ return applyLetterbox(input, w, h);
104
+ }
72
105
  function buildXfadeChain(clips, durations, transition, transitionDur) {
73
106
  let result = clips[0];
74
107
  let elapsedContent = durations[0];
@@ -81,9 +114,93 @@ function buildXfadeChain(clips, durations, transition, transitionDur) {
81
114
  }
82
115
  return result;
83
116
  }
117
+ function watermarkXY(position, margin) {
118
+ switch (position) {
119
+ case 'topLeft': return { x: `${margin}`, y: `${margin}` };
120
+ case 'topRight': return { x: `main_w-overlay_w-${margin}`, y: `${margin}` };
121
+ case 'bottomLeft': return { x: `${margin}`, y: `main_h-overlay_h-${margin}` };
122
+ case 'bottomRight':
123
+ default: return { x: `main_w-overlay_w-${margin}`, y: `main_h-overlay_h-${margin}` };
124
+ }
125
+ }
126
+ /** Composite the logo lockup as a persistent corner watermark. */
127
+ function applyWatermark(g, video, w, opts) {
128
+ const scaleFrac = opts.scale ?? 0.14;
129
+ const margin = opts.margin ?? 40;
130
+ const [logoRaw] = g.open(opts.path);
131
+ const logo = logoRaw
132
+ .loop({ loop: -1, size: 1, start: 0 })
133
+ .scale({ w: Math.round(w * scaleFrac), h: -1, flags: 'lanczos' });
134
+ const { x, y } = watermarkXY(opts.position ?? 'bottomRight', margin);
135
+ return video.overlay(logo, { x, y, ...(opts.opacity !== undefined ? { alpha: opts.opacity } : {}) });
136
+ }
137
+ /** Placement + weight per text-overlay preset, as fractions of frame width/height. */
138
+ function textPreset(preset) {
139
+ switch (preset) {
140
+ case 'title': return { fontsize: 'h/14', y: 'h*0.72', band: { y: 'h*0.70', h: 'h*0.14' } };
141
+ case 'watermark': return { fontsize: 'h/30', y: 'h*0.05' };
142
+ case 'caption':
143
+ default: return { fontsize: 'h/24', y: 'h*0.85' };
144
+ }
145
+ }
146
+ /** Burn a text overlay onto the video, with an optional backing band and time gate. */
147
+ function applyTextOverlay(video, overlay) {
148
+ const preset = overlay.preset ?? 'caption';
149
+ const spec = textPreset(preset);
150
+ const enable = overlay.start !== undefined || overlay.end !== undefined
151
+ ? `between(t,${overlay.start ?? 0},${overlay.end ?? 1e9})`
152
+ : undefined;
153
+ let out = video;
154
+ if (spec.band) {
155
+ out = out.drawbox({
156
+ x: '0', y: spec.band.y, w: 'iw', h: spec.band.h, color: 'black@0.45', t: 'fill',
157
+ ...(enable ? { enable } : {}),
158
+ });
159
+ }
160
+ return out.drawtext({
161
+ text: overlay.text,
162
+ fontsize: spec.fontsize,
163
+ fontcolor: overlay.fontcolor ?? 'white',
164
+ x: '(w-text_w)/2',
165
+ y: spec.y,
166
+ shadowcolor: 'black',
167
+ shadowx: 2,
168
+ shadowy: 2,
169
+ ...(overlay.font ? { font: overlay.font } : {}),
170
+ ...(preset === 'watermark' ? { alpha: 0.7 } : {}),
171
+ ...(enable ? { enable } : {}),
172
+ });
173
+ }
174
+ /** Build the music-bed audio (volume + fades), independent of the voiceover. */
175
+ function buildMusic(g, music, totalDur) {
176
+ let a = g.open(music.path)[1];
177
+ if (music.volume !== undefined)
178
+ a = a.volume({ volume: music.volume });
179
+ if (music.fadeIn !== undefined)
180
+ a = a.afade({ type: 'in', duration: music.fadeIn });
181
+ if (music.fadeOut !== undefined) {
182
+ a = a.afade({ type: 'out', start_time: totalDur - music.fadeOut, duration: music.fadeOut });
183
+ }
184
+ return a;
185
+ }
186
+ /**
187
+ * Combine the music bed and/or voiceover into the final audio track. With both and
188
+ * `autoDuck`, the bed is side-chain compressed by the voiceover (ducks under speech)
189
+ * before the two are mixed.
190
+ */
191
+ function buildAudio(g, music, voiceover) {
192
+ if (!voiceover)
193
+ return music;
194
+ const vo = g.open(voiceover.path)[1].volume({ volume: voiceover.volume ?? 1.0 });
195
+ if (!music)
196
+ return vo;
197
+ const autoDuck = voiceover.autoDuck ?? true;
198
+ const bed = autoDuck ? music.sidechaincompress(vo, { threshold: 0.05, ratio: 8, release: 250 }) : music;
199
+ return bed.amix([vo], { normalize: false, duration: 'first' });
200
+ }
84
201
  export function makeSlideshow(outputPath, opts) {
85
- if (opts.slides.length < 2)
86
- throw new Error('makeSlideshow: requires at least 2 slides');
202
+ if (opts.slides.length < 1)
203
+ throw new Error('makeSlideshow: requires at least 1 slide');
87
204
  const [w, h] = opts.resolution;
88
205
  const fpsRate = opts.fps ?? 25;
89
206
  const g = graph();
@@ -91,30 +208,33 @@ export function makeSlideshow(outputPath, opts) {
91
208
  const clip = imageClip(g, slide.path, slide.duration, fpsRate);
92
209
  return slide.kenBurns
93
210
  ? applyKenBurns(clip, slide.kenBurns, slide.duration, w, h, fpsRate)
94
- : applyLetterbox(clip, w, h);
211
+ : fitSlide(clip, w, h, opts.smartCrop);
95
212
  });
96
213
  const durations = opts.slides.map((s) => s.duration);
97
214
  const transitionType = opts.transition?.type ?? 'dissolve';
98
215
  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;
216
+ let video;
217
+ if (clips.length === 1) {
218
+ video = clips[0];
219
+ }
220
+ else if (transitionDur > 0) {
221
+ video = buildXfadeChain(clips, durations, transitionType, transitionDur);
222
+ }
223
+ else {
224
+ video = clips[0].concat(clips.slice(1));
225
+ }
226
+ // Colour grade -> watermark -> text overlays, so text sits on top of everything.
227
+ if (opts.videoFilter)
228
+ video = video.eq(opts.videoFilter);
229
+ if (opts.watermark)
230
+ video = applyWatermark(g, video, w, opts.watermark);
231
+ for (const overlay of opts.textOverlays ?? [])
232
+ video = applyTextOverlay(video, overlay);
233
+ const totalDur = durations.reduce((sum, d) => sum + d, 0) - Math.max(0, clips.length - 1) * transitionDur;
234
+ const music = opts.music ? buildMusic(g, opts.music, totalDur) : undefined;
235
+ let audio = buildAudio(g, music, opts.voiceover);
236
+ if (audio && opts.mastering) {
237
+ audio = audio.loudnorm({ I: opts.mastering.lufs ?? -14, TP: opts.mastering.truePeak ?? -1, LRA: opts.mastering.lra ?? 11 });
118
238
  }
119
239
  if (audio) {
120
240
  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.1",
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",
@@ -17,7 +17,9 @@
17
17
  "test": "vitest run",
18
18
  "prepublishOnly": "tsc"
19
19
  },
20
- "files": ["dist"],
20
+ "files": [
21
+ "dist"
22
+ ],
21
23
  "license": "Apache-2.0",
22
24
  "author": "JT Digital",
23
25
  "publishConfig": {