@remotion/renderer 4.0.418 → 4.0.419
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,7 +14,8 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import type { DownloadBrowserProgressFn } from '../options/on-browser-download';
|
|
17
|
-
|
|
17
|
+
import { TESTED_VERSION } from './get-chrome-download-url';
|
|
18
|
+
export { TESTED_VERSION };
|
|
18
19
|
interface BrowserFetcherRevisionInfo {
|
|
19
20
|
folderPath: string;
|
|
20
21
|
executablePath: string;
|
|
@@ -30,4 +31,3 @@ export declare const downloadBrowser: ({ logLevel, indent, onProgress, version,
|
|
|
30
31
|
chromeMode: "chrome-for-testing" | "headless-shell";
|
|
31
32
|
}) => Promise<BrowserFetcherRevisionInfo | undefined>;
|
|
32
33
|
export declare const getRevisionInfo: (chromeMode: "chrome-for-testing" | "headless-shell") => BrowserFetcherRevisionInfo;
|
|
33
|
-
export {};
|
|
@@ -59,29 +59,9 @@ const extract_zip_1 = __importDefault(require("extract-zip"));
|
|
|
59
59
|
const node_util_1 = require("node:util");
|
|
60
60
|
const download_file_1 = require("../assets/download-file");
|
|
61
61
|
const make_file_executable_1 = require("../compositor/make-file-executable");
|
|
62
|
+
const get_chrome_download_url_1 = require("./get-chrome-download-url");
|
|
63
|
+
Object.defineProperty(exports, "TESTED_VERSION", { enumerable: true, get: function () { return get_chrome_download_url_1.TESTED_VERSION; } });
|
|
62
64
|
const get_download_destination_1 = require("./get-download-destination");
|
|
63
|
-
exports.TESTED_VERSION = '144.0.7559.20';
|
|
64
|
-
// https://github.com/microsoft/playwright/blame/e76ca6cba40c26bf22c19cf37398d2b9da9ed465/packages/playwright-core/browsers.json
|
|
65
|
-
// packages/playwright-core/browsers.json
|
|
66
|
-
const PLAYWRIGHT_VERSION = '1207'; // 144.0.7559.20
|
|
67
|
-
function getChromeDownloadUrl({ platform, version, chromeMode, }) {
|
|
68
|
-
if (platform === 'linux-arm64') {
|
|
69
|
-
if (chromeMode === 'chrome-for-testing') {
|
|
70
|
-
return `https://playwright.azureedge.net/builds/chromium/${version !== null && version !== void 0 ? version : PLAYWRIGHT_VERSION}/chromium-linux-arm64.zip`;
|
|
71
|
-
}
|
|
72
|
-
if (version) {
|
|
73
|
-
return `https://playwright.azureedge.net/builds/chromium/${version !== null && version !== void 0 ? version : PLAYWRIGHT_VERSION}/chromium-headless-shell-linux-arm64.zip`;
|
|
74
|
-
}
|
|
75
|
-
return `https://remotion.media/chromium-headless-shell-linux-arm64-${exports.TESTED_VERSION}.zip?clearcache`;
|
|
76
|
-
}
|
|
77
|
-
if (chromeMode === 'headless-shell') {
|
|
78
|
-
if (platform === 'linux64' && version === null) {
|
|
79
|
-
return `https://remotion.media/chromium-headless-shell-linux-x64-${exports.TESTED_VERSION}.zip?clearcache`;
|
|
80
|
-
}
|
|
81
|
-
return `https://storage.googleapis.com/chrome-for-testing-public/${version !== null && version !== void 0 ? version : exports.TESTED_VERSION}/${platform}/chrome-headless-shell-${platform}.zip`;
|
|
82
|
-
}
|
|
83
|
-
return `https://storage.googleapis.com/chrome-for-testing-public/${version !== null && version !== void 0 ? version : exports.TESTED_VERSION}/${platform}/chrome-${platform}.zip`;
|
|
84
|
-
}
|
|
85
65
|
const mkdirAsync = fs.promises.mkdir;
|
|
86
66
|
const unlinkAsync = (0, node_util_1.promisify)(fs.unlink.bind(fs));
|
|
87
67
|
function existsAsync(filePath) {
|
|
@@ -118,7 +98,7 @@ const getExpectedVersion = (version, _chromeMode) => {
|
|
|
118
98
|
if (version) {
|
|
119
99
|
return version;
|
|
120
100
|
}
|
|
121
|
-
return
|
|
101
|
+
return get_chrome_download_url_1.TESTED_VERSION;
|
|
122
102
|
};
|
|
123
103
|
const readVersionFile = (chromeMode) => {
|
|
124
104
|
const versionFilePath = getVersionFilePath(chromeMode);
|
|
@@ -136,7 +116,7 @@ const writeVersionFile = (chromeMode, version) => {
|
|
|
136
116
|
};
|
|
137
117
|
const downloadBrowser = async ({ logLevel, indent, onProgress, version, chromeMode, }) => {
|
|
138
118
|
const platform = getPlatform();
|
|
139
|
-
const downloadURL = getChromeDownloadUrl({ platform, version, chromeMode });
|
|
119
|
+
const downloadURL = (0, get_chrome_download_url_1.getChromeDownloadUrl)({ platform, version, chromeMode });
|
|
140
120
|
const fileName = downloadURL.split('/').pop();
|
|
141
121
|
if (!fileName) {
|
|
142
122
|
throw new Error(`A malformed download URL was found: ${downloadURL}.`);
|
|
@@ -165,6 +145,7 @@ const downloadBrowser = async ({ logLevel, indent, onProgress, version, chromeMo
|
|
|
165
145
|
'Chrome Headless Shell is not available for Windows for arm64 architecture.',
|
|
166
146
|
].join('\n'));
|
|
167
147
|
}
|
|
148
|
+
(0, get_chrome_download_url_1.logDownloadUrl)({ url: downloadURL, logLevel, indent });
|
|
168
149
|
try {
|
|
169
150
|
await (0, download_file_1.downloadFile)({
|
|
170
151
|
url: downloadURL,
|
|
@@ -242,7 +223,7 @@ const getRevisionInfo = (chromeMode) => {
|
|
|
242
223
|
const downloadsFolder = getDownloadsFolder(chromeMode);
|
|
243
224
|
const platform = getPlatform();
|
|
244
225
|
const folderPath = getFolderPath(downloadsFolder, platform);
|
|
245
|
-
const url = getChromeDownloadUrl({ platform, version: null, chromeMode });
|
|
226
|
+
const url = (0, get_chrome_download_url_1.getChromeDownloadUrl)({ platform, version: null, chromeMode });
|
|
246
227
|
const local = fs.existsSync(folderPath);
|
|
247
228
|
return {
|
|
248
229
|
executablePath,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ChromeMode } from '../options/chrome-mode';
|
|
2
|
+
export declare const TESTED_VERSION = "144.0.7559.20";
|
|
3
|
+
export type Platform = 'linux64' | 'linux-arm64' | 'mac-x64' | 'mac-arm64' | 'win64';
|
|
4
|
+
export declare const canUseRemotionMediaBinaries: () => boolean;
|
|
5
|
+
export declare function getChromeDownloadUrl({ platform, version, chromeMode }: {
|
|
6
|
+
platform: Platform;
|
|
7
|
+
version: string | null;
|
|
8
|
+
chromeMode: ChromeMode;
|
|
9
|
+
}): string;
|
|
10
|
+
export declare const logDownloadUrl: ({ url, logLevel, indent, }: {
|
|
11
|
+
url: string;
|
|
12
|
+
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
13
|
+
indent: boolean;
|
|
14
|
+
}) => void;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.logDownloadUrl = exports.canUseRemotionMediaBinaries = exports.TESTED_VERSION = void 0;
|
|
37
|
+
exports.getChromeDownloadUrl = getChromeDownloadUrl;
|
|
38
|
+
const fs = __importStar(require("node:fs"));
|
|
39
|
+
const os = __importStar(require("node:os"));
|
|
40
|
+
const logger_1 = require("../logger");
|
|
41
|
+
exports.TESTED_VERSION = '144.0.7559.20';
|
|
42
|
+
// https://github.com/microsoft/playwright/blame/e76ca6cba40c26bf22c19cf37398d2b9da9ed465/packages/playwright-core/browsers.json
|
|
43
|
+
// packages/playwright-core/browsers.json
|
|
44
|
+
const PLAYWRIGHT_VERSION = '1207'; // 144.0.7559.20
|
|
45
|
+
const isAmazonLinux2023 = () => {
|
|
46
|
+
if (os.platform() !== 'linux') {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const osRelease = fs.readFileSync('/etc/os-release', 'utf-8');
|
|
51
|
+
return (osRelease.includes('Amazon Linux') && osRelease.includes('VERSION="2023"'));
|
|
52
|
+
}
|
|
53
|
+
catch (_a) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
// remotion.media binaries are built on Ubuntu 24.04 which requires glibc 2.35+
|
|
58
|
+
const MINIMUM_GLIBC_FOR_REMOTION_MEDIA = [2, 35];
|
|
59
|
+
const getGlibcVersion = () => {
|
|
60
|
+
if (process.platform !== 'linux') {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const { report } = process;
|
|
64
|
+
if (!report) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const rep = report.getReport();
|
|
68
|
+
if (typeof rep === 'string') {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
// @ts-expect-error no types
|
|
72
|
+
const { glibcVersionRuntime } = rep.header;
|
|
73
|
+
if (!glibcVersionRuntime) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const split = glibcVersionRuntime.split('.');
|
|
77
|
+
if (split.length !== 2) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
return [Number(split[0]), Number(split[1])];
|
|
81
|
+
};
|
|
82
|
+
const isGlibcVersionAtLeast = (required) => {
|
|
83
|
+
const version = getGlibcVersion();
|
|
84
|
+
if (version === null) {
|
|
85
|
+
// If we can't detect, assume it's not compatible to be safe
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
const [major, minor] = version;
|
|
89
|
+
const [reqMajor, reqMinor] = required;
|
|
90
|
+
if (major > reqMajor) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
if (major === reqMajor && minor >= reqMinor) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
};
|
|
98
|
+
const canUseRemotionMediaBinaries = () => {
|
|
99
|
+
if (process.platform !== 'linux') {
|
|
100
|
+
// remotion.media binaries are only for Linux
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
return isGlibcVersionAtLeast(MINIMUM_GLIBC_FOR_REMOTION_MEDIA);
|
|
104
|
+
};
|
|
105
|
+
exports.canUseRemotionMediaBinaries = canUseRemotionMediaBinaries;
|
|
106
|
+
function getChromeDownloadUrl({ platform, version, chromeMode, }) {
|
|
107
|
+
if (platform === 'linux-arm64') {
|
|
108
|
+
// Amazon Linux 2023 on arm64 needs a special build.
|
|
109
|
+
// This binary is compatible with older glibc (no 2.35 requirement).
|
|
110
|
+
if (isAmazonLinux2023() && chromeMode === 'headless-shell' && !version) {
|
|
111
|
+
return 'https://remotion.media/chromium-headless-shell-amazon-linux-arm64-144.0.7559.20.zip';
|
|
112
|
+
}
|
|
113
|
+
if (chromeMode === 'chrome-for-testing') {
|
|
114
|
+
return `https://playwright.azureedge.net/builds/chromium/${version !== null && version !== void 0 ? version : PLAYWRIGHT_VERSION}/chromium-linux-arm64.zip`;
|
|
115
|
+
}
|
|
116
|
+
if (version) {
|
|
117
|
+
return `https://playwright.azureedge.net/builds/chromium/${version}/chromium-headless-shell-linux-arm64.zip`;
|
|
118
|
+
}
|
|
119
|
+
// Regular arm64 binary requires glibc 2.35+
|
|
120
|
+
if ((0, exports.canUseRemotionMediaBinaries)()) {
|
|
121
|
+
return `https://remotion.media/chromium-headless-shell-linux-arm64-${exports.TESTED_VERSION}.zip?clearcache`;
|
|
122
|
+
}
|
|
123
|
+
// Fall back to Playwright for older glibc (non-Amazon Linux systems)
|
|
124
|
+
return `https://playwright.azureedge.net/builds/chromium/${PLAYWRIGHT_VERSION}/chromium-headless-shell-linux-arm64.zip`;
|
|
125
|
+
}
|
|
126
|
+
if (chromeMode === 'headless-shell') {
|
|
127
|
+
if (platform === 'linux64' && version === null) {
|
|
128
|
+
if ((0, exports.canUseRemotionMediaBinaries)()) {
|
|
129
|
+
return `https://remotion.media/chromium-headless-shell-linux-x64-${exports.TESTED_VERSION}.zip?clearcache`;
|
|
130
|
+
}
|
|
131
|
+
// Fall back to Google's CDN for older glibc
|
|
132
|
+
return `https://storage.googleapis.com/chrome-for-testing-public/${exports.TESTED_VERSION}/${platform}/chrome-headless-shell-${platform}.zip`;
|
|
133
|
+
}
|
|
134
|
+
return `https://storage.googleapis.com/chrome-for-testing-public/${version !== null && version !== void 0 ? version : exports.TESTED_VERSION}/${platform}/chrome-headless-shell-${platform}.zip`;
|
|
135
|
+
}
|
|
136
|
+
return `https://storage.googleapis.com/chrome-for-testing-public/${version !== null && version !== void 0 ? version : exports.TESTED_VERSION}/${platform}/chrome-${platform}.zip`;
|
|
137
|
+
}
|
|
138
|
+
const logDownloadUrl = ({ url, logLevel, indent, }) => {
|
|
139
|
+
logger_1.Log.info({ indent, logLevel }, `Downloading from: ${url}`);
|
|
140
|
+
};
|
|
141
|
+
exports.logDownloadUrl = logDownloadUrl;
|
package/dist/esm/index.mjs
CHANGED
|
@@ -4711,8 +4711,8 @@ var defaultOnLog = ({ logLevel, tag, previewString }) => {
|
|
|
4711
4711
|
};
|
|
4712
4712
|
|
|
4713
4713
|
// src/open-browser.ts
|
|
4714
|
-
import
|
|
4715
|
-
import
|
|
4714
|
+
import fs10 from "node:fs";
|
|
4715
|
+
import os4 from "node:os";
|
|
4716
4716
|
import path9 from "node:path";
|
|
4717
4717
|
|
|
4718
4718
|
// src/browser/Launcher.ts
|
|
@@ -4746,24 +4746,123 @@ var launchChrome = async ({
|
|
|
4746
4746
|
};
|
|
4747
4747
|
|
|
4748
4748
|
// src/ensure-browser.ts
|
|
4749
|
-
import
|
|
4749
|
+
import fs8 from "fs";
|
|
4750
4750
|
|
|
4751
4751
|
// src/browser/BrowserFetcher.ts
|
|
4752
|
-
import * as
|
|
4753
|
-
import * as
|
|
4752
|
+
import * as fs7 from "node:fs";
|
|
4753
|
+
import * as os3 from "node:os";
|
|
4754
4754
|
import * as path8 from "node:path";
|
|
4755
4755
|
import extractZip from "extract-zip";
|
|
4756
4756
|
import { promisify } from "node:util";
|
|
4757
4757
|
|
|
4758
|
+
// src/browser/get-chrome-download-url.ts
|
|
4759
|
+
import * as fs5 from "node:fs";
|
|
4760
|
+
import * as os2 from "node:os";
|
|
4761
|
+
var TESTED_VERSION = "144.0.7559.20";
|
|
4762
|
+
var PLAYWRIGHT_VERSION = "1207";
|
|
4763
|
+
var isAmazonLinux2023 = () => {
|
|
4764
|
+
if (os2.platform() !== "linux") {
|
|
4765
|
+
return false;
|
|
4766
|
+
}
|
|
4767
|
+
try {
|
|
4768
|
+
const osRelease = fs5.readFileSync("/etc/os-release", "utf-8");
|
|
4769
|
+
return osRelease.includes("Amazon Linux") && osRelease.includes('VERSION="2023"');
|
|
4770
|
+
} catch {
|
|
4771
|
+
return false;
|
|
4772
|
+
}
|
|
4773
|
+
};
|
|
4774
|
+
var MINIMUM_GLIBC_FOR_REMOTION_MEDIA = [2, 35];
|
|
4775
|
+
var getGlibcVersion = () => {
|
|
4776
|
+
if (process.platform !== "linux") {
|
|
4777
|
+
return null;
|
|
4778
|
+
}
|
|
4779
|
+
const { report } = process;
|
|
4780
|
+
if (!report) {
|
|
4781
|
+
return null;
|
|
4782
|
+
}
|
|
4783
|
+
const rep = report.getReport();
|
|
4784
|
+
if (typeof rep === "string") {
|
|
4785
|
+
return null;
|
|
4786
|
+
}
|
|
4787
|
+
const { glibcVersionRuntime } = rep.header;
|
|
4788
|
+
if (!glibcVersionRuntime) {
|
|
4789
|
+
return null;
|
|
4790
|
+
}
|
|
4791
|
+
const split = glibcVersionRuntime.split(".");
|
|
4792
|
+
if (split.length !== 2) {
|
|
4793
|
+
return null;
|
|
4794
|
+
}
|
|
4795
|
+
return [Number(split[0]), Number(split[1])];
|
|
4796
|
+
};
|
|
4797
|
+
var isGlibcVersionAtLeast = (required2) => {
|
|
4798
|
+
const version = getGlibcVersion();
|
|
4799
|
+
if (version === null) {
|
|
4800
|
+
return false;
|
|
4801
|
+
}
|
|
4802
|
+
const [major, minor] = version;
|
|
4803
|
+
const [reqMajor, reqMinor] = required2;
|
|
4804
|
+
if (major > reqMajor) {
|
|
4805
|
+
return true;
|
|
4806
|
+
}
|
|
4807
|
+
if (major === reqMajor && minor >= reqMinor) {
|
|
4808
|
+
return true;
|
|
4809
|
+
}
|
|
4810
|
+
return false;
|
|
4811
|
+
};
|
|
4812
|
+
var canUseRemotionMediaBinaries = () => {
|
|
4813
|
+
if (process.platform !== "linux") {
|
|
4814
|
+
return false;
|
|
4815
|
+
}
|
|
4816
|
+
return isGlibcVersionAtLeast(MINIMUM_GLIBC_FOR_REMOTION_MEDIA);
|
|
4817
|
+
};
|
|
4818
|
+
function getChromeDownloadUrl({
|
|
4819
|
+
platform: platform2,
|
|
4820
|
+
version,
|
|
4821
|
+
chromeMode
|
|
4822
|
+
}) {
|
|
4823
|
+
if (platform2 === "linux-arm64") {
|
|
4824
|
+
if (isAmazonLinux2023() && chromeMode === "headless-shell" && !version) {
|
|
4825
|
+
return "https://remotion.media/chromium-headless-shell-amazon-linux-arm64-144.0.7559.20.zip";
|
|
4826
|
+
}
|
|
4827
|
+
if (chromeMode === "chrome-for-testing") {
|
|
4828
|
+
return `https://playwright.azureedge.net/builds/chromium/${version ?? PLAYWRIGHT_VERSION}/chromium-linux-arm64.zip`;
|
|
4829
|
+
}
|
|
4830
|
+
if (version) {
|
|
4831
|
+
return `https://playwright.azureedge.net/builds/chromium/${version}/chromium-headless-shell-linux-arm64.zip`;
|
|
4832
|
+
}
|
|
4833
|
+
if (canUseRemotionMediaBinaries()) {
|
|
4834
|
+
return `https://remotion.media/chromium-headless-shell-linux-arm64-${TESTED_VERSION}.zip?clearcache`;
|
|
4835
|
+
}
|
|
4836
|
+
return `https://playwright.azureedge.net/builds/chromium/${PLAYWRIGHT_VERSION}/chromium-headless-shell-linux-arm64.zip`;
|
|
4837
|
+
}
|
|
4838
|
+
if (chromeMode === "headless-shell") {
|
|
4839
|
+
if (platform2 === "linux64" && version === null) {
|
|
4840
|
+
if (canUseRemotionMediaBinaries()) {
|
|
4841
|
+
return `https://remotion.media/chromium-headless-shell-linux-x64-${TESTED_VERSION}.zip?clearcache`;
|
|
4842
|
+
}
|
|
4843
|
+
return `https://storage.googleapis.com/chrome-for-testing-public/${TESTED_VERSION}/${platform2}/chrome-headless-shell-${platform2}.zip`;
|
|
4844
|
+
}
|
|
4845
|
+
return `https://storage.googleapis.com/chrome-for-testing-public/${version ?? TESTED_VERSION}/${platform2}/chrome-headless-shell-${platform2}.zip`;
|
|
4846
|
+
}
|
|
4847
|
+
return `https://storage.googleapis.com/chrome-for-testing-public/${version ?? TESTED_VERSION}/${platform2}/chrome-${platform2}.zip`;
|
|
4848
|
+
}
|
|
4849
|
+
var logDownloadUrl = ({
|
|
4850
|
+
url,
|
|
4851
|
+
logLevel,
|
|
4852
|
+
indent
|
|
4853
|
+
}) => {
|
|
4854
|
+
Log.info({ indent, logLevel }, `Downloading from: ${url}`);
|
|
4855
|
+
};
|
|
4856
|
+
|
|
4758
4857
|
// src/browser/get-download-destination.ts
|
|
4759
|
-
import
|
|
4858
|
+
import fs6 from "node:fs";
|
|
4760
4859
|
import path7 from "node:path";
|
|
4761
4860
|
var getDownloadsCacheDir = () => {
|
|
4762
4861
|
const cwd = process.cwd();
|
|
4763
4862
|
let dir = cwd;
|
|
4764
4863
|
for (;; ) {
|
|
4765
4864
|
try {
|
|
4766
|
-
if (
|
|
4865
|
+
if (fs6.statSync(path7.join(dir, "package.json")).isFile()) {
|
|
4767
4866
|
break;
|
|
4768
4867
|
}
|
|
4769
4868
|
} catch (e) {}
|
|
@@ -4787,50 +4886,26 @@ var getDownloadsCacheDir = () => {
|
|
|
4787
4886
|
};
|
|
4788
4887
|
|
|
4789
4888
|
// src/browser/BrowserFetcher.ts
|
|
4790
|
-
var
|
|
4791
|
-
var
|
|
4792
|
-
function getChromeDownloadUrl({
|
|
4793
|
-
platform: platform2,
|
|
4794
|
-
version,
|
|
4795
|
-
chromeMode
|
|
4796
|
-
}) {
|
|
4797
|
-
if (platform2 === "linux-arm64") {
|
|
4798
|
-
if (chromeMode === "chrome-for-testing") {
|
|
4799
|
-
return `https://playwright.azureedge.net/builds/chromium/${version ?? PLAYWRIGHT_VERSION}/chromium-linux-arm64.zip`;
|
|
4800
|
-
}
|
|
4801
|
-
if (version) {
|
|
4802
|
-
return `https://playwright.azureedge.net/builds/chromium/${version ?? PLAYWRIGHT_VERSION}/chromium-headless-shell-linux-arm64.zip`;
|
|
4803
|
-
}
|
|
4804
|
-
return `https://remotion.media/chromium-headless-shell-linux-arm64-${TESTED_VERSION}.zip?clearcache`;
|
|
4805
|
-
}
|
|
4806
|
-
if (chromeMode === "headless-shell") {
|
|
4807
|
-
if (platform2 === "linux64" && version === null) {
|
|
4808
|
-
return `https://remotion.media/chromium-headless-shell-linux-x64-${TESTED_VERSION}.zip?clearcache`;
|
|
4809
|
-
}
|
|
4810
|
-
return `https://storage.googleapis.com/chrome-for-testing-public/${version ?? TESTED_VERSION}/${platform2}/chrome-headless-shell-${platform2}.zip`;
|
|
4811
|
-
}
|
|
4812
|
-
return `https://storage.googleapis.com/chrome-for-testing-public/${version ?? TESTED_VERSION}/${platform2}/chrome-${platform2}.zip`;
|
|
4813
|
-
}
|
|
4814
|
-
var mkdirAsync = fs6.promises.mkdir;
|
|
4815
|
-
var unlinkAsync = promisify(fs6.unlink.bind(fs6));
|
|
4889
|
+
var mkdirAsync = fs7.promises.mkdir;
|
|
4890
|
+
var unlinkAsync = promisify(fs7.unlink.bind(fs7));
|
|
4816
4891
|
function existsAsync(filePath) {
|
|
4817
4892
|
return new Promise((resolve2) => {
|
|
4818
|
-
|
|
4893
|
+
fs7.access(filePath, (err) => {
|
|
4819
4894
|
return resolve2(!err);
|
|
4820
4895
|
});
|
|
4821
4896
|
});
|
|
4822
4897
|
}
|
|
4823
4898
|
var getPlatform = () => {
|
|
4824
|
-
const
|
|
4825
|
-
switch (
|
|
4899
|
+
const platform3 = os3.platform();
|
|
4900
|
+
switch (platform3) {
|
|
4826
4901
|
case "darwin":
|
|
4827
|
-
return
|
|
4902
|
+
return os3.arch() === "arm64" ? "mac-arm64" : "mac-x64";
|
|
4828
4903
|
case "linux":
|
|
4829
|
-
return
|
|
4904
|
+
return os3.arch() === "arm64" ? "linux-arm64" : "linux64";
|
|
4830
4905
|
case "win32":
|
|
4831
4906
|
return "win64";
|
|
4832
4907
|
default:
|
|
4833
|
-
throw new Error("Unsupported platform: " +
|
|
4908
|
+
throw new Error("Unsupported platform: " + platform3);
|
|
4834
4909
|
}
|
|
4835
4910
|
};
|
|
4836
4911
|
var getDownloadsFolder = (chromeMode) => {
|
|
@@ -4850,14 +4925,14 @@ var getExpectedVersion = (version, _chromeMode) => {
|
|
|
4850
4925
|
var readVersionFile = (chromeMode) => {
|
|
4851
4926
|
const versionFilePath = getVersionFilePath(chromeMode);
|
|
4852
4927
|
try {
|
|
4853
|
-
return
|
|
4928
|
+
return fs7.readFileSync(versionFilePath, "utf-8").trim();
|
|
4854
4929
|
} catch {
|
|
4855
4930
|
return null;
|
|
4856
4931
|
}
|
|
4857
4932
|
};
|
|
4858
4933
|
var writeVersionFile = (chromeMode, version) => {
|
|
4859
4934
|
const versionFilePath = getVersionFilePath(chromeMode);
|
|
4860
|
-
|
|
4935
|
+
fs7.writeFileSync(versionFilePath, version);
|
|
4861
4936
|
};
|
|
4862
4937
|
var downloadBrowser = async ({
|
|
4863
4938
|
logLevel,
|
|
@@ -4866,34 +4941,35 @@ var downloadBrowser = async ({
|
|
|
4866
4941
|
version,
|
|
4867
4942
|
chromeMode
|
|
4868
4943
|
}) => {
|
|
4869
|
-
const
|
|
4870
|
-
const downloadURL = getChromeDownloadUrl({ platform:
|
|
4944
|
+
const platform3 = getPlatform();
|
|
4945
|
+
const downloadURL = getChromeDownloadUrl({ platform: platform3, version, chromeMode });
|
|
4871
4946
|
const fileName = downloadURL.split("/").pop();
|
|
4872
4947
|
if (!fileName) {
|
|
4873
4948
|
throw new Error(`A malformed download URL was found: ${downloadURL}.`);
|
|
4874
4949
|
}
|
|
4875
4950
|
const downloadsFolder = getDownloadsFolder(chromeMode);
|
|
4876
4951
|
const archivePath = path8.join(downloadsFolder, fileName);
|
|
4877
|
-
const outputPath = getFolderPath(downloadsFolder,
|
|
4952
|
+
const outputPath = getFolderPath(downloadsFolder, platform3);
|
|
4878
4953
|
const expectedVersion = getExpectedVersion(version, chromeMode);
|
|
4879
4954
|
if (await existsAsync(outputPath)) {
|
|
4880
4955
|
const installedVersion = readVersionFile(chromeMode);
|
|
4881
4956
|
if (installedVersion === expectedVersion) {
|
|
4882
4957
|
return getRevisionInfo(chromeMode);
|
|
4883
4958
|
}
|
|
4884
|
-
|
|
4959
|
+
fs7.rmSync(outputPath, { recursive: true, force: true });
|
|
4885
4960
|
}
|
|
4886
4961
|
if (!await existsAsync(downloadsFolder)) {
|
|
4887
4962
|
await mkdirAsync(downloadsFolder, {
|
|
4888
4963
|
recursive: true
|
|
4889
4964
|
});
|
|
4890
4965
|
}
|
|
4891
|
-
if (
|
|
4966
|
+
if (os3.platform() !== "darwin" && os3.platform() !== "linux" && os3.arch() === "arm64") {
|
|
4892
4967
|
throw new Error([
|
|
4893
4968
|
"Chrome Headless Shell is not available for Windows for arm64 architecture."
|
|
4894
4969
|
].join(`
|
|
4895
4970
|
`));
|
|
4896
4971
|
}
|
|
4972
|
+
logDownloadUrl({ url: downloadURL, logLevel, indent });
|
|
4897
4973
|
try {
|
|
4898
4974
|
await downloadFile({
|
|
4899
4975
|
url: downloadURL,
|
|
@@ -4916,12 +4992,12 @@ var downloadBrowser = async ({
|
|
|
4916
4992
|
await extractZip(archivePath, { dir: outputPath });
|
|
4917
4993
|
const chromePath = path8.join(outputPath, "chrome-linux", "chrome");
|
|
4918
4994
|
const chromeHeadlessShellPath = path8.join(outputPath, "chrome-linux", "chrome-headless-shell");
|
|
4919
|
-
if (
|
|
4920
|
-
|
|
4995
|
+
if (fs7.existsSync(chromePath)) {
|
|
4996
|
+
fs7.renameSync(chromePath, chromeHeadlessShellPath);
|
|
4921
4997
|
}
|
|
4922
4998
|
const chromeLinuxFolder = path8.join(outputPath, "chrome-linux");
|
|
4923
|
-
if (
|
|
4924
|
-
|
|
4999
|
+
if (fs7.existsSync(chromeLinuxFolder)) {
|
|
5000
|
+
fs7.renameSync(chromeLinuxFolder, path8.join(outputPath, "chrome-headless-shell-linux-arm64"));
|
|
4925
5001
|
}
|
|
4926
5002
|
} catch (err) {
|
|
4927
5003
|
return Promise.reject(err);
|
|
@@ -4935,37 +5011,37 @@ var downloadBrowser = async ({
|
|
|
4935
5011
|
makeFileExecutableIfItIsNot(revisionInfo.executablePath);
|
|
4936
5012
|
return revisionInfo;
|
|
4937
5013
|
};
|
|
4938
|
-
var getFolderPath = (downloadsFolder,
|
|
4939
|
-
return path8.resolve(downloadsFolder,
|
|
5014
|
+
var getFolderPath = (downloadsFolder, platform3) => {
|
|
5015
|
+
return path8.resolve(downloadsFolder, platform3);
|
|
4940
5016
|
};
|
|
4941
5017
|
var getExecutablePath2 = (chromeMode) => {
|
|
4942
5018
|
const downloadsFolder = getDownloadsFolder(chromeMode);
|
|
4943
|
-
const
|
|
4944
|
-
const folderPath = getFolderPath(downloadsFolder,
|
|
5019
|
+
const platform3 = getPlatform();
|
|
5020
|
+
const folderPath = getFolderPath(downloadsFolder, platform3);
|
|
4945
5021
|
if (chromeMode === "chrome-for-testing") {
|
|
4946
|
-
if (
|
|
4947
|
-
return path8.join(folderPath, `chrome-${
|
|
5022
|
+
if (platform3 === "mac-arm64" || platform3 === "mac-x64") {
|
|
5023
|
+
return path8.join(folderPath, `chrome-${platform3}`, "Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing");
|
|
4948
5024
|
}
|
|
4949
|
-
if (
|
|
5025
|
+
if (platform3 === "win64") {
|
|
4950
5026
|
return path8.join(folderPath, "chrome-win64", "chrome.exe");
|
|
4951
5027
|
}
|
|
4952
|
-
if (
|
|
5028
|
+
if (platform3 === "linux64" || platform3 === "linux-arm64") {
|
|
4953
5029
|
return path8.join(folderPath, "chrome-linux64", "chrome");
|
|
4954
5030
|
}
|
|
4955
|
-
throw new Error("unsupported platform" +
|
|
5031
|
+
throw new Error("unsupported platform" + platform3);
|
|
4956
5032
|
}
|
|
4957
5033
|
if (chromeMode === "headless-shell") {
|
|
4958
|
-
return path8.join(folderPath, `chrome-headless-shell-${
|
|
5034
|
+
return path8.join(folderPath, `chrome-headless-shell-${platform3}`, platform3 === "win64" ? "chrome-headless-shell.exe" : platform3 === "linux-arm64" ? "headless_shell" : "chrome-headless-shell");
|
|
4959
5035
|
}
|
|
4960
5036
|
throw new Error("unsupported chrome mode" + chromeMode);
|
|
4961
5037
|
};
|
|
4962
5038
|
var getRevisionInfo = (chromeMode) => {
|
|
4963
5039
|
const executablePath = getExecutablePath2(chromeMode);
|
|
4964
5040
|
const downloadsFolder = getDownloadsFolder(chromeMode);
|
|
4965
|
-
const
|
|
4966
|
-
const folderPath = getFolderPath(downloadsFolder,
|
|
4967
|
-
const url = getChromeDownloadUrl({ platform:
|
|
4968
|
-
const local =
|
|
5041
|
+
const platform3 = getPlatform();
|
|
5042
|
+
const folderPath = getFolderPath(downloadsFolder, platform3);
|
|
5043
|
+
const url = getChromeDownloadUrl({ platform: platform3, version: null, chromeMode });
|
|
5044
|
+
const local = fs7.existsSync(folderPath);
|
|
4969
5045
|
return {
|
|
4970
5046
|
executablePath,
|
|
4971
5047
|
folderPath,
|
|
@@ -5004,13 +5080,13 @@ var getBrowserStatus = ({
|
|
|
5004
5080
|
chromeMode
|
|
5005
5081
|
}) => {
|
|
5006
5082
|
if (browserExecutable) {
|
|
5007
|
-
if (!
|
|
5083
|
+
if (!fs8.existsSync(browserExecutable)) {
|
|
5008
5084
|
throw new Error(`"browserExecutable" was specified as '${browserExecutable}' but the path doesn't exist. Pass "null" for "browserExecutable" to download a browser automatically.`);
|
|
5009
5085
|
}
|
|
5010
5086
|
return { path: browserExecutable, type: "user-defined-path" };
|
|
5011
5087
|
}
|
|
5012
5088
|
const revision = getRevisionInfo(chromeMode);
|
|
5013
|
-
if (revision.local &&
|
|
5089
|
+
if (revision.local && fs8.existsSync(revision.executablePath)) {
|
|
5014
5090
|
const actualVersion = readVersionFile(chromeMode);
|
|
5015
5091
|
if (actualVersion === TESTED_VERSION) {
|
|
5016
5092
|
return { path: revision.executablePath, type: "local-puppeteer-browser" };
|
|
@@ -5036,7 +5112,7 @@ var ensureBrowser = (options) => {
|
|
|
5036
5112
|
};
|
|
5037
5113
|
|
|
5038
5114
|
// src/get-local-browser-executable.ts
|
|
5039
|
-
import
|
|
5115
|
+
import fs9 from "node:fs";
|
|
5040
5116
|
var getBrowserStatus2 = ({
|
|
5041
5117
|
browserExecutablePath,
|
|
5042
5118
|
indent,
|
|
@@ -5044,13 +5120,13 @@ var getBrowserStatus2 = ({
|
|
|
5044
5120
|
chromeMode
|
|
5045
5121
|
}) => {
|
|
5046
5122
|
if (browserExecutablePath) {
|
|
5047
|
-
if (!
|
|
5123
|
+
if (!fs9.existsSync(browserExecutablePath)) {
|
|
5048
5124
|
Log.warn({ indent, logLevel }, `Browser executable was specified as '${browserExecutablePath}' but the path doesn't exist.`);
|
|
5049
5125
|
}
|
|
5050
5126
|
return { path: browserExecutablePath, type: "user-defined-path" };
|
|
5051
5127
|
}
|
|
5052
5128
|
const revision = getRevisionInfo(chromeMode);
|
|
5053
|
-
if (revision.local &&
|
|
5129
|
+
if (revision.local && fs9.existsSync(revision.executablePath)) {
|
|
5054
5130
|
return { path: revision.executablePath, type: "local-puppeteer-browser" };
|
|
5055
5131
|
}
|
|
5056
5132
|
return { type: "no-browser" };
|
|
@@ -5102,10 +5178,10 @@ var getCpuCount = () => {
|
|
|
5102
5178
|
import { freemem } from "node:os";
|
|
5103
5179
|
|
|
5104
5180
|
// src/memory/from-docker-cgroup.ts
|
|
5105
|
-
import { readFileSync as
|
|
5181
|
+
import { readFileSync as readFileSync4 } from "node:fs";
|
|
5106
5182
|
var getMaxMemoryFromCgroupV2 = () => {
|
|
5107
5183
|
try {
|
|
5108
|
-
const data =
|
|
5184
|
+
const data = readFileSync4("/sys/fs/cgroup/memory.max", "utf-8");
|
|
5109
5185
|
if (data.trim() === "max") {
|
|
5110
5186
|
return Infinity;
|
|
5111
5187
|
}
|
|
@@ -5116,7 +5192,7 @@ var getMaxMemoryFromCgroupV2 = () => {
|
|
|
5116
5192
|
};
|
|
5117
5193
|
var getAvailableMemoryFromCgroupV2 = () => {
|
|
5118
5194
|
try {
|
|
5119
|
-
const data =
|
|
5195
|
+
const data = readFileSync4("/sys/fs/cgroup/memory.current", "utf-8");
|
|
5120
5196
|
return parseInt(data, 10);
|
|
5121
5197
|
} catch {
|
|
5122
5198
|
return null;
|
|
@@ -5124,7 +5200,7 @@ var getAvailableMemoryFromCgroupV2 = () => {
|
|
|
5124
5200
|
};
|
|
5125
5201
|
var getMaxMemoryFromCgroupV1 = () => {
|
|
5126
5202
|
try {
|
|
5127
|
-
const data =
|
|
5203
|
+
const data = readFileSync4("/sys/fs/cgroup/memory/memory.limit_in_bytes", "utf-8");
|
|
5128
5204
|
if (data.trim() === "max") {
|
|
5129
5205
|
return Infinity;
|
|
5130
5206
|
}
|
|
@@ -5135,7 +5211,7 @@ var getMaxMemoryFromCgroupV1 = () => {
|
|
|
5135
5211
|
};
|
|
5136
5212
|
var getAvailableMemoryFromCgroupV1 = () => {
|
|
5137
5213
|
try {
|
|
5138
|
-
const data =
|
|
5214
|
+
const data = readFileSync4("/sys/fs/cgroup/memory/memory.usage_in_bytes", "utf-8");
|
|
5139
5215
|
return parseInt(data, 10);
|
|
5140
5216
|
} catch {
|
|
5141
5217
|
return null;
|
|
@@ -5168,13 +5244,13 @@ var getMaxLambdaMemory = () => {
|
|
|
5168
5244
|
};
|
|
5169
5245
|
|
|
5170
5246
|
// src/memory/from-proc-meminfo.ts
|
|
5171
|
-
import { existsSync as existsSync3, readFileSync as
|
|
5247
|
+
import { existsSync as existsSync3, readFileSync as readFileSync5 } from "node:fs";
|
|
5172
5248
|
var getFreeMemoryFromProcMeminfo = (logLevel) => {
|
|
5173
5249
|
if (!existsSync3("/proc/meminfo")) {
|
|
5174
5250
|
return null;
|
|
5175
5251
|
}
|
|
5176
5252
|
try {
|
|
5177
|
-
const data =
|
|
5253
|
+
const data = readFileSync5("/proc/meminfo", "utf-8");
|
|
5178
5254
|
const lines = data.split(`
|
|
5179
5255
|
`);
|
|
5180
5256
|
const memAvailableLine = lines.find((line) => line.startsWith("MemAvailable"));
|
|
@@ -5338,7 +5414,7 @@ var internalOpenBrowser = async ({
|
|
|
5338
5414
|
if (chromiumOptions.userAgent) {
|
|
5339
5415
|
Log.verbose({ indent, logLevel, tag: "openBrowser()" }, `Using custom user agent: ${chromiumOptions.userAgent}`);
|
|
5340
5416
|
}
|
|
5341
|
-
const userDataDir = await
|
|
5417
|
+
const userDataDir = await fs10.promises.mkdtemp(path9.join(os4.tmpdir(), "puppeteer_dev_chrome_profile-"));
|
|
5342
5418
|
const browserInstance = await launchChrome({
|
|
5343
5419
|
executablePath,
|
|
5344
5420
|
logLevel,
|
|
@@ -5515,7 +5591,7 @@ import path19 from "node:path";
|
|
|
5515
5591
|
import { NoReactInternals as NoReactInternals7 } from "remotion/no-react";
|
|
5516
5592
|
|
|
5517
5593
|
// src/assets/download-and-map-assets-to-file.ts
|
|
5518
|
-
import
|
|
5594
|
+
import fs11 from "node:fs";
|
|
5519
5595
|
import path11, { extname as extname2 } from "node:path";
|
|
5520
5596
|
import { random } from "remotion/no-react";
|
|
5521
5597
|
|
|
@@ -14551,7 +14627,7 @@ var downloadAsset = async ({
|
|
|
14551
14627
|
const { downloadDir } = downloadMap;
|
|
14552
14628
|
if (downloadMap.hasBeenDownloadedMap[src]?.[downloadDir]) {
|
|
14553
14629
|
const claimedDownloadLocation = downloadMap.hasBeenDownloadedMap[src]?.[downloadDir];
|
|
14554
|
-
if (
|
|
14630
|
+
if (fs11.existsSync(claimedDownloadLocation)) {
|
|
14555
14631
|
return claimedDownloadLocation;
|
|
14556
14632
|
}
|
|
14557
14633
|
downloadMap.hasBeenDownloadedMap[src][downloadDir] = null;
|
|
@@ -14590,7 +14666,7 @@ var downloadAsset = async ({
|
|
|
14590
14666
|
});
|
|
14591
14667
|
ensureOutputDirectory(output);
|
|
14592
14668
|
const buff = Buffer.from(assetData, encoding);
|
|
14593
|
-
await
|
|
14669
|
+
await fs11.promises.writeFile(output, buff);
|
|
14594
14670
|
notifyAssetIsDownloaded({ src, downloadMap, downloadDir, to: output });
|
|
14595
14671
|
return output;
|
|
14596
14672
|
}
|
|
@@ -15171,8 +15247,8 @@ class OffthreadVideoServerEmitter {
|
|
|
15171
15247
|
}
|
|
15172
15248
|
|
|
15173
15249
|
// src/tmp-dir.ts
|
|
15174
|
-
import
|
|
15175
|
-
import
|
|
15250
|
+
import fs12, { mkdirSync } from "node:fs";
|
|
15251
|
+
import os5 from "node:os";
|
|
15176
15252
|
import path13 from "node:path";
|
|
15177
15253
|
var alphabet = "abcdefghijklmnopqrstuvwxyz0123456789";
|
|
15178
15254
|
var randomHash = () => {
|
|
@@ -15181,9 +15257,9 @@ var randomHash = () => {
|
|
|
15181
15257
|
}).join("");
|
|
15182
15258
|
};
|
|
15183
15259
|
var tmpDir = (str) => {
|
|
15184
|
-
const newDir = path13.join(
|
|
15185
|
-
if (
|
|
15186
|
-
|
|
15260
|
+
const newDir = path13.join(os5.tmpdir(), str + randomHash());
|
|
15261
|
+
if (fs12.existsSync(newDir)) {
|
|
15262
|
+
fs12.rmSync(newDir, {
|
|
15187
15263
|
recursive: true,
|
|
15188
15264
|
force: true
|
|
15189
15265
|
});
|
|
@@ -15193,7 +15269,7 @@ var tmpDir = (str) => {
|
|
|
15193
15269
|
};
|
|
15194
15270
|
|
|
15195
15271
|
// src/assets/inline-audio-mixing.ts
|
|
15196
|
-
import
|
|
15272
|
+
import fs13, { writeSync } from "node:fs";
|
|
15197
15273
|
import path14 from "node:path";
|
|
15198
15274
|
|
|
15199
15275
|
// src/sample-rate.ts
|
|
@@ -15259,7 +15335,7 @@ var makeInlineAudioMixing = (dir) => {
|
|
|
15259
15335
|
const cleanup = () => {
|
|
15260
15336
|
for (const fd of Object.values(openFiles)) {
|
|
15261
15337
|
try {
|
|
15262
|
-
|
|
15338
|
+
fs13.closeSync(fd);
|
|
15263
15339
|
} catch {}
|
|
15264
15340
|
}
|
|
15265
15341
|
deleteDirectory(folderToAdd);
|
|
@@ -15279,7 +15355,7 @@ var makeInlineAudioMixing = (dir) => {
|
|
|
15279
15355
|
}) => {
|
|
15280
15356
|
const filePath = getFilePath(asset);
|
|
15281
15357
|
if (!openFiles[filePath]) {
|
|
15282
|
-
openFiles[filePath] =
|
|
15358
|
+
openFiles[filePath] = fs13.openSync(filePath, "w");
|
|
15283
15359
|
}
|
|
15284
15360
|
if (writtenHeaders[filePath]) {
|
|
15285
15361
|
return;
|
|
@@ -15321,7 +15397,7 @@ var makeInlineAudioMixing = (dir) => {
|
|
|
15321
15397
|
binariesDirectory,
|
|
15322
15398
|
cancelSignal
|
|
15323
15399
|
});
|
|
15324
|
-
|
|
15400
|
+
fs13.renameSync(tmpFile, fd);
|
|
15325
15401
|
}
|
|
15326
15402
|
}
|
|
15327
15403
|
};
|
|
@@ -15598,13 +15674,13 @@ var makeRange = (from, to) => {
|
|
|
15598
15674
|
};
|
|
15599
15675
|
|
|
15600
15676
|
// src/port-config.ts
|
|
15601
|
-
import
|
|
15677
|
+
import os6 from "os";
|
|
15602
15678
|
var cached = null;
|
|
15603
15679
|
var getPortConfig = (preferIpv4) => {
|
|
15604
15680
|
if (cached) {
|
|
15605
15681
|
return cached;
|
|
15606
15682
|
}
|
|
15607
|
-
const networkInterfaces =
|
|
15683
|
+
const networkInterfaces = os6.networkInterfaces();
|
|
15608
15684
|
const flattened = flattenNetworkInterfaces(networkInterfaces);
|
|
15609
15685
|
const host = getHostToBind(flattened, preferIpv4);
|
|
15610
15686
|
const hostsToTry = getHostsToTry(flattened);
|
|
@@ -17384,7 +17460,7 @@ var validateSelectedPixelFormatAndCodecCombination = (pixelFormat, codec) => {
|
|
|
17384
17460
|
};
|
|
17385
17461
|
|
|
17386
17462
|
// src/render-frames.ts
|
|
17387
|
-
import
|
|
17463
|
+
import fs15 from "node:fs";
|
|
17388
17464
|
import path21 from "node:path";
|
|
17389
17465
|
import { NoReactInternals as NoReactInternals12 } from "remotion/no-react";
|
|
17390
17466
|
|
|
@@ -18301,7 +18377,7 @@ var onlyInlineAudio = (assets) => {
|
|
|
18301
18377
|
import * as assert2 from "node:assert";
|
|
18302
18378
|
|
|
18303
18379
|
// src/screenshot-task.ts
|
|
18304
|
-
import
|
|
18380
|
+
import fs14 from "node:fs";
|
|
18305
18381
|
var screenshotTask = async ({
|
|
18306
18382
|
format: format2,
|
|
18307
18383
|
height,
|
|
@@ -18362,7 +18438,7 @@ var screenshotTask = async ({
|
|
|
18362
18438
|
}
|
|
18363
18439
|
const buffer = Buffer.from(result.data, "base64");
|
|
18364
18440
|
if (path20) {
|
|
18365
|
-
await
|
|
18441
|
+
await fs14.promises.writeFile(path20, buffer);
|
|
18366
18442
|
}
|
|
18367
18443
|
return buffer;
|
|
18368
18444
|
} catch (err) {
|
|
@@ -19000,8 +19076,8 @@ var innerRenderFrames = async ({
|
|
|
19000
19076
|
darkMode
|
|
19001
19077
|
}) => {
|
|
19002
19078
|
if (outputDir) {
|
|
19003
|
-
if (!
|
|
19004
|
-
|
|
19079
|
+
if (!fs15.existsSync(outputDir)) {
|
|
19080
|
+
fs15.mkdirSync(outputDir, {
|
|
19005
19081
|
recursive: true
|
|
19006
19082
|
});
|
|
19007
19083
|
}
|
|
@@ -19432,8 +19508,8 @@ var renderFrames = (options) => {
|
|
|
19432
19508
|
|
|
19433
19509
|
// src/render-media.ts
|
|
19434
19510
|
import { LicensingInternals } from "@remotion/licensing";
|
|
19435
|
-
import
|
|
19436
|
-
import
|
|
19511
|
+
import fs17 from "node:fs";
|
|
19512
|
+
import os7 from "node:os";
|
|
19437
19513
|
import path26 from "node:path";
|
|
19438
19514
|
import { NoReactInternals as NoReactInternals15 } from "remotion/no-react";
|
|
19439
19515
|
|
|
@@ -20302,7 +20378,7 @@ var createFfmpegMergeFilter = ({
|
|
|
20302
20378
|
};
|
|
20303
20379
|
|
|
20304
20380
|
// src/ffmpeg-filter-file.ts
|
|
20305
|
-
import
|
|
20381
|
+
import fs16, { existsSync as existsSync5 } from "node:fs";
|
|
20306
20382
|
import path22 from "node:path";
|
|
20307
20383
|
var makeFfmpegFilterFile = (complexFilter, downloadMap) => {
|
|
20308
20384
|
if (complexFilter.filter === null) {
|
|
@@ -20319,13 +20395,13 @@ var makeFfmpegFilterFileStr = async (complexFilter, downloadMap) => {
|
|
|
20319
20395
|
const random2 = Math.random().toString().replace(".", "");
|
|
20320
20396
|
const filterFile = path22.join(downloadMap.complexFilter, "complex-filter-" + random2 + ".txt");
|
|
20321
20397
|
if (!existsSync5(downloadMap.complexFilter)) {
|
|
20322
|
-
|
|
20398
|
+
fs16.mkdirSync(downloadMap.complexFilter, { recursive: true });
|
|
20323
20399
|
}
|
|
20324
|
-
await
|
|
20400
|
+
await fs16.promises.writeFile(filterFile, complexFilter);
|
|
20325
20401
|
return {
|
|
20326
20402
|
file: filterFile,
|
|
20327
20403
|
cleanup: () => {
|
|
20328
|
-
|
|
20404
|
+
fs16.unlinkSync(filterFile);
|
|
20329
20405
|
}
|
|
20330
20406
|
};
|
|
20331
20407
|
};
|
|
@@ -21655,7 +21731,7 @@ var internalRenderMediaRaw = ({
|
|
|
21655
21731
|
}
|
|
21656
21732
|
const imageFormat = isAudioCodec(codec) ? "none" : provisionalImageFormat ?? compositionWithPossibleUnevenDimensions.defaultVideoImageFormat ?? DEFAULT_VIDEO_IMAGE_FORMAT;
|
|
21657
21733
|
validateSelectedPixelFormatAndImageFormatCombination(pixelFormat, imageFormat);
|
|
21658
|
-
const workingDir =
|
|
21734
|
+
const workingDir = fs17.mkdtempSync(path26.join(os7.tmpdir(), "react-motion-render"));
|
|
21659
21735
|
const preEncodedFileLocation = parallelEncoding ? path26.join(workingDir, "pre-encode." + getFileExtensionFromCodec(codec, audioCodec)) : null;
|
|
21660
21736
|
if (onCtrlCExit && workingDir) {
|
|
21661
21737
|
onCtrlCExit(`Delete ${workingDir}`, () => deleteDirectory(workingDir));
|
|
@@ -21980,10 +22056,10 @@ var internalRenderMediaRaw = ({
|
|
|
21980
22056
|
}
|
|
21981
22057
|
reject(err);
|
|
21982
22058
|
}).finally(() => {
|
|
21983
|
-
if (preEncodedFileLocation !== null &&
|
|
22059
|
+
if (preEncodedFileLocation !== null && fs17.existsSync(preEncodedFileLocation)) {
|
|
21984
22060
|
deleteDirectory(path26.dirname(preEncodedFileLocation));
|
|
21985
22061
|
}
|
|
21986
|
-
if (workingDir &&
|
|
22062
|
+
if (workingDir && fs17.existsSync(workingDir)) {
|
|
21987
22063
|
deleteDirectory(workingDir);
|
|
21988
22064
|
}
|
|
21989
22065
|
cleanupServerFn?.(false).catch((err) => {
|
|
@@ -22151,7 +22227,7 @@ var renderMedia = ({
|
|
|
22151
22227
|
|
|
22152
22228
|
// src/render-still.ts
|
|
22153
22229
|
import { LicensingInternals as LicensingInternals2 } from "@remotion/licensing";
|
|
22154
|
-
import
|
|
22230
|
+
import fs18, { statSync as statSync2 } from "node:fs";
|
|
22155
22231
|
import path27 from "node:path";
|
|
22156
22232
|
import { NoReactInternals as NoReactInternals16 } from "remotion/no-react";
|
|
22157
22233
|
var innerRenderStill = async ({
|
|
@@ -22205,7 +22281,7 @@ var innerRenderStill = async ({
|
|
|
22205
22281
|
output = typeof output === "string" ? path27.resolve(process.cwd(), output) : null;
|
|
22206
22282
|
validateJpegQuality(jpegQuality);
|
|
22207
22283
|
if (output) {
|
|
22208
|
-
if (
|
|
22284
|
+
if (fs18.existsSync(output)) {
|
|
22209
22285
|
if (!overwrite) {
|
|
22210
22286
|
throw new Error(`Cannot render still - "overwrite" option was set to false, but the output destination ${output} already exists.`);
|
|
22211
22287
|
}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/renderer"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/renderer",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.419",
|
|
7
7
|
"description": "Render Remotion videos using Node.js or Bun",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"types": "dist/index.d.ts",
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"execa": "5.1.1",
|
|
25
25
|
"extract-zip": "2.0.1",
|
|
26
|
-
"remotion": "4.0.
|
|
27
|
-
"@remotion/streaming": "4.0.
|
|
26
|
+
"remotion": "4.0.419",
|
|
27
|
+
"@remotion/streaming": "4.0.419",
|
|
28
28
|
"source-map": "^0.8.0-beta.0",
|
|
29
29
|
"ws": "8.17.1",
|
|
30
|
-
"@remotion/licensing": "4.0.
|
|
30
|
+
"@remotion/licensing": "4.0.419"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"react": ">=16.8.0",
|
|
@@ -41,19 +41,19 @@
|
|
|
41
41
|
"react-dom": "19.2.3",
|
|
42
42
|
"@typescript/native-preview": "7.0.0-dev.20260105.1",
|
|
43
43
|
"@types/ws": "8.5.10",
|
|
44
|
-
"@remotion/example-videos": "4.0.
|
|
45
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
44
|
+
"@remotion/example-videos": "4.0.419",
|
|
45
|
+
"@remotion/eslint-config-internal": "4.0.419",
|
|
46
46
|
"eslint": "9.19.0",
|
|
47
47
|
"@types/node": "20.12.14"
|
|
48
48
|
},
|
|
49
49
|
"optionalDependencies": {
|
|
50
|
-
"@remotion/compositor-darwin-arm64": "4.0.
|
|
51
|
-
"@remotion/compositor-darwin-x64": "4.0.
|
|
52
|
-
"@remotion/compositor-linux-arm64-gnu": "4.0.
|
|
53
|
-
"@remotion/compositor-linux-arm64-musl": "4.0.
|
|
54
|
-
"@remotion/compositor-linux-x64-gnu": "4.0.
|
|
55
|
-
"@remotion/compositor-linux-x64-musl": "4.0.
|
|
56
|
-
"@remotion/compositor-win32-x64-msvc": "4.0.
|
|
50
|
+
"@remotion/compositor-darwin-arm64": "4.0.419",
|
|
51
|
+
"@remotion/compositor-darwin-x64": "4.0.419",
|
|
52
|
+
"@remotion/compositor-linux-arm64-gnu": "4.0.419",
|
|
53
|
+
"@remotion/compositor-linux-arm64-musl": "4.0.419",
|
|
54
|
+
"@remotion/compositor-linux-x64-gnu": "4.0.419",
|
|
55
|
+
"@remotion/compositor-linux-x64-musl": "4.0.419",
|
|
56
|
+
"@remotion/compositor-win32-x64-msvc": "4.0.419"
|
|
57
57
|
},
|
|
58
58
|
"keywords": [
|
|
59
59
|
"remotion",
|