The recovery note
Your photos back,
without Glassine.
Every Glassine backup store carries this note, written automatically when the store is created. We publish it here too, so the instructions survive even a lost drive label or a forgotten folder. The point of the format is that you never need Glassine — or any app — to get your originals back.
RECOVERY.txt
HOW TO RECOVER YOUR PHOTOS FROM THIS BACKUP — WITHOUT ANY SPECIAL SOFTWARE
===========================================================================
This folder is a Glassine backup store. You do NOT need Glassine (or any
other app) to get your photos back. Everything here is open:
blobs/ Your original photo/video files, byte-for-byte unmodified —
no encryption, no compression, no proprietary container.
Each file is named by the SHA-256 hash of its own content
and stored under two levels of subfolders (blobs/ab/cd/abcd…).
index.sqlite A standard SQLite database mapping those files back to
their original names, dates, and history.
FASTEST PATH — recover everything with original filenames (macOS/Linux,
built-in tools only). Each file is prefixed with the first 8 characters
of its hash so different versions of the same photo — or the many files
that legitimately share a name — can never overwrite each other:
mkdir -p ~/recovered && sqlite3 index.sqlite \
"SELECT hash || '|' || COALESCE(original_filename, hash) FROM resource_version" | \
while IFS='|' read -r h name; do
cp "blobs/${h:0:2}/${h:2:2}/$h" ~/recovered/"${h:0:8}-$name"
done
NO TERMINAL, NO DATABASE, WORST CASE: the files in blobs/ ARE your photos.
Copy them anywhere and add a file extension (.heic, .jpg, .png, .mov) —
any photo viewer will open them. You lose the nice names, never the pixels.
USEFUL QUERIES (run: sqlite3 index.sqlite "…"):
List every stored file:
SELECT original_filename, hash FROM resource_version;
A photo's versions over time (the recovered files' 8-char prefixes
match the start of each hash; is_current = 1 marks the newest):
SELECT substr(hash,1,8), is_current, datetime(captured_at,'unixepoch') AS captured, original_filename
FROM resource_version ORDER BY original_filename, captured_at;
Photos deleted from your library but kept here:
SELECT local_id FROM asset WHERE is_deleted = 1;
Verify a recovered file is intact: its SHA-256 (shasum -a 256 <file>)
must equal its filename in blobs/.
This file was written automatically when the store was created.