Make GIF from Photos on Mac
Make GIF from photos on Mac with FFmpeg: sort frames, set fps, resize, and palette encode, or use GetCompress for preview and batch export.
Design handed you twelve PNG frames for a micro-interaction storyboard. The client wants a looping GIF for Slack, not a PDF sheet. You could drop frames into a slide deck, but the thread asked for motion. Building a GIF from still photos means setting frame rate, resizing to display width, and running a palette pipeline so gradients do not band. Processing locally keeps unreleased product shots off random upload sites. Marketing and design teams that ship storyboard loops each sprint benefit from one saved preset instead of rebuilding FFmpeg commands per campaign.
When a photo slideshow GIF makes sense
GIF from photos works for short loops: storyboard walkthroughs, before/after sequences, loading-state mockups, and event photo highlights under ten frames.
| Good fit for photo GIF | Better as another format |
|---|---|
| 5 to 15 frame storyboard | MP4 slideshow with music |
| UI state sequence from exports | Prototype video from Principle |
| Short meme-style flipbook | Long photo album |
GIF caps at 256 colors per frame. Photo sequences with skin tones, skies, and shadows need palette tuning or they band fast. See lossy vs lossless compression when you choose between palette quality and file size.
| Frame count | Typical fps |
|---|---|
| 3 to 5 frames | 2 to 4 fps (hold each shot) |
| 6 to 12 frames | 4 to 8 fps |
| 12+ frames | 8 to 10 fps max |
For motion from actual video, see video to GIF on Mac instead of stacking stills. For shrinking the finished GIF, see compress GIFs on Mac .
Ask whether MP4 works before you spend an hour on palette flags. A Ken Burns MP4 from the same JPEG sequence is often smaller and sharper for doc tools that accept video.
Prepare your photo sequence
Consistent frame size produces cleaner loops. Mixed dimensions force FFmpeg to scale or pad, which adds artifacts.
- Export every frame at the same width and height from your design tool.
- Name files in sort order:
frame-001.png,frame-002.png, and so on. - Resize in Preview if exports are oversized for the target channel.
| Export width from design | Target for Slack GIF |
|---|---|
| 4000 px canvas | Scale to 800 px wide |
| 1920 px artboard | 960 or 800 px wide |
| 640 px component | Keep width |
Use PNG for flat UI frames with text. Use JPEG for photo-heavy sequences when slight loss is acceptable and you need smaller source files before GIF encoding.
Remove duplicate frames at the end of the sequence when the loop should restart cleanly. The first and last frame should match visually for seamless loops, or accept a visible jump.
Store frames in a dedicated folder. Avoid spaces in filenames; FFmpeg glob patterns break on messy names.
Check one middle frame in Preview for retina sharpness before you batch the whole sequence.
Build a GIF with FFmpeg
Open Terminal (Applications → Utilities → Terminal). Install FFmpeg through Homebrew (install Homebrew first if brew is not found):
brew install ffmpeg
From numbered PNG frames with palette pipeline:
ffmpeg -framerate 4 -i frame-%03d.png -vf "scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 storyboard.gif
From a folder of JPEG files with glob pattern:
ffmpeg -framerate 3 -pattern_type glob -i 'frames/*.jpg' -vf "scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 slideshow.gif
Reverse loop (ping-pong) for seamless motion without matching first/last frame:
ffmpeg -framerate 4 -i frame-%03d.png -vf "scale=800:-1,split[s0][s1];[s0]palettegen[p];[s0]reverse[r];[s1][p]paletteuse[u];[u][r]concat=n=2:v=1:a=0" -loop 0 pingpong.gif
| Parameter | Slower loop | Faster loop |
|---|---|---|
-framerate | 2 to 3 | 6 to 8 |
scale width | 640 px | 960 px |
| Frame count | Fewer frames | More frames |
Lower -framerate when stakeholders want each storyboard panel readable. Raise it only when motion between panels should feel continuous.
After export, check file size in Finder. If the GIF exceeds your upload cap, re-run with scale=640:-1 and -framerate 3 before you drop frames.
Using GetCompress
GetCompress fits make GIF from photos on Mac when you want preview, ordering, and palette export without shell glob patterns.
Drop a folder of PNG or JPEG frames, or mix stills with timing controls in the UI.
Workflow features that help:
- Preview and trim: adjust effective duration per frame before palette limits colors.
- Frame-by-frame GIF preview: catch banding on photo gradients before you post.
- Width presets: 640 or 800 px covers most Slack and doc uploads.
- Batch queue: build several storyboard loops after a design review.
- Switch to MP4: export video when the thread allows it instead of GIF.
- Local processing: keep unreleased product shots off online converters.
Save a preset like “storyboard GIF 800w 4fps” when your team ships the same frame count each sprint. When photo GIF banding persists at 640 px, export MP4 from the same frame sequence or reduce frame count instead of re-palette encoding three times.
GetCompress also helps when design drops twenty PNG exports named inconsistently. Sort in the queue, set fps, preview the loop, and export one GIF without renaming files manually for FFmpeg %03d patterns.
For still image optimization outside GIF workflows, see how to compress images on Mac when the handoff folder mixes HEIC, JPEG, and PNG alongside the frames you animate.
Keep source frames in a frames-src/ folder and write GIF output to gif-out/ so deploy scripts never overwrite design exports.
Document fps and width in your repo README so the next campaign matches the last storyboard loop settings.
- Compress GIFs on MacMake GIF files smaller on Mac: shorten the loop, use MP4 when possible, or convert with FFmpeg or GetCompress.
- Convert Video to GIF on MacConvert video to GIF on Mac with FFmpeg, or export MP4 from QuickTime when the tool allows video instead of GIF.
- How to Compress Images on MacCompress images on Mac with Preview and Photos. Resize JPG and PNG, convert HEIC, and batch compress with GetCompress.
- Convert GIF to WebP on MacConvert GIF to WebP on Mac with FFmpeg for smaller animated assets, or use GetCompress for preview and batch export.
Buy GetCompress now for local media compression with reusable presets and no media upload.