fix: offset nested template video timing (#2859)

* fix: offset nested template video timing

* test(producer): cover nested sequential video render

* fix: share canonical nested media timing
This commit is contained in:
Miguel Ángel
2026-07-29 03:36:04 +02:00
committed by GitHub
parent 4f344c50b0
commit 9bbb6d50a0
13 changed files with 385 additions and 48 deletions
@@ -0,0 +1,13 @@
{
"name": "Later nested template video stays visible",
"description": "Two template-mounted hosts play sequentially, and each template owns a scene-local video with data-start=0 that reads its half of one generated source. Before the fix, producer capture evaluated the later video's start against root time without its host offset, hid it for the entire second host window, and rendered black instead of the generated green half.",
"tags": ["video", "sub-composition", "regression"],
"minPsnr": 25,
"maxFrameFailures": 2,
"minAudioCorrelation": 0,
"maxAudioLagWindows": 1,
"renderConfig": {
"fps": 24,
"workers": 1
}
}
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:04e1e32b29828b8cbe7ba114ab66081eb5443359eed7e911cf0e2462044b7cd0
size 2291
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7e56506833244506267cbe6c8bdd971eb2f92fbf96a83ce18c7565c74ecbfcae
size 2829
@@ -0,0 +1,23 @@
<template id="first-template">
<div
data-composition-id="first-scene"
data-width="160"
data-height="90"
data-no-timeline
style="position: relative; width: 160px; height: 90px; overflow: hidden; background: #000"
>
<video
id="first-video"
class="clip"
data-start="0"
data-duration="1"
data-media-start="0"
data-track-index="0"
src="../media/source.mp4"
muted
playsinline
preload="auto"
style="display: block; width: 160px; height: 90px; object-fit: cover"
></video>
</div>
</template>
@@ -0,0 +1,23 @@
<template id="later-template">
<div
data-composition-id="later-scene"
data-width="160"
data-height="90"
data-no-timeline
style="position: relative; width: 160px; height: 90px; overflow: hidden; background: #000"
>
<video
id="later-video"
class="clip"
data-start="0"
data-duration="1"
data-media-start="1"
data-track-index="0"
src="../media/source.mp4"
muted
playsinline
preload="auto"
style="display: block; width: 160px; height: 90px; object-fit: cover"
></video>
</div>
</template>
@@ -0,0 +1,59 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=160, height=90" />
<style>
html,
body,
#root {
width: 160px;
height: 90px;
margin: 0;
overflow: hidden;
background: #000;
}
.scene {
position: absolute;
inset: 0;
background: #000;
}
</style>
</head>
<body>
<div
id="root"
data-composition-id="main"
data-start="0"
data-duration="2"
data-width="160"
data-height="90"
data-no-timeline
>
<div
id="first-host"
class="scene"
data-composition-id="first-scene"
data-composition-src="compositions/first.html"
data-start="0"
data-duration="1"
data-track-index="0"
data-no-timeline
></div>
<div
id="later-host"
class="scene"
data-composition-id="later-scene"
data-composition-src="compositions/later.html"
data-start="1"
data-duration="1"
data-track-index="1"
data-no-timeline
></div>
</div>
<script>
window.__timelines = window.__timelines || {};
</script>
</body>
</html>
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5b3552325f6a25ea3859be60a6bef131878066aca48d8409e4182f539d144e5f
size 2750