Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/regression.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@ jobs:
- shard: shard-5
args: "style-4-prod style-11-prod style-2-prod animejs-adapter typegpu-adapter parallel-capture-regression"
- shard: shard-6
args: "overlay-montage-prod style-12-prod chat missing-host-comp-id png-sequence portrait-edge-bleed"
args: "overlay-montage-prod style-12-prod chat missing-host-comp-id png-sequence portrait-edge-bleed remote-media-localize"
- shard: shard-7
args: "sub-composition-video style-18-prod raf-ball-render-compat font-variant-numeric sub-comp-t0 sub-comp-id-selector"
args: "sub-composition-video style-18-prod raf-ball-render-compat font-variant-numeric sub-comp-t0 sub-comp-id-selector audio-multi-track-mix"
- shard: shard-8
args: "style-13-prod style-6-prod vignelli-stacking gsap-letters-render-compat"
steps:
Expand Down
15 changes: 15 additions & 0 deletions packages/producer/tests/audio-multi-track-mix/meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"name": "Audio Multi-Track Mix",
"description": "Regression for PR #1140: amix normalize=0 crash on FFmpeg 4.x causing silent output. Three local audio tracks with staggered start times and distinct volumes; all three must be audible in the mix.",
"tags": ["audio", "regression", "amix"],

"minPsnr": 25,
"maxFrameFailures": 0,

"minAudioCorrelation": 0.85,
"maxAudioLagWindows": 60,

"renderConfig": {
"fps": 30
}
}
Empty file.
54 changes: 54 additions & 0 deletions packages/producer/tests/audio-multi-track-mix/output/compiled.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<!DOCTYPE html>
<html lang="en">
<head><style data-hyperframes-text-rendering="true">html,body,*{text-rendering:geometricPrecision}</style>
<meta charset="UTF-8">
<title>Audio Multi-Track Mix</title>
<style>
html, body { margin: 0; padding: 0; background: #111; }
#root {
position: relative;
width: 1280px;
height: 720px;
background: #111;
display: flex;
align-items: center;
justify-content: center;
font-family: monospace;
color: #fff;
}
.label {
position: absolute;
font-size: 32px;
font-weight: bold;
letter-spacing: 0.05em;
}
#t1 { top: 180px; color: #4fc3f7; }
#t2 { top: 300px; color: #81c784; }
#t3 { top: 420px; color: #ffb74d; }
</style>
</head>
<body>
<!--
Regression fixture for PR #1140 (amix normalize=0 crash on FFmpeg 4.x).

Three audio tracks at different start times and volumes.
The mixer must produce a non-silent output with all tracks audible —
this catches any regression where amix options break the filter graph
and the output becomes silent.
-->
<div id="root" data-composition-id="main" data-width="1280" data-height="720" data-start="0" data-duration="4">
<!-- Track 1: 440 Hz tone, full duration, volume 0.6 -->
<audio id="track-1" src="assets/tone-440hz.wav" data-start="0" data-duration="4" data-volume="0.6" data-end="4"></audio>

<!-- Track 2: 660 Hz tone, starts at 0.5s, volume 0.8 -->
<audio id="track-2" src="assets/tone-660hz.wav" data-start="0.5" data-duration="3" data-volume="0.8" data-end="3.5"></audio>

<!-- Track 3: 880 Hz tone, starts at 1.5s, volume 1.0 -->
<audio id="track-3" src="assets/tone-880hz.wav" data-start="1.5" data-duration="2" data-volume="1.0" data-end="3.5"></audio>

<div class="label" id="t1">440 Hz — vol 0.6 (t=0s)</div>
<div class="label" id="t2">660 Hz — vol 0.8 (t=0.5s)</div>
<div class="label" id="t3">880 Hz — vol 1.0 (t=1.5s)</div>
</div>
</body>
</html>
Git LFS file not shown
Binary file not shown.
Binary file not shown.
Binary file not shown.
79 changes: 79 additions & 0 deletions packages/producer/tests/audio-multi-track-mix/src/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Audio Multi-Track Mix</title>
<style>
html, body { margin: 0; padding: 0; background: #111; }
#root {
position: relative;
width: 1280px;
height: 720px;
background: #111;
display: flex;
align-items: center;
justify-content: center;
font-family: monospace;
color: #fff;
}
.label {
position: absolute;
font-size: 32px;
font-weight: bold;
letter-spacing: 0.05em;
}
#t1 { top: 180px; color: #4fc3f7; }
#t2 { top: 300px; color: #81c784; }
#t3 { top: 420px; color: #ffb74d; }
</style>
</head>
<body>
<!--
Regression fixture for PR #1140 (amix normalize=0 crash on FFmpeg 4.x).

Three audio tracks at different start times and volumes.
The mixer must produce a non-silent output with all tracks audible —
this catches any regression where amix options break the filter graph
and the output becomes silent.
-->
<div
id="root"
data-composition-id="main"
data-width="1280"
data-height="720"
data-start="0"
data-duration="4"
>
<!-- Track 1: 440 Hz tone, full duration, volume 0.6 -->
<audio
id="track-1"
src="assets/tone-440hz.wav"
data-start="0"
data-duration="4"
data-volume="0.6"
></audio>

<!-- Track 2: 660 Hz tone, starts at 0.5s, volume 0.8 -->
<audio
id="track-2"
src="assets/tone-660hz.wav"
data-start="0.5"
data-duration="3"
data-volume="0.8"
></audio>

