aidandenlinger / SnapchatMemoriesCaptionAdder

Adds metadata (captions and timestamps) to your exported Snapchat memories.
MIT License
11 stars 3 forks source link
ffmpeg python snapchat snapchat-memories vips

SnapchatMemoriesCaptionAdder

Overview

Adds metadata (captions and timestamps) to your exported Snapchat memories.

Background

Snapchat allows you to save images/videos to their servers with their memories feature. When you export your memories from Snapchat from their accounts website, you get all the memories, but with no metadata and the captions are stored separately!

A series of pictures with useless names

Base Image Overlay Image
Base image with no caption Overlay image with no image

You may then go to an alternate project like ToTheMax's Snapchat-All-Memories-Downloader, which is fantastic! It uses a memories_history.json file to download all memories and add a timestamp, but this technique loses all the captions! They aren't included in memories_history.json :(

{
  "Date": "2020-01-02 23:08:19 UTC",
  "Media Type": "Image",
  "Location": "Latitude, Longitude: 0.0, 0.0",
  "Download Link": "https://app.snapchat.com/dmd/memories?..."
}

So in short, memories_history.json has all the metadata we need, but we need to combine it with the full memory export if we want captions. So this project serves as a bridge between these two methods! We have all the metadata and we have all the memory photos/videos and captions, we just need to combine them. The final result:

Final result

Note the caption is on the image, the file name and metadata has a timestamp! The file's creation date is also set to the correct date.

Install

[!NOTE]
This project and documentation is not very friendly to non-developers :( If you have questions, I'm happy to try and help if you make a new Github issue. I'm very open to any PRs that want to work on making this more user-friendly (see the Contribution section below!)

This project relies on two major libraries.

Finally, this project requires Python to be installed on your computer. Once installed, you can clone this repo and run

python -m pip install -r requirements.txt

to install the Python requirements for the project.

Usage

[!NOTE]
This project and documentation is not very friendly to non-developers :( If you have questions, I'm happy to try and help if you make a new Github issue. I'm very open to any PRs that want to work on making this more user-friendly (see the Contribution section below!)

First, we need to get our data. Follow Snapchat's instructions to download your data. You'll need to do two separate exports:

Now, make a folder in this repo called input and put the memories folder from the first export and the memories_history.json file from the second export into it.

With this folder prepared, you can now run python main.py to run the script! It will create a new folder called output that will hold all memories with timestamps and captions. (Note: this will create a new copy of each photo/video, so make sure you have enough space!) Alternatively, use the --output flag to provide a different location to dump the photos.

If you run into issues, please run the script with the -v or --verbose flag, which will output information on what the script is doing. If that doesn't help you with the issue, open a github issue with that output! You can also use the -vv flag to get logs from ffmpeg/vips.

Some other flags:

[!WARNING] If your captions are important to you, double check the final result against the photos in the Snapchat app! I found that the memories export did not include overlays/captions from some of my photos in 2017-2018. So check the final photos to make sure captions are there. If they aren't, you may need to download those impacted photos/videos directly from the Snapchat app. The majority of photos were successfully exported with all their captions.

Note: The timezone applied to the photos is set by your computer's local timezone! I'm open to any PRs to improve this (see below), but for a quick hack you can set the default timezone in SnapchatMemoriesCaptionAdder/adder.py in the add_metadata signature.

Thanks

Contributing

This achieved what I needed it to do, so I don't anticipate adding many more features. I'd be happy to accept PRs for some feaures I didn't implement:

License

MIT