Seam Craft — Render-Voraussetzungen für Szenenübergänge
Dies ist die Render-Korrektheits-Doktrin für PLV-Szenen-zu-Szenen-Übergänge: die Voraussetzungen und Master-Timeline-Mechaniken, die sicherstellen, dass jeder Übergang korrekt komponiert wird, unabhängig davon, welcher spezifische Übergang gewählt wurde. Der Katalog der einzelnen Übergänge (Crossfade, Push-Slide, Zoom-Through, Cut-the-Curve, …) befindet sich im Übergangsregister – diese Seite ist die Doktrin, die allen zugrunde liegt.
Die Übergänge, die diese Doktrin regelt, sind Tier-B-ready: reine Transform-/Opacity-/
Filter-Operationen auf den beiden Szenen-Clip-Wrappern (#el-<sid>), kein injiziertes
Overlay-DOM, keine szenenübergreifende Zusammenarbeit. Overlay-Familien (gestaffelte
Blöcke, Jalousien, Lichtlecks, Rasterauflösung, Seitenverbrennung) und Shader-Übergänge
werden auf spätere Phasen verschoben.
Bühnenhintergrund-Voraussetzung (White-Flash-Schutz)
Mehrere Vorlagen öffnen ein Fenster, in dem die summierte Deckkraft der beiden Wrapper < 1
liegt (der Mid-Window-Cut bei Cut-the-Curve, der 0,15-Boden bei Zoom-Through, der
Power-Curve-Dip beim einfachen Crossfade). Was auch immer HINTER den Wrappern liegt,
scheint während dieses Fensters durch. Wenn das zusammengesetzte index.html #root
keinen opaken Hintergrund hat, komponiert der Renderer den Dip über seinem standardmäßig
weißen Seitenhintergrund → ein weißer Blitz an jeder Nahtstelle, der auf dunklen Filmen
auffällt (beobachtet bei zwei Spotify-Durchläufen vor der Behebung).
Der Assembler muss die Bühne einfärben: #root { background: var(--canvas-deep, var(--canvas, #000)) } — assemble-index.mjs gibt dies nun aus;
jeder andere Verwender dieser Vorlagen übernimmt dieselbe Garantie.
Wie der Injector einen Übergang anwendet
An einer break-Grenze zwischen Szene i (from) und Szene i+1 (to) führt der
Injector Folgendes aus:
- Verlängert die
data-durationdes Wrappers#el-<from>umduration_s(hält sein letztes Bild — verifiziert:core/src/runtime/init.ts:1393-1410External-Slot-Branch). - Verschiebt den
data-startdes Wrappers#el-<to>umduration_snach vorne (erzeugt das Überlappungsfenster). - Weist alle Clip-
data-track-indexals 0/1-Ping-Pong neu zu, sodass die beiden überlappenden Wrapper niemals denselben Track teilen (Überlappung auf demselben Track ist nicht zulässig —core/src/lint/rules/composition.ts). Der höhere Track komponiert oben. - Fügt die
gsap_templateinwindow.__timelines["main"]beiT = overlap-startein.
Verifiziert durch Prototyp-Render (2026-05-31): Der Master-Timeline-Wrapper-Tween wird abgespielt und gerendert (kein Doppel-Abspielen mit der eigenen pausierten Timeline des Sub-Comps — die Laufzeitumgebung steuert sie unabhängig), der verlängerte Wrapper hält Szenen i's letztes Bild, und der eingehende Wrapper mit höherem Track komponiert darüber und überblendet mit dem ausgehenden.
Vorlagen-Platzhalter
Der Injector ersetzt diese Token in jeder gsap_template-Zeile:
| Token | Bedeutung |
|---|---|
__OLD__ | "#el-<from>" — Selector des ausgehenden Clip-Wrappers (zitiert) |
__NEW__ | "#el-<to>" — Selector des eingehenden Clip-Wrappers (zitiert) |
__T__ | Überlappungsstartzeit in Sekunden (Master-Takt) |
__DUR__ | duration_s für diese Grenze |
__DX__ | Horizontale Bewegung für Richtungstypen: -1920 (LINKS) / 1920 (RECHTS) |
__DY__ | Vertikale Bewegung: -1080 (OBEN) / 1080 (UNTEN) |
__ORIGIN_OUT__ / __ORIGIN_IN__ | transformOrigin-Paar für squeeze |
filter / scaleX / transformOrigin sind Lint-sauber auf der Master-Timeline
(verifiziert: core/src/lint/rules/gsap.ts hat keine eigenschaftsspezifische Whitelist
und beschränkt seine Prüfungen auf data-composition-id-Bereiche; die x/y/scale/rotation/opacity-Whitelist
ist nur eine Scene-Worker-Prompt-Regel – sie bindet nicht index.html).