---
name: GIPHY
description: Use when a moving reaction is the right answer — a GIF for a video scene, a post, a chat reply, a slide, an empty state. Searches GIPHY by words and downloads chosen GIFs into the work with their credits. Needs a free GIPHY API key. Not for stock footage, product video, or anything that has to be brand-owned.
tagline: Search GIPHY and drop the right GIF straight into your video, post or deck.
website: https://giphy.com
icon: gif
version: 1
situations: add a gif, find a gif, reaction gif, animated sticker, something moving here, giphy, meme gif, celebration gif, make this post funnier, a gif for this scene
requires-secrets: GIPHY_API_KEY
requires-packages:
---

# GIPHY

Two tools. `giphy_search` finds GIFs by words; `giphy_fetch` downloads the ones that were picked into a
folder of the work, with a `GIPHY.md` credits file beside them.

```
giphy_search  query: "mind blown"  limit: 12
giphy_fetch   ids: ["3o7btPCcdNniyf0ArS"]  into: "projects/reel/assets/gif"
```

`giphy_search` prints one result per line — `id`, title, preview URL, size, original URL — in the order
GIPHY returned them. Show the person a few and let them choose; a GIF is a joke, and picking one for
somebody else rarely lands.

## The key

A free key from <https://developers.giphy.com/dashboard/>, entered once in **Settings → keys** as
`GIPHY_API_KEY`. Installing this skill asks for it. Nothing works without it and both tools say so in
one line rather than failing obscurely.

## Where GIFs go

`projects/<name>/assets/gif/` — one folder per project, the house rule. `giphy_fetch` refuses any path
outside the workspace, caps each file at 12 MB, and checks the bytes really are a GIF before writing
one (a CDN that answers with an error page must not land as a `.gif` nobody can play).

In the video editor, a GIF added to a scene is a `gif` layer pointing at that local file. It plays as a
plain image in the preview and is rendered frame-exactly by `@remotion/gif` on export.

## Attribution — not optional

GIPHY's API terms require their mark wherever their content is shown: **Powered by GIPHY**. The
editor's GIF picker carries it under the results, `giphy_fetch` writes it into `GIPHY.md`, and anything
you build that displays these GIFs has to carry it too. Say so when you hand work over.

Do not reorder or filter what a search returns, and do not mix GIPHY results into a grid with another
provider's — both are things their terms name specifically.

## The one thing to check before publishing this listing

GIPHY's developer documentation asks that GIFs be loaded from the URLs the API returns and **not be
cached, proxied, rewritten or stored**, with caching only by written approval for high-scale
integrations. `giphy_fetch` downloads a chosen GIF to disk, which is a deliberate departure: a video
render reads every frame off disk, deterministically and offline, and a URL in a scene file would make
the same project render differently on two machines — and not at all on one with no connection. What
it does is keep a local copy of an asset the person picked, in their own project, credited; it is not a
cache in front of the API, nothing is proxied, no URL is rewritten and nothing is re-served. That is a
defensible reading, not a licence. Confirm it with GIPHY (or take the partner conversation) before this
listing is published to anyone else.

## Network

`api.giphy.com` for search and id lookup, and GIPHY's own media CDN (`*.giphy.com`) for the bytes of a
GIF that was chosen. A media URL on any other host is refused rather than fetched. Nothing else in this
skill opens a socket.
