UNPKG

@remotion/studio

Version:

APIs for interacting with the Remotion Studio

70 lines (69 loc) 2.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getAssetMetadata = exports.remotion_outputsBase = void 0; const media_utils_1 = require("@remotion/media-utils"); const remotion_1 = require("remotion"); const Preview_1 = require("../components/Preview"); exports.remotion_outputsBase = window.remotion_staticBase.replace('static', 'outputs'); const getSrcFromCanvasContent = (canvasContent) => { if (canvasContent.type === 'asset') { return (0, remotion_1.staticFile)(canvasContent.asset); } if (canvasContent.type === 'composition') { throw new Error('cannot get dimensions for composition'); } return exports.remotion_outputsBase + canvasContent.path; }; const getAssetMetadata = async (canvasContent, addTime) => { const src = getSrcFromCanvasContent(canvasContent); const file = await fetch(src, { method: 'HEAD', }); if (file.status === 404) { return { type: 'not-found' }; } if (file.status !== 200) { throw new Error(`Expected status code 200 or 404 for file, got ${file.status}`); } const size = file.headers.get('content-length'); if (!size) { throw new Error('Unexpected error: content-length is null'); } const fetchedAt = Date.now(); const srcWithTime = addTime ? `${src}?date=${fetchedAt}` : src; const fileType = (0, Preview_1.getPreviewFileType)(src); if (fileType === 'video') { const resolution = await (0, media_utils_1.getVideoMetadata)(srcWithTime); return { type: 'found', size: Number(size), dimensions: { width: resolution.width, height: resolution.height }, fetchedAt, }; } if (fileType === 'image') { const resolution = await new Promise((resolve, reject) => { const img = new Image(); img.onload = () => { resolve({ type: 'found', size: Number(size), dimensions: { width: img.width, height: img.height }, fetchedAt, }); }; img.onerror = () => { reject(new Error('Failed to load image')); }; img.src = srcWithTime; }); return resolution; } return { type: 'found', dimensions: 'none', size: Number(size), fetchedAt, }; }; exports.getAssetMetadata = getAssetMetadata;