A user-friendly desktop application (Windows, macOS, and Linux) to download and preserve your Snapchat memories and chat media with their original metadata, including dates and location information.
🎨 This is a complete UI rewrite of the original Snapchat Memories Downloader GUI. The single-screen interface has been replaced with a guided step-by-step wizard: pick your task (download memories, process local files, or process chat media), point the app at your directory of zip files, choose your options, and go. All the battle-tested download and metadata-processing logic from the original project is carried over unchanged.
- Guided 4-step wizard — Task → Source → Options → Run, with a step indicator and Back/Continue navigation, instead of one dense screen
- Point it at the ZIPs — select the folder of
mydata~*.zipfiles exactly as Snapchat gives them to you; the app unzips them all automatically (resumable), findsmemories_history.jsoninside, and processes everything - Task-first flow — choose what you want to do up front (download memories, process already-downloaded local files, or process chat media) and the app only shows you the inputs that task needs
- Smarter source validation — the app inspects your
memories_history.jsonwhen you select it and tells you how many memories it found, what year range they cover, and whether download URLs are present (so you know immediately if you need Local Files mode) - Inline help — contextual links to the relevant guide sections right where you need them
Download the official release executable — The easiest way to use this tool:
YouTube Video Tutorial - https://www.youtube.com/watch?v=O32IF1Qxg2E
- Get the
.exefrom the latest release - Install recommended tools (optional but highly recommended):
- VLC Media Player — for video format conversion
- FFmpeg — for enhanced video overlay merging
- RESTART COMPUTER AFTER INSTALLING THESE
- Request your Snapchat data (see instructions below or YT video)
- Run the app and follow the wizard
This tool downloads all your Snapchat memories using the memories_history.json file from your Snapchat data export. It preserves metadata like creation dates, timestamps, and GPS coordinates by embedding them directly into your downloaded media files. It also automatically merges overlay captions and stickers back onto your photos and videos when present.
- Guided wizard UI — No command line needed; a step-by-step flow walks you through every task
- Bulk Download — Download all your memories at once with retry logic
- Resume Downloads — Skip already downloaded files to resume interrupted sessions
- Overlay Merging — Automatically merges caption/sticker overlays back onto photos and videos
- Metadata Preservation — Embeds original dates and GPS coordinates into EXIF data (images) and file metadata (videos)
- Video Conversion — Automatic H.264 conversion for better Windows compatibility (when VLC is installed)
- File Timestamps — Sets file modification dates to match memory creation dates
- Progress Tracking — Real-time progress updates and detailed logging
- Stop/Resume — Pause and resume downloads at any time
- Process Export ZIPs Directly — Point the app at the folder of
mydata~*.zipfiles from Snapchat; they're unzipped and processed automatically - Process Local Files — Apply metadata to already-downloaded memories when Snapchat export does not include download URLs
- Process Chat Media — Merge captions and fix dates/timestamps for the
chat_media/folder in your export, with senders and exact times matched from your chat history
- Download the latest
.exefrom the releases page - Install optional tools for best results:
- RESTART YOUR COMPUTER AFTER INSTALLING VLC AND FFMPEG
- Run the application — Double-click the
.exefile ('Run anyway' if you get a windows security warning) - Follow the usage instructions below
Note: If you keep getting the "no download URL found, skipping" message. Please refer to the Local Processing Guide. It takes some setup but has been reported as the most reliable if the memories_history.json method is not working for you.
Note: The memories_history.json file contains links that expire after 7 days. It is advised to move quickly when you get access to your full export from snapchat. If you get errors it's best to just request a new batch and reprocess that. If not proceed with the local processing route
-
Open Snapchat on your mobile device
-
Tap your profile icon (top-left) → ⚙️ Settings (top-right)
-
Scroll to Privacy Controls → Tap My Data
-
Select data to export — Check the boxes for memories you want:
-
Choose date range for your memories:
-
Tap Submit Request:
-
Wait 24-48 hours for Snapchat to prepare your data
-
Download every ZIP when you receive the email from Snapchat, and save them all into one folder — large exports are split across several
mydata~*.zipfiles
- That's it — no unzipping needed. Point the app at the folder of ZIPs and it extracts and processes everything automatically.
The app walks you through four steps:
-
Task — Pick what you want to do: Memories or Chat media. The app also checks that ffmpeg and VLC are installed:
-
Source — Point the app at your export:
- For memories (default): select the folder of
mydata~*.zipfiles straight from Snapchat — no manual unzipping needed, andmemories_history.jsonis found inside the ZIPs automatically. Already-extracted folders work too - Downloading via the URLs in
memories_history.jsonis still available as a secondary method for exports that include download URLs - For chat media: select your
chat_media/folder, or the folder of export ZIPs
- For memories (default): select the folder of
-
Options — Choose your output directory and configure:
Resume Options:
- Skip existing files (resume mode) — Enable this to avoid re-downloading files that already exist
- Useful when resuming after an interruption or adding new memories
- Validates existing files and only downloads what's missing
- Also checks for multiple filename patterns (merged overlays, collision-resolved files) Timezone Handling:
- Use GPS coordinates to determine local timezone — Recommended, enabled by default
- Automatically detects local timezone from photo/video GPS location
- Files are named and timestamped with local time for easier organization
- Falls back to system timezone when GPS data is unavailable or checkbox is disabled
- Skip existing files (resume mode) — Enable this to avoid re-downloading files that already exist
-
Run — Review the plan and start. The "Open save folder" button opens your output directory at any time; "Stop" pauses (extraction and processing both resume where they left off).
If you selected a folder of ZIPs, they are extracted first (already-extracted files are skipped):
Then every memory is processed — matched to its JSON entry, captions merged, metadata and timestamps written:
Files are saved in your output directory, named by creation date: YYYYMMDD_HHMMSS.jpg or YYYYMMDD_HHMMSS.mp4. Overlays are automatically merged when detected.
Snapchat exports can also include a chat_media/ folder — every photo and video saved in your chats (direct sends, saved snaps, and camera-roll shares). These files come with scrambled names, no usable timestamps, and captions stored as separate transparent overlay images. This mode reassembles them: captions are merged back onto their photos/videos, and correct dates, times, and file timestamps are written to every file.
When you request your data at accounts.snapchat.com → My Data, enable these toggles under "Select data to include":
- Export JSON Files — required for exact timestamps and sender matching
- Chat History — contains the message records your media files are matched against
- Export Chat Media — the actual photos/videos from your chats
- Export Shared Stories — recommended, catches media shared via stories
Then choose your date range and download the export ZIPs as usual — no extraction needed if you point the app at the ZIP folder. Inside, each export contains chat_media/ and json/ side by side:
mydata~XXX/
├── chat_media/ ← the media files
├── json/
│ ├── chat_history.json ← used for exact timestamps + senders
│ └── snap_history.json
└── html/
- On the Task step, choose Chat media
- On the Source step, under Your Snapchat export, select the folder of
mydata~*.zipfiles straight from Snapchat — the ZIPs are unzipped automatically before processing. An already-extractedchat_media/folder (or the export folder containing it) works too. The app confirms how many files it found and whether it detected your chat history JSON - On the Options step, choose where to save the processed files and pick an overlay mode: merged captions only, originals only, or both
- Continue to the Run step and start processing
- Exact timestamps — files are matched to your
chat_history.json/snap_history.jsonrecords (typically 98%+ match rate), falling back to the video's embedded creation time, then the send time Snapchat stores in the export's file modification times, then the filename date at noon local time - Sender info — the log shows who sent each file and in which conversation
- Caption merging —
media~andoverlay~files from the same snap are paired and merged. When several snaps share a date, the app verifies pairings against the export's thumbnails; captions that can't be confidently paired are never merged onto the wrong photo — they're preserved in anunmatched_overlays/folder instead - Metadata fixing — EXIF dates (images), embedded creation dates (videos), and file created/modified timestamps are all set to the real capture time, so files sort correctly in your photo library
- One folder per conversation — output is sorted into a subfolder named after the message thread or group chat each file came from (on by default; turn it off under Advanced options on the Options step to save everything into one flat folder)
- Output files are named by capture time:
YYYYMMDD_HHMMSS_<n>.jpg/.mp4
Notes:
- Chat media contains no GPS data (unlike memories), so timestamps use your system timezone and no location is embedded.
- Conversation folders are named from your chat history: the group's title for group chats, the other person's username for one-to-one threads. Files the app couldn't match to any conversation go to an
Unsorted/folder, and grouping is skipped entirely if the export has nojson/history to identify threads with.- Thumbnails and metadata sidecar files from the export are consumed during processing but not copied to the output — they contain no unique media.
- A few files in some exports are stored in an unreadable (likely encrypted) format; these are listed in the log and skipped.
- If the
json/folder is missing, the mode still works — it just falls back to embedded video timestamps and filename dates.
- Images — JPEG/JPG with EXIF metadata
- Videos — MP4 with embedded metadata
- Timezone-aware timestamps — Uses GPS coordinates to determine correct local time (falls back to system timezone)
- Creation date/time preservation — Embedded in EXIF (images) and file metadata (videos)
- GPS coordinates — Embedded when available in original memory
- Timezone offset tags — EXIF 2.31 standard offset fields for proper timezone display
- File modification timestamps — Match local creation time for correct sorting in file managers
- Automatic overlay/caption merging — Combines
-mainand-overlayfile pairs seamlessly
Core libraries:
requests— Network downloadsPillow— Image processingpiexif— EXIF metadata (optional but recommended)mutagen— Video metadata (optional but recommended)av(PyAV) — Video processing (optional)python-vlc— VLC integration (optional)timezonefinder— GPS-based timezone detection (optional but recommended)pytz— Timezone handling (optional but recommended)
Note: The application gracefully handles missing optional packages. If timezone libraries aren't installed, timestamps default to UTC. If EXIF/video metadata libraries are missing, files are still downloaded but without embedded metadata.
- VLC Media Player — Automatic video conversion to H.264 (highly recommended)
- FFmpeg — Enhanced video overlay processing
The app runs on macOS and Linux as well as Windows. Grab the platform build from the releases page if one is published, or run from source (see below).
macOS notes:
- Grab the build that matches your Mac's chip:
AllInOneSnapchatDownloader-macos-arm64.zipfor Apple Silicon (M1/M2/M3/M4) orAllInOneSnapchatDownloader-macos-intel.zipfor Intel Macs. Each build only runs on its own architecture — the wrong one gives "This application is not supported on this Mac." Check your chip under Apple menu → About This Mac. - If you use the pre-built
.app, macOS Gatekeeper will warn about an unsigned app the first time. Right-click the app → Open → Open to run it. - If running from source, use Python from python.org or Homebrew (
brew install python-tk) — the Tk that ships with the old system Python is buggy. - Install VLC and/or FFmpeg (
brew install ffmpeg) for video conversion and overlay merging. - If the app's tool check says FFmpeg isn't found even though
brew install ffmpegworked and it runs fine in Terminal: apps launched by double-clicking (not from a shell) don't inherit your shell's PATH, so Homebrew's install dir (/opt/homebrew/binon Apple Silicon,/usr/local/binon Intel) can be invisible to it. The app already checks those locations directly, but if FFmpeg is installed somewhere else, make sure it's on thePATHyour login shell sets up, then relaunch the app.
Linux notes:
- Tkinter is not bundled with most distro Pythons. Install it first:
- Debian/Ubuntu:
sudo apt install python3-tk - Fedora:
sudo dnf install python3-tkinter - Arch:
sudo pacman -S tk
- Debian/Ubuntu:
- Install VLC and FFmpeg from your package manager (e.g.
sudo apt install vlc ffmpeg) for video conversion and overlay merging.
To compile the executable yourself:
# Install PyInstaller
pip install pyinstaller
# Windows
build_exe.bat
# macOS / Linux
sh build_mac_linux.shThe output is created in the dist folder: AllInOneSnapchatDownloader.exe on Windows, AllInOneSnapchatDownloader.app on macOS, and a AllInOneSnapchatDownloader binary on Linux. The build is driven by AllInOneSnapchatDownloader.spec, which includes the necessary hidden imports for all dependencies. PyInstaller does not cross-compile — build on the OS you are targeting. The GitHub Actions workflow in .github/workflows/build.yml builds all three automatically on version tags.
For developers or advanced users:
# Clone the repository
git clone https://github.com/ethanwheatthin/All-In-One-Snapchat-Downloader.git
cd All-In-One-Snapchat-Downloader
# Install dependencies
pip install -r requirements.txt
# Run the application
python download_snapchat_memories_gui.pyThe project includes comprehensive unit tests to ensure reliability:
# Install pytest
pip install pytest
# Run all tests
python -m pytest tests/ -v
# Run specific test file
python -m pytest tests/test_filename_sanitization.py -v
# Run with detailed output
python -m pytest tests/ -v --tb=shortTest Coverage:
- Filename sanitation — Ensures no trailing braces or invalid characters in filenames
- Atomic conversion — Verifies temp file → validate → atomic replace workflow
- Video validation — Tests ffprobe-based validation (when available)
- Return contracts — Confirms consistent return types across modules
- Storage Space — Ensure sufficient disk space for all memories
- URL Expiration — Download links expire over time; process your data export promptly
- Privacy — All processing happens locally on your computer; no data is sent elsewhere
- Cross-Platform — Runs on Windows, macOS, and Linux (see the macOS/Linux section above for setup notes)
- Use Resume Mode — Enable "Skip existing files" when resuming interrupted downloads
- Re-convert as needed — Use the re-conversion option if you have old HEVC videos that won't play properly
- Download regularly to avoid URL expiration
- Organize downloads by creating subfolders by year/month
- Verify metadata by checking a few files after initial download
- Keep your JSON — Save a backup copy of
memories_history.json
Contributions welcome! Feel free to:
- Report bugs via GitHub Issues
- Suggest features
- Submit pull requests
This project is provided as-is for personal use. Use responsibly and in accordance with Snapchat's Terms of Service.
This tool is not affiliated with, endorsed by, or connected to Snap Inc. or Snapchat. It is an independent utility designed to help users download their own personal data from Snapchat's official data export feature.











