Private Video
GIF Maker
Convert video clips (MP4, WebM, MOV) to high-quality GIFs directly in your browser. Trim multiple segments, adjust frame rate and resolution, add captions and stickers β no uploads, 100% private.
Upload Video
Drag & drop your video here
MP4, WebM, or MOV β processed entirely in your browser
Private GIF Maker
100% Local & Secure
Everything happens on your machine. Your video stays in your browser tab β we never see, touch, or store it. gif.js encodes each frame locally, so the result is as private as it gets.
Created with the open-source gif.js library, which runs in a Web Worker by default. This page uses no analytics, no cookies, and no server side β just your browser and a free tool that stays cool under load.
How GIF Conversion Works
Simple Steps:
- 1Upload your video by dragging & dropping or clicking the upload area.
- 2Configure output settings: frame rate, resolution, aspect ratio, and looping.
- 3Add multiple segments to stitch clips together or trim to exact moments.
- 4Customize appearance: add captions with outline, stickers, and apply colors via the popover.
- 5Generate and download your GIF β everything happens locally in your browser.
Pro Tips:
- 8β15 FPS is the sweet spot for most clips: smooth enough, and half the file size of 30 FPS.
- Scale to 50% and use "High Color" palette only when the clip has gradients β flat colors compress fine at standard palette.
- Use multiple segments to keep only the best moments and cut dead time between them.
- Social Preset cards now show rich styling with gradients, icons, and detailed badges (like YouTube Money Estimator).
- Adding an outline (stroke) to your caption text makes it readable on any background color.
- Use the custom color popover (+ button) for precise color matching β includes hex input and Apply/Cancel buttons.
- Preview your segments before generating to save time β the overlay shows captions and stickers at the bottom matching the canvas output.
- Keyboard shortcuts: Space = play/pause, β/β = frame step, Enter = generate.
Common Use Cases
Educational Tutorials
Clip long screen recordings into short, looping GIFs that illustrate a single concept β no video player or buffering required. Perfect for embedding in blog posts, internal docs, or knowledge bases.
Social Media Memes
Turn reaction clips, sports highlights, or stream moments into shareable memes with a built-in caption and sticker overlay. Pick the Twitter, Reddit, or Discord social preset to nail the right aspect ratio instantly.
Tutorial Highlights
Extract key steps from software tutorials into looping GIFs that students can watch repeatedly without scrubbing through video. Use the outline feature to make captions pop on any background.
Email Newsletter Clips
Embed animated GIFs in email campaigns β GIF is the only animation format with 100% email client support (Gmail, Outlook, Apple Mail, Yahoo). MP4 simply will not play in most inboxes.
Data Visualization Loops
Convert chart animations, dashboard demos, or animated infographics into compact looping GIFs for slide decks, reports, or Notion pages where embedded videos would balloon the file size.
Presentation Enhancements
Loop short video clips as animated backgrounds in PowerPoint or Google Slides. Use the scale and resolution controls to keep file sizes low while maintaining visual quality.
Frequently Asked Questions
π§Technical Details & Encoding Methods
GIF Conversion Pipeline
Core Pipeline:
Your video is decoded natively by the browser, then sampled frame-by-frame using the Canvas 2D API. Captions and stickers are composited onto each frame before gif.js quantizes the colors to a 256-color palette and compresses using the LZW algorithm β the same compression GIF has used since 1987.
Decode & Load
Browser's native HTMLVideoElement decodes the MP4/WebM/MOV. loadedmetadata fires once duration and videoWidth/Height are available.
Key API: HTMLVideoElement, URL.createObjectURL
Seek & Capture
For each output frame, seek the video to time t, wait for the seeked event, then drawImage() the current frame onto a hidden canvas.
Frame Rate: 2-30 FPS (user-controlled)
Composite Overlays
Caption text (with 8-direction outline) and sticker images are drawn on top of the video frame. The same drawOrder runs on every frame for consistency.
Canvas API: fillText, drawImage, lineWidth stroke
Encode & Download
gif.js quantizes each canvas frame to 256 colors, then LZW-compresses the pixel data. The result is a single GIF Blob you can preview and download.
Output: Animated GIF89a with Netscape looping
File Size & Performance
The File Size Formula:
Three knobs dominate file size: resolution (pixels scale quadratically), frame rate (linear), and duration (linear). Reducing any of them is the fastest way to shrink the output.
Frame Rate (2β30 FPS)
Lower FPS reduces file size linearly. 10 FPS is the sweet spot for most clips; 30 FPS for smooth motion. The live counter shows exactly how many frames will be encoded.
Example: 10s clip @ 480Γ270: 10fps β 0.5 MB, 30fps β 1.5 MB
Resolution Scaling
Scale slider (25%β200%) or custom width/height. Halving each axis reduces pixel count by ~75% and file size by ~60β70%. Dimensions are rounded to even numbers for optimal encoding.
Example: 1280Γ720 (922k px) vs 640Γ360 (230k px) β ~ΒΌ the file size
Palette Mode
GIF is limited to 256 colors per frame. Standard uses fixed 256-color palette β best for flat-color content. High Color uses gif.js NeuQuant neural-net quantization for smoother gradients at 2β3Γ encoding time.
Trade-off: Quality vs file size β High Color can 2Γ file size
Web Worker Encoding
GIF encoding runs in a dedicated Web Worker (2 workers) so the main thread stays free for UI interactions. The encoder is gif.js β a battle-tested LZW compressor that handles 256-color quantization and looping semantics correctly.
Speed: ~0.5β2s per frame depending on resolution and palette
Privacy & Security Architecture
The privacy model is architectural, not just policy β your video physically cannot leave your device because there is no server to receive it. Here's exactly what that means.
Zero Server
No file ever leaves your device. All processing is in-browser JavaScript; the page makes no network requests for your data.
Network tab: Zero POST/PUT requests after page load
In-Memory Only
Blob URLs and canvases live in page memory. The cleanup() handler revokes all Object URLs and pauses the video on unmount.
Lifecycle: Memory cleared on tab close, refresh, or reset
Open Source Engine
Encoding is done by gif.js (jnordberg) and Mediabunny, both audited and open-source. No opaque binaries handle your pixels.
Verify: github.com/jnordberg/gif.js β 1k+ GitHub stars
No Tracking
No analytics, no cookies, no referrer leakage. The privacy badge is honest because nothing is collected.
DevTools: No tracking scripts, no third-party iframes
Output Settings & Customization
Every output knob is exposed as a control in the tool. Here's what each one does, how it affects the GIF, and the exact numeric range or behavior you can expect.
Frame Rate (2β30 FPS)
Slides from 2 FPS (stop-motion feel, tiny files) to 30 FPS (smooth video). 10 FPS is the default sweet spot for most clips. The live frame counter updates as you adjust the slider.
Range: 2 FPS (slideshow) β 30 FPS (cinema-smooth)
Resolution & Aspect Ratio
Scale slider (25%β200%) downsizes or upscales the source. Toggle the aspect-ratio lock to auto-adjust height when you change width. Custom Width/Height inputs override the scale.
Tip: Pixel-perfect specs for any platform in one click
Social Media Presets
One-click cards for Twitter (1200Γ675), Reddit (480Γ270), Discord emoji (128Γ128), YouTube thumbnail (1280Γ720), Instagram square (1080Γ1080), and more. Each card shows platform icon and dimensions.
Count: 10+ pre-configured platforms
Loop Control
Choose Infinite (default), Play Once, or 1β100 repetitions. The loop count is baked into the GIF's Netscape Application Extension, so it travels with the file everywhere.
Formats: Infinite / Once / N times (1β100)
Reverse Playback
One-click toggle flips the segment order during frame extraction β perfect for boomerang-style reactions, satisfying reveal effects, or creative "rewind" moments without re-editing the source video.
Use cases: Boomerangs, reveals, rewind memes
Palette (Standard / High Color)
Standard uses 256 fixed colors for fast encoding β best for flat-color content. High Color uses gif.js NeuQuant neural-net quantization for smoother gradients, at 2β3Γ encoding time.
Algorithms: Fixed 256-color vs NeuQuant neural net
Caption & Sticker Overlays
Caption Engine
Full text overlay with 9 built-in web-safe fonts (Impact, Arial Black, Comic Sans MS, etc.), 12β72 px size slider, and a 9-swatch + custom hex color popover. Live canvas preview matches the output exactly.
Fonts: Impact, Arial Black, Comic Sans, Helvetica, Verdana, Georgia, Courier, Trebuchet, Times
8-Direction Outline (text-shadow)
The outline is drawn as 8 layered text-shadows (N, NE, E, SE, S, SW, W, NW) at the full outline width, producing a continuous ring around each glyph. Width (0β6 px) and color are user-controlled.
Width range: 0β6 px, with custom color picker
Sticker Overlay
Upload any PNG or JPG (transparent PNGs recommended for logos/reactions). X/Y position sliders (0β100%), scale (0.5Γβ3Γ), and a checkerboard preview show exactly where the sticker will land on every frame.
Max size: Up to 40% of frame dimensions to stay performant
Multi-Segment Stitching
Add unlimited segments, each with its own start/end time. Frames are extracted in order and concatenated into one GIF β ideal for "highlights only" reels, skipping dead time between moments.
Limit: Unlimited segments per GIF
Known Browser Limitations
While the tool works in all modern browsers, performance and feature availability vary. Below are the real-world limitations you'll encounter β and what to do about them.
Safari
Slower encoding and higher memory usage for large frames or long clips due to JavaScript engine differences. Very large GIFs (>500 px wide) may fail to encode in older Safari versions.
Workaround: Stick to 480β640 px wide, or upgrade to Safari 16.4+
Firefox
GIF encoding may be slower than in Chrome-based browsers due to differences in JavaScript performance. High Color mode can significantly increase encoding time.
Workaround: Use Standard palette for faster encoding
Chrome / Edge Memory
Encoding very large frames (e.g., 1920Γ1080 at 30 FPS for many seconds) may consume significant RAM and could cause the tab to become unresponsive if system memory is limited.
Workaround: Limit to 720p or below, or close other tabs
GIF Format Limits (All Browsers)
The GIF format inherently lacks alpha transparency (only single-color transparency) and is limited to 256 colors per frame, which can cause banding in gradients or photorealistic content.
Workaround: Reduce dimensions or frame rate to stay within practical file size limits
Browser Compatibility
β Fully Supported
Chrome 90+, Firefox 88+, Edge 90+, Safari 14+. Requires HTML5 video, Canvas 2D, and Web Workers for frame extraction and encoding. All features work as expected.
β Partial Support
Older Safari (pre-16.4) may exhibit stuttering when seeking very short video segments due to differences in HTMLVideoElement seek behavior. If encoding seems stuck on a 1-second segment, try a longer source clip.
β Not Supported
DRM-protected video (Netflix, Hulu, Disney+) cannot be captured β the video element displays black frames. Internet Explorer & legacy Edge lack required APIs (Web Workers, Blob URLs).
Was this tool helpful?
Help us improve by sharing your experience