mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 12:54:29 +00:00
* fix(producer): localize remote media sources + strip audio crossorigin Two bugs affecting compositions that use remote S3 URLs for video/audio. Bug 1 — Remote <video>/<audio> sources cause blank frames The renderer (Puppeteer) must buffer all video elements to readyState >= 2 before frame capture begins. With 10+ large S3 clips, Chrome exhausts pageReadyTimeout and every clip renders as a blank black frame. Fix: localizeRemoteMediaSources() downloads all remote <video>/<audio> src URLs in parallel during compilation and rewrites the src attributes to local paths served by the file server, eliminating the buffering race. Bug 2 — crossorigin on <audio> elements not stripped htmlCompiler.ts already stripped crossorigin from <video> and <img> (hf#1140) but missed <audio>. Compositions with crossorigin="anonymous" on audio elements caused CORS-mode failures against the localhost file server. Extended the strip to cover <audio>. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(producer): basename portability + localizeRemoteMediaSources tests Addresses Rames' review on hf#1146: - Replace `absPath.split('/').at(-1)` with `path.basename(absPath)`. On Windows, path.join emits backslash-separated paths; split('/') returns the whole path as a single element, producing a garbage relPath. path.basename delegates to the OS separator on the current platform. - Export `localizeRemoteMediaSources` for unit testing. Tests verify: - Successful download rewrites src to _remote_media/ path - Download failure preserves original URL without throwing - Duplicate src URL across two tags → single fetch call (dedup) - Local (non-HTTP) src paths are not rewritten - Both double-quoted and single-quoted src attributes are rewritten - basename extraction is correct on POSIX paths Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>