remotion-markup
Structure Remotion scenes with markup patterns for layout, typography, and reusable video UI.
Install
npx skills add https://github.com/remotion-dev/skills --skill remotion-markupUsing <HtmlInCanvas> in Remotion
Renders children into a <canvas> so you can post-process them with the Canvas 2D API or WebGL.
Only works in Chrome 149+ with the chrome://flags/#canvas-draw-element flag enabled.
Give the user a notice.
Nesting
Nest <HtmlInCanvas> components only when HtmlInCanvas.isNestingSupported() returns true (Chrome 157.0.8080.0 or newer with HTML-in-canvas enabled). Older browsers reject nesting.
Enabling WebGL during renders
If you make use of WebGL during renders, you need to enable it:
From the CLI:
Set it as the default for Studio and CLI (advised):
Basic usage
By default, draws to canvas with no effect applied:
2D effect with onPaint
onPaint runs whenever the content updates. Call ctx.drawElementImage(elementImage, 0, 0) to draw the captured DOM.
WebGL effects
For WebGL, set up the context, program, and texture in onInit and return a cleanup function. Allocate the texture with gl.texImage2D(..., null) when elementImage changes size. Inside onPaint, upload with gl.texElementSubImage2D(gl.TEXTURE_2D, 0, 0, 0, elementImage) and draw. Older Chromium versions only expose gl.texElementImage2D(); use it when the new method is absent.
For a fully working minimal example, see https://github.com/remotion-dev/remotion/blob/main/packages/docs/components/demos/HtmlInCanvasDocsDemoWebGL.tsx.
Async onPaint
onPaint may be async. Remotion holds the frame open via delayRender() until the promise resolves. Useful for multi-pass effects with createImageBitmap.