Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

vfx runtime: nested layoutsubtree capture canvases hang drawElementImage (check/snapshot time out); ref lookups are unscoped descendant queries

Đang mở
#4,405 1 bình luận 0 reaction 1 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@vanceingalls đang làm issue này rồi.

Từ ngày 30/9/2026.

  • #4804 của @vanceingalls — đang mở
  • #4808 của @vanceingalls — đang mở

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
45/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
typescript

Hướng nghiên cứu

Start in runtime/vfx.ts at lines 263, 387, 475-512, then inspect the immediate-child lookup rule and the capture-source resolution paths. Reproduce with hyperframes check or snapshot using the referenced bisect copies and logs. Done means nested capture sources are rejected without hanging and host-to-source/output lookups follow the stated scope rule.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Measured 2026-09-24 on hyperframes 0.8.71 (origin/main 58c873d81) with the AE exporter's retro-wave export, HF_VFX=1 HF_VFX_REF=1.

Symptom

hyperframes check → Runtime ✗ check_runtime_failure: Runtime.callFunctionOn timed out after "Runtime did not become render-ready within 3000ms" / "Shader transitions did not finish pre-rendering"; hyperframes snapshot --at 2.6 hangs >500 s with no output. Zero console lines are collected in the failing runs (the renderer main thread is blocked, not slow).

Bisect (seven serialized check runs on hand-edited copies)

copy noise+backdrop ref wrapper ext map nested layoutsubtree canvases result
unmodified ✓ ✓ ✓ 2 FAIL
noise chains + data-vfx-for wrappers removed ✗ ✓ ✓ 1 FAIL
map param dropped, ref wrapper kept ✓ ✓ ✗ 2 FAIL
ref wrapper unwrapped ✓ ✗ ✗ 1 FAIL
both shapes gone ✗ ✗ ✗ 0 PASS
E: both shapes kept verbatim; the two INNER self-capture triads removed ✓ ✓ ✓ 0 PASS
F: = E with the two inner layoutsubtree canvases put back ✓ ✓ ✓ 2 FAIL

E vs F differ by exactly two elements: a <canvas layoutsubtree class="hf-vfx-src"> nested inside another capture wrapper's subtree (a data-vfx-ref-visible ref wrapper around a host that runs its own displacement-map chain; a data-vfx-for backdrop wrapper whose preceding-sibling prefix contains a self-capture host). Every runtime path involved — findBackdropWrapper, resolveRefSource, data-vfx-ref-visible, CAPTURE_VISIBLE_SOURCE — is live in E and works. Every await in runtime/vfx.ts is bounded (CAPTURE_PAINT_TIMEOUT_MS), so this is Chrome refusing drawElementImage on a subtree containing another layoutsubtree canvas, not a JS promise.

The exporter is being fixed to never emit the nest (withdraw the chain with a gap). Three runtime items remain:

  1. Design gap: a map/matte ref that names a layer which runs its own kernel cannot be expressed — wrapAsVfxRefSource's precondition "it runs no kernel of its own" is unsatisfiable for such layers. A ref param that may name a HOST and bind its .hf-vfx-out texture directly would remove the need for an outer wrapper.
  2. Latent (M2): host→src/out lookups are unscoped descendant queries — runtime/vfx.ts:486 owner.querySelector("canvas.hf-vfx-src") and :263 host.querySelector("canvas.hf-vfx-out") — while :487 uses :scope > .hf-vfx-in and the comment at :475 states the immediate-child rule. On a nested shape this binds entry.src to the OUTER wrapper and entry.out to the INNER out, so captureSource would draw the canvas the entry paints into. Hidden today only because the nest hangs first.
  3. Latent (M3): resolveCaptureSource hardcodes visible:false (:512) while resolveRefSource reads the attribute (:387) — a doubly-reached canvas gets two VfxCaptureSource objects with opposite keepBitmap; registry order decides.

Suggested runtime hardening independent of the exporter fix: reject (with a reportVfxError) any .hf-vfx-src whose subtree contains another .hf-vfx-src, rather than hanging; and scope the two lookups to :scope >.

Repro copies and logs are on the AE-export machine (/tmp/hf71-bisect-{a,b,b2,c,e,f}, /tmp/fable-coord/hf71-bisect-*.log); exporter-side record: hyperframes-ae-exporter spec §Task 3.8 (2026-09-24).

🤖 Generated with Claude Code

Ngôn ngữ chính
TypeScript
Star
54.1k
Fork
4.9k
Merge trung bình
7 giờ 19 phút
Pull request đã merge (30 ngày)
746

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của heygen-com/hyperframes

Tất cả issue của heygen-com/hyperframes

Issue tương tự

Thêm issue về TypeScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.