How to make a reaction gif from a video clip
- Step 1Grab the source clip — Screen-record the stream, save the TikTok, or export the moment from your editor. Any of
.mp4,.mov,.mkv,.webm,.avi,.m4v,.tsworks — no need to convert first. - Step 2Trim to the exact reaction — Open the lossless trimmer, mark the start and end of the moment, export. It stream-copies at the nearest keyframe so it's instant and lossless. This is the step that makes a reaction GIF small — do it before converting.
- Step 3Drop the trimmed clip onto this GIF tool — The short clip loads into FFmpeg.wasm in your browser. Nothing uploads. Because it's only a couple of seconds, the two-pass encode finishes quickly.
- Step 4Set width to 360–480 for chat — Reaction GIFs display small. 400–480 px wide keeps the file tiny while staying legible in Discord/Slack/Reddit. Height auto-scales. Going wider just bloats the file for no visible benefit at chat display sizes.
- Step 5Set FPS to 12–15 for snappy looping — 12–15 FPS reads as fluid for most reactions and keeps the frame count low. Bump to 20–24 only for fast action you want buttery-smooth; remember every frame is a full 256-colour image.
- Step 6Convert and drop it straight into chat — Download the
.gifand paste it into Discord, Slack, or Reddit — they autoplay and loop inline. If it's still too big to autoplay, drop the width to 320 and FPS to 12 and re-run.
Reaction-GIF settings cheat sheet
Practical FPS/width combos for the tool's two controls, tuned for chat platforms. Both values are the only knobs the tool exposes.
| Goal | Width | FPS | Why |
|---|---|---|---|
| Tiny Discord/Slack inline | 320–400 | 12 | Smallest file that still autoplays inline; reads fine at chat size |
| Standard reaction | 480 | 15 | Tool defaults — good balance of sharpness and size |
| Fast-action moment | 480 | 24 | Smoother on quick motion; noticeably larger file |
| Sharp face / streamer cam | 480 | 15 | Lanczos keeps facial detail crisp; avoid widths under 320 for faces |
Why trim first (frame-count math)
GIF size scales with total frames. Trimming is the biggest lever — this is why the GIF tool deliberately has no full-clip shortcut.
| Clip length | FPS | Approx frames | Result |
|---|---|---|---|
| 30 s (untrimmed) | 15 | ~450 | Huge GIF, won't autoplay inline |
| 5 s | 15 | ~75 | Borderline for chat |
| 2 s (trimmed) | 15 | ~30 | Small, snappy, autoplays everywhere |
| 2 s | 12 | ~24 | Smallest practical reaction GIF |
Where reaction GIFs autoplay
GIF is chosen for reactions precisely because it autoplays and loops on legacy chat. Use WebP only where supported.
| Platform | GIF inline autoplay | Note |
|---|---|---|
| Discord | Yes | Loops inline; large GIFs may show 'click to load' |
| Slack | Yes | Autoplays under its inline size threshold |
| Yes | Posts and comments render GIFs | |
| Telegram / Signal | Prefer WebP | Use video-to-webp for smaller files |
Cookbook
Recipes for snappy, chat-ready reaction GIFs. Each assumes you've trimmed to the moment first, then run the two-pass converter.
Two-second eye-roll for Discord
Trim the eye-roll, convert at 400 px / 12 FPS — small enough to autoplay inline.
Step 1: lossless-trimmer -> eyeroll_2s.mp4
Step 2: video-to-gif
Width 400, FPS 12
-> palettegen=stats_mode=diff (pass 1)
-> paletteuse=dither=bayer:bayer_scale=5 (pass 2)
-> eyeroll.gif (~30 frames, tiny)
Paste into Discord -> autoplays and loops inline.Streamer cam reaction, face stays sharp
Faces need crispness. Keep width at 480 and let Lanczos do the work; don't drop below 320 or skin detail mushes.
Trim to the 1.5s reaction first. video-to-gif: Width 480, FPS 15 scale=480:-1:flags=lanczos keeps facial edges crisp. Avoid: Width 240 -> face softens, loses the expression.
Slow-mo nod that needs to read as deliberate
Slow the clip first, then convert at low FPS for a small file with the deliberate pacing intact.
Step 1: video-speed-controller -> nod_slow.mp4 Step 2: video-to-gif: Width 420, FPS 12 -> nod.gif Lower FPS suits slow motion and keeps the file small (fewer frames, same perceived pacing).
It's too big to autoplay — shrink it
If chat shows 'click to load', drop width and FPS together and re-run. No re-trim needed.
Was: Width 600, FPS 20 -> too big for inline Now: Width 360, FPS 12 -> autoplays inline Size scales ~ width^2 x fps, so this cuts it ~5x.
Same reaction as a Telegram sticker instead
Telegram favours WebP. If your reaction is destined for Telegram/Signal, convert to animated WebP for a smaller file.
Trim to the moment, then: video-to-webp -> reaction.webp (~30% of GIF size) Use for Telegram/Signal; keep the GIF for Discord/Reddit.
Edge cases and what actually happens
You converted the whole clip and got a 20 MB GIF
By designThis tool converts the entire file it's given — there's no trim inside it. A long clip makes a huge GIF. Trim to the reaction moment first with the lossless trimmer; a 2-second cut is ~30 frames versus hundreds for the full clip.
GIF won't autoplay inline in Discord/Slack
Size thresholdChat platforms only autoplay GIFs under an inline-size threshold; over it they show a click-to-load placeholder. Lower the width (try 320–360) and FPS (try 12) and re-run. The tool's two controls are exactly the levers for this.
Reaction had sound (a quote you wanted)
By designGIF can't store audio, so the quote is dropped silently. For a sound reaction, keep the clip as a short video or post it as MP4. GIF reactions are visual-only by format definition.
Face looks muddy after conversion
ExpectedLikely the width was set too low. Faces need detail — keep width at 480 (or at least 320) so Lanczos has pixels to work with. Going to 240 or below softens facial expressions, which defeats a reaction GIF.
Fast action looks choppy
Expected12–15 FPS is great for talking-head reactions but can stutter on rapid motion. Raise FPS toward 24 for fast-action moments — at the cost of a bigger file. There's no smoothing/interpolation in this tool; FPS is the only motion control.
Flat background shows faint dither grain
ExpectedThe fixed Bayer dither (bayer_scale=5) adds a subtle ordered pattern to fake more than 256 colours; on a solid-colour backdrop it can read as light texture. It's the trade-off for smooth faces — the dither isn't adjustable in this tool.
Imported a clip with a watermark/lower-third you don't want
Use a sibling toolThe GIF tool can't crop. Remove a corner watermark or lower-third first with the cropper, then convert the cropped clip to GIF here.
Phone clip with variable frame rate
NormalisedThe fps= filter resamples VFR phone footage to your chosen constant rate, so loop timing stays even. You don't need to convert VFR to CFR before making the reaction GIF.
Frequently asked questions
How do I make the GIF small enough for Discord?
Trim to the exact moment first, then convert at a modest width (320–400 px) and FPS (12). File size scales roughly with width squared times FPS times duration, so a short, narrow, low-FPS clip is the smallest. This is the difference between an inline-autoplaying reaction and a click-to-load placeholder.
Can I trim inside this tool?
No — the GIF tool only has FPS and Width controls. Trim first with the lossless trimmer, which does an instant keyframe stream-copy with no quality loss, then drop the short clip here. Trimming first is what keeps reaction GIFs small.
Is there a watermark on the GIF?
No. There's no watermark and no account required. The whole conversion runs in your browser via FFmpeg.wasm, so your meme is yours — no GIF-host branding, no upload.
Will the reaction loop in chat?
Yes. GIFs loop by default and every chat platform that autoplays GIFs (Discord, Slack, Reddit) loops them. There's no loop-count setting — the output is a standard infinitely-looping GIF, which is exactly what a reaction needs.
What FPS should a reaction GIF use?
12–15 FPS for talking-head or slow reactions (smaller file, still smooth), and up to 24 for fast action you want buttery. The default is 15. Lower FPS is the easiest way to shrink the file without hurting a slow-motion or expression-based reaction.
How do I keep a face sharp?
Keep the width at 480 (or at least 320) so the Lanczos scaler has detail to preserve. Faces lose expression below ~320 px. The two-pass palette already keeps skin tones smooth; the main risk to facial detail is setting the width too small.
Can I add a caption to the reaction GIF?
Not directly. Burn the caption into the video first with the subtitle burner (hard-renders text into the frames), then convert the captioned clip to GIF here. See the captioned-GIF recipe.
What if the reaction had audio I cared about?
GIF can't carry audio — it's dropped. If the audio is the point (a famous quote), post the trimmed clip as a short MP4 instead, or keep an MP4 alongside the GIF. GIF reactions are purely visual.
Does my clip get uploaded to make the GIF?
No. Everything runs locally in your browser through FFmpeg.wasm. Your source clip is read, processed, and the GIF is downloaded all on your machine — there's no upload step and no server sees your footage.
Can I crop out a watermark before converting?
Yes, but in a separate step. The GIF tool can't crop. Use the cropper to remove a corner logo or lower-third, then convert the cropped clip to GIF. See remove a lower-third watermark.
How big a source clip can I drop in?
Free tier allows a single source up to 1 GB; Pro is 10 GB and 5 files, Pro-media 100 GB and 50 files. You'll rarely need that — reaction sources are tiny — but you can drop a raw screen capture and trim down without worrying about the size.
Should I use WebP for reactions instead?
Use GIF for Discord, Slack, and Reddit (maximum compatibility, autoplay everywhere). Use animated WebP for Telegram and Signal, where it's smaller (~30% of GIF size) and supported. Match the format to where the reaction is going.
Privacy first
Every JAD Video tool runs entirely in your browser via WebCodecs and FFmpeg (WebAssembly). Your video files never leave your device — verified by zero outbound network requests during processing.