@revideo/renderer 0.2.13 → 0.2.14-alpha.932

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.
@@ -14,6 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./main"), exports);
18
- __exportStar(require("./plugin"), exports);
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zZXJ2ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUF1QjtBQUN2QiwyQ0FBeUIifQ==
17
+ __exportStar(require("./renderVideo"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zZXJ2ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUE4QiJ9
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@revideo/renderer",
3
- "version": "0.2.13",
3
+ "version": "0.2.14-alpha.932+1069378",
4
4
  "description": "A headless renderer for revideo",
5
- "main": "dist/index.js",
5
+ "main": "lib/server/index.js",
6
6
  "author": "revideo",
7
7
  "homepage": "https://re.video/",
8
8
  "bugs": "https://github.com/havenhq/revideo/issues",
9
9
  "license": "MIT",
10
10
  "scripts": {
11
11
  "build": "npm run client:build && npm run server:build",
12
- "postbuild": "ncp renderer.html dist/renderer.html",
12
+ "postbuild": "ncp renderer.html lib/renderer.html",
13
13
  "client:build": "tsc --project client/tsconfig.json",
14
14
  "client:dev": "tsc -w --project client/tsconfig.json",
15
15
  "server:build": "tsc --project server/tsconfig.json",
@@ -20,12 +20,14 @@
20
20
  "types"
21
21
  ],
22
22
  "dependencies": {
23
+ "@ffmpeg-installer/ffmpeg": "^1.1.0",
24
+ "@ffprobe-installer/ffprobe": "^2.0.0",
23
25
  "puppeteer": "^22.6.0",
24
26
  "readline": "^1.3.0"
25
27
  },
26
28
  "devDependencies": {
27
- "@revideo/core": "0.2.13",
29
+ "@revideo/core": "^0.2.14-alpha.932+1069378",
28
30
  "ncp": "^2.0.0"
29
31
  },
30
- "gitHead": "26b0e890c4f8128028252cd3df1e45f9f209a7b7"
32
+ "gitHead": "106937854d3392d31ee0634260cbc6fbd09b2f56"
31
33
  }
@@ -1,13 +0,0 @@
1
- import type { Project } from '@revideo/core';
2
- declare global {
3
- interface Window {
4
- onRenderComplete: () => void;
5
- onRenderFailed: (msg: string) => void;
6
- }
7
- }
8
- /**
9
- * Render the project.
10
- * @param project - The project to render.
11
- * @param range - The range of frames to render.
12
- */
13
- export declare const render: (project: Project, workerId: number, totalNumOfWorkers: number, startInSeconds: number, endInSeconds: number) => Promise<void>;
@@ -1,53 +0,0 @@
1
- import { Renderer } from '@revideo/core';
2
- /**
3
- * Render the project.
4
- * @param project - The project to render.
5
- * @param range - The range of frames to render.
6
- */
7
- export const render = async (project, workerId, totalNumOfWorkers, startInSeconds, endInSeconds) => {
8
- try {
9
- const renderer = new Renderer(project);
10
- const { firstGlobalFrame, lastGlobalFrame } = await getGlobalFirstAndLastFrame(project, renderer, startInSeconds, endInSeconds);
11
- const { firstWorkerFrame, lastWorkerFrame } = await getWorkerFirstAndLastFrame(firstGlobalFrame, lastGlobalFrame, workerId, totalNumOfWorkers);
12
- await renderer.render({
13
- ...project.meta.getFullRenderingSettings(),
14
- name: project.name,
15
- range: [
16
- renderer.frameToTime(firstWorkerFrame),
17
- renderer.frameToTime(lastWorkerFrame),
18
- ],
19
- });
20
- window.onRenderComplete();
21
- }
22
- catch (e) {
23
- window.onRenderFailed(e.message);
24
- }
25
- };
26
- /**
27
- * Calculate the first and last "global" frame, i.e. frame independent of worker
28
- */
29
- async function getGlobalFirstAndLastFrame(project, renderer, startSecondFromUser, endSecondFromUser) {
30
- const firstGlobalFrame = renderer.timeToFrame(startSecondFromUser);
31
- let lastGlobalFrame;
32
- // If end value is provided by user, lastFrame can be obtained.
33
- if (isFinite(endSecondFromUser)) {
34
- lastGlobalFrame = renderer.timeToFrame(endSecondFromUser);
35
- }
36
- else {
37
- // Otherwise, endSecondFromUser is infinity, so lastGlobalFrame is the duration of the video.
38
- const settings = {
39
- ...project.meta.getFullRenderingSettings(),
40
- name: project.name,
41
- };
42
- lastGlobalFrame = await renderer.getNumberOfFrames(settings);
43
- }
44
- return { firstGlobalFrame, lastGlobalFrame };
45
- }
46
- async function getWorkerFirstAndLastFrame(firstGlobalFrame, lastGlobalFrame, workerId, totalNumOfWorkers) {
47
- const videoDurationInFrames = lastGlobalFrame - firstGlobalFrame + 1;
48
- const framesPerWorker = Math.ceil(videoDurationInFrames / totalNumOfWorkers);
49
- const firstWorkerFrame = firstGlobalFrame + framesPerWorker * workerId;
50
- const lastWorkerFrame = Math.min(firstWorkerFrame + framesPerWorker, lastGlobalFrame);
51
- return { firstWorkerFrame, lastWorkerFrame };
52
- }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vY2xpZW50L3JlbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBU3ZDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUN6QixPQUFnQixFQUNoQixRQUFnQixFQUNoQixpQkFBeUIsRUFDekIsY0FBc0IsRUFDdEIsWUFBb0IsRUFDcEIsRUFBRTtJQUNGLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZDLE1BQU0sRUFBQyxnQkFBZ0IsRUFBRSxlQUFlLEVBQUMsR0FDdkMsTUFBTSwwQkFBMEIsQ0FDOUIsT0FBTyxFQUNQLFFBQVEsRUFDUixjQUFjLEVBQ2QsWUFBWSxDQUNiLENBQUM7UUFDSixNQUFNLEVBQUMsZ0JBQWdCLEVBQUUsZUFBZSxFQUFDLEdBQ3ZDLE1BQU0sMEJBQTBCLENBQzlCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsUUFBUSxFQUNSLGlCQUFpQixDQUNsQixDQUFDO1FBRUosTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3BCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUMxQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsS0FBSyxFQUFFO2dCQUNMLFFBQVEsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3RDLFFBQVEsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO2FBQ3RDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsS0FBSyxVQUFVLDBCQUEwQixDQUN2QyxPQUFnQixFQUNoQixRQUFrQixFQUNsQixtQkFBMkIsRUFDM0IsaUJBQXlCO0lBRXpCLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25FLElBQUksZUFBdUIsQ0FBQztJQUU1QiwrREFBK0Q7SUFDL0QsSUFBSSxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1FBQ2hDLGVBQWUsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDNUQsQ0FBQztTQUFNLENBQUM7UUFDTiw2RkFBNkY7UUFDN0YsTUFBTSxRQUFRLEdBQUc7WUFDZixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDMUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1NBQ25CLENBQUM7UUFDRixlQUFlLEdBQUcsTUFBTSxRQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxlQUFlLEVBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsS0FBSyxVQUFVLDBCQUEwQixDQUN2QyxnQkFBd0IsRUFDeEIsZUFBdUIsRUFDdkIsUUFBZ0IsRUFDaEIsaUJBQXlCO0lBRXpCLE1BQU0scUJBQXFCLEdBQUcsZUFBZSxHQUFHLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUNyRSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDLENBQUM7SUFFN0UsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsR0FBRyxlQUFlLEdBQUcsUUFBUSxDQUFDO0lBQ3ZFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQzlCLGdCQUFnQixHQUFHLGVBQWUsRUFDbEMsZUFBZSxDQUNoQixDQUFDO0lBRUYsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGVBQWUsRUFBQyxDQUFDO0FBQzdDLENBQUMifQ==
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export * from './main';
2
- export * from './plugin';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC"}
package/dist/main.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import { BrowserLaunchArgumentOptions } from 'puppeteer';
2
- interface RenderVideoSettings {
3
- name?: string;
4
- range?: [number, number];
5
- puppeteer?: BrowserLaunchArgumentOptions;
6
- }
7
- export declare const renderVideo: (configFile: string, params?: Record<string, unknown>, settings?: RenderVideoSettings) => Promise<void[]>;
8
- export {};
9
- //# sourceMappingURL=main.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../server/main.ts"],"names":[],"mappings":"AACA,OAAkB,EAAC,4BAA4B,EAAC,MAAM,WAAW,CAAC;AAkFlE,UAAU,mBAAmB;IAE3B,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzB,SAAS,CAAC,EAAE,4BAA4B,CAAC;CAC1C;AAED,eAAO,MAAM,WAAW,eACV,MAAM,WACT,OAAO,MAAM,EAAE,OAAO,CAAC,aACtB,mBAAmB,oBAiC9B,CAAC"}
package/dist/main.js DELETED
@@ -1,78 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.renderVideo = void 0;
4
- const path = require("path");
5
- const puppeteer_1 = require("puppeteer");
6
- const readline = require("readline");
7
- const vite_1 = require("vite");
8
- const plugin_1 = require("./plugin");
9
- function buildUrl(port, fileName, workerId, totalNumOfWorkers, range = [0, Infinity]) {
10
- return `http://localhost:${port}/render?fileName=${fileName}&workerId=${workerId}&totalNumOfWorkers=${totalNumOfWorkers}&startInSeconds=${range[0]}&endInSeconds=${range[1]}`;
11
- }
12
- async function renderWorker(fixedPort, resolvedConfigPath, url, params, puppeteerOptions) {
13
- const [browser, server] = await Promise.all([
14
- puppeteer_1.default.launch({ headless: true, ...puppeteerOptions }),
15
- (0, vite_1.createServer)({
16
- configFile: resolvedConfigPath,
17
- server: {
18
- port: fixedPort,
19
- },
20
- plugins: [(0, plugin_1.rendererPlugin)(params)],
21
- }).then(server => server.listen()),
22
- ]);
23
- const page = await browser.newPage();
24
- if (!server.httpServer) {
25
- throw new Error('HTTP server is not initialized');
26
- }
27
- const address = server.httpServer.address();
28
- const port = address && typeof address === 'object' ? address.port : null;
29
- if (port === null) {
30
- throw new Error('Server address is null');
31
- }
32
- // Attach logs from puppeteer to the console
33
- page.on('console', msg => {
34
- for (let i = 0; i < msg.args().length; ++i) {
35
- console.log(`${port}: ${msg.args()[i]}`);
36
- }
37
- });
38
- page.exposeFunction('logProgress', (progress) => {
39
- const percentage = Math.floor(progress * 100);
40
- const barLength = 20;
41
- const filledLength = Math.floor((percentage / 100) * barLength);
42
- const bar = '█'.repeat(filledLength) + '-'.repeat(barLength - filledLength);
43
- const consoleLine = process.stdout.rows + port - 9000;
44
- readline.cursorTo(process.stdout, 0, consoleLine);
45
- readline.clearLine(process.stdout, 0);
46
- process.stdout.write(`Progress for worker on port ${port}: [${bar}] ${percentage}%`);
47
- });
48
- const renderingComplete = new Promise((resolve, reject) => {
49
- page.exposeFunction('onRenderComplete', async () => {
50
- await Promise.all([browser.close(), server.close()]);
51
- resolve();
52
- });
53
- page.exposeFunction('onRenderFailed', async (errorMessage) => {
54
- await Promise.all([browser.close(), server.close()]);
55
- console.error('Rendering failed:', errorMessage);
56
- reject(new Error(errorMessage));
57
- });
58
- });
59
- await page.goto(url);
60
- return renderingComplete;
61
- }
62
- const renderVideo = async (configFile, params, settings = {}) => {
63
- console.log('Rendering...');
64
- const resolvedConfigPath = path.resolve(process.cwd(), configFile);
65
- /**
66
- * TODO: Change this in the future after more testing.
67
- * We still need to concate the videos together after rendering.
68
- */
69
- const numOfWorkers = 1;
70
- const promises = [];
71
- for (let i = 0; i < numOfWorkers; i++) {
72
- const url = buildUrl(9000 + i, settings.name ?? 'project', i, numOfWorkers, settings.range);
73
- promises.push(renderWorker(9000 + i, resolvedConfigPath, url, params, settings.puppeteer));
74
- }
75
- return Promise.all(promises);
76
- };
77
- exports.renderVideo = renderVideo;
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NlcnZlci9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUM3Qix5Q0FBa0U7QUFDbEUscUNBQXFDO0FBQ3JDLCtCQUFrQztBQUNsQyxxQ0FBd0M7QUFFeEMsU0FBUyxRQUFRLENBQ2YsSUFBWSxFQUNaLFFBQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLGlCQUF5QixFQUN6QixRQUEwQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUM7SUFFdkMsT0FBTyxvQkFBb0IsSUFBSSxvQkFBb0IsUUFBUSxhQUFhLFFBQVEsc0JBQXNCLGlCQUFpQixtQkFBbUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDaEwsQ0FBQztBQUVELEtBQUssVUFBVSxZQUFZLENBQ3pCLFNBQWlCLEVBQ2pCLGtCQUEwQixFQUMxQixHQUFXLEVBQ1gsTUFBZ0MsRUFDaEMsZ0JBQStDO0lBRS9DLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQzFDLG1CQUFTLENBQUMsTUFBTSxDQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLGdCQUFnQixFQUFDLENBQUM7UUFDdkQsSUFBQSxtQkFBWSxFQUFDO1lBQ1gsVUFBVSxFQUFFLGtCQUFrQjtZQUM5QixNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLFNBQVM7YUFDaEI7WUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFBLHVCQUFjLEVBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUNuQyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNy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
package/dist/plugin.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import { Plugin } from 'vite';
2
- export declare function rendererPlugin(params?: Record<string, unknown>): Plugin;
3
- //# sourceMappingURL=plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../server/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAC,MAAM,MAAM,CAAC;AAU5B,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAqCvE"}
package/dist/plugin.js DELETED
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rendererPlugin = void 0;
4
- const fs = require("fs");
5
- const path = require("path");
6
- const RendererPath = path.resolve(__dirname, 'renderer.html');
7
- const Content = fs.readFileSync(RendererPath, 'utf-8');
8
- const HtmlParts = Content.toString().split('{{source}}');
9
- function createHtml(src) {
10
- return HtmlParts[0] + src + HtmlParts[1];
11
- }
12
- function rendererPlugin(params) {
13
- return {
14
- name: 'revideo-renderer-plugin',
15
- async load(id) {
16
- if (id.startsWith('\x00virtual:renderer')) {
17
- return `\
18
- import {render} from '@revideo/renderer/dist/client/render';
19
- import project from './src/project.ts?project';
20
-
21
- // Read video variables
22
- project.variables = ${params ? `JSON.parse(\`${JSON.stringify(params)}\`)` : 'project.variables'};
23
-
24
- // Check range of frames to render
25
- const url = new URL(window.location.href);
26
-
27
- const fileName = url.searchParams.get('fileName');
28
- const workerId = url.searchParams.get('workerId');
29
- const totalNumOfWorkers = url.searchParams.get('totalNumOfWorkers');
30
- const startInSeconds = parseFloat(url.searchParams.get('startInSeconds'));
31
- const endInSeconds = parseFloat(url.searchParams.get('endInSeconds'));
32
-
33
- // Overwrite project name so that the rendered videos don't overwrite each other
34
- project.name = fileName;
35
-
36
- render(project, workerId, totalNumOfWorkers, startInSeconds, endInSeconds);
37
- `;
38
- }
39
- },
40
- configureServer(server) {
41
- server.middlewares.use('/render', (_req, res) => {
42
- res.setHeader('Content-Type', 'text/html');
43
- res.end(createHtml(`/@id/__x00__virtual:renderer`));
44
- });
45
- },
46
- };
47
- }
48
- exports.rendererPlugin = rendererPlugin;
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc2VydmVyL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBRzdCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzlELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFekQsU0FBUyxVQUFVLENBQUMsR0FBVztJQUM3QixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxTQUFnQixjQUFjLENBQUMsTUFBZ0M7SUFDN0QsT0FBTztRQUNMLElBQUksRUFBRSx5QkFBeUI7UUFFL0IsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1gsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztnQkFDMUMsT0FBTzs7Ozs7a0NBS21CLE1BQU0sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1COzs7Ozs7Ozs7Ozs7Ozs7YUFlL0YsQ0FBQztZQUNSLENBQUM7UUFDSCxDQUFDO1FBRUQsZUFBZSxDQUFDLE1BQU07WUFDcEIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUM5QyxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDM0MsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDO1lBQ3RELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBckNELHdDQXFDQyJ9
@@ -1,12 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Motion Canvas Renderer</title>
7
- </head>
8
- <body>
9
- <h1>RENDERING!</h1>
10
- <script type="module" src="{{source}}"></script>
11
- </body>
12
- </html>