@rajeev02/video-editor 0.1.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.
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @rajeev02/video-editor — Effects
3
+ * Color grading, video filters, speed ramp, reverse, ken burns, chroma key
4
+ */
5
+ export type VideoEffect = "color_grade" | "filter" | "speed_ramp" | "reverse" | "ken_burns" | "chroma_key" | "stabilize" | "noise_reduction" | "slow_motion" | "timelapse" | "glitch" | "vhs" | "cinema_bars";
6
+ export interface ColorGrade {
7
+ brightness: number;
8
+ contrast: number;
9
+ saturation: number;
10
+ warmth: number;
11
+ tint: number;
12
+ highlights: number;
13
+ shadows: number;
14
+ vibrance: number;
15
+ }
16
+ export interface SpeedRamp {
17
+ id: string;
18
+ /** Keyframes: [{ timeMs, speed }] */
19
+ keyframes: {
20
+ timeMs: number;
21
+ speed: number;
22
+ }[];
23
+ /** Smooth transition between keyframes */
24
+ smooth: boolean;
25
+ }
26
+ export interface KenBurnsEffect {
27
+ /** Start position and zoom */
28
+ start: {
29
+ x: number;
30
+ y: number;
31
+ zoom: number;
32
+ };
33
+ /** End position and zoom */
34
+ end: {
35
+ x: number;
36
+ y: number;
37
+ zoom: number;
38
+ };
39
+ /** Easing function */
40
+ easing: "linear" | "ease_in" | "ease_out" | "ease_in_out";
41
+ }
42
+ export interface ChromaKeyConfig {
43
+ /** Key color (hex) — typically #00FF00 for green screen */
44
+ keyColor: string;
45
+ /** Similarity threshold (0-100) */
46
+ similarity: number;
47
+ /** Smoothness (0-100) */
48
+ smoothness: number;
49
+ /** Spill suppression (0-100) */
50
+ spillSuppression: number;
51
+ /** Replacement background URI */
52
+ backgroundUri?: string;
53
+ /** Replacement background color */
54
+ backgroundColor?: string;
55
+ }
56
+ /** Built-in video filter presets */
57
+ export interface VideoFilterPreset {
58
+ id: string;
59
+ name: string;
60
+ category: string;
61
+ grade: Partial<ColorGrade>;
62
+ }
63
+ export declare function getVideoFilterPresets(): VideoFilterPreset[];
64
+ /** Available video transition types with labels */
65
+ export declare function getTransitionTypes(): {
66
+ id: string;
67
+ label: string;
68
+ category: string;
69
+ }[];
70
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/effects/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,WAAW,GACX,YAAY,GACZ,WAAW,GACX,iBAAiB,GACjB,aAAa,GACb,WAAW,GACX,QAAQ,GACR,KAAK,GACL,aAAa,CAAC;AAElB,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,SAAS,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,0CAA0C;IAC1C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,4BAA4B;IAC5B,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,sBAAsB;IACtB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;CAC3D;AAED,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,oCAAoC;AACpC,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5B;AAED,wBAAgB,qBAAqB,IAAI,iBAAiB,EAAE,CA4E3D;AAED,mDAAmD;AACnD,wBAAgB,kBAAkB,IAAI;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB,EAAE,CAiBF"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /**
3
+ * @rajeev02/video-editor — Effects
4
+ * Color grading, video filters, speed ramp, reverse, ken burns, chroma key
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getVideoFilterPresets = getVideoFilterPresets;
8
+ exports.getTransitionTypes = getTransitionTypes;
9
+ function getVideoFilterPresets() {
10
+ return [
11
+ { id: "original", name: "Original", category: "basic", grade: {} },
12
+ {
13
+ id: "cinematic",
14
+ name: "Cinematic",
15
+ category: "film",
16
+ grade: {
17
+ contrast: 20,
18
+ saturation: -10,
19
+ warmth: -5,
20
+ shadows: -15,
21
+ highlights: -10,
22
+ },
23
+ },
24
+ {
25
+ id: "teal_orange",
26
+ name: "Teal & Orange",
27
+ category: "film",
28
+ grade: { warmth: 15, tint: -10, saturation: 20, contrast: 15 },
29
+ },
30
+ {
31
+ id: "vintage_film",
32
+ name: "Vintage Film",
33
+ category: "vintage",
34
+ grade: { warmth: 20, saturation: -20, contrast: 10 },
35
+ },
36
+ {
37
+ id: "desaturated",
38
+ name: "Desaturated",
39
+ category: "dramatic",
40
+ grade: { saturation: -40, contrast: 15 },
41
+ },
42
+ {
43
+ id: "warm_glow",
44
+ name: "Warm Glow",
45
+ category: "warm",
46
+ grade: { warmth: 30, brightness: 5, saturation: 10 },
47
+ },
48
+ {
49
+ id: "cold_blue",
50
+ name: "Cold Blue",
51
+ category: "cool",
52
+ grade: { warmth: -25, tint: -10, contrast: 10 },
53
+ },
54
+ {
55
+ id: "bw_film",
56
+ name: "B&W Film",
57
+ category: "bw",
58
+ grade: { saturation: -100, contrast: 25 },
59
+ },
60
+ {
61
+ id: "vhs_retro",
62
+ name: "VHS Retro",
63
+ category: "vintage",
64
+ grade: { saturation: -15, warmth: 10, contrast: -5 },
65
+ },
66
+ {
67
+ id: "neon_night",
68
+ name: "Neon Night",
69
+ category: "night",
70
+ grade: { contrast: 30, saturation: 35, brightness: -10 },
71
+ },
72
+ {
73
+ id: "dreamy",
74
+ name: "Dreamy",
75
+ category: "soft",
76
+ grade: { brightness: 10, contrast: -10, saturation: 10, warmth: 5 },
77
+ },
78
+ {
79
+ id: "high_contrast",
80
+ name: "High Contrast",
81
+ category: "dramatic",
82
+ grade: { contrast: 40, shadows: -20, highlights: 15 },
83
+ },
84
+ ];
85
+ }
86
+ /** Available video transition types with labels */
87
+ function getTransitionTypes() {
88
+ return [
89
+ { id: "none", label: "None", category: "basic" },
90
+ { id: "crossfade", label: "Crossfade", category: "basic" },
91
+ { id: "dissolve", label: "Dissolve", category: "basic" },
92
+ { id: "slide_left", label: "Slide Left", category: "slide" },
93
+ { id: "slide_right", label: "Slide Right", category: "slide" },
94
+ { id: "slide_up", label: "Slide Up", category: "slide" },
95
+ { id: "slide_down", label: "Slide Down", category: "slide" },
96
+ { id: "zoom_in", label: "Zoom In", category: "zoom" },
97
+ { id: "zoom_out", label: "Zoom Out", category: "zoom" },
98
+ { id: "wipe_left", label: "Wipe Left", category: "wipe" },
99
+ { id: "wipe_right", label: "Wipe Right", category: "wipe" },
100
+ { id: "spin", label: "Spin", category: "creative" },
101
+ { id: "blur", label: "Blur", category: "creative" },
102
+ { id: "glitch", label: "Glitch", category: "creative" },
103
+ ];
104
+ }
105
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/effects/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @rajeev02/video-editor — Export
3
+ * Render pipeline: resolution, format, codec, compression, watermark, progress
4
+ */
5
+ export type ExportFormat = "mp4" | "mov" | "webm" | "gif";
6
+ export type ExportCodec = "h264" | "h265" | "vp9" | "av1";
7
+ export type ExportQuality = "draft" | "standard" | "high" | "ultra";
8
+ export type ExportState = "idle" | "preparing" | "rendering" | "encoding" | "completed" | "failed" | "cancelled";
9
+ export interface ExportConfig {
10
+ format: ExportFormat;
11
+ codec: ExportCodec;
12
+ quality: ExportQuality;
13
+ resolution: {
14
+ width: number;
15
+ height: number;
16
+ };
17
+ fps: number;
18
+ /** Bitrate in kbps (0 = auto based on quality) */
19
+ videoBitrate: number;
20
+ audioBitrate: number;
21
+ /** Max output file size in bytes (0 = no limit) */
22
+ maxSizeBytes: number;
23
+ /** Add watermark */
24
+ watermark?: {
25
+ text?: string;
26
+ imageUri?: string;
27
+ position: "top_left" | "top_right" | "bottom_left" | "bottom_right" | "center";
28
+ opacity: number;
29
+ };
30
+ /** Output filename */
31
+ outputFilename: string;
32
+ /** Whether to include audio */
33
+ includeAudio: boolean;
34
+ }
35
+ export interface ExportProgress {
36
+ state: ExportState;
37
+ /** 0-100 */
38
+ percent: number;
39
+ /** Current frame being processed */
40
+ currentFrame: number;
41
+ /** Total frames */
42
+ totalFrames: number;
43
+ /** Elapsed time in ms */
44
+ elapsedMs: number;
45
+ /** Estimated remaining time in ms */
46
+ estimatedRemainingMs: number;
47
+ /** Current output file size */
48
+ currentSizeBytes: number;
49
+ }
50
+ export interface ExportResult {
51
+ success: boolean;
52
+ outputUri?: string;
53
+ outputSizeBytes?: number;
54
+ durationMs?: number;
55
+ renderTimeMs?: number;
56
+ error?: string;
57
+ }
58
+ /** Export preset configurations */
59
+ export interface ExportPreset {
60
+ id: string;
61
+ name: string;
62
+ description: string;
63
+ config: Partial<ExportConfig>;
64
+ }
65
+ export declare function getExportPresets(): ExportPreset[];
66
+ /**
67
+ * Export Controller — manages render pipeline
68
+ */
69
+ export declare class ExportController {
70
+ private config;
71
+ private state;
72
+ private progress;
73
+ private listeners;
74
+ constructor(config?: Partial<ExportConfig>);
75
+ /** Start export (native layer performs actual rendering) */
76
+ startExport(): void;
77
+ /** Update progress (called by native renderer) */
78
+ updateProgress(currentFrame: number, totalFrames: number, sizeBytes: number): void;
79
+ /** Called when export completes */
80
+ onComplete(result: ExportResult): void;
81
+ /** Cancel export */
82
+ cancel(): void;
83
+ getConfig(): ExportConfig;
84
+ getProgress(): ExportProgress;
85
+ getState(): ExportState;
86
+ /** Estimate output file size in bytes */
87
+ estimateFileSize(durationMs: number): number;
88
+ onProgress(listener: (progress: ExportProgress) => void): () => void;
89
+ private getAutoVideoBitrate;
90
+ private notifyProgress;
91
+ }
92
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/export/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ /**
3
+ * @rajeev02/video-editor — Export
4
+ * Render pipeline: resolution, format, codec, compression, watermark, progress
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ExportController = void 0;
8
+ exports.getExportPresets = getExportPresets;
9
+ function getExportPresets() {
10
+ return [
11
+ {
12
+ id: "social_story",
13
+ name: "Instagram/WhatsApp Story",
14
+ description: "1080x1920, 30fps, optimized for stories",
15
+ config: {
16
+ resolution: { width: 1080, height: 1920 },
17
+ fps: 30,
18
+ format: "mp4",
19
+ codec: "h264",
20
+ quality: "standard",
21
+ },
22
+ },
23
+ {
24
+ id: "social_reel",
25
+ name: "Reels/Shorts",
26
+ description: "1080x1920, 30fps, max 60s",
27
+ config: {
28
+ resolution: { width: 1080, height: 1920 },
29
+ fps: 30,
30
+ format: "mp4",
31
+ codec: "h264",
32
+ quality: "high",
33
+ },
34
+ },
35
+ {
36
+ id: "social_post",
37
+ name: "Social Post (Square)",
38
+ description: "1080x1080, 30fps",
39
+ config: {
40
+ resolution: { width: 1080, height: 1080 },
41
+ fps: 30,
42
+ format: "mp4",
43
+ codec: "h264",
44
+ quality: "standard",
45
+ },
46
+ },
47
+ {
48
+ id: "youtube_1080",
49
+ name: "YouTube 1080p",
50
+ description: "1920x1080, 30fps, high quality",
51
+ config: {
52
+ resolution: { width: 1920, height: 1080 },
53
+ fps: 30,
54
+ format: "mp4",
55
+ codec: "h264",
56
+ quality: "high",
57
+ },
58
+ },
59
+ {
60
+ id: "youtube_4k",
61
+ name: "YouTube 4K",
62
+ description: "3840x2160, 30fps, ultra quality",
63
+ config: {
64
+ resolution: { width: 3840, height: 2160 },
65
+ fps: 30,
66
+ format: "mp4",
67
+ codec: "h265",
68
+ quality: "ultra",
69
+ },
70
+ },
71
+ {
72
+ id: "whatsapp",
73
+ name: "WhatsApp Share",
74
+ description: "720p, compressed for sharing",
75
+ config: {
76
+ resolution: { width: 1280, height: 720 },
77
+ fps: 30,
78
+ format: "mp4",
79
+ codec: "h264",
80
+ quality: "draft",
81
+ maxSizeBytes: 16 * 1024 * 1024,
82
+ },
83
+ },
84
+ {
85
+ id: "gif",
86
+ name: "GIF",
87
+ description: "480p, 15fps animated GIF",
88
+ config: {
89
+ resolution: { width: 480, height: 480 },
90
+ fps: 15,
91
+ format: "gif",
92
+ codec: "h264",
93
+ quality: "draft",
94
+ },
95
+ },
96
+ ];
97
+ }
98
+ /**
99
+ * Export Controller — manages render pipeline
100
+ */
101
+ class ExportController {
102
+ constructor(config) {
103
+ this.state = "idle";
104
+ this.listeners = new Set();
105
+ this.config = {
106
+ format: "mp4",
107
+ codec: "h264",
108
+ quality: "high",
109
+ resolution: { width: 1920, height: 1080 },
110
+ fps: 30,
111
+ videoBitrate: 0,
112
+ audioBitrate: 128,
113
+ maxSizeBytes: 0,
114
+ outputFilename: `video_${Date.now()}.mp4`,
115
+ includeAudio: true,
116
+ ...config,
117
+ };
118
+ this.progress = {
119
+ state: "idle",
120
+ percent: 0,
121
+ currentFrame: 0,
122
+ totalFrames: 0,
123
+ elapsedMs: 0,
124
+ estimatedRemainingMs: 0,
125
+ currentSizeBytes: 0,
126
+ };
127
+ }
128
+ /** Start export (native layer performs actual rendering) */
129
+ startExport() {
130
+ this.state = "preparing";
131
+ this.progress.state = "preparing";
132
+ this.notifyProgress();
133
+ }
134
+ /** Update progress (called by native renderer) */
135
+ updateProgress(currentFrame, totalFrames, sizeBytes) {
136
+ this.state = "rendering";
137
+ this.progress = {
138
+ state: "rendering",
139
+ currentFrame,
140
+ totalFrames,
141
+ percent: totalFrames > 0 ? (currentFrame / totalFrames) * 100 : 0,
142
+ elapsedMs: 0,
143
+ estimatedRemainingMs: 0,
144
+ currentSizeBytes: sizeBytes,
145
+ };
146
+ this.notifyProgress();
147
+ }
148
+ /** Called when export completes */
149
+ onComplete(result) {
150
+ this.state = result.success ? "completed" : "failed";
151
+ this.progress.state = this.state;
152
+ this.progress.percent = result.success ? 100 : this.progress.percent;
153
+ this.notifyProgress();
154
+ }
155
+ /** Cancel export */
156
+ cancel() {
157
+ this.state = "cancelled";
158
+ this.progress.state = "cancelled";
159
+ this.notifyProgress();
160
+ }
161
+ getConfig() {
162
+ return { ...this.config };
163
+ }
164
+ getProgress() {
165
+ return { ...this.progress };
166
+ }
167
+ getState() {
168
+ return this.state;
169
+ }
170
+ /** Estimate output file size in bytes */
171
+ estimateFileSize(durationMs) {
172
+ const bitrateKbps = this.config.videoBitrate || this.getAutoVideoBitrate();
173
+ const audioBitrate = this.config.includeAudio
174
+ ? this.config.audioBitrate
175
+ : 0;
176
+ return (((bitrateKbps + audioBitrate) * (durationMs / 1000)) / 8) * 1000;
177
+ }
178
+ onProgress(listener) {
179
+ this.listeners.add(listener);
180
+ return () => this.listeners.delete(listener);
181
+ }
182
+ getAutoVideoBitrate() {
183
+ const pixels = this.config.resolution.width * this.config.resolution.height;
184
+ const qualityMultiplier = {
185
+ draft: 0.5,
186
+ standard: 1,
187
+ high: 1.5,
188
+ ultra: 2.5,
189
+ };
190
+ const baseBitrate = pixels * 0.003; // ~3 bits per pixel baseline
191
+ return baseBitrate * (qualityMultiplier[this.config.quality] ?? 1);
192
+ }
193
+ notifyProgress() {
194
+ for (const l of this.listeners) {
195
+ try {
196
+ l(this.progress);
197
+ }
198
+ catch { }
199
+ }
200
+ }
201
+ }
202
+ exports.ExportController = ExportController;
203
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/export/index.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @rajeev02/video-editor
3
+ * Video Editor — timeline, effects, transitions, export
4
+ * Trim, merge, split, reorder, speed, filters, text, stickers, music, green screen
5
+ *
6
+ * @author Rajeev Kumar Joshi
7
+ * @license MIT
8
+ */
9
+ export { VideoTimeline } from "./timeline";
10
+ export type { VideoClip, AudioClip, TextClip, StickerClip, Transition, TransitionType, TrackType, TextAnimation, TimelineEvent, } from "./timeline";
11
+ export { getVideoFilterPresets, getTransitionTypes } from "./effects";
12
+ export type { VideoEffect, ColorGrade, SpeedRamp, KenBurnsEffect, ChromaKeyConfig, VideoFilterPreset, } from "./effects";
13
+ export { ExportController, getExportPresets } from "./export";
14
+ export type { ExportConfig, ExportProgress, ExportResult, ExportPreset, ExportFormat, ExportCodec, ExportQuality, ExportState, } from "./export";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,cAAc,EACd,SAAS,EACT,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACtE,YAAY,EACV,WAAW,EACX,UAAU,EACV,SAAS,EACT,cAAc,EACd,eAAe,EACf,iBAAiB,GAClB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC9D,YAAY,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,GACZ,MAAM,UAAU,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * @rajeev02/video-editor
4
+ * Video Editor — timeline, effects, transitions, export
5
+ * Trim, merge, split, reorder, speed, filters, text, stickers, music, green screen
6
+ *
7
+ * @author Rajeev Kumar Joshi
8
+ * @license MIT
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.getExportPresets = exports.ExportController = exports.getTransitionTypes = exports.getVideoFilterPresets = exports.VideoTimeline = void 0;
12
+ // Timeline
13
+ var timeline_1 = require("./timeline");
14
+ Object.defineProperty(exports, "VideoTimeline", { enumerable: true, get: function () { return timeline_1.VideoTimeline; } });
15
+ // Effects
16
+ var effects_1 = require("./effects");
17
+ Object.defineProperty(exports, "getVideoFilterPresets", { enumerable: true, get: function () { return effects_1.getVideoFilterPresets; } });
18
+ Object.defineProperty(exports, "getTransitionTypes", { enumerable: true, get: function () { return effects_1.getTransitionTypes; } });
19
+ // Export
20
+ var export_1 = require("./export");
21
+ Object.defineProperty(exports, "ExportController", { enumerable: true, get: function () { return export_1.ExportController; } });
22
+ Object.defineProperty(exports, "getExportPresets", { enumerable: true, get: function () { return export_1.getExportPresets; } });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,WAAW;AACX,uCAA2C;AAAlC,yGAAA,aAAa,OAAA;AAatB,UAAU;AACV,qCAAsE;AAA7D,gHAAA,qBAAqB,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAUlD,SAAS;AACT,mCAA8D;AAArD,0GAAA,gBAAgB,OAAA;AAAE,0GAAA,gBAAgB,OAAA"}