One file · up to 50.00 MB · all processing stays in your browser (GIF-004)
Resize mode
Size & loop
Load a GIF to see dimensions and file stats.
Preview
Original
No file loaded
Resized
Load a GIF to begin.
About this tool
Animated GIFs refuse to die because they solve a stubborn distribution problem: silent motion that plays inline almost everywhere—Discord servers, Slack threads, legacy email clients, intranet wikis, and social feeds that block autoplay video. The catch is that GIFs are almost always **too large** for the place you want to post them. Screen recordings export at full retina resolution, sticker bots hand back oversized loops, and meme archives inherit dimensions from a decade-old template. Shrinking a GIF is not as simple as changing width and height on a static JPEG: each frame must be resampled, palettes must be rebuilt, and timing metadata must survive the round trip or the animation feels “wrong” even when pixels look crisp.
SynthQuery’s **GIF Resizer** is built for creators, community managers, and developers who need trustworthy downscaling (or controlled upscaling for emoji-scale art) **without uploading proprietary loops to a random cloud encoder**. You open **/gif-resizer**, drop a single animated GIF, choose whether to drive output by exact pixels, percentage scale, or a platform preset tuned for Discord, Slack, or Twitter / X, then generate a preview that shows both the visual result and a before/after **file size** readout. Decoding uses the same disposal-aware compositing path as our other GIF utilities (gifuct-js), scaling uses the browser Canvas API with high-quality smoothing, and encoding uses **gif.js** workers so the main thread stays responsive on laptops and phones alike. Loop behavior follows the Netscape application extension from your source file, and per-frame delays are preserved so a deliberate stutter or hold frame still lands exactly where you authored it—subject only to GIF’s centisecond timing quantization, which every encoder shares.
What this tool does
The interface is organized around **three resize strategies**—pixels, percent, and presets—because real-world requests rarely arrive as a single number. Marketing stakeholders speak in platform boxes (“make it Discord-sized”), engineers speak in exact dimensions (“four eighty wide, aspect preserved”), and archival workflows speak in proportional scale (“fifty percent of the screen capture”). SynthQuery keeps all three first-class so you do not have to mental-math aspect ratios under deadline pressure.
**Aspect lock** deserves a precise explanation: when enabled, editing the locked edge recomputes the opposite edge using the source GIF’s pixel aspect ratio from the decoded logical screen, not the preview thumbnail. That prevents the stretched faces and oval logos that appear when independent width and height fields drift out of sync. When disabled, width and height are treated as independent targets and Canvas will stretch each frame—useful for deliberate correction, dangerous as a default.
**Platform presets** are implemented as deterministic geometry rules rather than hand-wavy “social optimized” labels. Discord’s emote preset uses a **contain** fit inside one-twenty-eight by one-twenty-eight, which means wide banners letterbox vertically inside the box instead of being cropped—mirroring how emote uploaders expect square canvases without guessing your focal point. Slack’s preset caps **width** at four hundred eighty pixels, which matches a common inline-message comfort band while letting tall screenshots stay readable. Twitter / X uses a twelve-hundred pixel **max width** rule, scaling down only when the source exceeds that cap so you do not accidentally upscale small stickers into blurry giants.
**Before and after file size** sits beside **frame count** and **loop** metadata so compliance reviewers can screenshot evidence that an asset was reduced before entering email or ticketing systems. The numbers come from the actual File API object and the generated Blob; they are not simulated estimates. Encoding uses gif.js’s quality curve and optional dithering path consistent with our **GIF Speed Changer** and **GIF from Photos** tools, which means support teams can reason about color behavior across the GIF suite instead of learning a new engine per page.
Technical details
From a file-format perspective, GIF stores a **logical screen** with optional global color tables, then streams **graphic control extensions** (delay, transparency index, disposal method) followed by **image descriptors** that paint rectangular patches. gifuct-js decompresses LZW-compressed image data; SynthQuery composites patches according to disposal types **do not dispose**, **restore to background**, and **restore to previous**, yielding full-frame RGBA buffers that match what mainstream browsers display.
Resizing applies **bilinear-style interpolation** via the Canvas 2D drawImage path with imageSmoothingQuality set to high, which is the browser’s tuned implementation rather than a custom kernel. Each frame is drawn from an offscreen buffer at source resolution into the target width and height, then read back as ImageData for quantization. This is **per-frame** work: GIF does not expose motion vectors like H.264, so temporal shortcuts are unavailable.
Re-encoding runs through **gif.js**, which builds a global palette per frame pipeline (NeuQuant-derived behavior) and emits LZW streams compatible with decoders that expect GIF89a structures. **Color tables are not “preserved” byte-for-byte** from the source—true table reuse would require a specialized transmuxer. Instead, frames are re-quantized, which is why byte size can rise when new high-frequency detail appears after scaling, or fall when dimensions shrink dramatically.
**Timing** is copied from the compositing pass: each delay in milliseconds is forwarded to gif.js, which maps to GIF’s centisecond fields. **Loop count** is read from the Netscape extension when present; repeat zero continues to mean infinite playback in the conventional encoder interpretation used across SynthQuery GIF tools.
Use cases
**Discord moderators and emoji artists** routinely receive animated emotes that exceed the guild upload limit. Resizing to the emote preset gives a predictable bounding box before they re-upload, while preserving timing so a comedic pause does not collapse into a rushed loop.
**Slack workspace admins** share UI walkthroughs and incident timelines as GIFs because MP4 playback is sometimes disabled by policy. Capping width for inline messages prevents a single animated screenshot from forcing horizontal scrolling on narrow laptops while keeping text legible in the surrounding thread.
**Social teams posting to Twitter / X** juggle feed density, autopoplay data budgets, and creative direction. A twelve-hundred-pixel width ceiling keeps animations crisp on high-DPI phones without shipping eight-megabyte screen captures that hurt Core Web Vitals on embedded web views.
**Email marketers** still rely on GIF for motion where video tags are stripped. Downsizing dimensions is often the difference between an image-heavy newsletter passing spam-weight heuristics and getting clipped by the ESP.
**Technical writers** embed short loops in documentation sites that statically host assets on CDNs; smaller dimensions directly translate to fewer bytes at the edge and faster LCP when heroes autoplay.
**Game modders and indie developers** reuse sprite loops across UI skins; uniform percentage scaling batch-aligns art to multiple DPI buckets before they import into engines.
**Privacy-sensitive organizations**—legal, healthcare, research—benefit from the same workflow as consumer creators but with a hard requirement that media never leaves the device; local decode and encode satisfies that bar without standing up an internal FFmpeg cluster for occasional GIF edits.
How SynthQuery compares
Browser-based GIF utilities range from ad-heavy upload farms to professional desktop suites. The table below contrasts SynthQuery’s **local-first** GIF Resizer with two archetypes users often mention—large free web chains such as EZGIF, and raster powerhouses such as Adobe Photoshop—so you can pick the right lane for governance, speed, and fidelity.
Aspect
SynthQuery
Typical alternatives
Where bytes are processed
Fully in your browser: gifuct-js decode, Canvas resample, gif.js encode—no file upload to SynthQuery for conversion.
EZGIF-class sites typically upload to a remote worker; Photoshop processes locally once installed.
Animation timing & loops
Per-frame delays and Netscape loop metadata are carried from the decoded source into the new GIF (GIF timing quantization still applies).
Some web tools reset delays to a uniform value unless you hunt for advanced checkboxes; Photoshop timelines require manual export discipline.
Resize controls
Pixels with aspect lock, percent presets (25–200% plus custom), and Discord / Slack / X-oriented geometry shortcuts with live target readout.
EZGIF offers many single-purpose pages; Photoshop exposes transforms but not always batch-friendly GIF re-export without scripting.
Cost & account friction
Free page on SynthQuery without a signup wall for this utility; limits are technical (file size, frame counts) rather than credit-based.
Photoshop requires subscription or perpetual license; some web chains gate batch features or show intrusive ads.
How to use this tool effectively
Start with the **highest-quality master** you can access. Chat apps often recompress inbound GIFs; resizing an already crushed file can exaggerate banding once NeuQuant runs inside gif.js. On desktop, open **/gif-resizer** and drag your .gif file onto the dashed hero zone, or tap the zone on mobile to open the system file picker. Only one file is accepted per session—this keeps memory predictable when hundreds of full-screen frames are involved—and the hard cap matches our other GIF editors at fifty megabytes.
After decode finishes, confirm the **source dimensions** and frame count in the summary card. If the animation is extremely long, consider trimming elsewhere first; very large frame stacks can take minutes to re-encode on low-power hardware. Choose a **resize mode**. **Pixels** mode exposes width and height fields with an optional **aspect lock**: lock to width when you have a hard column limit, lock to height when a navbar or hero slot dictates vertical space, or unlock both fields if you intentionally need a non-uniform stretch (rare, but useful for correcting non-square pixel oddities in legacy assets). **Percent** mode offers one-click targets at twenty-five, fifty, seventy-five, one hundred, one hundred fifty, and two hundred percent, plus a custom field up to five hundred percent for aggressive enlargements—remember that upscales cannot invent real detail, only interpolate new samples.
**Presets** translate product rules into math without making you memorize limits: **Discord emote** fits the logical canvas inside a one-twenty-eight pixel box (both axes), **Slack inline** caps width at four hundred eighty pixels while preserving aspect ratio, and **Twitter / X feed** caps width at one thousand two hundred pixels—common guidance for in-timeline media that should not dominate the viewport. The **Target** line updates live so you always know the raster size before you commit CPU time.
Press **Generate preview** when you are satisfied. The tool first resamples every composited frame to the target raster, then re-encodes with gif.js. Watch the progress indicator if you are on a long loop; when it completes, compare **Original** versus **Resized** in the dual preview panes and read the **Original file** versus **Resized output** byte sizes in the summary. If the new file is unexpectedly larger, that is normal when palette-friendly gradients become noisy after scaling—try a slightly smaller target, or follow up with **GIF to WebP** when the destination allows modern codecs. Finish with **Download resized GIF**; the filename appends a “-resized” suffix before the extension so you cannot accidentally overwrite your master.
Limitations and best practices
GIF is inherently **256-color indexed** motion; resizing true-color screen captures will always pass through another quantization stage, so expect occasional banding on gradients. Start from the cleanest master, avoid lossy re-upload cycles inside chat apps, and preview on the actual destination client when color fidelity matters. Extremely tall or wide outputs are clamped to the same maximum canvas edge as other SynthQuery imaging tools to protect browser stability—if you hit that ceiling, pre-split art or use vector sources. Respect **prefers-reduced-motion** when embedding loops on your own site, and verify licensing before redistributing memes or third-party captures.
Export composited frames as PNGs, crop or mask in any editor, then stitch a new animation with GIF from Photos—closest path to a dedicated GIF cropper in-browser.
Resize static JPEG, PNG, and WebP files with the same aspect-lock philosophy when motion is not part of the asset.
Frequently asked questions
Yes. SynthQuery reads each frame’s delay while decoding and passes those millisecond values through to gif.js when re-encoding. GIF stores delays in **centiseconds**, so extremely fine millisecond tweaks may snap to the nearest hundredth of a second—behavior shared by virtually every GIF toolchain. If you also need to globally speed up or slow down, pair this page with timing-focused utilities in the SynthQuery GIF collection or adjust delays in your authoring tool before resizing.
The Netscape **loop extension** from your source file is honored: infinite loops remain infinite, finite repeat counts are forwarded to the encoder, and missing extensions default the same way as our other gif.js-based exporters. If your player ignores loop metadata (some embed contexts do), that is a player limitation rather than a missing field in the exported file.
Byte size depends on **palette complexity**, dither patterns, and LZW compressibility—not only pixel count. Sharpened edges and high-frequency dither after resampling can expand the bitstream even when width and height drop. Try a slightly smaller target, reduce colors upstream before GIF encoding, or export to **WebP** when allowed. The on-page before/after stats exist precisely so you can catch this surprise before publishing.
Mathematically you can—the percent mode allows values up to five hundred percent—but upscales only **interpolate** new pixels; they cannot recover detail that was never captured. For crisp pixel art, prefer integer multiples and consider nearest-neighbor workflows in a desktop editor; SynthQuery defaults to high-quality smoothing suited for photographic screen recordings.
They encode **common engineering targets**: Discord’s emote box at one-twenty-eight pixels per side (contain fit), Slack inline width at four hundred eighty pixels, and Twitter / X oriented around a twelve-hundred-pixel **maximum width** while preserving aspect ratio. Official product limits change; always verify the latest upload documentation for your workspace or ad account if you are borderline on megabytes or aspect policies.
No. The File API reads bytes locally, Web Workers are not required for decode here but gif.js still runs workers from your origin, and the download uses a blob URL. Network operators may see that you visited the page, but the animation content is not transmitted to SynthQuery for processing.
Frames are composited to RGBA before scaling, and gif.js encodes with transparency support consistent with our other GIF tools. Semi-transparent edges from the original may be flattened against the logical screen background during composite, matching typical browser playback. Expect the same alpha limitations GIF always had—single transparent index, no partial opacity without dither hacks.
One GIF per session, fifty megabytes maximum upload, and the same practical frame ceiling enforced by our shared decode path as the GIF Speed Changer (currently two hundred fifty composited frames). Outputs must fit within the shared maximum canvas edge used across SynthQuery imaging utilities. If you exceed these limits, trim frames with **GIF to PNG** or use desktop FFmpeg before returning here.
Photoshop offers granular color tables, pattern dither controls, and non-destructive timelines—ideal for print-adjacent art direction—but it requires installation, licensing fluency, and manual export settings. SynthQuery targets **fast, policy-friendly downscales** in the browser with explicit platform shortcuts and byte readouts, trading some fine palette control for immediacy and zero upload.
Chains like EZGIF provide broad menus of GIF operations, often backed by server-side processing. SynthQuery focuses on **privacy-preserving** local execution with a single cohesive UI for resize modes, previews, and size stats. If you need exotic filters only available remotely, use those services when policy allows; when you must keep memes and screen recordings on-device, stay in the browser here.