Glacier Archiver
An app using an unorthodox Python and Electron combo which helps me track, summarise, and archive terabytes of media files on two continents.
Contents
Key Points
- A modern
React
app built for desktop usingElectron
with aPython
script backend. - Summarises and uploads 100s of GBs of files per month to
S3
. - Demonstrates a successful implementation of an unorthodox technology stack.
Features
Glacier Archiver
is the perfect assistant for me to back up endless supply of photos and videos. It's also quite performant despite the name.
I generate a lot of data through my travel and photography habits. In fear of losing this data on the road, I craved a backup solution that was easy to use and secured in multiple locations. Consumer solutions didn't seem to cut it, and thus, a new project was born.
It features:
A cosy `React` built UI which includes a file explorer, upload tracker, and ability to run various actions.
Ability to summarise media content into a contact sheet which helps me to locate files visually.
VideoNavigate local files, and restore or download archived ones.
The Tech
Originally all functionality was performed through a collection of Python
scripts. These scripts enabled me to summarise and perform my initial backup before embarking on an extended trip. The Electron
part came after-the-fact and wraps the original logic in a nice and friendly UI.
Python
- Generates the data to render the file explorer. This includes the file 'is archived' and 'is summarised' tags.
- Summarises media files within a folder into contact sheets linked to their respective file names. These sheets are lightweight and allow me to locate files visually. FFmpeg is used to generate video thumbnails.
- Talks to
S3
to restore, check restore status, and download files. - Scripts are called through shell commands provided by
Electron
.
Electron
- Allowed me to apply my love of web apps whilst utilising an existing
Python
and file system backend. Electron
apps are large and memory hungry, but as the only user this was acceptable because of its ease of development.- Why didn't I use
Python
to build the UI? Native desktop options simply don't look as good and are losing popularity.
React/Redux
- I love
React
, why not try it out on the desktop? React
andRedux
were probably overkill, but they let me easily create a solid, extensible, component based application.
AWS S3
- Stores all uploaded data.
S3
was chosen for its affordability, security, and backup options. - All files are backed up on 2 continents for redundancy. Syncing is provided by
AWS
. - Use of this service included auth setup through SSH keys.
- Rclone is used to perform bulk data uploads and track upload progress. This saved me some time from doing it myself!
- The AWS CLI is used to track uploaded files, trigger file restores, and download restored files.