The newest version of this project has moved! All future development will take place in a new repository: All-In-One-Snapchat-Downloader.
There will be no more active development on this current repository. Users looking to download their Snapchat data should head over to the new Releases Page and download V.10.
π₯ Check out the new YouTube video tutorial explaining how to use the new program and what data to select from Snapchat so you can process your Memories and Chat Media all in one go.
A user-friendly desktop application (Windows, macOS, and Linux) to download and preserve your Snapchat memories with their original metadata, including exact dates and location information.
Download the official release executable β The easiest way to use this tool:
- 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.
- Request your Snapchat data (see instructions below).
- Run the app and select your
memories_history.jsonfile.
Note: Do not download the repository ZIP. Use the pre-built
.exefrom the Releases page for the best experience.
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.
- Simple GUI β No command line needed; just point and click.
- Bulk Download β Download all your memories at once with built-in 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 (requires VLC).
- 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 Local Files β Apply metadata to already-downloaded memories when the Snapchat export does not include download URLs.
- Process Chat Media β Merge captions and fix dates/timestamps for the
chat_media/folder in your export, matching senders and exact times 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 (click '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 is the most reliable workaround if the
memories_history.jsondownload method fails.
Note: Snapchat exports expire after 7 days. It is advised to act quickly when you get access to your full export. If you encounter errors, it is best to request a new batch and reprocess that.
-
Open Snapchat on your mobile device.
-
Tap your profile icon (top-left) β βοΈ Settings (top-right).
-
Scroll down to Privacy Controls β Tap My Data.
-
Select data to export β Check the boxes for the memories you want:
-
Choose a date range for your memories:
-
Tap Submit Request:
-
Wait 24-48 hours for Snapchat to prepare your data.
-
Download the ZIP when you receive the confirmation email from Snapchat.
Note: If you have multiple ZIP files available for download, only the first (non-numbered) folder contains the
memories_history.jsonfile. This single JSON file contains all memories from the request, even though it is only located in the first folder.
-
Extract the ZIP (right-click β "Extract All..." on Windows):
-
Locate
memories_history.jsonin the extracted folder (usually in the root orjsonsubfolder).
-
Launch the Application
-
Select JSON File
- Click "Browse..." next to "JSON File".
- Select your
memories_history.jsonfile.
-
Choose Output Directory
- Click "Browse..." next to "Output Directory".
- Select where you want to save your memories (default:
downloadsfolder).
-
Configure Options (Optional)
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.
- Checks for multiple filename patterns (merged overlays, collision-resolved files).
- Re-convert existing videos to H.264 if needed β Only appears when resume mode is enabled.
- Checks the codec of existing videos and re-converts non-H.264 videos.
- Ensures all videos are compatible with Windows Media Player and other standard tools.
- Skips videos already in H.264 format to save time.
Timezone Handling:
- Use GPS coordinates to determine local timezone β Recommended, enabled by default.
- Automatically detects your local timezone from the photo/video GPS location.
- Files are named and timestamped with local time for easier organization.
- Falls back to the system timezone when GPS data is unavailable or the checkbox is disabled.
- Skip existing files (resume mode) β Enable this to avoid re-downloading files that already exist.
-
Start Download
- Click "Start Download".
- Monitor progress in the log window.
- Click "Stop" to pause if needed.
-
Access Your Memories
- Files are saved in your chosen output directory.
- Named by creation date:
YYYYMMDD_HHMMSS.jpgorYYYYMMDD_HHMMSS.mp4. - Overlays are automatically merged when detected.
Some Snapchat data exports do not include download URLs in memories_history.json (the Media Download Url field is empty for every entry). This has been confirmed across multiple accounts and does not appear to be a one-off issue. If this happens to you, the standard download mode will skip all files because the URLs simply are not there.
The only option in this case is to download the media files manually from your Snapchat account before your export links expire. This is tedious since Snapchat splits large libraries across many export ZIPs (sometimes 50+ files) that must each be downloaded and extracted one by one.
Once you have the files, Snapchat still includes the actual media inside the memories/ subfolder of each export ZIP, meaning the metadata (dates, GPS coordinates, overlay merging) can still be applied. This mode does exactly that.
-
Download and extract your Snapchat export ZIP(s)
Right-click each ZIP β "Extract All..." to unzip it. If you have multiple export ZIPs, extract them all into one parent folder so the structure looks like this:
snapchat/ βββ mydata~AAA123/ β βββ memories/ βββ mydata~BBB456/ β βββ memories/ βββ mydata~CCC789/ βββ memories/
Inside each extracted folder, you will find a memories/ subfolder containing your media files:
- At the top of the app, switch the Mode to Process Local Files.
- JSON File β Select your
memories_history.jsonas usual. - Memories Folder β Select one of the following:
- The
memories/folder from a single export (e.g.,mydata~XXX/memories/). - The parent export folder (e.g.,
mydata~XXX/) β the app will find thememories/folder automatically. - A folder containing multiple exports (e.g.,
snapchat/) β the app will discover allmydata~*/memories/subfolders and process them in bulk.
- Output Directory β Choose where to save the processed files.
- Click Process Local Files.
The app matches each local file to its JSON entry using the file's modification timestamp, which Snapchat preserves in the export. Correct dates, GPS coordinates, and timezone information are then embedded into each output file.
Note: If you have multiple export ZIPs, place all extracted folders inside one parent directory and point the app at that parent. It will process all of them in a single run.
Snapchat exports can also include a chat_media/ folder, which contains 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 requesting 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/extract the export ZIP as usual. The extracted folder should contain both 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/
- At the top of the app, switch the Mode to Process Chat Media.
- Chat Media Folder β Select the
chat_media/folder from your extracted export (selecting the export folder itself also works). The app will confirm how many files it found and whether it detected your chat history JSON. - Output Directory β Choose where to save the processed files.
- Pick an overlay mode: merged captions only, originals only, or both.
- Click Process Chat Media.
- Exact timestamps β Files are matched to your
chat_history.json/snap_history.jsonrecords (typically a 98%+ match rate). It falls back to the video's embedded creation time, then the send time Snapchat stores in the export's file modification times, and finally 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.
- 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.
- 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 the 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 the 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:
- 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.
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 -
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.sh
The output is created in the dist folder: SnapchatMemoriesDownloader.exe on Windows, SnapchatMemoriesDownloader.app on macOS, and a SnapchatMemoriesDownloader binary on Linux. The build is driven by SnapchatMemoriesDownloader.spec, which includes the necessary hidden imports for all dependencies. PyInstaller does not cross-compileβyou must 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/Snapchat_Memories_Downloader_GUI.git](https://github.com/ethanwheatthin/Snapchat_Memories_Downloader_GUI.git)
cd Snapchat_Memories_Downloader_GUI
# Install dependencies
pip install -r requirements.txt
# Run the application
python download_snapchat_memories_gui.py
The 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=short
Test 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.
For debugging issues, see DEBUGGING.md for detailed troubleshooting steps, ffprobe commands, and log inspection guidance.
- 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 the 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.
Enjoy preserving your Snapchat memories! πΈπ₯







