gcp-cloud-run image pins Chrome 148, which drops `background-clip: text` glyphs inside layered children; the CLI's Chrome 152 paints them
维护者通常 1 天内回复
@user-github-me 已经在做这个了。
开始于 2026年10月9日。
评估
- 难度
- 1/5
- 预计耗时
- 1 小时以内
- 新手友好度
- 84/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- docker, typescript
- 领域
- build-system
调研方向
从 packages/gcp-cloud-run/Dockerfile 和 Dockerfile.test 开始,其中 chrome-headless-shell 被固定在 148.0.7778.167;将两者都更新到 152.0.7977.30,即 packages/cli/src/browser/manager.ts 已经管理的版本。通过阅读 manager.ts 确认该版本与 CLI 一致,然后运行镜像构建,使其 BeginFrame 探测对该新固定版本进行把关。当 Dockerfile 的构建通过该探测,且 Cloud Run 镜像渲染与所链接复现步骤的本地渲染一致时即为完成。
由索引模型根据 Issue 内容生成。
描述
Describe the bug
packages/gcp-cloud-run/Dockerfile (and Dockerfile.test) pin [email protected]. That Chromium build leaves descendants with their own paint layer (transform, opacity, filter, position, will-change) out of a background-clip: text mask, so gradient text whose glyphs live in such a child is painted with its transparent fill and nothing else: the line is invisible in the render.
The CLI's managed Chrome (152.0.7977.30, packages/cli/src/browser/manager.ts) paints it, as does hyperframes preview in any current browser. So the same project renders differently on a workstation and on Cloud Run, and only the Cloud Run output is wrong.
This hits any split-text entrance (lines or words wrapped in divs that a GSAP tween translates, fades or blurs) applied to gradient text. The tween leaves a transform on each wrapper, which is enough.
Related: #2810 resolved the BeginFrame question for this exact pin, so I don't think BeginFrame is a reason to stay on 148. check flags the pattern as text_not_painted (transparent fill) on every Chrome, which matches the 148 output rather than what 150+ and browsers paint; that may be worth a look too.
Minimal reproduction
https://github.com/ArcadeHQ/hyperframes-repros/tree/patch/bg-clip-text-layered-child
One index.html, no scripts, no animation: two gradient lines, the second inside a child with transform: translateY(0).
Steps to reproduce
git clone -b patch/bg-clip-text-layered-child https://github.com/ArcadeHQ/hyperframes-repros
cd hyperframes-repros
npm run render -- --quality draft --output out/chrome-152.mp4 # CLI's managed Chrome: both lines
npx --yes @puppeteer/browsers install [email protected]
HYPERFRAMES_BROWSER_PATH=<path printed above> npm run render -- --quality draft --output out/chrome-148.mp4 # second line missing
ffmpeg -ss 0.5 -i out/chrome-152.mp4 -frames:v 1 out/chrome-152.png
ffmpeg -ss 0.5 -i out/chrome-148.mp4 -frames:v 1 out/chrome-148.png
The 148 render is what the @hyperframes/gcp-cloud-run image produces.
Expected behavior
Both lines render with the gradient, matching preview and a local render.
Actual behavior
On Chrome 148 only "Direct text" renders. The second line's box is still laid out, but nothing paints in it.
Frame at 0.5 s, CLI Chrome 152 (expected):

Same frame on Chrome 148 (the Cloud Run image):

Environment
- hyperframes 0.8.134
- Node v24.21.0, macOS arm64 (Apple M1 Pro)
- Chrome:
chrome-headless-shell152.0.7977.30 (CLI managed) vs 148.0.7778.97 viaHYPERFRAMES_BROWSER_PATH; Linux 148.0.7778.167 in the Cloud Run image shows the same - ffmpeg 9.0.2
npx hyperframes doctor from the repro checkout:
✓ Version 0.8.134 (latest)
✓ Node.js v24.21.0 (darwin arm64)
✓ CPU 10 cores · Apple M1 Pro @ 2400MHz
✓ Memory 16.0 GB total
✓ FFmpeg ffmpeg 9.0.2 at /opt/homebrew/bin/ffmpeg
✓ FFprobe ffprobe 9.0.2 at /opt/homebrew/bin/ffprobe
✓ Chrome cache: ~/.cache/puppeteer/chrome-headless-shell/mac_arm-154.0.8037.92/...
✗ Docker Not found
Additional context
Requested fix: pin the gcp-cloud-run image (and Dockerfile.test) to the same build the CLI manages, 152.0.7977.30, so Cloud Run and workstation renders use one Chrome. The image build's BeginFrame probe gates that, and our render corpus passes on 152. Happy to send the one-line PR if useful.
Note for completeness: Chromium 150+ paints the layered child's glyphs but still in the clipping box's own space (no transform, opacity or filter applied to the mask), which Firefox does apply. That is a Chromium limitation, not a HyperFrames one, and is not what this issue asks to change.
- 主要语言
- TypeScript
- 星标
- 54.1k
- 派生
- 4.9k
- 平均合并
- 7 小时 21 分钟
- 30 天内合并 PR
- 722
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
heygen-com/hyperframes 的其他 Issue
-
Docs: clarify that "Enable auto-update" is only available in the Claude Code terminal (CLI) /plugin UI可能已有人在做 @rumi7911 于 2 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 85/100
heygen-com/hyperframes#5027 ·
维护者通常 1 天内回复
-
fix(producer): propagate useGpu to HDR layered streaming encoder可能已有人在做 @Monster-GM 于 4 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 87/100
heygen-com/hyperframes#5002 ·
维护者通常 1 天内回复
-
skills: remoteHeadSha() can open a Git Credential Manager dialog on Windows (GIT_TERMINAL_PROMPT does not cover GUI helpers; slug unvalidated)可能已有人在做 @RaphaelFakhri 于 9 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 78/100
heygen-com/hyperframes#4702 · 1 条评论 · 1 个 reaction ·
维护者通常 1 天内回复
-
Studio catalog prompt editor has no accessible name可能已有人在做 @lorenzozanee 于 15 天前认领。 未关闭bug difficulty/easy triage/ready
难度 2/5 1-3 小时 新手友好度 78/100
heygen-com/hyperframes#4384 ·
维护者通常 1 天内回复
-
lint: validate composition variables declared on supported root elements可能重新可做 关联的 PR 已关闭且未合并。 未关闭bug difficulty/easy triage/ready
难度 2/5 1-3 小时 新手友好度 88/100
heygen-com/hyperframes#4383 ·
维护者通常 1 天内回复
查看 heygen-com/hyperframes 的全部 Issue
相似的 Issue
-
难度 1/5 1 小时以内 新手友好度 85/100
MystenLabs/MemWal#1163 · 2 条评论 ·
维护者通常 1 天内回复
-
Mondriaan
难度 1/5 1 小时以内 新手友好度 88/100
knaw-huc/textannoviz#709 ·
维护者通常 1 天内回复
-
billion-context-pi
难度 2/5 1-3 小时 新手友好度 62/100
ranxianglei/billion-context#2521 · 3 条评论 ·
维护者通常 1 天内回复
-
streams:add
难度 1/5 1 小时以内 新手友好度 62/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100