Skip to main content

Video, meet Skia

Decode videos into GPU textures, compose them frame by frame with the React Native Skia canvas, and export the result through hardware encoders — audio included.

🎞 GPU-fast decoding

Video frames are decoded straight into GPU textures and wrapped as SkImages — no CPU round trip, no per-frame copies.

🖌 Draw with Skia

Compose frames with the full React Native Skia imperative API inside a worklet: shaders, paragraphs, filters, anything.

🪞 Preview = Export

The same drawFrame worklet renders the live preview and the exported file. What you see is exactly what you save.

🎵 Audio mixing

Play video soundtracks and standalone audio items in sync during playback, mixed into an AAC track on export.

⚡️ Hardware encoders

Export through MediaCodec on Android and AVAssetWriter on iOS, feeding the encoder GPU textures with zero readback.

📱 Device-aware

Query Android decoding/encoding capabilities to pick a resolution, frame rate and bit rate the device actually supports.

One worklet, every frame

const { currentFrame } = useVideoCompositionPlayer({
composition,
width, height,
autoPlay: true,
drawFrame: ({ canvas, currentTime, frames }) => {
'worklet';
// draw anything with the Skia canvas API —
// video frames arrive as GPU textures
},
});

return (
<Canvas style={{ width, height }}>
<Image image={currentFrame} width={width} height={height} />
</Canvas>
);
Island Studio demo

Learn by example

Three complete tutorial apps are built on this library: Island Studio (a tiny video editor — montage, shader transitions, draggable overlays, soundtracks), Caption Studio (word-timed auto-captions) and Wave Studio (an audio-reactive music visualizer with no video items at all).