Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Make nested composition `data-playback-start` also shift descendant media

オープン
#3,245 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@valeriangalliat がすでに取り組んでいます。

2026年9月10日 から。

  • #3246 @miguel-heygen による — マージされずにクローズ
  • #3826 @valeriangalliat による — オープン

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
48/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
静か
技術スタック
typescript
領域
web-dev

調査の方向性

Start by reading the preview startResolver and render parseSubCompositions paths described in the issue, then compare how nested data-playback-start reaches descendant video and audio elements. Decide the intended contract with maintainers; done means the chosen behavior is consistent in Studio preview, CLI preview, and render capture, with tests or a documented alternative.

索引モデルが issue の本文から書いたものです。

説明

enhancement triage/needs-triage
Problem

data-playback-start on a nested composition slot seeks the child GSAP timeline. Nested <video> / <audio> still play from local t=0 / their own data-media-start. Preview (startResolver) and render (parseSubCompositions) agree.

Docs treat a nested composition’s data-playback-start as which moment of the child GSAP timeline shows first, not as a trim of media inside that scene.

The gap: start-trimming a nested scene (NLE-style) does not move media inside it.

I'm not sure whether that split is the intentional contract, or whether a slot in-point should also shift descendant media.

➡️ I have code ready for this here (outline below) - happy to make a PR with this if that's a welcome addition.

Proposed solution

If a nested composition’s data-playback-start should also trim media inside that scene (NLE-style):

<div
  data-composition-id="scene"
  data-composition-src="compositions/scene.html"
  data-start="1"
  data-duration="2"
  data-playback-start="1.5"
></div>

A nested <video data-start="0"> would appear at t=1, playing from 1.5s into the file, not from the start of the file.

  • Descendant media is shifted by the slot offset (master = hostStart − playbackStart + local)
  • Clips that end entirely before that offset never appear
  • Clips that overlap it start at the slot and skip the overlap in the file
  • Same behavior in preview and in render extract
  • On the slot, data-media-start stays an alias of data-playback-start. On <video> / <audio>, data-media-start stays a source-file offset for that element only.
Alternatives considered
  • Leave as-is (GSAP only). Authors set data-media-start on each nested <video> / <audio>. Awkward for “trim this nested scene,” and wrong for media that is not at local t=0.
  • Rewrite child attributes when inlining so extract never sees a slot offset. Preview still has to apply hostStart − playbackStart, so the two paths can drift.
  • Docs only. Spell out that composition data-playback-start never applies to nested media. No code change.
Additional context

Repro (any clip.mp4 at least 4s):

<!-- index.html -->
<div data-composition-id="main" data-start="0" data-duration="4" data-width="1920" data-height="1080">
  <div
    data-composition-id="scene"
    data-composition-src="compositions/scene.html"
    data-start="1"
    data-duration="2"
    data-playback-start="1.5"
  ></div>
</div>
<!-- compositions/scene.html -->
<template id="scene-template">
  <div data-composition-id="scene" data-width="1920" data-height="1080">
    <video id="clip" src="clip.mp4" data-start="0" data-duration="4" muted></video>
  </div>
</template>

On current main (0.7.107): GSAP on scene starts 1.5s into that timeline; the <video> starts at the beginning of the file.

Studio preview, CLI preview, and render capture all use the same runtime seek for nested-comp GSAP, so that half is consistent. Nested media is also consistent: all paths ignore the slot’s data-playback-start.

主要言語
TypeScript
スター
54.1k
フォーク
4.9k
平均マージ
7時間 18分
マージ済み PR(30日)
784

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

heygen-com/hyperframes のほかの issue

heygen-com/hyperframes の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。