Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for custom Puppeteer / Apple M1 support #132

Merged
merged 36 commits into from
Mar 2, 2021
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
cffba1b
Implemented `puppeteer-core` over `puppeteer`
Iamshankhadeep Feb 22, 2021
071ecc1
added `puppeteer-core` to work with local chromium
Iamshankhadeep Feb 22, 2021
018ddf3
Merge branch 'main' into puppeteer-support
JonnyBurger Feb 22, 2021
1932756
Restore remotion.config.ts
JonnyBurger Feb 22, 2021
619db02
Removed console.log
Iamshankhadeep Feb 24, 2021
10b0c47
Add dynamic chromium revision from puppeteer-core
Iamshankhadeep Feb 25, 2021
a065997
Add setting to let user add custom chrome path
Iamshankhadeep Feb 25, 2021
54a18dd
Merge branch 'puppeteer-support' of github.com:JonnyBurger/remotion i…
Iamshankhadeep Feb 25, 2021
a5284d6
Merge branch 'main' into puppeteer-support
Iamshankhadeep Feb 25, 2021
188b910
removed package-lock.json
Iamshankhadeep Feb 25, 2021
e498176
Updated package-lock in packages/renderer
Iamshankhadeep Feb 25, 2021
7ecee8b
Merge branch 'main' into puppeteer-support
Iamshankhadeep Feb 25, 2021
da6e08e
try to find local binary
JonnyBurger Feb 26, 2021
3d9ff8c
refine
JonnyBurger Feb 26, 2021
c7a9634
get executable
JonnyBurger Feb 26, 2021
eb35b32
Update get-local-chromium-executable.ts
JonnyBurger Feb 26, 2021
9efa99c
don't rethrow
JonnyBurger Feb 26, 2021
93a9e43
firefox support
JonnyBurger Feb 26, 2021
3278c10
refactor
JonnyBurger Feb 26, 2021
898e75c
remove firefox
JonnyBurger Feb 26, 2021
a1d5997
Update get-local-browser-executable.ts
JonnyBurger Feb 26, 2021
bc25761
remove hack
JonnyBurger Feb 26, 2021
7a9b1b1
upgrade puppeteer
JonnyBurger Feb 26, 2021
62d2bd4
disable no-mp4-import ESLint rule
JonnyBurger Feb 26, 2021
803ad08
added `--browser-executable` via cli
Iamshankhadeep Feb 27, 2021
ddf9316
Updated `setBrowserExecutable()` doc
Iamshankhadeep Feb 27, 2021
e564473
Merge branch 'main' into puppeteer-support
JonnyBurger Mar 2, 2021
03cc7be
fix WSL timeout issue
JonnyBurger Mar 2, 2021
cc9a841
add win32 and linux chrome executables
JonnyBurger Mar 2, 2021
2817e0e
document linux requirements
JonnyBurger Mar 2, 2021
303cdde
quit on timeout
JonnyBurger Mar 2, 2021
034f5f1
update MP4 codec docs
JonnyBurger Mar 2, 2021
adc86c8
update docs
JonnyBurger Mar 2, 2021
f1d72df
Update getting-started.md
JonnyBurger Mar 2, 2021
6a49440
Update render.tsx
JonnyBurger Mar 2, 2021
f27602d
Update get-local-browser-executable.ts
JonnyBurger Mar 2, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
468 changes: 373 additions & 95 deletions packages/renderer/package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion packages/renderer/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"@types/babel__template": "^7.4.0",
"execa": "^4.0.2",
"prettier": "^2.0.5",
"puppeteer": "^7.1.0",
"puppeteer-core": "^7.1.0",
"remotion": "^1.3.0",
"typescript": "^4.1.2",
"webpack": "5.20.1",
Expand Down
10 changes: 8 additions & 2 deletions packages/renderer/src/get-compositions.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
import puppeteer from 'puppeteer';
import puppeteer from 'puppeteer-core';
import {TCompMetadata} from 'remotion';
import {getLocalChromiumExecutable} from './get-local-chromium-executable';

export const getCompositions = async (
webpackBundle: string
): Promise<TCompMetadata[]> => {
const browser = await puppeteer.launch();
const executablePath = await getLocalChromiumExecutable();
console.log(executablePath);
const browser = await puppeteer.launch({
executablePath,
args: ['--no-sandbox', '--disable-setuid-sandbox'],
JonnyBurger marked this conversation as resolved.
Show resolved Hide resolved
});
const page = await browser.newPage();

await page.goto(`file://${webpackBundle}/index.html?evaluation=true`);
Expand Down
25 changes: 25 additions & 0 deletions packages/renderer/src/get-local-chromium-executable.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import puppeteer from 'puppeteer-core';
import puppeteer_node from 'puppeteer-core/lib/cjs/puppeteer/node';
import {downloadBrowser} from 'puppeteer-core/lib/cjs/puppeteer/node/install';

const getLocalRevision = (): puppeteer.BrowserFetcherRevisionInfo => {
const productName = 'chrome';
const browserFetcher = puppeteer_node.createBrowserFetcher({
product: productName,
host: 'https://storage.googleapis.com',
});
const revisionInfo = browserFetcher.revisionInfo('848005');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pretty impressive!

So this will only work if someone has exactly Chrome 84.8005 installed though? 🤔 Might be a bit too strict, maybe better to check for path (e.g. /Applications/Google Chrome.app)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actually 848005 corresponds to Chromium 90.0.4403.0.

To check for executable path for chrome or chromium for each os is a bit complicated than it seems. Figuring out how to write the script for chrome or chromium executable for each os.

Currently how it works (in linux) is that if you don't have the chormium executable in puppeteer-core it downloads the default Chromium 90.0.4403.0 in node-modules/puppeteer-core/.local-chromium and from the next time it automatically detects the executable path in .local-chromium and use that chromium executable.


return revisionInfo;
};

export const getLocalChromiumExecutable = async (): Promise<string> => {
const localRevision = getLocalRevision();
if (localRevision.local) {
return localRevision.executablePath;
} else {
await downloadBrowser();
const downloadedLocalRevision = getLocalRevision();
return downloadedLocalRevision.executablePath;
}
};
5 changes: 4 additions & 1 deletion packages/renderer/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import puppeteer from 'puppeteer';
import puppeteer from 'puppeteer-core';
import {getLocalChromiumExecutable} from './get-local-chromium-executable';
import {ImageFormat} from './image-format';
import {screenshot} from './puppeteer-screenshot';

Expand Down Expand Up @@ -34,7 +35,9 @@ async function screenshotDOMElement({
}

export const openBrowser = async (): Promise<puppeteer.Browser> => {
const executablePath = await getLocalChromiumExecutable();
const browser = await puppeteer.launch({
executablePath,
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
Expand Down
2 changes: 1 addition & 1 deletion packages/renderer/src/puppeteer-screenshot.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as assert from 'assert';
import {Page, ScreenshotOptions} from 'puppeteer';
import {Page, ScreenshotOptions} from 'puppeteer-core';
import {_screenshotTask} from './screenshot-task';

export const screenshot = async (
Expand Down
2 changes: 1 addition & 1 deletion packages/renderer/src/screenshot-task.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import fs from 'fs';
import {Page, ScreenshotOptions} from 'puppeteer';
import {Page, ScreenshotOptions} from 'puppeteer-core';
import {Internals} from 'remotion';

export const _screenshotTask = async (
Expand Down