<!-- Track 3: 880 Hz tone, starts at 1.5s, volume 1.0 -->
<audio
id="track-3"
src="assets/tone-880hz.wav"
data-start="1.5"
data-duration="2"
data-volume="1.0"
></audio>

<div class="label" id="t1">440 Hz — vol 0.6 (t=0s)</div>
<div class="label" id="t2">660 Hz — vol 0.8 (t=0.5s)</div>
<div class="label" id="t3">880 Hz — vol 1.0 (t=1.5s)</div>
</div>
</body>
</html>
15 changes: 15 additions & 0 deletions packages/producer/tests/remote-media-localize/meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"name": "Remote Media Localize",
"description": "Regression for PR #1146: remote S3 <video> and <audio> sources must be downloaded and rewritten to local paths before capture (skybound trailer: black frames + no audio). Also covers crossorigin strip on <audio> and <img> (PR #1140). The compiled.html snapshot verifies the src attributes are rewritten to _remote_media/.",
"tags": ["audio", "video", "regression", "remote-media", "crossorigin"],

"minPsnr": 25,
"maxFrameFailures": 3,

"minAudioCorrelation": 0.85,
"maxAudioLagWindows": 60,

"renderConfig": {
"fps": 30
}
}
Empty file.
56 changes: 56 additions & 0 deletions packages/producer/tests/remote-media-localize/output/compiled.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<!DOCTYPE html>
<html lang="en">
<head><style data-hyperframes-text-rendering="true">html,body,*{text-rendering:geometricPrecision}</style>
<meta charset="UTF-8">
<title>Remote Media Localize</title>
<style>
html, body { margin: 0; padding: 0; background: #000; }
#root {
position: relative;
width: 1280px;
height: 720px;
background: #000;
overflow: hidden;
}
#bg-video {
position: absolute;
top: 0; left: 0;
width: 1280px;
height: 720px;
object-fit: cover;
}
.label {
position: absolute;
bottom: 40px;
left: 0; right: 0;
text-align: center;
font-family: monospace;
font-size: 28px;
color: #fff;
text-shadow: 0 2px 8px #000;
}
</style>
</head>
<body>
<!--
Regression fixture for PR #1146 (remote media localization) and
PR #1140 (crossorigin strip).

Before the fix: remote S3 src on video + audio elements caused black
frames (Chrome buffering timeout) and silent output (CORS rejection).

After the fix: localizeRemoteMediaSources() downloads the files and
rewrites src to _remote_media/ before render. crossorigin attrs stripped.
PSNR and audio correlation verify the fix actually works end-to-end.
-->
<div id="root" data-composition-id="main" data-width="1280" data-height="720" data-start="0" data-duration="4">
<!-- Remote video: must be localized to _remote_media/ and crossorigin stripped -->
<video id="bg-video" src="_remote_media/download_26528e90ebdf.mp4" data-start="0" data-duration="4" muted playsinline data-end="4" data-has-audio="false"></video>

<!-- Remote audio: src must be localized + crossorigin stripped -->
<audio id="bg-audio" src="_remote_media/download_1cb75829e1a1.wav" data-start="0" data-duration="4" data-volume="0.7" data-end="4"></audio>

<div class="label">remote-media-localize regression</div>
</div>
</body>
</html>
Git LFS file not shown
78 changes: 78 additions & 0 deletions packages/producer/tests/remote-media-localize/src/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Remote Media Localize</title>
<style>
html, body { margin: 0; padding: 0; background: #000; }
#root {
position: relative;
width: 1280px;
height: 720px;
background: #000;
overflow: hidden;
}
#bg-video {
position: absolute;
top: 0; left: 0;
width: 1280px;
height: 720px;
object-fit: cover;
}
.label {
position: absolute;
bottom: 40px;
left: 0; right: 0;
text-align: center;
font-family: monospace;
font-size: 28px;
color: #fff;
text-shadow: 0 2px 8px #000;
}
</style>
</head>
<body>
<!--
Regression fixture for PR #1146 (remote media localization) and
PR #1140 (crossorigin strip).

Before the fix: remote S3 src on video + audio elements caused black
frames (Chrome buffering timeout) and silent output (CORS rejection).

After the fix: localizeRemoteMediaSources() downloads the files and
rewrites src to _remote_media/ before render. crossorigin attrs stripped.
PSNR and audio correlation verify the fix actually works end-to-end.
-->
<div
id="root"
data-composition-id="main"
data-width="1280"
data-height="720"
data-start="0"
data-duration="4"
>
<!-- Remote video: must be localized to _remote_media/ and crossorigin stripped -->
<video
id="bg-video"
src="https://gen-os-static.s3.us-east-2.amazonaws.com/astral_assets/uploaded_assets/12ca139c_8bf35a3b61b84ab69251ad5091e4c69b.mp4"
crossorigin="anonymous"
data-start="0"
data-duration="4"
muted
playsinline
></video>

<!-- Remote audio: src must be localized + crossorigin stripped -->
<audio
id="bg-audio"
src="https://gen-os-static.s3.us-east-2.amazonaws.com/astral_assets/generated_assets/f87f97d4_0c49f6fa95224cc3bd4f5ea3a0d937c5.wav"
crossorigin="anonymous"
data-start="0"
data-duration="4"
data-volume="0.7"
></audio>

<div class="label">remote-media-localize regression</div>
</div>
</body>
</html>
Loading