Snapchat hands you your data back as a jumbled mess of JSON, HTML and media files, with no structure whatsoever. SnapXO turns that into a well-organized folder you can actually use: your media sorted and dated, your chats readable again, your stats as charts, and a map of where it all happened. On top of that it builds you a proper UI for all of it, not just the media. It runs offline on your own machine and is useful across PC and Mobile.
pip install snapxo| Overview | Media |
![]() |
![]() |
| Chats | Snap Map |
![]() |
![]() |
see more of the UI and files SnapXO generates here.
index.html is the full archive of your Snapchat data export, packed with
an Overview, your Stats, Media and Chats. It opens straight from disk,
works without a server, offers user-friendly file names and
folders, and works just as well on a phone as on a desktop. Natively.
- Chats: full chat history with images, voice messages, videos and snaps. searchable names and messages included.
- Media: A gallary of your Snapchat media, sorted and efficiently encoded, with type and yeaar filters, and a details panel per file.
- Stats: Your Snapchat statistics neatly formatet and illustratet with charts.
- Overview: one familiar interface; Organized, backwards-compatible and user-friendly, out of the box
- Media organization: memories and chat media in structured folders with
clean filenames (
2026-05-08_0444.mp4) - Snap Map: see where you took your snaps on the globe.
- Location visuualisation: see where you've been. (even comes with an animation)
- Charts: Statistical Charts for:
- messages
- chat media
- snaps
- friends
- story views over time
- activity by time of day
- activity by weekday
- type distribution
- who writes you most
- etc.
- Interactive Use of SnapXO:
snapxo -iwalks you through the enitre tool instead of crafting a command. - PDF:
snapxo pdf, media, chats, stats baked right into a PDF file, ready to print or save - Spreadsheets: your stats as XLSX, ODS or CSV, the XLSX with real Excel charts you can edit
- Self-hosting: a docker compose file that hosts the archive on your own network. Got a Raspberry Pi or a home server? Run it there and browse your archive comfortably from your phone or other devices.
- Verify: for data integrity and to catch data corruption early
- Rebuild: backwards-compatible and idempotent. Bring an older archive up to date, or just regenerate it (without needing the original export ZIP)
- Merge: Merge several exports into one, deduplicated and renumbered
- Duplicate removal: MD5 deduplication, before encoding (storage and time efficient)
- H.265 encoding: Intel QSV hardware acceleration, automatic fallback to libx265
- Overlay burning: Snapchat overlays burned onto photos and videos
- GPS/EXIF: coordinates from
memories_history.jsonwritten into image EXIF - Voice messages: audio-only MP4s detected and converted to MP3
- Timezone:
--timezone Europe/Viennaconverts every timestamp out of UTC, so your numbers reflect the timezone you actually lived in
Runs on Windows, Linux and macOS,
with a UI that works the same on desktop and mobile.
pip install snapxosnapxo doctor tells you if external tools are missing and prints the install command for the
system you are on.
For video processing: ffmpeg and ffprobe are native programs, so pip cannot install them.
| System | Command |
|---|---|
| Windows | winget install Gyan.FFmpeg |
| Debian/Ubuntu | sudo apt install ffmpeg |
| Fedora | sudo dnf install ffmpeg |
| Arch | sudo pacman -S ffmpeg |
| macOS | brew install ffmpeg |
You can also use pip install "snapxo[ffmpeg]", which brings both binaries along,
but those have no hardware encoding. A system-wide
ffmpeg is recommended.
For snapxo pdf on the command line only:
playwright install chromium
downloads the browser that renders the PDFs. This only applies if you export
PDFs through the CLI. On Linux it may also need
playwright install-deps chromium.
PDFs can still be exported through the UI without installing any of this.
The export buttons build their files in the browser you already have. SnapXO loses nothing by skipping this step; it only affects snapxo pdf.
- Ask Snapchat for your data at accounts.snapchat.com, then download the ZIP it mails you
snapxo organize mydata.zip -o ./my-archive -y- Open
my-archive/index.html, or just explore the folder yourself
That is the whole tool. Everything below is optional, extra features that
build on the archive organize just made.
| Command | What it does |
|---|---|
snapxo organize EXPORT -o ARCHIVE |
turn an export into an archive |
snapxo organize EXPORT --into ARCHIVE |
add a newer export to the archive you already have |
snapxo info EXPORT |
see what a ZIP export from Snapchat contains, writes nothing |
snapxo rebuild ARCHIVE |
bring an older archive up to date, without the export ZIP |
snapxo pdf ARCHIVE |
render the media, the statistics and every chat for paper |
snapxo spreadsheet ARCHIVE |
your stats as XLSX, ODS or CSV |
snapxo docker ARCHIVE |
serve the archive on your home network (read-only, password optional) |
snapxo -i |
skip the flags answer a few questions and SnapXO runs the command for you |
# Several ZIPs, or a whole folder of them
snapxo organize export1.zip export2.zip -o ./my-archive -y
snapxo organize ~/Downloads -o ./my-archive -y
# Look before you write
snapxo info mydata.zip
snapxo organize mydata.zip --dry-runARCHIVE means a folder SnapXO already organized.
Four more commands exist:
html: writes the one page per topic versionsmerge: merges several archives into oneverify: checks an archive against its manifestdoctor: checks your tools.
Running from a clone? Every command works the same as
python -m snapxo ..., so nothing has to be installed:
python -m snapxo organize mydata.zip -o ./my-archive -y
See DOCUMENTATION.md for the full feature list, every command and every flag.
output/
├── 2022/ folders with organized media
├── ...
├── 2026/
│ ├── 2026-05-08_0444.mp4 H.265 encoded, with EXIF/GPS
│ ├── 2026-05-08_0445.jpg
│ └── 2026-05-08_0446.mp3
├── _overlays/ Overlays that matched no media
├── _meta/ Raw JSON + HTML from export
│ ├── manifest.json What each file is and where it came from
│ ├── checksums.json Fingerprint for `snapxo verify`
│ ├── integrity.json Files that arrived damaged, if any
│ ├── app-chats.js Every chat and message, for the Chats tab
│ ├── app-media.js Every file and its details, for the Media tab
│ ├── app-stats.js The numbers behind the charts, for the export buttons
│ ├── thumbs/ Preview images for the gallery and the chats
│ │ └── medium/ Larger copies, written by `snapxo pdf` only
│ ├── json/
│ └── html/
├── index.html The archive: Overview, Stats, Media, Chats
└── map.html Interactive Snap Map
The other commands add to it:
| Command | What it adds |
|---|---|
snapxo pdf |
creates pdf/ with stats.pdf, and media-details/, media-plain/ per year and chats/ per chat, split into PDFs of at most 110 MB |
snapxo spreadsheet |
creates spreadsheet/ with one file per format |
snapxo docker |
creates or appends docker-compose.yml, and writes snapxo.conf beside it |
snapxo html |
creates seperate individual independant html pages ( gallery.html, chats.html, stats.html and conversations/) |
The most-used ones. The full list for every command is in DOCUMENTATION.md.
| Flag | Description |
|---|---|
-o, --output PATH |
Directory the archive is written to, created if it doesn't exist |
--into ARCHIVE |
Add the export to an existing archive, swapped in only after every file is verified |
-y, --yes |
Organize everything without asking |
--dry-run |
Show what would happen, without it happening |
--media SOURCE,SOURCE |
Which media get pulled from the export: memories, chat (default: both) |
--types KIND,KIND |
Which of those "--media" get processed: photos, videos, voice (default: all three) |
--since / --until YYYY-MM-DD |
Limit to this time range, both inclusive |
--timezone ZONE |
Convert Snapchat's UTC timestamps into your own timezone, e.g. Europe/Vienna |
--no-encode |
Don't encode videos to H.265 |
--no-meta |
Don't copy the raw export to _meta/ see the warning below |
-v, --verbose |
Print every file as it is processed, not just the totals |
--no-metais permanent.rebuildandmergewon't work on that folder again, ever. You've been warned.
SnapXO runs entirely on your machine, on files you downloaded yourself and handed to the tool. It makes no network requests, never logs into an account and never contacts Snapchat.
Two things are worth knowing:
map.htmlloads its map library and its map tiles from the internet when you open it. That has nothing to do with SnapXO's own functionality. Its purely how the map draws itself and its UI elements. Generating the page does not touch the network at all; every other page works with none.snapxo dockerserves your archive on your home network, which is what makes it reachable from your phone. Set a password, and do not forward the port through your router.
The browser Chromium that snapxo pdf uses is put into offline mode, so it
cannot reach the network even if a page asked it to. This only applies to the
CLI's pdf command, nothing else in SnapXO touches a browser.
SnapXO is GPL-3.0.
It is built on these tools:
| Tool | License |
|---|---|
| click | BSD-3-Clause |
| rich | MIT |
| Pillow | MIT-CMU |
| piexif | MIT |
| playwright | Apache-2.0 |
| tzdata | Apache-2.0 |
| openpyxl, optional | MIT |
| bcrypt, optional | Apache-2.0 |
| PyYAML, optional | MIT |
| static-ffmpeg, optional | MIT |
| FFmpeg, not bundled | LGPL-2.1-or-later, GPL-2.0-or-later for some builds |
| Chromium, not bundled | BSD-3-Clause and others |
| nginx, Docker image | BSD-2-Clause |
| Apache httpd, Docker image | Apache-2.0 |
Leaflet, loaded by map.html |
BSD-2-Clause |
Leaflet.markercluster, loaded by map.html |
MIT |
noUiSlider, loaded by map.html |
MIT |
| OpenStreetMap tiles | ODbL data, OSMF tile usage policy |
| Lucide icons | ISC, notice below |
Lucide license notice
ISC License
Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part
of Feather (MIT). All other copyright (c) for Lucide are held by Lucide
Contributors 2022.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
Not affiliated with Snap Inc.
This is an independent, unofficial open-source tool. It is not created, endorsed, sponsored or supported by Snap Inc., and has no connection to Snapchat, Snap Inc. or any of its products. "Snapchat" and "Snap" are trademarks of Snap Inc., used here only to describe what this tool reads.



