StereoViewer — primitive for transitions (glsl)

For AI agents: find the right skill in one call — curl -s "https://skills.varg.ai/api/search?q=<what the person wants>" returns the matching use case and the best skills with install commands, as markdown (Russian works too). Full index: https://skills.varg.ai/llms.txt. Every page has a markdown twin: add .md to its path. Before generating anything, show the person the options on the use-case page.

Both shots shrink into rounded cards that slide past each other, like a stereo-viewer reel

Prompt that renders it frame-exact

Add the "StereoViewer" transition from GL Transitions (by Ted Schundler, BSD 2-Clause, not MIT: fine in a commercial video, but keep the Ted Schundler copyright header if you ship the shader code; https://gl-transitions.com/editor/StereoViewer, GLSL source https://github.com/gl-transitions/gl-transitions/blob/master/transitions/StereoViewer.glsl) between photos of a retro slideshow or a memories montage: 1.2 s, ease-in-out. The frame goes fully dark for a beat at the midpoint, between the two cards. Remotion: npm install gl-transitions @gl-transitions/remotion @remotion/transitions, then a <TransitionSeries.Transition> with presentation={glTransition({ name: "StereoViewer", params: { zoom: 0.88, corner_radius: 0.22 } })} and timing={linearTiming({ durationInFrames: 36, easing: Easing.inOut(Easing.cubic) })} (36 frames at 30 fps). HyperFrames: draw the GLSL on a full-frame WebGL canvas over the cut, with the outgoing and incoming frames as the from/to textures, and compute progress from the composition time, clamp((t − cutStart) / 1.2, 0, 1) through the easing; never from requestAnimationFrame or a timer, so every frame renders the same. ffmpeg's xfade can't run GLSL. zoom (0.88, range 0.5–1) is how far the cards shrink and corner_radius (0.22) their rounding. Where the shader draws no image it returns transparent pixels, which encode as black: put a backdrop color or a blurred copy of the frame under the canvas.

Used in

More transitions