motionrender 0.0.0-stage → 0.2.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.
Files changed (203) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +61 -2
  3. package/blocks/badge.json +68 -0
  4. package/blocks/big-stat.json +240 -0
  5. package/blocks/cta-end.json +283 -0
  6. package/blocks/feature-list.json +286 -0
  7. package/blocks/footage.json +43 -0
  8. package/blocks/fx-background-swap.json +170 -0
  9. package/blocks/fx-before-after.json +212 -0
  10. package/blocks/fx-captions.json +34 -0
  11. package/blocks/fx-chat.json +368 -0
  12. package/blocks/fx-checklist.json +609 -0
  13. package/blocks/fx-clone-wall.json +181 -0
  14. package/blocks/fx-color-pop.json +92 -0
  15. package/blocks/fx-command-bridge.json +358 -0
  16. package/blocks/fx-counter-hero.json +206 -0
  17. package/blocks/fx-cta-card.json +337 -0
  18. package/blocks/fx-day-to-night.json +174 -0
  19. package/blocks/fx-duo-title.json +245 -0
  20. package/blocks/fx-duotone.json +95 -0
  21. package/blocks/fx-extruded-title.json +309 -0
  22. package/blocks/fx-gallery.json +239 -0
  23. package/blocks/fx-glass-cards.json +921 -0
  24. package/blocks/fx-glitch-title.json +373 -0
  25. package/blocks/fx-grade-look.json +91 -0
  26. package/blocks/fx-highlighter.json +53 -0
  27. package/blocks/fx-icon-orbit.json +2694 -0
  28. package/blocks/fx-lens-flare.json +325 -0
  29. package/blocks/fx-letterbox.json +105 -0
  30. package/blocks/fx-light-leak.json +140 -0
  31. package/blocks/fx-map-journey.json +443 -0
  32. package/blocks/fx-neon-outline.json +743 -0
  33. package/blocks/fx-notifications.json +456 -0
  34. package/blocks/fx-progress-ring.json +143 -0
  35. package/blocks/fx-pull-out.json +68 -0
  36. package/blocks/fx-punch-in.json +81 -0
  37. package/blocks/fx-rgb-flash.json +166 -0
  38. package/blocks/fx-shake-hit.json +120 -0
  39. package/blocks/fx-split-reveal.json +110 -0
  40. package/blocks/fx-spotlight.json +1383 -0
  41. package/blocks/fx-stats-split.json +500 -0
  42. package/blocks/fx-step-tracker.json +528 -0
  43. package/blocks/fx-sticker-freeze.json +584 -0
  44. package/blocks/fx-strike-rewrite.json +79 -0
  45. package/blocks/fx-ticker.json +179 -0
  46. package/blocks/fx-timeline.json +1287 -0
  47. package/blocks/fx-tracked-label.json +167 -0
  48. package/blocks/fx-typewriter-quote.json +164 -0
  49. package/blocks/handle.json +43 -0
  50. package/blocks/icon-row.json +404 -0
  51. package/blocks/image-caption.json +248 -0
  52. package/blocks/lower-third.json +106 -0
  53. package/blocks/phone-mockup.json +459 -0
  54. package/blocks/progress-bar.json +51 -0
  55. package/blocks/quote.json +347 -0
  56. package/blocks/section-title.json +240 -0
  57. package/blocks/split-screen.json +283 -0
  58. package/blocks/stat-grid.json +315 -0
  59. package/blocks/steps.json +266 -0
  60. package/blocks/title-hero.json +287 -0
  61. package/dist/builder.d.ts +1 -0
  62. package/dist/builder.js +169 -0
  63. package/dist/cli.js +9301 -0
  64. package/dist/fonts/LICENSE-Inter.txt +93 -0
  65. package/dist/fonts/inter-cyrillic-ext-opsz-italic.woff2 +0 -0
  66. package/dist/fonts/inter-cyrillic-ext-opsz-normal.woff2 +0 -0
  67. package/dist/fonts/inter-cyrillic-opsz-italic.woff2 +0 -0
  68. package/dist/fonts/inter-cyrillic-opsz-normal.woff2 +0 -0
  69. package/dist/fonts/inter-greek-ext-opsz-italic.woff2 +0 -0
  70. package/dist/fonts/inter-greek-ext-opsz-normal.woff2 +0 -0
  71. package/dist/fonts/inter-greek-opsz-italic.woff2 +0 -0
  72. package/dist/fonts/inter-greek-opsz-normal.woff2 +0 -0
  73. package/dist/fonts/inter-latin-ext-opsz-italic.woff2 +0 -0
  74. package/dist/fonts/inter-latin-ext-opsz-normal.woff2 +0 -0
  75. package/dist/fonts/inter-latin-opsz-italic.woff2 +0 -0
  76. package/dist/fonts/inter-latin-opsz-normal.woff2 +0 -0
  77. package/dist/fonts/inter-vietnamese-opsz-italic.woff2 +0 -0
  78. package/dist/fonts/inter-vietnamese-opsz-normal.woff2 +0 -0
  79. package/dist/index.d.ts +2 -0
  80. package/dist/index.js +2330 -0
  81. package/dist/player.d.ts +1 -0
  82. package/dist/player.js +80 -0
  83. package/dist/react.d.ts +1 -0
  84. package/dist/react.js +140 -0
  85. package/dist/runtime/canvas-runtime.js +261 -0
  86. package/dist/runtime/lottie_light_canvas.min.js +1 -0
  87. package/dist/runtime/text-layout.js +50 -0
  88. package/dist/sfx/click.wav +0 -0
  89. package/dist/sfx/ding.wav +0 -0
  90. package/dist/sfx/pop.wav +0 -0
  91. package/dist/sfx/riser.wav +0 -0
  92. package/dist/sfx/thump.wav +0 -0
  93. package/dist/sfx/tick.wav +0 -0
  94. package/dist/sfx/whoosh.wav +0 -0
  95. package/dist/types/packages/ai/src/assets.d.ts +26 -0
  96. package/dist/types/packages/ai/src/batch.d.ts +19 -0
  97. package/dist/types/packages/ai/src/compose.d.ts +34 -0
  98. package/dist/types/packages/ai/src/history.d.ts +37 -0
  99. package/dist/types/packages/ai/src/image.d.ts +19 -0
  100. package/dist/types/packages/ai/src/index.d.ts +13 -0
  101. package/dist/types/packages/ai/src/json.d.ts +2 -0
  102. package/dist/types/packages/ai/src/narrate.d.ts +63 -0
  103. package/dist/types/packages/ai/src/patch.d.ts +15 -0
  104. package/dist/types/packages/ai/src/project.d.ts +27 -0
  105. package/dist/types/packages/ai/src/prompt.d.ts +30 -0
  106. package/dist/types/packages/ai/src/providers.d.ts +109 -0
  107. package/dist/types/packages/ai/src/template.d.ts +80 -0
  108. package/dist/types/packages/ai/src/voiceover.d.ts +49 -0
  109. package/dist/types/packages/animation/src/index.d.ts +27 -0
  110. package/dist/types/packages/assets/src/cache.d.ts +26 -0
  111. package/dist/types/packages/assets/src/index.d.ts +8 -0
  112. package/dist/types/packages/builder/src/index.d.ts +270 -0
  113. package/dist/types/packages/cli/src/ai-studio-page.d.ts +1 -0
  114. package/dist/types/packages/cli/src/ai-studio.d.ts +35 -0
  115. package/dist/types/packages/cli/src/ai.d.ts +3 -0
  116. package/dist/types/packages/cli/src/args.d.ts +9 -0
  117. package/dist/types/packages/cli/src/blocks-cli.d.ts +3 -0
  118. package/dist/types/packages/cli/src/blocks.d.ts +50 -0
  119. package/dist/types/packages/cli/src/build.d.ts +1 -0
  120. package/dist/types/packages/cli/src/dev-page.d.ts +1 -0
  121. package/dist/types/packages/cli/src/dev.d.ts +13 -0
  122. package/dist/types/packages/cli/src/index.d.ts +2 -0
  123. package/dist/types/packages/cli/src/init.d.ts +10 -0
  124. package/dist/types/packages/cli/src/serve.d.ts +2 -0
  125. package/dist/types/packages/cli/src/studio.d.ts +36 -0
  126. package/dist/types/packages/cli/src/templates.d.ts +63 -0
  127. package/dist/types/packages/cli/src/thumbnail.d.ts +20 -0
  128. package/dist/types/packages/cli/src/track.d.ts +35 -0
  129. package/dist/types/packages/cli/src/worker.d.ts +13 -0
  130. package/dist/types/packages/contracts/src/index.d.ts +377 -0
  131. package/dist/types/packages/core/src/audio.d.ts +14 -0
  132. package/dist/types/packages/core/src/distributed.d.ts +50 -0
  133. package/dist/types/packages/core/src/index.d.ts +63 -0
  134. package/dist/types/packages/core/src/media.d.ts +11 -0
  135. package/dist/types/packages/core/src/review.d.ts +29 -0
  136. package/dist/types/packages/ffmpeg/src/index.d.ts +68 -0
  137. package/dist/types/packages/graphics/src/fonts.d.ts +3 -0
  138. package/dist/types/packages/graphics/src/index.d.ts +121 -0
  139. package/dist/types/packages/graphics/src/runtime.d.ts +10 -0
  140. package/dist/types/packages/jobs/src/env.d.ts +78 -0
  141. package/dist/types/packages/jobs/src/handlers.d.ts +17 -0
  142. package/dist/types/packages/jobs/src/index.d.ts +5 -0
  143. package/dist/types/packages/jobs/src/input.d.ts +18 -0
  144. package/dist/types/packages/jobs/src/queue.d.ts +70 -0
  145. package/dist/types/packages/jobs/src/redis.d.ts +42 -0
  146. package/dist/types/packages/player/src/bundle.d.ts +4 -0
  147. package/dist/types/packages/player/src/canvas-runtime.d.ts +11 -0
  148. package/dist/types/packages/player/src/index.d.ts +29 -0
  149. package/dist/types/packages/react/src/index.d.ts +76 -0
  150. package/dist/types/packages/renderer/src/index.d.ts +35 -0
  151. package/dist/types/packages/renderer/src/pool.d.ts +7 -0
  152. package/dist/types/packages/renderer/src/video.d.ts +9 -0
  153. package/dist/types/packages/schema/src/captions.d.ts +24 -0
  154. package/dist/types/packages/schema/src/expression.d.ts +1 -0
  155. package/dist/types/packages/schema/src/index.d.ts +1213 -0
  156. package/dist/types/packages/schema/src/variables.d.ts +115 -0
  157. package/dist/types/packages/storage/src/index.d.ts +78 -0
  158. package/dist/types/packages/timeline/src/index.d.ts +104 -0
  159. package/package.json +78 -4
  160. package/skills/ove/SKILL.md +356 -0
  161. package/skills/ove-ai-compose/SKILL.md +36 -0
  162. package/skills/ove-batch-videos/SKILL.md +23 -0
  163. package/skills/ove-code-video/SKILL.md +68 -0
  164. package/skills/ove-effects/SKILL.md +65 -0
  165. package/skills/ove-make-reel/SKILL.md +30 -0
  166. package/skills/ove-voiceover-captions/SKILL.md +31 -0
  167. package/studio/assets/index-CzOvWv9w.css +1 -0
  168. package/studio/assets/index-J_fvKgng.js +11 -0
  169. package/studio/index.html +16 -0
  170. package/templates/case-study/composition.json +358 -0
  171. package/templates/case-study/template.json +8 -0
  172. package/templates/event-invite/composition.json +245 -0
  173. package/templates/event-invite/template.json +8 -0
  174. package/templates/explainer-square/composition.json +1335 -0
  175. package/templates/explainer-square/template.json +13 -0
  176. package/templates/keynote-wide/composition.json +1458 -0
  177. package/templates/keynote-wide/template.json +13 -0
  178. package/templates/launch-wide/composition.json +1306 -0
  179. package/templates/launch-wide/template.json +13 -0
  180. package/templates/product-card/composition.json +196 -0
  181. package/templates/product-card/data.example.json +5 -0
  182. package/templates/product-card/template.json +8 -0
  183. package/templates/product-wide/composition.json +1609 -0
  184. package/templates/product-wide/template.json +14 -0
  185. package/templates/quote-card/composition.json +123 -0
  186. package/templates/quote-card/template.json +8 -0
  187. package/templates/sale-promo/composition.json +290 -0
  188. package/templates/sale-promo/template.json +8 -0
  189. package/templates/showcase-tall/composition.json +1646 -0
  190. package/templates/showcase-tall/template.json +14 -0
  191. package/templates/slideshow/composition.json +167 -0
  192. package/templates/slideshow/template.json +8 -0
  193. package/templates/social-reel/composition.json +252 -0
  194. package/templates/social-reel/template.json +8 -0
  195. package/templates/starter/assets/logo.svg +4 -0
  196. package/templates/starter/composition.json +84 -0
  197. package/templates/story-tall/composition.json +1379 -0
  198. package/templates/story-tall/template.json +13 -0
  199. package/themes/espresso.json +15 -0
  200. package/themes/midnight.json +15 -0
  201. package/themes/neon.json +15 -0
  202. package/themes/paper.json +15 -0
  203. package/themes/signal.json +15 -0
