@scenerok/sdk 0.2.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 (53) hide show
  1. package/README.md +114 -0
  2. package/dist/duration.d.ts +29 -0
  3. package/dist/duration.d.ts.map +1 -0
  4. package/dist/duration.js +87 -0
  5. package/dist/grid.d.ts +61 -0
  6. package/dist/grid.d.ts.map +1 -0
  7. package/dist/grid.js +174 -0
  8. package/dist/index.d.ts +27 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +22 -0
  11. package/dist/ir-builder.d.ts +28 -0
  12. package/dist/ir-builder.d.ts.map +1 -0
  13. package/dist/ir-builder.js +452 -0
  14. package/dist/ir.d.ts +204 -0
  15. package/dist/ir.d.ts.map +1 -0
  16. package/dist/ir.js +30 -0
  17. package/dist/media.d.ts +16 -0
  18. package/dist/media.d.ts.map +1 -0
  19. package/dist/media.js +105 -0
  20. package/dist/motion.d.ts +9 -0
  21. package/dist/motion.d.ts.map +1 -0
  22. package/dist/motion.js +31 -0
  23. package/dist/plugins/cloudflare.d.ts +80 -0
  24. package/dist/plugins/cloudflare.d.ts.map +1 -0
  25. package/dist/plugins/cloudflare.js +55 -0
  26. package/dist/plugins/elevenlabs-music.d.ts +37 -0
  27. package/dist/plugins/elevenlabs-music.d.ts.map +1 -0
  28. package/dist/plugins/elevenlabs-music.js +21 -0
  29. package/dist/plugins/invoke.d.ts +26 -0
  30. package/dist/plugins/invoke.d.ts.map +1 -0
  31. package/dist/plugins/invoke.js +109 -0
  32. package/dist/plugins/types.d.ts +21 -0
  33. package/dist/plugins/types.d.ts.map +1 -0
  34. package/dist/plugins/types.js +4 -0
  35. package/dist/plugins/xai.d.ts +76 -0
  36. package/dist/plugins/xai.d.ts.map +1 -0
  37. package/dist/plugins/xai.js +60 -0
  38. package/dist/stdlib.d.ts +96 -0
  39. package/dist/stdlib.d.ts.map +1 -0
  40. package/dist/stdlib.js +66 -0
  41. package/dist/timeline.d.ts +27 -0
  42. package/dist/timeline.d.ts.map +1 -0
  43. package/dist/timeline.js +117 -0
  44. package/dist/transitions/catalog.d.ts +33 -0
  45. package/dist/transitions/catalog.d.ts.map +1 -0
  46. package/dist/transitions/catalog.js +51 -0
  47. package/dist/transitions/index.d.ts +62 -0
  48. package/dist/transitions/index.d.ts.map +1 -0
  49. package/dist/transitions/index.js +57 -0
  50. package/dist/types.d.ts +177 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +14 -0
  53. package/package.json +64 -0
