@sansavision/vidra-player 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.
package/dist/sdk.js ADDED
@@ -0,0 +1,329 @@
1
+ // ─── Vidra SDK — Programmatic Video Builder ────────────────────────
2
+ // Build Vidra videos using TypeScript instead of VidraScript DSL.
3
+ //
4
+ // Usage:
5
+ // import { Project, Scene, Layer, Solid, Text, Easing } from "@sansavision/vidra-sdk";
6
+ //
7
+ // const project = new Project(1920, 1080, 60);
8
+ // const scene = new Scene("intro", 3.0);
9
+ // scene.addLayer(new Layer("bg").solid("#1a1a2e"));
10
+ // scene.addLayer(
11
+ // new Layer("title")
12
+ // .text("Hello!", "Inter", 100, "#ffffff")
13
+ // .position(960, 540)
14
+ // .animate("opacity", 0, 1, 1.0, "easeOut")
15
+ // );
16
+ // project.addScene(scene);
17
+ // await project.render("output.mp4");
18
+ // ─── Color Utilities ────────────────────────────────────────────────
19
+ export function rgba(r, g, b, a = 255) {
20
+ return { r, g, b, a };
21
+ }
22
+ export function hex(hexCode) {
23
+ const clean = hexCode.replace("#", "");
24
+ if (clean.length === 6) {
25
+ return {
26
+ r: parseInt(clean.substring(0, 2), 16),
27
+ g: parseInt(clean.substring(2, 4), 16),
28
+ b: parseInt(clean.substring(4, 6), 16),
29
+ a: 255,
30
+ };
31
+ }
32
+ else if (clean.length === 8) {
33
+ return {
34
+ r: parseInt(clean.substring(0, 2), 16),
35
+ g: parseInt(clean.substring(2, 4), 16),
36
+ b: parseInt(clean.substring(4, 6), 16),
37
+ a: parseInt(clean.substring(6, 8), 16),
38
+ };
39
+ }
40
+ return { r: 0, g: 0, b: 0, a: 255 };
41
+ }
42
+ function colorToHex(c) {
43
+ const r = c.r.toString(16).padStart(2, "0");
44
+ const g = c.g.toString(16).padStart(2, "0");
45
+ const b = c.b.toString(16).padStart(2, "0");
46
+ return `#${r}${g}${b}`;
47
+ }
48
+ // ─── UUID ───────────────────────────────────────────────────────────
49
+ function uuidv4() {
50
+ return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, (c) => (+c ^
51
+ (Math.floor(Math.random() * 256) & (15 >> (+c / 4)))).toString(16));
52
+ }
53
+ // ─── Easing Constants ───────────────────────────────────────────────
54
+ export const Easing = {
55
+ Linear: "Linear",
56
+ EaseIn: "EaseIn",
57
+ EaseOut: "EaseOut",
58
+ EaseInOut: "EaseInOut",
59
+ CubicIn: "CubicIn",
60
+ CubicOut: "CubicOut",
61
+ CubicInOut: "CubicInOut",
62
+ Step: "Step",
63
+ };
64
+ // ─── Layer Builder ──────────────────────────────────────────────────
65
+ export class Layer {
66
+ _layer;
67
+ constructor(id) {
68
+ this._layer = {
69
+ id,
70
+ content: "Empty",
71
+ transform: {
72
+ position: { x: 0, y: 0 },
73
+ scale: { x: 1, y: 1 },
74
+ rotation: 0,
75
+ opacity: 1,
76
+ anchor: { x: 0.5, y: 0.5 },
77
+ },
78
+ blend_mode: "Normal",
79
+ animations: [],
80
+ effects: [],
81
+ visible: true,
82
+ children: [],
83
+ };
84
+ }
85
+ // ── Content setters ───────────────────────────────────────────
86
+ text(content, fontFamily = "Inter", fontSize = 48, color = "#ffffff") {
87
+ const c = typeof color === "string" ? hex(color) : color;
88
+ this._layer.content = { Text: { text: content, font_family: fontFamily, font_size: fontSize, color: c } };
89
+ return this;
90
+ }
91
+ solid(color) {
92
+ const c = typeof color === "string" ? hex(color) : color;
93
+ this._layer.content = { Solid: { color: c } };
94
+ return this;
95
+ }
96
+ image(assetId) {
97
+ this._layer.content = { Image: { asset_id: assetId } };
98
+ return this;
99
+ }
100
+ video(assetId, trimStart = 0, trimEnd) {
101
+ this._layer.content = {
102
+ Video: {
103
+ asset_id: assetId,
104
+ trim_start: { seconds: trimStart },
105
+ trim_end: trimEnd !== undefined ? { seconds: trimEnd } : null,
106
+ },
107
+ };
108
+ return this;
109
+ }
110
+ audio(assetId, volume = 1.0, trimStart = 0, trimEnd) {
111
+ this._layer.content = {
112
+ Audio: {
113
+ asset_id: assetId,
114
+ trim_start: { seconds: trimStart },
115
+ trim_end: trimEnd !== undefined ? { seconds: trimEnd } : null,
116
+ volume,
117
+ },
118
+ };
119
+ return this;
120
+ }
121
+ shape(type, opts) {
122
+ const fill = opts.fill ? (typeof opts.fill === "string" ? hex(opts.fill) : opts.fill) : null;
123
+ if (type === "rect") {
124
+ this._layer.content = {
125
+ Shape: { shape: { Rect: { width: opts.width, height: opts.height, radius: opts.radius ?? 0 } }, fill, stroke: null, stroke_width: 0 },
126
+ };
127
+ }
128
+ else if (type === "circle") {
129
+ this._layer.content = {
130
+ Shape: { shape: { Circle: { radius: opts.radius } }, fill, stroke: null, stroke_width: 0 },
131
+ };
132
+ }
133
+ else if (type === "ellipse") {
134
+ this._layer.content = {
135
+ Shape: { shape: { Ellipse: { rx: opts.rx, ry: opts.ry } }, fill, stroke: null, stroke_width: 0 },
136
+ };
137
+ }
138
+ return this;
139
+ }
140
+ tts(content, voice = "default", volume = 1.0) {
141
+ this._layer.content = { TTS: { text: content, voice, volume } };
142
+ return this;
143
+ }
144
+ // ── Transform setters ─────────────────────────────────────────
145
+ position(x, y) {
146
+ this._layer.transform.position = { x, y };
147
+ return this;
148
+ }
149
+ scale(x, y) {
150
+ this._layer.transform.scale = { x, y: y ?? x };
151
+ return this;
152
+ }
153
+ rotation(degrees) {
154
+ this._layer.transform.rotation = degrees;
155
+ return this;
156
+ }
157
+ opacity(value) {
158
+ this._layer.transform.opacity = value;
159
+ return this;
160
+ }
161
+ anchor(x, y) {
162
+ this._layer.transform.anchor = { x, y };
163
+ return this;
164
+ }
165
+ // ── Animation ─────────────────────────────────────────────────
166
+ animate(property, from, to, durationSec, easing = "Linear", delaySec = 0) {
167
+ const propMap = {
168
+ positionX: "PositionX", positionY: "PositionY",
169
+ scaleX: "ScaleX", scaleY: "ScaleY",
170
+ rotation: "Rotation", opacity: "Opacity",
171
+ PositionX: "PositionX", PositionY: "PositionY",
172
+ ScaleX: "ScaleX", ScaleY: "ScaleY",
173
+ Rotation: "Rotation", Opacity: "Opacity",
174
+ };
175
+ const mapped = propMap[property] ?? property;
176
+ this._layer.animations.push({
177
+ property: mapped,
178
+ keyframes: [
179
+ { time: { seconds: 0 }, value: from, easing },
180
+ { time: { seconds: durationSec }, value: to, easing },
181
+ ],
182
+ delay: { seconds: delaySec },
183
+ });
184
+ return this;
185
+ }
186
+ // ── Effects ────────────────────────────────────────────────────
187
+ blur(radius) {
188
+ this._layer.effects.push({ Blur: { radius } });
189
+ return this;
190
+ }
191
+ dropShadow(offsetX, offsetY, blur, color = "#000000") {
192
+ const c = typeof color === "string" ? hex(color) : color;
193
+ this._layer.effects.push({ DropShadow: { offset_x: offsetX, offset_y: offsetY, blur, color: c } });
194
+ return this;
195
+ }
196
+ // ── Children ──────────────────────────────────────────────────
197
+ addChild(child) {
198
+ this._layer.children.push(child.build());
199
+ return this;
200
+ }
201
+ // ── Build ─────────────────────────────────────────────────────
202
+ build() {
203
+ return this._layer;
204
+ }
205
+ }
206
+ // ─── Scene Builder ──────────────────────────────────────────────────
207
+ export class Scene {
208
+ _scene;
209
+ constructor(id, durationSec) {
210
+ this._scene = {
211
+ id,
212
+ duration: { seconds: durationSec },
213
+ layers: [],
214
+ };
215
+ }
216
+ addLayer(layer) {
217
+ this._scene.layers.push(layer.build());
218
+ return this;
219
+ }
220
+ addLayers(...layers) {
221
+ for (const l of layers) {
222
+ this._scene.layers.push(l.build());
223
+ }
224
+ return this;
225
+ }
226
+ build() {
227
+ return this._scene;
228
+ }
229
+ }
230
+ // ─── Project Builder ────────────────────────────────────────────────
231
+ export class Project {
232
+ _project;
233
+ constructor(width, height, fps) {
234
+ this._project = {
235
+ id: uuidv4(),
236
+ settings: { width, height, fps, background: { r: 0, g: 0, b: 0, a: 255 } },
237
+ assets: { assets: {} },
238
+ scenes: [],
239
+ };
240
+ }
241
+ background(color) {
242
+ this._project.settings.background = typeof color === "string" ? hex(color) : color;
243
+ return this;
244
+ }
245
+ addAsset(type, id, path, name) {
246
+ this._project.assets.assets[id] = { id, asset_type: type, path, name: name ?? null };
247
+ return this;
248
+ }
249
+ addScene(scene) {
250
+ this._project.scenes.push(scene.build());
251
+ return this;
252
+ }
253
+ // ── Output: IR JSON ───────────────────────────────────────────
254
+ toJSON() {
255
+ return this._project;
256
+ }
257
+ toJSONString(pretty = true) {
258
+ return JSON.stringify(this._project, null, pretty ? 2 : undefined);
259
+ }
260
+ // ── Output: VidraScript DSL ───────────────────────────────────
261
+ toVidraScript() {
262
+ const p = this._project;
263
+ const lines = [];
264
+ lines.push(`project(${p.settings.width}, ${p.settings.height}, ${p.settings.fps}) {`);
265
+ for (const scene of p.scenes) {
266
+ lines.push(` scene("${scene.id}", ${scene.duration.seconds}s) {`);
267
+ for (const layer of scene.layers) {
268
+ this._emitLayer(lines, layer, 2);
269
+ }
270
+ lines.push(` }`);
271
+ }
272
+ lines.push(`}`);
273
+ return lines.join("\n") + "\n";
274
+ }
275
+ _emitLayer(lines, layer, indent) {
276
+ const pad = " ".repeat(indent);
277
+ lines.push(`${pad}layer("${layer.id}") {`);
278
+ // Content
279
+ const content = layer.content;
280
+ if (content === "Empty") {
281
+ // no content line
282
+ }
283
+ else if ("Solid" in content) {
284
+ lines.push(`${pad} solid(${colorToHex(content.Solid.color)})`);
285
+ }
286
+ else if ("Text" in content) {
287
+ const t = content.Text;
288
+ lines.push(`${pad} text("${t.text}", font: "${t.font_family}", size: ${t.font_size}, color: ${colorToHex(t.color)})`);
289
+ }
290
+ else if ("Image" in content) {
291
+ lines.push(`${pad} image("${content.Image.asset_id}")`);
292
+ }
293
+ else if ("Video" in content) {
294
+ lines.push(`${pad} video("${content.Video.asset_id}")`);
295
+ }
296
+ else if ("Audio" in content) {
297
+ lines.push(`${pad} audio("${content.Audio.asset_id}", volume: ${content.Audio.volume})`);
298
+ }
299
+ else if ("TTS" in content) {
300
+ lines.push(`${pad} tts("${content.TTS.text}", "${content.TTS.voice}")`);
301
+ }
302
+ // Position
303
+ const pos = layer.transform.position;
304
+ if (pos.x !== 0 || pos.y !== 0) {
305
+ lines.push(`${pad} position(${pos.x}, ${pos.y})`);
306
+ }
307
+ // Animations
308
+ for (const anim of layer.animations) {
309
+ if (anim.keyframes.length >= 2) {
310
+ const from = anim.keyframes[0];
311
+ const to = anim.keyframes[anim.keyframes.length - 1];
312
+ const easingStr = from.easing.charAt(0).toLowerCase() + from.easing.slice(1);
313
+ const propMap = {
314
+ PositionX: "positionX", PositionY: "positionY",
315
+ ScaleX: "scaleX", ScaleY: "scaleY",
316
+ Rotation: "rotation", Opacity: "opacity",
317
+ };
318
+ const prop = propMap[anim.property] ?? anim.property;
319
+ lines.push(`${pad} animation(${prop}, from: ${from.value}, to: ${to.value}, duration: ${to.time.seconds}s, easing: ${easingStr})`);
320
+ }
321
+ }
322
+ // Children
323
+ for (const child of layer.children) {
324
+ this._emitLayer(lines, child, indent + 1);
325
+ }
326
+ lines.push(`${pad}}`);
327
+ }
328
+ }
329
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ export interface Color {
2
+ r: number;
3
+ g: number;
4
+ b: number;
5
+ a: number;
6
+ }
7
+ export interface Point2D {
8
+ x: number;
9
+ y: number;
10
+ }
11
+ export interface Transform2D {
12
+ position: Point2D;
13
+ scale: Point2D;
14
+ rotation: number;
15
+ opacity: number;
16
+ anchor: Point2D;
17
+ }
18
+ export type BlendMode = "Normal" | "Multiply" | "Screen" | "Overlay" | "Darken" | "Lighten" | "Add";
19
+ export type AssetType = "Image" | "Video" | "Audio" | "Font";
20
+ export type AssetId = string;
21
+ export interface Asset {
22
+ id: AssetId;
23
+ asset_type: AssetType;
24
+ path: string;
25
+ name: string | null;
26
+ }
27
+ export interface AssetRegistry {
28
+ assets: Record<AssetId, Asset>;
29
+ }
30
+ export type LayerId = string;
31
+ export type ShapeType = {
32
+ Rect: {
33
+ width: number;
34
+ height: number;
35
+ radius: number;
36
+ };
37
+ } | {
38
+ Circle: {
39
+ radius: number;
40
+ };
41
+ } | {
42
+ Ellipse: {
43
+ rx: number;
44
+ ry: number;
45
+ };
46
+ };
47
+ export interface Duration {
48
+ seconds: number;
49
+ }
50
+ export type LayerContent = {
51
+ Text: {
52
+ text: string;
53
+ font_family: string;
54
+ font_size: number;
55
+ color: Color;
56
+ };
57
+ } | {
58
+ Image: {
59
+ asset_id: AssetId;
60
+ };
61
+ } | {
62
+ Video: {
63
+ asset_id: AssetId;
64
+ trim_start: Duration;
65
+ trim_end: Duration | null;
66
+ };
67
+ } | {
68
+ Audio: {
69
+ asset_id: AssetId;
70
+ trim_start: Duration;
71
+ trim_end: Duration | null;
72
+ volume: number;
73
+ };
74
+ } | {
75
+ Shape: {
76
+ shape: ShapeType;
77
+ fill: Color | null;
78
+ stroke: Color | null;
79
+ stroke_width: number;
80
+ };
81
+ } | {
82
+ Solid: {
83
+ color: Color;
84
+ };
85
+ } | {
86
+ TTS: {
87
+ text: string;
88
+ voice: string;
89
+ volume: number;
90
+ };
91
+ } | {
92
+ AutoCaption: {
93
+ asset_id: AssetId;
94
+ font_family: string;
95
+ font_size: number;
96
+ color: Color;
97
+ };
98
+ } | "Empty";
99
+ export type AnimatableProperty = "PositionX" | "PositionY" | "ScaleX" | "ScaleY" | "Rotation" | "Opacity";
100
+ export type Easing = "Linear" | "EaseIn" | "EaseOut" | "EaseInOut" | "CubicIn" | "CubicOut" | "CubicInOut" | "Step";
101
+ export interface Keyframe {
102
+ time: Duration;
103
+ value: number;
104
+ easing: Easing;
105
+ }
106
+ export interface Animation {
107
+ property: AnimatableProperty;
108
+ keyframes: Keyframe[];
109
+ delay: Duration;
110
+ }
111
+ export type LayerEffect = {
112
+ Blur: {
113
+ radius: number;
114
+ };
115
+ } | {
116
+ DropShadow: {
117
+ offset_x: number;
118
+ offset_y: number;
119
+ blur: number;
120
+ color: Color;
121
+ };
122
+ };
123
+ export interface LayerIR {
124
+ id: LayerId;
125
+ content: LayerContent;
126
+ transform: Transform2D;
127
+ blend_mode: BlendMode;
128
+ animations: Animation[];
129
+ effects: LayerEffect[];
130
+ visible: boolean;
131
+ children: LayerIR[];
132
+ }
133
+ export interface SceneIR {
134
+ id: string;
135
+ duration: Duration;
136
+ layers: LayerIR[];
137
+ }
138
+ export interface ProjectSettings {
139
+ width: number;
140
+ height: number;
141
+ fps: number;
142
+ background: Color;
143
+ }
144
+ export interface ProjectIR {
145
+ id: string;
146
+ settings: ProjectSettings;
147
+ assets: AssetRegistry;
148
+ scenes: SceneIR[];
149
+ }
150
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,4 @@
1
+ // ─── Vidra SDK — Core Types ─────────────────────────────────────────
2
+ // These types are a 1:1 mirror of the Rust `vidra-ir` crate output.
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,oEAAoE"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@sansavision/vidra-player",
3
+ "version": "0.1.0",
4
+ "description": "Real-time Vidra video player for the browser — powered by WebAssembly",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./wasm": "./wasm/vidra_wasm.js"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "wasm",
18
+ "README.md"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc",
22
+ "build:wasm": "cd ../.. && wasm-pack build crates/vidra-wasm --target web --out-dir ../../packages/vidra-player/wasm",
23
+ "build:all": "npm run build:wasm && npm run build",
24
+ "demo": "npm run build && npx -y serve . --cors -l 3456",
25
+ "dev": "npm run demo"
26
+ },
27
+ "keywords": [
28
+ "video",
29
+ "wasm",
30
+ "webassembly",
31
+ "vidra",
32
+ "player",
33
+ "canvas",
34
+ "rendering"
35
+ ],
36
+ "author": "Sansa Vision",
37
+ "license": "MIT",
38
+ "devDependencies": {
39
+ "typescript": "^5.0.0"
40
+ },
41
+ "publishConfig": {
42
+ "access": "restricted"
43
+ }
44
+ }
@@ -0,0 +1,91 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+
4
+ /**
5
+ * Get project metadata from IR JSON.
6
+ *
7
+ * Returns a JSON string: { width, height, fps, totalFrames, totalDuration, sceneCount }
8
+ */
9
+ export function get_project_info(ir_json: string): string;
10
+
11
+ /**
12
+ * Initialize the WASM module. Call this once before rendering.
13
+ */
14
+ export function init(): void;
15
+
16
+ /**
17
+ * Load an image asset (as raw bytes) into the renderer cache.
18
+ *
19
+ * Call this before rendering frames that reference the asset.
20
+ */
21
+ export function load_image_asset(asset_id: string, data: Uint8Array): void;
22
+
23
+ /**
24
+ * Parse VidraScript source and compile to IR JSON.
25
+ *
26
+ * Returns a JSON string representing the project IR.
27
+ * Throws a JS error if parsing fails.
28
+ */
29
+ export function parse_and_compile(source: string): string;
30
+
31
+ /**
32
+ * Render a single frame and return RGBA pixel data.
33
+ *
34
+ * Returns a `Vec<u8>` of length `width * height * 4`.
35
+ */
36
+ export function render_frame(ir_json: string, frame_index: number): Uint8Array;
37
+
38
+ /**
39
+ * Render a single frame from VidraScript source directly.
40
+ *
41
+ * Convenience method that combines parse + compile + render.
42
+ */
43
+ export function render_frame_from_source(source: string, frame_index: number): Uint8Array;
44
+
45
+ /**
46
+ * Get the version string.
47
+ */
48
+ export function version(): string;
49
+
50
+ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
51
+
52
+ export interface InitOutput {
53
+ readonly memory: WebAssembly.Memory;
54
+ readonly get_project_info: (a: number, b: number) => [number, number, number, number];
55
+ readonly load_image_asset: (a: number, b: number, c: number, d: number) => void;
56
+ readonly parse_and_compile: (a: number, b: number) => [number, number, number, number];
57
+ readonly render_frame: (a: number, b: number, c: number) => [number, number, number, number];
58
+ readonly render_frame_from_source: (a: number, b: number, c: number) => [number, number, number, number];
59
+ readonly version: () => [number, number];
60
+ readonly init: () => void;
61
+ readonly __wbindgen_exn_store: (a: number) => void;
62
+ readonly __externref_table_alloc: () => number;
63
+ readonly __wbindgen_externrefs: WebAssembly.Table;
64
+ readonly __wbindgen_malloc: (a: number, b: number) => number;
65
+ readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
66
+ readonly __externref_table_dealloc: (a: number) => void;
67
+ readonly __wbindgen_free: (a: number, b: number, c: number) => void;
68
+ readonly __wbindgen_start: () => void;
69
+ }
70
+
71
+ export type SyncInitInput = BufferSource | WebAssembly.Module;
72
+
73
+ /**
74
+ * Instantiates the given `module`, which can either be bytes or
75
+ * a precompiled `WebAssembly.Module`.
76
+ *
77
+ * @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated.
78
+ *
79
+ * @returns {InitOutput}
80
+ */
81
+ export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput;
82
+
83
+ /**
84
+ * If `module_or_path` is {RequestInfo} or {URL}, makes a request and
85
+ * for everything else, calls `WebAssembly.instantiate` directly.
86
+ *
87
+ * @param {{ module_or_path: InitInput | Promise<InitInput> }} module_or_path - Passing `InitInput` directly is deprecated.
88
+ *
89
+ * @returns {Promise<InitOutput>}
90
+ */
91
+ export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise<InitInput> } | InitInput | Promise<InitInput>): Promise<InitOutput>;