← Files GifGen - GIFsARCHIVED FILE

skills/animate-image/SKILL.md

4.43 KB · Oct 2, 2026 · 00:34 UTC

↓ Download file

---
name: animate-image
description: Turn an image that already exists into an animation. Use when there is a picture in the conversation — uploaded by the user, or one you generated — and they want it to move, or when you have generated a single flat picture while trying to make a GIF and now need frames. Covers "animate this photo", "make this logo move", "bring this drawing to life", "make this picture wave / spin / blink", and the recovery case where a GIF request produced one still image instead of a grid of frames.
---

A GIF can only be built from **separate frames**. A single picture is not
an animation and cannot be made into one by panning, zooming or bouncing
it — that is a still image being moved around, and people spot it at once.

This skill does one job: take an existing image and produce a **grid of
frames** from it, so it can be cut into a GIF.

## When this runs

Either of these:

- **The user has an image** — uploaded, or generated earlier — and wants
  it animated.
- **You generated a single flat picture** while trying to make a GIF. Do
  not try to salvage it with motion effects. Come here instead: that
  picture becomes the reference for a proper grid.

## Step 1 — look at the image first

Actually look at it, and decide three things before writing any prompt:

1. **The subject** — what is it, in a few words, precisely enough that a
   regenerated version is recognisably the same thing. "A grumpy chrome
   toaster with cartoon eyes on a mint background", not "a toaster".
2. **What should move** — pick ONE motion and keep the rest still. A
   toaster shakes and launches toast; its background does not drift. The
   commonest mistake is animating everything at once, which reads as a
   scene wobbling rather than a subject acting.
3. **The style** — flat vector, 3D render, photo, pixel art, watercolour.
   The grid must match it, or the animation will not look like the image
   the user already has.

State the motion you chose in one short line before generating, so the
user can redirect you cheaply if it is not what they meant.

## Step 2 — generate the grid FROM that image

Call image generation **with the existing image as the reference**, so the
subject and style carry over instead of being reinvented. Use this prompt:

> A SQUARE image containing a N×N grid of TOTAL panels, using the provided
> image as the exact subject and style reference, showing that same subject
> at successive moments of
> MOTION. Consecutive panels differ only slightly, so the motion advances
> in small, even steps and the whole grid reads as one continuous action
> rather than separate poses. The TOTAL panels form one looping cycle
> (panel TOTAL returns to panel 1). Identical subject, camera, lighting
> and background in every panel — only MOTION changes. All panels are
> exactly the same size, tiled edge to edge with no gaps, margins or
> gutters: the image divides evenly into N equal columns and equal rows.
> No text, no numbers, no borders.

`size="1024x1024"`. Default to a 4×4 grid (16 frames); 3×3 when the
subject is detailed and needs the resolution, 5×5 when the motion needs to
be smooth.

Same rules as any grid: the count appears once, in the opening layout
clause. Never narrow the subject. Keep "no text, no numbers, no borders".

## Step 3 — LOOK at what came back

Before encoding, look at the generated image and say, in one line: how
many columns, how many rows, and whether the same subject repeats across
the panels.

If it is one big picture again rather than a grid, do NOT encode it and do
NOT animate it with motion effects. Generate once more, leading the prompt
with "A NxN grid of TOTAL panels of ...". If you are unsure whether it is
a sheet, run `python3 ../make-gif/scripts/inspect_sheet.py IMAGE` — it
prints GRID or NOT_A_GRID.

## Step 4 — hand it to the GIF encoder

The grid is detected from the image; do not pass `--grid`:

```
python3 ../make-gif/scripts/sheet_to_gif.py SHEET --fps 7 --frames frames.zip
```

Then deliver it with the exact output block in
`../make-gif/references/output-message.md`. That wording is fixed — do not
reword it, and put nothing before or after it.

## What not to do

- **Do not animate the single image directly.** No pan, no zoom, no
  ken-burns, no duplicating it with offsets.
- **Do not redraw from scratch** when a reference image exists — the user
  chose that picture and expects to recognise it.
- **Do not animate the background** unless the user asked. One thing
  moves.

SHA-256: bbc6ad943e91110cd8763a627b7572a9acbacdda8ac2f4345f69ace2d191197e