> ## Documentation Index
> Fetch the complete documentation index at: https://docs.poof.bg/llms.txt
> Use this file to discover all available pages before exploring further.

# Transparent video: WebM alpha, ProRes 4444 and GIF

> Transparent WebM (VP9 alpha) for the web, ProRes 4444 for video editors or a looping GIF, from any clip. With the HTML video tag and a Safari fallback.

Poof returns a video with a real alpha channel, so the subject can sit on top of any page, scene or timeline without keying. There are three transparent formats:

| Format | Codec | Best for |
| - | - | - |
| `webm` (default) | VP9 with alpha (`yuva420p`), Opus audio | Websites and apps: small files, plays in a `<video>` tag |
| `mov` | ProRes 4444 with alpha (`yuva444p10le`), AAC audio | Video editors: Premiere Pro, Final Cut Pro, DaVinci Resolve, After Effects |
| `gif` | GIF89a with 1-bit transparency, no audio, up to 720p | Stickers, chat, email and anywhere a video tag will not play |

All three need `channels=rgba`, which is the default. MP4 cannot carry alpha; for a solid background use the [green screen guide](/guides/green-screen-video) instead.

The request and job flow are the same as in [Video background removal](/guides/video-background-removal); only `format` changes.

## WebM for the web

```bash theme={null}
curl -X POST https://api.poof.bg/v1/remove \
  -H "x-api-key: YOUR_API_KEY" \
  -F "file=@clip.mp4" \
  -F "format=webm"
```

Poll the job and download `result_url`. Host the file yourself (the CDN link expires after 24 hours), then play it like any video. `muted` and `playsinline` let it autoplay on mobile:

```html theme={null}
<video autoplay loop muted playsinline>
  <source src="/media/clip-no-bg.webm" type="video/webm" />
</video>
```

Pass `size=medium` (1280 px on the longest side) or `size=preview` (640 px) when the video plays small on the page; the file gets much lighter and the credits are the same.

### Safari

Safari does not show the alpha channel of a VP9 WebM, so the background turns opaque there. Safari plays HEVC with alpha instead. To cover every browser, request a `mov` (ProRes 4444) as well, convert it to HEVC with alpha on a Mac, and list it first:

```bash theme={null}
# macOS: ProRes 4444 with alpha → HEVC with alpha
avconvert --preset PresetHEVCHighestQualityWithAlpha \
  --source clip-no-bg.mov --output clip-no-bg-hevc.mov
```

```html theme={null}
<video autoplay loop muted playsinline>
  <source src="/media/clip-no-bg-hevc.mov" type='video/quicktime; codecs="hvc1"' />
  <source src="/media/clip-no-bg.webm" type="video/webm" />
</video>
```

Safari picks the HEVC file; Chrome, Edge and Firefox skip the QuickTime source and play the WebM. Test on the browsers you target. The ProRes file itself is too large to serve on the web.

## ProRes 4444 for video editors

```bash theme={null}
curl -X POST https://api.poof.bg/v1/remove \
  -H "x-api-key: YOUR_API_KEY" \
  -F "file=@clip.mp4" \
  -F "format=mov"
```

The result is a QuickTime file with ProRes 4444 and a 10-bit alpha channel. Drop it on a track above your background and it composites straight away, with no keying and no green spill. ProRes is an editing codec, so expect files many times larger than the source; export the final edit to your delivery format as usual.

With the SDKs:

<CodeGroup>
  ```python Python theme={null}
  job = client.remove_background("clip.mp4", format="mov", wait=True)
  client.download(job, "clip-no-bg.mov")
  ```

  ```typescript TypeScript theme={null}
  const job = await poof.removeBackground('clip.mp4', { format: 'mov', wait: true });
  ```
</CodeGroup>

## Transparent GIF

`format=gif` returns a looping GIF with a transparent background. It plays wherever an image does, including chat apps, email and Safari, with no `<video>` tag:

```bash theme={null}
curl -X POST https://api.poof.bg/v1/remove \
  -H "x-api-key: YOUR_API_KEY" \
  -F "file=@clip.mp4" \
  -F "format=gif" \
  -F "size=preview"
```

GIF is an old format, so the output has limits the other formats do not:

* **1-bit transparency.** Each pixel is either fully opaque or fully transparent (alpha of 50% or more is kept), so soft edges such as hair and motion blur are hard-cut. Use WebM or ProRes when the edges matter.
* **Up to 720p.** GIF output is capped at 1280 px on the longest side whatever `size` says, because GIF has no inter-frame compression and files grow fast. `size=preview` (640 px) keeps a sticker small.
* **Up to 50 fps**, looping forever, with no audio track.

A GIF is billed like any other video: 5 credits per second of source video (10 above 30 fps). Animated GIFs work as input too, so you can send a GIF and get a transparent GIF, WebM or MOV back.

<CodeGroup>
  ```python Python theme={null}
  job = client.remove_background("clip.mp4", format="gif", size="preview", wait=True)
  client.download(job, "sticker.gif")
  ```

  ```typescript TypeScript theme={null}
  const job = await poof.removeBackground('clip.mp4', { format: 'gif', size: 'preview', wait: true });
  ```
</CodeGroup>

## Only the matte

If your pipeline does its own compositing, `channels=alpha` returns the matte as a grayscale video (white subject, black background, no audio). `format=mp4` gives the smallest file that every tool can decode. See [Alpha matte video](/api-reference/remove-background#alpha-matte-video).

## Without code

In **Studio** at [dash.poof.bg](https://dash.poof.bg), upload a clip, choose WebM, MOV or GIF and download the result. Through the [MCP server](/integrations/mcp), ask your assistant for "a transparent WebM" or "a ProRes 4444 MOV" of a video URL.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.