Flickering when using background-image or mask-image
The following code is discouraged in Remotion:
❌ Don't do thisconstmyMarkup = ( <div style ={{backgroundImage : `url(${src })`, }} > <p >Hello World</p > </div > );
Problem
Remotion has no way of knowing when the image is finished loading because it is impossible to determine so when loading an image through background-image, mask-image, or other CSS properties. This will lead to Remotion not waiting for the image to be loaded during rendering and cause visible flickers.
Solution
Use the <Img> tag instead and place it in an <AbsoluteFill>:
✅ Do thisimport {AbsoluteFill ,Img } from "remotion"; constmyMarkup = ( <AbsoluteFill > <AbsoluteFill > <Img style ={{width : "100%", }}src ={src } /> </AbsoluteFill > <AbsoluteFill > <p >Hello World</p > </AbsoluteFill > </AbsoluteFill > );
The next will be placed on top of the image and will not flicker.
Workaround
If you cannot use an <Img> tag, for example because you need to use mask-image(), render an adjacent <Img> tag that renders the same src and place it outside the viewport:
✅ Do thisimport {Img } from "remotion"; constmyMarkup = ( <> <Img src ={src }style ={{opacity : 0,position : "absolute",left : "-100%", }} /> <div style ={{maskImage : `url(${src })`, }} > <p >Hello World</p > </div > </> );
The hidden <Img> tag ensures the image will download completely which allows the background-image will fully render.