@@ -0,0 +1,16 @@
1
+ import type { AudioOptions, AudioTrack, FilterEffect, ShaderEffect, TextLayer, TextOptions, VideoClip, VideoOptions } from './types.js';
2
+ /** Create a video clip from a path/URL. Pass `duration` when the asset is not probed yet. */
3
+ export declare function video(source: string, options?: VideoOptions): VideoClip;
4
+ /** Probe a video duration when omitted, then create a video clip. */
5
+ export declare function loadVideo(source: string, options?: VideoOptions): Promise<VideoClip>;
6
+ /** Create a text layer. */
7
+ export declare function text(content: string, options?: TextOptions): TextLayer;
8
+ /** Create an audio track. */
9
+ export declare function audio(source: string, options?: AudioOptions): AudioTrack;
10
+ /** Probe an audio duration when omitted, then create an audio track. */
11
+ export declare function loadAudio(source: string, options?: AudioOptions): Promise<AudioTrack>;
12
+ /** Builtin post-processing filter (e.g. glow, blur). */
13
+ export declare function filter(name: string, params?: Record<string, number | string>): FilterEffect;
14
+ /** Custom GLSL shader effect. */
15
+ export declare function shader(shaderSource: string, params?: Record<string, number | string>): ShaderEffect;
16
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACb,MAAM,YAAY,CAAC;AAcpB,6FAA6F;AAC7F,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,SAAS,CAuB3E;AAED,qEAAqE;AACrE,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,CAI9F;AAED,2BAA2B;AAC3B,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,SAAS,CAoB1E;AAED,6BAA6B;AAC7B,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,UAAU,CAa5E;AAED,wEAAwE;AACxE,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAI/F;AAED,wDAAwD;AACxD,wBAAgB,MAAM,CACpB,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAM,GAC3C,YAAY,CAOd;AAED,iCAAiC;AACjC,wBAAgB,MAAM,CACpB,YAAY,EAAE,MAAM,EACpB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAM,GAC3C,YAAY,CAOd"}
package/dist/media.js ADDED
@@ -0,0 +1,105 @@
1
+ import { toSeconds } from './duration.js';
2
+ import { getAudioLength, getVideoLength } from './stdlib.js';
3
+ function normalizeAnims(animate) {
4
+ if (!animate)
5
+ return [];
6
+ return Array.isArray(animate) ? [...animate] : [animate];
7
+ }
8
+ function resolveDeclaredDuration(opts, fallback) {
9
+ if (opts?.duration !== undefined)
10
+ return toSeconds(opts.duration);
11
+ return fallback;
12
+ }
13
+ /** Create a video clip from a path/URL. Pass `duration` when the asset is not probed yet. */
14
+ export function video(source, options = {}) {
15
+ const animations = normalizeAnims(options.animate);
16
+ const duration = resolveDeclaredDuration(options, 5);
17
+ const clip = {
18
+ __sdk: true,
19
+ kind: 'video',
20
+ source,
21
+ options: { ...options },
22
+ duration,
23
+ animations,
24
+ animate(anim) {
25
+ const next = normalizeAnims(anim);
26
+ return video(source, {
27
+ ...options,
28
+ animate: [...animations, ...next],
29
+ });
30
+ },
31
+ with(opts) {
32
+ return video(source, { ...options, ...opts, animate: opts.animate ?? options.animate });
33
+ },
34
+ };
35
+ return clip;
36
+ }
37
+ /** Probe a video duration when omitted, then create a video clip. */
38
+ export async function loadVideo(source, options = {}) {
39
+ if (options.duration !== undefined)
40
+ return video(source, options);
41
+ const duration = await getVideoLength(source);
42
+ return video(source, { ...options, duration });
43
+ }
44
+ /** Create a text layer. */
45
+ export function text(content, options = {}) {
46
+ const animations = normalizeAnims(options.animate);
47
+ const layer = {
48
+ __sdk: true,
49
+ kind: 'text',
50
+ content,
51
+ options: { ...options },
52
+ animations,
53
+ animate(anim) {
54
+ const next = normalizeAnims(anim);
55
+ return text(content, {
56
+ ...options,
57
+ animate: [...animations, ...next],
58
+ });
59
+ },
60
+ with(opts) {
61
+ return text(content, { ...options, ...opts, animate: opts.animate ?? options.animate });
62
+ },
63
+ };
64
+ return layer;
65
+ }
66
+ /** Create an audio track. */
67
+ export function audio(source, options = {}) {
68
+ const duration = resolveDeclaredDuration(options, 5);
69
+ const track = {
70
+ __sdk: true,
71
+ kind: 'audio',
72
+ source,
73
+ options: { ...options },
74
+ duration,
75
+ with(opts) {
76
+ return audio(source, { ...options, ...opts });
77
+ },
78
+ };
79
+ return track;
80
+ }
81
+ /** Probe an audio duration when omitted, then create an audio track. */
82
+ export async function loadAudio(source, options = {}) {
83
+ if (options.duration !== undefined)
84
+ return audio(source, options);
85
+ const duration = await getAudioLength(source);
86
+ return audio(source, { ...options, duration });
87
+ }
88
+ /** Builtin post-processing filter (e.g. glow, blur). */
89
+ export function filter(name, params = {}) {
90
+ return {
91
+ __sdk: true,
92
+ kind: 'filter',
93
+ name,
94
+ params: { ...params },
95
+ };
96
+ }
97
+ /** Custom GLSL shader effect. */
98
+ export function shader(shaderSource, params = {}) {
99
+ return {
100
+ __sdk: true,
101
+ kind: 'shader',
102
+ shaderSource,
103
+ params: { ...params },
104
+ };
105
+ }
@@ -0,0 +1,9 @@
1
+ import { type TimeInput } from './duration.js';
2
+ import type { AnimationDescriptor } from './types.js';
3
+ export declare function fadeIn(duration?: TimeInput): AnimationDescriptor;
4
+ export declare function fadeOut(duration?: TimeInput): AnimationDescriptor;
5
+ export declare function slideY(fromY?: number, toY?: number, duration?: TimeInput): AnimationDescriptor;
6
+ export declare function slideX(fromX?: number, toX?: number, duration?: TimeInput): AnimationDescriptor;
7
+ export declare function scale(from?: number, to?: number, duration?: TimeInput): AnimationDescriptor;
8
+ export declare function popIn(duration?: TimeInput): AnimationDescriptor;
9
+ //# sourceMappingURL=motion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion.d.ts","sourceRoot":"","sources":["../src/motion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAqBtD,wBAAgB,MAAM,CAAC,QAAQ,GAAE,SAAe,GAAG,mBAAmB,CAErE;AAED,wBAAgB,OAAO,CAAC,QAAQ,GAAE,SAAe,GAAG,mBAAmB,CAEtE;AAED,wBAAgB,MAAM,CAAC,KAAK,SAAK,EAAE,GAAG,SAAI,EAAE,QAAQ,GAAE,SAAe,GAAG,mBAAmB,CAE1F;AAED,wBAAgB,MAAM,CAAC,KAAK,SAAM,EAAE,GAAG,SAAI,EAAE,QAAQ,GAAE,SAAe,GAAG,mBAAmB,CAE3F;AAED,wBAAgB,KAAK,CAAC,IAAI,SAAM,EAAE,EAAE,SAAI,EAAE,QAAQ,GAAE,SAAe,GAAG,mBAAmB,CAExF;AAED,wBAAgB,KAAK,CAAC,QAAQ,GAAE,SAAgB,GAAG,mBAAmB,CAErE"}
package/dist/motion.js ADDED
@@ -0,0 +1,31 @@
1
+ import { toSeconds } from './duration.js';
2
+ function anim(type, from, to, duration, extra) {
3
+ return {
4
+ __sdk: true,
5
+ kind: 'animation',
6
+ type,
7
+ from,
8
+ to,
9
+ duration: toSeconds(duration),
10
+ plugin: '@scenerok/basic-animations',
11
+ ...extra,
12
+ };
13
+ }
14
+ export function fadeIn(duration = 0.5) {
15
+ return anim('fade', { opacity: 0 }, { opacity: 1 }, duration);
16
+ }
17
+ export function fadeOut(duration = 0.5) {
18
+ return anim('fade', { opacity: 1 }, { opacity: 0 }, duration, { align: 'end' });
19
+ }
20
+ export function slideY(fromY = 30, toY = 0, duration = 0.6) {
21
+ return anim('translateY', { y: fromY }, { y: toY }, duration);
22
+ }
23
+ export function slideX(fromX = -30, toX = 0, duration = 0.6) {
24
+ return anim('translateX', { x: fromX }, { x: toX }, duration);
25
+ }
26
+ export function scale(from = 0.8, to = 1, duration = 0.5) {
27
+ return anim('scale', { scale: from }, { scale: to }, duration);
28
+ }
29
+ export function popIn(duration = 0.45) {
30
+ return anim('scale', { scale: 0.6, opacity: 0 }, { scale: 1, opacity: 1 }, duration);
31
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Client stubs for `@scenerok/cloudflare` — Cloudflare AI Gateway media generation.
3
+ */
4
+ import type { AspectRatio, CloudflareImageModel, CloudflareVideoModel, MediaUrlRef, StringEnum } from './types.js';
5
+ import type { VideoClip } from '../types.js';
6
+ export type { AspectRatio, CloudflareImageModel, CloudflareVideoModel, MediaUrlRef, } from './types.js';
7
+ export interface CloudflareVideoOptions {
8
+ model?: StringEnum<CloudflareVideoModel>;
9
+ model_id?: StringEnum<CloudflareVideoModel>;
10
+ duration?: number;
11
+ aspect_ratio?: StringEnum<AspectRatio>;
12
+ resolution?: string;
13
+ generate_audio?: boolean;
14
+ audio?: boolean;
15
+ negative_prompt?: string;
16
+ seed?: number;
17
+ }
18
+ export interface CloudflareImageOptions {
19
+ model?: StringEnum<CloudflareImageModel>;
20
+ model_id?: StringEnum<CloudflareImageModel>;
21
+ /** How long the still stays on the timeline (seconds). */
22
+ duration?: number;
23
+ aspect_ratio?: StringEnum<AspectRatio>;
24
+ resolution?: string;
25
+ width?: number;
26
+ height?: number;
27
+ n?: number;
28
+ }
29
+ export interface CloudflareVideoModelInfo {
30
+ model: string;
31
+ provider: string;
32
+ description: string;
33
+ minDuration: number;
34
+ maxDuration: number;
35
+ defaultDuration: number;
36
+ defaultAspectRatio?: string;
37
+ defaultResolution?: string;
38
+ supportedModes: Array<'text-to-video' | 'image-to-video' | 'reference-to-video' | 'extend-video'>;
39
+ [key: string]: unknown;
40
+ }
41
+ export interface CloudflareImageModelInfo {
42
+ model: string;
43
+ provider: string;
44
+ description: string;
45
+ defaultDuration: number;
46
+ defaultAspectRatio?: string;
47
+ defaultResolution?: string;
48
+ [key: string]: unknown;
49
+ }
50
+ export interface CloudflareModelCatalog {
51
+ video: CloudflareVideoModelInfo[];
52
+ image: CloudflareImageModelInfo[];
53
+ }
54
+ export declare function imagine(prompt: string, options?: CloudflareVideoOptions): Promise<VideoClip>;
55
+ export declare function genVideo(prompt: string, options?: CloudflareVideoOptions): Promise<VideoClip>;
56
+ export declare function generateVideo(prompt: string, options?: CloudflareVideoOptions): Promise<VideoClip>;
57
+ export declare function video(prompt: string, options?: CloudflareVideoOptions): Promise<VideoClip>;
58
+ export declare function imageToVideo(imageSrc: MediaUrlRef, prompt?: string, options?: CloudflareVideoOptions): Promise<VideoClip>;
59
+ export declare function referenceToVideo(images: readonly MediaUrlRef[], prompt: string, options?: CloudflareVideoOptions): Promise<VideoClip>;
60
+ export declare function extendVideo(videoSrc: string, prompt: string, options?: CloudflareVideoOptions): Promise<VideoClip>;
61
+ export declare function image(prompt: string, options?: CloudflareImageOptions): Promise<VideoClip>;
62
+ export declare function generateImage(prompt: string, options?: CloudflareImageOptions): Promise<VideoClip>;
63
+ export declare function listModels(): Promise<CloudflareModelCatalog>;
64
+ export declare function models(): Promise<CloudflareModelCatalog>;
65
+ export interface CloudflarePlugin {
66
+ imagine: typeof imagine;
67
+ genVideo: typeof genVideo;
68
+ generateVideo: typeof generateVideo;
69
+ video: typeof video;
70
+ imageToVideo: typeof imageToVideo;
71
+ referenceToVideo: typeof referenceToVideo;
72
+ extendVideo: typeof extendVideo;
73
+ image: typeof image;
74
+ generateImage: typeof generateImage;
75
+ listModels: typeof listModels;
76
+ models: typeof models;
77
+ }
78
+ declare const cloudflare: CloudflarePlugin;
79
+ export default cloudflare;
80
+ //# sourceMappingURL=cloudflare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/plugins/cloudflare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Client stubs for `@scenerok/cloudflare` — Cloudflare AI Gateway media generation.
3
+ */
4
+ import { invokeDataPlugin, invokeVideoPlugin } from './invoke.js';
5
+ const PKG = '@scenerok/cloudflare';
6
+ export function imagine(prompt, options) {
7
+ return invokeVideoPlugin(PKG, 'imagine', prompt, options ?? {});
8
+ }
9
+ export function genVideo(prompt, options) {
10
+ return invokeVideoPlugin(PKG, 'genVideo', prompt, options ?? {});
11
+ }
12
+ export function generateVideo(prompt, options) {
13
+ return invokeVideoPlugin(PKG, 'generateVideo', prompt, options ?? {});
14
+ }
15
+ export function video(prompt, options) {
16
+ return invokeVideoPlugin(PKG, 'video', prompt, options ?? {});
17
+ }
18
+ export function imageToVideo(imageSrc, prompt, options) {
19
+ if (prompt === undefined) {
20
+ return invokeVideoPlugin(PKG, 'imageToVideo', imageSrc, options ?? {});
21
+ }
22
+ return invokeVideoPlugin(PKG, 'imageToVideo', imageSrc, prompt, options ?? {});
23
+ }
24
+ export function referenceToVideo(images, prompt, options) {
25
+ return invokeVideoPlugin(PKG, 'referenceToVideo', images, prompt, options ?? {});
26
+ }
27
+ export function extendVideo(videoSrc, prompt, options) {
28
+ return invokeVideoPlugin(PKG, 'extendVideo', videoSrc, prompt, options ?? {});
29
+ }
30
+ export function image(prompt, options) {
31
+ return invokeVideoPlugin(PKG, 'image', prompt, options ?? {});
32
+ }
33
+ export function generateImage(prompt, options) {
34
+ return invokeVideoPlugin(PKG, 'generateImage', prompt, options ?? {});
35
+ }
36
+ export function listModels() {
37
+ return invokeDataPlugin(PKG, 'listModels');
38
+ }
39
+ export function models() {
40
+ return invokeDataPlugin(PKG, 'models');
41
+ }
42
+ const cloudflare = {
43
+ imagine,
44
+ genVideo,
45
+ generateVideo,
46
+ video,
47
+ imageToVideo,
48
+ referenceToVideo,
49
+ extendVideo,
50
+ image,
51
+ generateImage,
52
+ listModels,
53
+ models,
54
+ };
55
+ export default cloudflare;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Client stubs for `@elevenlabs/music` — background music generation.
3
+ */
4
+ import type { ElevenLabsMusicModel, ElevenLabsOutputFormat, StringEnum } from './types.js';
5
+ import type { AudioTrack } from '../types.js';
6
+ export type { ElevenLabsMusicModel, ElevenLabsOutputFormat, } from './types.js';
7
+ /** Optional structured composition plan passed through to ElevenLabs. */
8
+ export interface ElevenLabsCompositionPlan {
9
+ [key: string]: unknown;
10
+ }
11
+ export interface ElevenLabsMusicOptions {
12
+ /** Target length in seconds (also accepted as duration_seconds / length). */
13
+ duration?: number;
14
+ duration_seconds?: number;
15
+ length?: number;
16
+ /** Explicit length in milliseconds (overrides duration when set). */
17
+ music_length_ms?: number;
18
+ output_format?: StringEnum<ElevenLabsOutputFormat>;
19
+ model_id?: StringEnum<ElevenLabsMusicModel>;
20
+ model?: StringEnum<ElevenLabsMusicModel>;
21
+ force_instrumental?: boolean;
22
+ instrumental?: boolean;
23
+ seed?: number;
24
+ composition_plan?: ElevenLabsCompositionPlan;
25
+ }
26
+ /** Generate a music bed from a text prompt. */
27
+ export declare function music(prompt: string, options?: ElevenLabsMusicOptions): Promise<AudioTrack>;
28
+ export declare function generateMusic(prompt: string, options?: ElevenLabsMusicOptions): Promise<AudioTrack>;
29
+ export declare function composeMusic(prompt: string, options?: ElevenLabsMusicOptions): Promise<AudioTrack>;
30
+ export interface ElevenLabsMusicPlugin {
31
+ music: typeof music;
32
+ generateMusic: typeof generateMusic;
33
+ composeMusic: typeof composeMusic;
34
+ }
35
+ declare const elevenlabsMusic: ElevenLabsMusicPlugin;
36
+ export default elevenlabsMusic;
37
+ //# sourceMappingURL=elevenlabs-music.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elevenlabs-music.d.ts","sourceRoot":"","sources":["../../src/plugins/elevenlabs-music.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,yEAAyE;AACzE,MAAM,WAAW,yBAAyB;IACxC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACnD,QAAQ,CAAC,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACzC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;CAC9C;AAED,+CAA+C;AAC/C,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAE3F;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAEnG;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAElG;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,YAAY,EAAE,OAAO,YAAY,CAAC;CACnC;AAED,QAAA,MAAM,eAAe,EAAE,qBAItB,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Client stubs for `@elevenlabs/music` — background music generation.
3
+ */
4
+ import { invokeAudioPlugin } from './invoke.js';
5
+ const PKG = '@elevenlabs/music';
6
+ /** Generate a music bed from a text prompt. */
7
+ export function music(prompt, options) {
8
+ return invokeAudioPlugin(PKG, 'music', prompt, options ?? {});
9
+ }
10
+ export function generateMusic(prompt, options) {
11
+ return invokeAudioPlugin(PKG, 'generateMusic', prompt, options ?? {});
12
+ }
13
+ export function composeMusic(prompt, options) {
14
+ return invokeAudioPlugin(PKG, 'composeMusic', prompt, options ?? {});
15
+ }
16
+ const elevenlabsMusic = {
17
+ music,
18
+ generateMusic,
19
+ composeMusic,
20
+ };
21
+ export default elevenlabsMusic;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Host-injected AI plugin bridge.
3
+ * At compile time the SDK runtime sets `globalThis.__scenerokPlugins.invoke`.
4
+ */
5
+ import type { AudioTrack, VideoClip } from '../types.js';
6
+ export type PluginDataResult = unknown;
7
+ export type PluginMediaResult = VideoClip | AudioTrack | PluginDataResult;
8
+ export interface PluginInvokeHost {
9
+ invoke(qualifiedName: string, positional: readonly unknown[], named: Readonly<Record<string, unknown>>): Promise<unknown>;
10
+ }
11
+ /** Split trailing options object from positional args (JS-friendly call style). */
12
+ export declare function splitPluginArgs(args: readonly unknown[]): {
13
+ positional: unknown[];
14
+ named: Record<string, unknown>;
15
+ };
16
+ /** Map a host PluginResult into an SDK video/audio node (or raw data). */
17
+ export declare function mapPluginResult(result: unknown): PluginMediaResult;
18
+ /** Invoke a plugin function expected to return a video clip. */
19
+ export declare function invokeVideoPlugin(packageName: string, functionName: string, ...args: unknown[]): Promise<VideoClip>;
20
+ /** Invoke a plugin function expected to return an audio track. */
21
+ export declare function invokeAudioPlugin(packageName: string, functionName: string, ...args: unknown[]): Promise<AudioTrack>;
22
+ /** Invoke a plugin function expected to return structured data. */
23
+ export declare function invokeDataPlugin<T = unknown>(packageName: string, functionName: string, ...args: unknown[]): Promise<T>;
24
+ /** @deprecated Prefer invokeVideoPlugin / invokeAudioPlugin / invokeDataPlugin. */
25
+ export declare function invokePlugin(packageName: string, functionName: string, ...args: unknown[]): Promise<PluginMediaResult>;
26
+ //# sourceMappingURL=invoke.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../../src/plugins/invoke.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC;AACvC,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAE1E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CACJ,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,SAAS,OAAO,EAAE,EAC9B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAsBD,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG;IACzD,UAAU,EAAE,OAAO,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAiBA;AA8BD,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,CAwBlE;AAgBD,gEAAgE;AAChE,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,SAAS,CAAC,CAMpB;AAED,kEAAkE;AAClE,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,UAAU,CAAC,CAMrB;AAED,mEAAmE;AACnE,wBAAsB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAChD,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,CAAC,CAAC,CAGZ;AAED,mFAAmF;AACnF,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,iBAAiB,CAAC,CAE5B"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Host-injected AI plugin bridge.
3
+ * At compile time the SDK runtime sets `globalThis.__scenerokPlugins.invoke`.
4
+ */
5
+ import { audio, video } from '../media.js';
6
+ function host() {
7
+ const h = globalThis.__scenerokPlugins;
8
+ if (!h?.invoke) {
9
+ throw new Error('AI plugins (@scenerok/xai, @scenerok/cloudflare, @elevenlabs/music) are only available '
10
+ + 'when compiling via SceneRok (scenerok validate/render). Host bindings were not injected.');
11
+ }
12
+ return h;
13
+ }
14
+ function isPlainOptions(value) {
15
+ return (!!value
16
+ && typeof value === 'object'
17
+ && !Array.isArray(value)
18
+ && value.__sdk !== true);
19
+ }
20
+ /** Split trailing options object from positional args (JS-friendly call style). */
21
+ export function splitPluginArgs(args) {
22
+ if (args.length === 0)
23
+ return { positional: [], named: {} };
24
+ const last = args[args.length - 1];
25
+ if (args.length === 1 && isPlainOptions(last) && ('prompt' in last || 'text' in last)) {
26
+ const named = { ...last };
27
+ const prompt = named.prompt ?? named.text;
28
+ delete named.prompt;
29
+ delete named.text;
30
+ return {
31
+ positional: prompt !== undefined ? [prompt] : [],
32
+ named,
33
+ };
34
+ }
35
+ if (isPlainOptions(last)) {
36
+ return { positional: args.slice(0, -1), named: { ...last } };
37
+ }
38
+ return { positional: [...args], named: {} };
39
+ }
40
+ function isVideoClip(value) {
41
+ return (typeof value === 'object'
42
+ && value !== null
43
+ && value.__sdk === true
44
+ && value.kind === 'video');
45
+ }
46
+ function isAudioTrack(value) {
47
+ return (typeof value === 'object'
48
+ && value !== null
49
+ && value.__sdk === true
50
+ && value.kind === 'audio');
51
+ }
52
+ /** Map a host PluginResult into an SDK video/audio node (or raw data). */
53
+ export function mapPluginResult(result) {
54
+ if (!result || typeof result !== 'object')
55
+ return result;
56
+ const r = result;
57
+ if (r.type === 'video' && typeof r.url === 'string') {
58
+ return video(r.url, {
59
+ duration: typeof r.duration === 'number' ? r.duration : 5,
60
+ width: typeof r.width === 'number' ? r.width : undefined,
61
+ height: typeof r.height === 'number' ? r.height : undefined,
62
+ });
63
+ }
64
+ if (r.type === 'audio' && typeof r.url === 'string') {
65
+ return audio(r.url, {
66
+ duration: typeof r.duration === 'number' ? r.duration : 5,
67
+ });
68
+ }
69
+ if (r.type === 'data') {
70
+ if (r.error)
71
+ throw new Error(String(r.error));
72
+ return r.data;
73
+ }
74
+ return result;
75
+ }
76
+ async function invokeRaw(packageName, functionName, args) {
77
+ const { positional, named } = splitPluginArgs(args);
78
+ const qualified = `${packageName}.${functionName}`;
79
+ const raw = await host().invoke(qualified, positional, named);
80
+ if (raw == null) {
81
+ throw new Error(`Plugin '${qualified}' returned no result`);
82
+ }
83
+ return mapPluginResult(raw);
84
+ }
85
+ /** Invoke a plugin function expected to return a video clip. */
86
+ export async function invokeVideoPlugin(packageName, functionName, ...args) {
87
+ const result = await invokeRaw(packageName, functionName, args);
88
+ if (!isVideoClip(result)) {
89
+ throw new Error(`Plugin '${packageName}.${functionName}' did not return a video clip`);
90
+ }
91
+ return result;
92
+ }
93
+ /** Invoke a plugin function expected to return an audio track. */
94
+ export async function invokeAudioPlugin(packageName, functionName, ...args) {
95
+ const result = await invokeRaw(packageName, functionName, args);
96
+ if (!isAudioTrack(result)) {
97
+ throw new Error(`Plugin '${packageName}.${functionName}' did not return an audio track`);
98
+ }
99
+ return result;
100
+ }
101
+ /** Invoke a plugin function expected to return structured data. */
102
+ export async function invokeDataPlugin(packageName, functionName, ...args) {
103
+ const result = await invokeRaw(packageName, functionName, args);
104
+ return result;
105
+ }
106
+ /** @deprecated Prefer invokeVideoPlugin / invokeAudioPlugin / invokeDataPlugin. */
107
+ export async function invokePlugin(packageName, functionName, ...args) {
108
+ return invokeRaw(packageName, functionName, args);
109
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Shared option / media-ref types for AI plugin stubs.
3
+ */
4
+ /** Allow known literals while still accepting future provider strings. */
5
+ export type StringEnum<T extends string> = T | (string & {});
6
+ export type AspectRatio = '1:1' | '16:9' | '9:16' | '4:3' | '3:4' | '3:2' | '2:3' | '19.5:9' | '9:19.5' | '20:9' | '9:20' | '1:2' | '2:1' | 'auto';
7
+ export type XaiVideoResolution = '480p' | '720p';
8
+ export type XaiImageResolution = '1k' | '2k';
9
+ export type XaiVoiceId = 'eve' | 'ara' | 'rex' | 'sal' | 'leo';
10
+ export type XaiTtsCodec = 'mp3' | 'wav' | 'pcm' | 'mulaw' | 'ulaw' | 'alaw';
11
+ export type MediaUrlRef = string | {
12
+ url: string;
13
+ };
14
+ export type XaiImageRef = MediaUrlRef | {
15
+ file_id: string;
16
+ };
17
+ export type CloudflareVideoModel = 'pixverse/v6' | 'pixverse/v5.6' | 'vidu/q3-pro' | 'vidu/q3-turbo' | 'runwayml/gen-4.5' | 'minimax/hailuo-2.3' | 'bytedance/seedance-2.0' | 'google/veo-3.1' | 'google/veo-3.1-fast' | 'google/veo-3-fast' | 'xai/grok-imagine-video' | 'xai/grok-imagine-video-1.5-preview' | 'alibaba/wan-2.7-i2v';
18
+ export type CloudflareImageModel = 'black-forest-labs/flux-2-pro-preview' | 'openai/gpt-image-2' | 'openai/gpt-image-1.5' | 'xai/grok-imagine-image-quality' | 'xai/grok-imagine-image' | 'recraft/recraftv4-pro';
19
+ export type ElevenLabsMusicModel = 'music_v1';
20
+ export type ElevenLabsOutputFormat = 'mp3_44100_128' | 'mp3_44100_192' | 'mp3_44100_64' | 'pcm_16000' | 'pcm_22050' | 'pcm_24000' | 'pcm_44100' | 'ulaw_8000';
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0EAA0E;AAC1E,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE7D,MAAM,MAAM,WAAW,GACnB,KAAK,GACL,MAAM,GACN,MAAM,GACN,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,MAAM,GACN,KAAK,GACL,KAAK,GACL,MAAM,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,CAAC;AACjD,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAC/D,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5E,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AACnD,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,MAAM,MAAM,oBAAoB,GAC5B,aAAa,GACb,eAAe,GACf,aAAa,GACb,eAAe,GACf,kBAAkB,GAClB,oBAAoB,GACpB,wBAAwB,GACxB,gBAAgB,GAChB,qBAAqB,GACrB,mBAAmB,GACnB,wBAAwB,GACxB,oCAAoC,GACpC,qBAAqB,CAAC;AAE1B,MAAM,MAAM,oBAAoB,GAC5B,sCAAsC,GACtC,oBAAoB,GACpB,sBAAsB,GACtB,gCAAgC,GAChC,wBAAwB,GACxB,uBAAuB,CAAC;AAE5B,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAE9C,MAAM,MAAM,sBAAsB,GAC9B,eAAe,GACf,eAAe,GACf,cAAc,GACd,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,GACX,WAAW,CAAC"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Shared option / media-ref types for AI plugin stubs.
3
+ */
4
+ export {};
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Client stubs for `@scenerok/xai` — same surface as VidScript `import xai from "@scenerok/xai"`.
3
+ * Host executes the real plugin via CompilerAPI during `scenerok validate/render`.
4
+ */
5
+ import type { AspectRatio, StringEnum, XaiImageRef, XaiImageResolution, XaiTtsCodec, XaiVideoResolution, XaiVoiceId } from './types.js';
6
+ import type { AudioTrack, VideoClip } from '../types.js';
7
+ export type { AspectRatio, XaiImageRef, XaiImageResolution, XaiTtsCodec, XaiVideoResolution, XaiVoiceId, } from './types.js';
8
+ export interface XaiVideoOptions {
9
+ duration?: number;
10
+ aspect_ratio?: StringEnum<AspectRatio>;
11
+ resolution?: StringEnum<XaiVideoResolution>;
12
+ generate_audio?: boolean;
13
+ audio?: boolean;
14
+ }
15
+ export interface XaiImageOptions {
16
+ /** How long the still stays on the timeline (seconds). */
17
+ duration?: number;
18
+ aspect_ratio?: StringEnum<AspectRatio>;
19
+ resolution?: StringEnum<XaiImageResolution>;
20
+ /** Number of images to generate (provider may return the first). */
21
+ n?: number;
22
+ }
23
+ export interface XaiTtsOptions {
24
+ voice?: StringEnum<XaiVoiceId>;
25
+ voice_id?: StringEnum<XaiVoiceId>;
26
+ language?: string;
27
+ /** Playback speed 0.7–1.5. */
28
+ speed?: number;
29
+ codec?: StringEnum<XaiTtsCodec>;
30
+ sample_rate?: number;
31
+ bit_rate?: number;
32
+ }
33
+ export interface XaiVoiceInfo {
34
+ voice_id?: string;
35
+ id?: string;
36
+ name?: string;
37
+ language?: string;
38
+ [key: string]: unknown;
39
+ }
40
+ export interface XaiVoiceList {
41
+ voices?: XaiVoiceInfo[];
42
+ [key: string]: unknown;
43
+ }
44
+ /** Text → video (Grok Imagine Video). */
45
+ export declare function imagine(prompt: string, options?: XaiVideoOptions): Promise<VideoClip>;
46
+ /** Text → still image clip. */
47
+ export declare function image(prompt: string, options?: XaiImageOptions): Promise<VideoClip>;
48
+ export declare function generateImage(prompt: string, options?: XaiImageOptions): Promise<VideoClip>;
49
+ /** Text → video. */
50
+ export declare function genVideo(prompt: string, options?: XaiVideoOptions): Promise<VideoClip>;
51
+ /** Animate one image into video. */
52
+ export declare function imageToVideo(imageSrc: XaiImageRef, prompt?: string, options?: XaiVideoOptions): Promise<VideoClip>;
53
+ /** Guide a scene with 1–7 reference images. */
54
+ export declare function referenceToVideo(images: readonly XaiImageRef[], prompt: string, options?: XaiVideoOptions): Promise<VideoClip>;
55
+ /** Extend an existing video clip. */
56
+ export declare function extendVideo(videoSrc: string, prompt: string, options?: XaiVideoOptions): Promise<VideoClip>;
57
+ /** Text → speech. */
58
+ export declare function tts(text: string, options?: XaiTtsOptions): Promise<AudioTrack>;
59
+ export declare function textToSpeech(text: string, options?: XaiTtsOptions): Promise<AudioTrack>;
60
+ /** List available TTS voices. */
61
+ export declare function listVoices(): Promise<XaiVoiceList | null>;
62
+ export interface XaiPlugin {
63
+ imagine: typeof imagine;
64
+ image: typeof image;
65
+ generateImage: typeof generateImage;
66
+ genVideo: typeof genVideo;
67
+ imageToVideo: typeof imageToVideo;
68
+ referenceToVideo: typeof referenceToVideo;
69
+ extendVideo: typeof extendVideo;
70
+ tts: typeof tts;
71
+ textToSpeech: typeof textToSpeech;
72
+ listVoices: typeof listVoices;
73
+ }
74
+ declare const xai: XaiPlugin;
75
+ export default xai;
76
+ //# sourceMappingURL=xai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xai.d.ts","sourceRoot":"","sources":["../../src/plugins/xai.ts"],"names":[],"mappings":"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"}