@@ -0,0 +1,76 @@
1
+ import { type CSSProperties, type HTMLAttributes, type ImgHTMLAttributes, type ReactElement, type ReactNode } from 'react';
2
+ import { interpolate, spring } from '../../builder/src/index.js';
3
+ export { interpolate, spring };
4
+ export type VideoConfig = {
5
+ id?: string;
6
+ width: number;
7
+ height: number;
8
+ fps: number;
9
+ durationInFrames: number;
10
+ };
11
+ /** The frame being drawn, counted from 0 (inside a Sequence: from the start of the sequence). */
12
+ export declare function useCurrentFrame(): number;
13
+ /** The video's width, height, fps and length in frames. */
14
+ export declare function useVideoConfig(): VideoConfig;
15
+ /** Holds the frame until continueRender(handle) is called, for work that is not finished when the component first renders (loading a model, decoding an image). Gives a handle. */
16
+ export declare function delayRender(label?: string): number;
17
+ /** Releases a delayRender handle; the frame is drawn once every handle is released. */
18
+ export declare function continueRender(handle: number): void;
19
+ type MediaProps = {
20
+ src: string; /** Frames of the source to skip. */
21
+ startFrom?: number;
22
+ volume?: number;
23
+ playbackRate?: number;
24
+ loop?: boolean; /** Tells apart two clips with the same src shown together. */
25
+ name?: string;
26
+ };
27
+ /** Plays a sound (an audio asset id, a file, or sfx:name) for as long as it is shown, counted from when it appears. */
28
+ export declare function Audio(props: MediaProps): ReactElement;
29
+ /** Plays a video clip under the component (or over it with layer="front"). left, top, width and height place it, and may change with the frame (the clip then moves or resizes); the default fills the video. */
30
+ export declare function Video(props: MediaProps & {
31
+ muted?: boolean;
32
+ left?: number;
33
+ top?: number;
34
+ width?: number;
35
+ height?: number;
36
+ objectFit?: 'cover' | 'contain' | 'fill'; /** 'back' (default) draws the clip under the component, 'front' over it. */
37
+ layer?: 'back' | 'front';
38
+ }): ReactElement;
39
+ /** A picture: an asset id declared in config.assets, or a file path. Same as <img>. */
40
+ export declare function Img(props: ImgHTMLAttributes<HTMLImageElement>): ReactElement;
41
+ /** A box that fills the video (position: absolute, all four sides 0), for stacking layers. */
42
+ export declare function AbsoluteFill({ style, children, ...rest }: HTMLAttributes<HTMLDivElement> & {
43
+ style?: CSSProperties;
44
+ }): ReactElement;
45
+ /** Shows its children from frame `from` for `durationInFrames`, with the frame counted from the start of the sequence. */
46
+ export declare function Sequence({ from, durationInFrames, layout, children }: {
47
+ from?: number;
48
+ durationInFrames?: number;
49
+ layout?: 'absolute-fill' | 'none';
50
+ name?: string;
51
+ children?: ReactNode;
52
+ }): ReactElement | null;
53
+ /** Plays its Series.Sequence children one after another. */
54
+ export declare function Series({ children }: {
55
+ children?: ReactNode;
56
+ }): ReactElement;
57
+ export declare namespace Series {
58
+ var Sequence: (_props: {
59
+ durationInFrames: number;
60
+ offset?: number;
61
+ children?: ReactNode;
62
+ }) => ReactElement | null;
63
+ }
64
+ /** Easing functions for interpolate: `interpolate(frame, [0, 30], [0, 1], { easing: Easing.out(Easing.cubic) })`. */
65
+ export declare const Easing: {
66
+ linear: (t: number) => number;
67
+ quad: (t: number) => number;
68
+ cubic: (t: number) => number;
69
+ sin: (t: number) => number;
70
+ in: (f: (t: number) => number) => (t: number) => number;
71
+ out: (f: (t: number) => number) => (t: number) => number;
72
+ inOut: (f: (t: number) => number) => (t: number) => number;
73
+ bezier(x1: number, y1: number, x2: number, y2: number): (x: number) => number;
74
+ };
75
+ /** A number from 0 up to 1 that is the same for the same seed on every render (Math.random is not). */
76
+ export declare function random(seed: string | number): number;
@@ -0,0 +1,35 @@
1
+ import { type Browser } from 'playwright';
2
+ import type { Composition } from '../../schema/src/index.js';
3
+ import { type FrameReport } from '../../graphics/src/index.js';
4
+ export type Renderer = {
5
+ concurrency: number;
6
+ renderFrame(frame: number): Promise<Buffer>;
7
+ inspectFrame(frame: number): Promise<FrameReport>;
8
+ contactSheet(frames: number[], options?: {
9
+ columns?: number;
10
+ width?: number;
11
+ }): Promise<Buffer>;
12
+ captureFrame(frame: number, output: string): Promise<void>;
13
+ close(): Promise<void>;
14
+ };
15
+ /** `allowCode` lets code layers run: they execute JavaScript from the composition, so only set it for compositions you trust. */
16
+ export type RendererOptions = {
17
+ baseDir?: string;
18
+ concurrency?: number;
19
+ scale?: number;
20
+ motionBlur?: boolean;
21
+ frameTimeoutMs?: number;
22
+ allowCode?: boolean;
23
+ };
24
+ export declare const scaledSize: (composition: Composition, scale?: number) => {
25
+ width: number;
26
+ height: number;
27
+ };
28
+ export declare const browserInstallHint = "Install one with \"ove browser install\" (Playwright's Chromium, about 150 MB), install Google Chrome, or set OVE_CHROMIUM_EXECUTABLE to a Chromium-based browser.";
29
+ export declare function launchBrowser(): Promise<Browser>;
30
+ export declare function describeBrowser(): Promise<string>;
31
+ export declare const defaultConcurrency: () => number;
32
+ export declare function createRenderer(composition: Composition, options?: RendererOptions): Promise<Renderer>;
33
+ export declare function renderFrames(renderer: Pick<Renderer, 'renderFrame' | 'concurrency'>, from: number, to: number, options?: {
34
+ lookahead?: number;
35
+ }): AsyncGenerator<Buffer>;
@@ -0,0 +1,7 @@
1
+ export type PagePool<P> = {
2
+ run<T>(label: string, work: (page: P) => Promise<T>): Promise<T>;
3
+ close(): Promise<void>;
4
+ };
5
+ export declare const defaultFrameTimeoutMs = 120000;
6
+ export declare const isDrawingError: (error: unknown) => boolean;
7
+ export declare function createPagePool<P>(open: () => Promise<P>, discard: (page: P) => Promise<void>, size: number, timeoutMs?: number): Promise<PagePool<P>>;
@@ -0,0 +1,9 @@
1
+ import type { Composition } from '../../schema/src/index.js';
2
+ export type VideoFrames = {
3
+ dir: string;
4
+ count: number;
5
+ first: number;
6
+ };
7
+ export declare const videoFrameFile: (video: VideoFrames, index: number) => string;
8
+ export declare const videoCacheRoot: () => string;
9
+ export declare function prepareVideos(composition: Composition, baseDir: string): Promise<Map<string, VideoFrames>>;
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod';
2
+ export declare const captionWordSchema: z.ZodObject<{
3
+ text: z.ZodString;
4
+ start: z.ZodNumber;
5
+ end: z.ZodNumber;
6
+ }, z.core.$strip>;
7
+ export declare const captionCueSchema: z.ZodObject<{
8
+ text: z.ZodString;
9
+ start: z.ZodNumber;
10
+ end: z.ZodNumber;
11
+ words: z.ZodOptional<z.ZodArray<z.ZodObject<{
12
+ text: z.ZodString;
13
+ start: z.ZodNumber;
14
+ end: z.ZodNumber;
15
+ }, z.core.$strip>>>;
16
+ }, z.core.$strip>;
17
+ export type CaptionWord = z.infer<typeof captionWordSchema>;
18
+ export type CaptionCue = z.infer<typeof captionCueSchema>;
19
+ export declare function groupCaptionWords(words: CaptionWord[], maxWords?: number): CaptionCue[];
20
+ export declare function parseCaptions(text: string, name?: string, maxWords?: number): CaptionCue[];
21
+ export declare function formatCaptions(cues: CaptionCue[], format: 'srt' | 'vtt'): string;
22
+ export declare const captionKey: (word: string) => string;
23
+ export declare function dropFillerWords(cues: CaptionCue[]): CaptionCue[];
24
+ export declare const captionLines: (cues: CaptionCue[], maxWords: number) => CaptionCue[];
@@ -0,0 +1 @@
1
+ export declare function evaluateExpression(source: string, scope: Record<string, unknown>): unknown;