$npx -y skills add remotion-dev/remotion --skill update-chrome-binaries-test-regionPublish Remotion Lambda Chrome binaries to the eu-central-1 test region and update hosted layer and Chrome version references. Use when updating Chrome binaries before full regional rollout.
| 1 | # Update Chrome Binaries Test Region |
| 2 | |
| 3 | ## AWS setup |
| 4 | |
| 5 | - Confirm the AWS CLI is logged into account `678892195805` by running `aws sts get-caller-identity`. If not, ask the user to log in. |
| 6 | - Export AWS credentials into the shell by running `eval "$(aws configure export-credentials --format env)"`. The Lambda client checks for `AWS_ACCESS_KEY_ID` and does not pick up SSO or Identity Center credentials on its own. |
| 7 | - From `packages/lambda`, run `bun src/admin/make-layer-public.ts --region=eu-central-1` to publish all 5 layers: fonts, chromium, emoji-apple, emoji-google, cjk. |
| 8 | - The `eval` and the `bun` command must run in the same shell invocation because the env vars do not persist across shell calls. |
| 9 | - Verify the output prints a `LayerArn` and `Version` for each of the 5 layers and a final JSON dump with the published regions populated. |
| 10 | |
| 11 | ## Update hosted layers |
| 12 | |
| 13 | Update `packages/lambda/src/shared/hosted-layers.ts` by copying the JSON dump from the script's stdout. Do not manually bump version numbers. |
| 14 | |
| 15 | The script prints, after several blank lines, a complete `HostedLayers` object showing the exact `layerArn` and `version` AWS returned for every layer it just published. Replace the corresponding region entries in `hosted-layers.ts` with those values. |
| 16 | |
| 17 | For the test phase (`--region=eu-central-1`), only `eu-central-1` is updated; other regions intentionally stay on their old versions until rollout. If the script was invoked with `--skip=<region>`, leave skipped regions untouched. |
| 18 | |
| 19 | ## Update Chrome references |
| 20 | |
| 21 | Ask the user for both the Chrome version, such as `149.0.7790.0`, and the corresponding Playwright revision. If the user does not provide the Playwright revision, look it up in `https://github.com/microsoft/playwright/blob/main/packages/playwright-core/browsers.json` by matching `browserVersion`. |
| 22 | |
| 23 | Update: |
| 24 | |
| 25 | - `packages/renderer/src/browser/get-chrome-download-url.ts`: `TESTED_VERSION`, `PLAYWRIGHT_VERSION`, the trailing `// <version>` comment on the `PLAYWRIGHT_VERSION` line, and the two hard-coded `https://remotion.media/chromium-headless-shell-amazon-linux-{arm64,x64}-<version>.zip` URLs. |
| 26 | - Before changing URLs, verify the new binaries exist with `curl -sI` against the new hard-coded URLs and the templated `chromium-headless-shell-linux-{arm64,x64}-<version>.zip?clearcache` URLs that follow `TESTED_VERSION`. Continue only when all return HTTP 200; otherwise ask the user to upload the missing builds to `remotion.media`. |
| 27 | - `packages/lambda/src/admin/make-layer-public.ts`: the `Chromium <version>, compiled from source.` license string passed to `PublishLayerVersionCommand`. |
| 28 | - `packages/docs/docs/lambda/runtime.mdx`: prepend a new row to the "Chrome" version table for the next Remotion release. Determine the next version from `packages/core/package.json` and increment the patch. |
| 29 | - `packages/docs/docs/miscellaneous/chrome-headless-shell.mdx`: prepend a new row to the version table and update the example version string in the "Version tracking" section. |
| 30 | - `packages/docs/docs/renderer/ensure-browser.mdx`: update both `version: '<old>'` occurrences in example code blocks. |
| 31 | |
| 32 | ## Docker verification |
| 33 | |
| 34 | Run the Docker matrix tests in `packages/dockerfiles/` with `./run.sh` against the new Chrome binary. Make sure Docker Desktop is running first. |
| 35 | |
| 36 | The tests render: |
| 37 | |
| 38 | - `browser-test`: Three.js, WebGL, and codec smoke test. |
| 39 | - `html-in-canvas`: experimental WICG `drawElementImage()` and `canvas.requestPaint()` APIs. |
| 40 | |
| 41 | Outputs land in `packages/dockerfiles/out/<platform>.mp4` and `packages/dockerfiles/out/<platform>-html-in-canvas.mp4`. |
| 42 | |
| 43 | The Dockerfiles install the local workspace build of `@remotion/cli` plus transitive deps, not the published version. Source changes in `@remotion/renderer` are picked up before publishing. `run.sh` runs `pack-cli.ts`, which walks `@remotion/cli` transitive `workspace:*` deps, runs `bun pm pack` for each into `packages/dockerfiles/tarballs/`, and emits `local-cli-package.json` with every tarball as a direct dependency and override. |
| 44 | |
| 45 | If a new composition is added to the Docker test matrix, register it in `packages/example/src/BrowserTestRoot.tsx` and add a corresponding `RUN remotion render /usr/app/bundle <id> /usr/app/<filename>.mp4` line plus `docker cp` extraction in `run.sh`. |
| 46 | |
| 47 | The `<HtmlInCanvas>` runtime check in `packages/core/src/HtmlInCanvas.tsx` requires `ctx.drawElementImage`, `canvas.requestPaint`, `canvas.captureElementImage`, and `transferControlToOffscreen`, which Chrome 149+ exposes when `--enable-features=CanvasDrawElement` is passed. If `html-in-canvas` renders fail with `"HTML in Canvas is not supported"` while `browser-test` passes, the most likely cause is a Chrome version mismatch. |
| 48 | |
| 49 | Do not proceed to publishing all regions unt |