Turn a slice of video into a high-quality animated GIF.
GifSmith is a small, fast desktop app for Mac and Windows. Open a local video (or
import one from a link), scrub to pick start and end points, optionally crop and
adjust speed, and export a .gif. It's local-first: no accounts, no media
library, no telemetry, no ads. Local videos are read in place and never imported;
the only network feature is the optional URL import.
Built with Tauri, SolidJS, and the gifski encoder, with a bundled LGPL build of FFmpeg for decoding.
- Open
mp4,mov,mkv,webm,avi,m4vvia file picker or drag-and-drop, or import from a URL (YouTube and other sites, via a bundledyt-dlp; direct links to a video file download straight over HTTP) - A timeline with filmstrip thumbnails and iOS-style trim handles, zoomable down to a 30-second window for precise short clips
- Crop with a draggable, resizable rectangle (tracked in source pixels), with free-form or locked aspect ratios: 16:9, 9:16, and 1:1
- Boomerang (play forward then reversed), with live preview
- FPS, width, quality, and speed (0.5x-2x) controls, plus per-platform presets (Web, GIPHY, X, Discord) and a live frame/size estimate
- Preview the result before committing: Save, Re-export, or Discard. Cancel a long export mid-encode, or clear the loaded video without opening another
- Exports default to a GifSmith/Exports folder in your Documents (created on first save); you're free to save anywhere
- An Exports gallery (the header button) to browse past GIFs and reopen one as the source for a new edit
- Plays codecs the system can't: for formats the webview won't decode (HEVC, ProRes, ...) GifSmith builds a lightweight transcoded preview so trimming still works; export always uses the original file
- High-quality
gifskiencoding, streamed frame-by-frame with no intermediate files (a URL import downloads to a temp file that's deleted when you quit) - Dark, minimal interface
- Native binaries for macOS (universal) and Windows
| Key | Action |
|---|---|
Space |
Play / pause |
← / → |
Step one source frame |
I / O |
Set the IN / OUT point at the playhead |
Esc |
Close the preview |
| Scroll over the timeline | Zoom in / out (cursor-anchored) |
Download the latest installer from the Releases page:
-
Windows: the
.msi(or setup.exe). Windows SmartScreen may warn on an unsigned app; choose More info → Run anyway. -
macOS: the universal
.dmg(runs natively on both Apple Silicon and Intel). The app is unsigned, so the first launch needs the Gatekeeper workaround:Right-click (or Control-click) the app in Applications → Open → Open again in the dialog. You only need to do this once.
Prerequisites: Node.js 20+ and the Rust toolchain.
npm install
# Fetch the bundled binaries (FFmpeg/ffprobe + yt-dlp), placed in
# src-tauri/binaries with the per-target-triple names Tauri expects.
bash scripts/fetch-ffmpeg.sh # Windows: BtbN LGPL static build
bash scripts/build-ffmpeg-macos.sh # macOS: compile an LGPL build from source
bash scripts/fetch-ytdlp.sh # yt-dlp, for URL import
# Run in development
npm run tauri dev
# Produce a production build for the current platform
npm run tauri buildGifSmith is MIT licensed. The binaries it bundles, all invoked as separate sidecar processes (never linked into the app), keep their own licenses:
- FFmpeg (LGPL). Windows uses the LGPL static build from
BtbN/FFmpeg-Builds; macOS is compiled
from the official FFmpeg source with
--disable-gpl --disable-nonfree(no LGPL static macOS build is published). Source: https://ffmpeg.org/download.html. - yt-dlp (Unlicense / public domain), for importing from a URL.
- Font: Syne (SIL Open Font License), bundled in
src/assets/fontswith its license file. No web-font requests are made.
Settings + update check shipped in v1.0.1. Next up:
- App-icon recolor finished in the violet/cyan identity.
- Advanced quality control (optional): gifski dithering / lossy level.
- Internal: move
state.tsto a Solid store as it grows.
Not scheduled: code-signing and notarization for both platforms (to drop the Gatekeeper / SmartScreen prompts).
MIT © Chafic Charafeddine. Bundled FFmpeg is LGPL and yt-dlp is public domain, as noted above.
- Settings + update check. A gearwheel in the header opens a settings popover with the app version and a Check for updates button that asks GitHub for the latest release (up-to-date / update-available states). An opt-in Check on startup toggle runs the check silently on launch and only surfaces when a newer version exists. It's prompt-only: an available update shows the release notes and a Download button that opens the release page. GifSmith never downloads or installs an update on its own.
The first stable release.
- Universal macOS build: a single
.dmgruns natively on both Apple Silicon and Intel, replacing the earlier per-chip downloads. - URL import from YouTube and other sites (bundled
yt-dlp), or a direct link to a video file over HTTP, with a Cancel button for downloads in progress. - Timeline with filmstrip thumbnails and zoomable iOS-style trim handles; crop (free-form or 16:9 / 9:16 / 1:1), speed (0.5x-2x), and boomerang, all with live preview.
- Export presets (Web, GIPHY, X, Discord) with a live frame-count and size estimate, then Preview → Save / Re-export / Discard before committing.
- Exports gallery to browse past GIFs and reopen one for a new edit.
- Playback proxy so videos in codecs the webview can't decode (HEVC, ProRes, ...) still preview; export always uses the original.
- Security: the URL import is restricted to
http(s)links and hardened against argument injection into the downloader. - Fixes: trim-handle edge cases on very short clips, and stale-preview races when switching sources quickly.