# Remotion Rule: Can Decode > Remotion skill rule: Check if a video can be decoded by the browser using Mediabunny. Part of the official Remotion Agent Skill for programmatic video in React. ## Install Save the content below to `.claude/skills/` or append to your `CLAUDE.md`: ## Quick Use ```bash npx skills add remotion-dev/skills ``` This rule activates automatically when working with can decode in a Remotion project. --- ## Intro Check if a video can be decoded by the browser using Mediabunny. Part of the [Remotion AI Skill](https://tokrepo.com/en/workflows/57997ead-c8fa-409c-916f-28bbc0adc8d9) — the official Agent Skill for programmatic video creation in React. **Best for**: Developers using Remotion for can decode **Works with**: Claude Code, OpenAI Codex, Cursor --- ## Rule Content # Checking if a video can be decoded Use Mediabunny to check if a video can be decoded by the browser before attempting to play it. First, install the right version of Mediabunny: ```bash npx remotion add mediabunny ``` ## The `canDecode()` function This function can be copy-pasted into any project. ```tsx import { Input, ALL_FORMATS, UrlSource } from "mediabunny"; export const canDecode = async (src: string) => { const input = new Input({ formats: ALL_FORMATS, source: new UrlSource(src, { getRetryDelay: () => null, }), }); try { await input.getFormat(); } catch { return false; } const videoTrack = await input.getPrimaryVideoTrack(); if (videoTrack && !(await videoTrack.canDecode())) { return false; } const audioTrack = await input.getPrimaryAudioTrack(); if (audioTrack && !(await audioTrack.canDecode())) { return false; } return true; }; ``` ## Usage ```tsx const src = "https://remotion.media/video.mp4"; const isDecodable = await canDecode(src); if (isDecodable) { console.log("Video can be decoded"); } else { console.log("Video cannot be decoded by this browser"); } ``` ## Using with Blob For file uploads or drag-and-drop, use `BlobSource`: ```tsx import { Input, ALL_FORMATS, BlobSource } from "mediabunny"; export const canDecodeBlob = async (blob: Blob) => { const input = new Input({ formats: ALL_FORMATS, source: new BlobSource(blob), }); // Same validation logic as above }; ``` --- ## Source & Thanks > Created by [Remotion](https://github.com/remotion-dev). Licensed under MIT. > [remotion-dev/skills](https://github.com/remotion-dev/skills) — Rule: `can-decode` Part of the [Remotion AI Skill](https://tokrepo.com/en/workflows/57997ead-c8fa-409c-916f-28bbc0adc8d9) collection on TokRepo. --- Source: https://tokrepo.com/en/workflows/366c9fbf-7d07-4a81-94d4-1ada04e4110a Author: Skill Factory