Free tool · runs in your browser
Animate an emote without a video model
Drop an emote in and it loops at 112px with a transparent background, under the 1 MB cap, checked frame by frame at 28×28. No upload, no credits, no waiting on a render queue.
Drop a PNG, WebP or GIF
or
Your file never leaves this device.
Why this is not an AI video model
An animated Twitch emote is a very specific thing: 112px, under 1 MB, at most 60 frames, transparent background, and a silhouette that still reads at 28px. An image-to-video model returns none of that. It gives you an opaque clip at 480p or better, with a background, no loop, and a character it has re-rendered from scratch — so the face that was approved drifts, the edges need matting frame by frame, and the clip has to be cut into a loop that either boomerangs or ghosts.
The models are not the expensive part. At the time of writing, a two-second 480p image-to-video run costs about four to nine cents, which is affordable. The expensive part is the failure rate: every run that comes back with a new jawline, a warped outline or a smear of background has to be thrown away after paying for it, and then a human still has to key it, crop it and time it.
So the motion here is performed on the pixels you already have. The emote is treated as a sheet of rubber over a mesh; the feet stay put and the top sways, or the whole shape squashes and stretches with volume preserved. Because the character is never re-drawn, every frame is pixel-identical to the one you approved. Because the transforms are periodic, frame 24 lands exactly where frame 1 started and the loop closes itself.
What gets checked before you download
Every frame is downsampled to 28px and scored with the same engine as the readability checker, so a preset that looks fine large but mushes small is reported as such instead of shipped. The loop seam is measured as the size of the wrap-around jump relative to a normal frame-to-frame step: at or below 1.0 the loop is continuous, and the glitch preset is deliberately above it. The GIF is then encoded with a reserved transparent index and a restore-to-background disposal method, which is what keeps chat from showing a trail behind the character.
Want the whole set animated, not one emote?
The set maker builds every reaction from one locked character, then animates each one in place.