Takeout is great for a total archive backup, but using it just to extract photos is where the UX breaks down for most people.
When you export Mail with Takeout, Google dumps your entire history into a huge .mbox file. If you have a 20-year-old account, you're downloading tens of gigabytes of raw text data, headers, and metadata just to get to the images. Once you have that huge file, you still have to figure out a way to extract and decode the image attachments from the raw email text.
Mail Memories just gives you what you want: the photos.
First, I really love this idea, and I thank you for getting it into my head.
That said, if no AI is really important, I guess it's worth $29, though I can't tell if you used AI to build it or not from here.
Like, I just one-shot a script that does the same with Claude, after it listed 5 free projects that do the same, including one GUI. The whole thing took less time than writing this comment.
Now, if it were $2.99, I probably would have just paid you.
You're half right. The HTML and CSS are from a standard template that I imagine exists in just about every LLM's dataset, since they've scraped an internet's worth of them. I wrote (and rewrote and rewrote...) and edited every single word on the page, though.
No, I'm not afraid of pushback at all. I'm actually really glad I used IMAP.
Building on top of it let me solve a few major protocol headaches directly in the client:
The app filters out signature junk (like tiny social media and logo icons), pulls down just the raw attachments instead of downloading entire 20-year-old message threads, and handles thousands of images while gracefully managing Google's rate limits (to avoid connection drops).
It actually does use IMAP! The app connects directly to Google's IMAP servers via SSL straight from your machine.
I intentionally chose a local IMAP pipeline over the official Gmail API because of platform gatekeeping. To use the API for this, Google forces independent developers into a "Restricted Scope" tier, which requires an annual $15,000+ third-party security assessment.
Going the local IMAP route lets me bypass that completely while keeping user data 100% local and secure.
I don't like how somebody is flagging/downvoting all your comments. This is about your product; it's highly relevant, whatever somebody might think about it.
I don't think it's just "somebody"; I think it's a lot of bodies. I'm downvoting him too because he vibe-coded a super simple "app", then is trying to sell it here as some life-saving tool .
My main complaints:
- Why is this $30?
- Why is it Windows/Mac only?
- Why is it Gmail only when it's using IMAP?
But what really irks me is that you know you can do this exact thing with like two Linux CLI commands?
```
$ offlineimap -c <configfile with credentials>
$ mae export --maildir=test/fixtures/simple --output-dir=test/tmp_output
```
> Like, I just one-shot a script that does the same with Claude, after it listed 5 free projects that do the same, including one GUI. The whole thing took less time than writing this comment.
I'm assuming the author put in the effort to validate their program handles all kinds of pictures. With that assumption:
- how did *you* validate the one-shot script that Claude handed you works correctly?
- after all said and done, and getting it to work correctly, did you end up spending atleast $30 in time, effort and money?
I am curious how coding agents would affect the future of "micro apps" - apps/scripts that do one thing and just one thing very well.
The website is clearly vibecoded, and that makes me assume the app is also vibecoded. When I open the installer, Edge gives me a warning that the file is not safe. I know that just means the dev hasn't purchased a certificate, but it adds to the general feeling that this is a rushed project that asks 30 dollars for something that I can make with Gemini in about the time it took to write this comment.
I'm pretty sure the dev has good intentions, the app is safe, and it works... but I'm not going to find out because it's too much money and too risky.
It is a good idea, though. I'll check the comments for free, open-source alternatives, but if I don't find one, I'll probably just generate a script that does this when I get back home.
It worked fist shot, and found 3k+ photos, which feels about right. Validated with Vibes. It's going to take more than $30 in time to look at them all, and it's 3k+ more photos than I had before. So, I'm satisfied.
For apps without a network-effect, or highly specialized domains, coding agents are driving a convergence of the cost of software toward the cost of tokens to generate it. OP should have MIT licensed this, collected his 15m, and moved on to the next idea.
Thanks for the feedback! You're right, if you know how to write a script or prompt Claude, you can absolutely spin up a quick tool to scrape attachments in a few minutes.
That said, the $29 price point is for the execution and friction-removal. Turning a raw script into a compiled, code-signed desktop app that handles OS security gates (Mac Dev ID and Windows Smartscreen), dynamically manages Google rate limits, and a provides a beautiful UI for non-technical users takes a lot of effort.
For people who want to rescue their photos without opening a terminal - or who don't even know what a terminal is - this app is a huge win for them.
Just wanted to take a moment to say thank you to everyone who commented today. Launching on HN isn't for the faint of heart, but it’s been really valuable.
What a day. I was told my landing page looks like an AI wrote it, got roasted for a confusing illustration metric (and rightly so), and received the ultimate rite of passage: being told my app could be replaced by a couple of Linux CLI commands.
Unironically, thanks everyone. Because of your feedback, the site copy's a little tighter, and the Windows installer no longer throws a scary UAC prompt. I couldn't have asked for a better (or more intense) test.
I'd love to somehow do the opposite of this but I don't think it's possible? It would be deleting attachments from emails without deleting the email thread.
For example I'm always 1-2 GB away from my Google account being full. I've pruned Google Drive to the absolute bare minimum.
I've had my Google account for a really long time. There's tens of thousands of emails since day 1. However, there's many emails that have attachments.
For example my friends or someone might have sent me a bunch of images and there's a very long email thread going on with them. I want to delete the 300 MB of photos without deleting the email thread. I don't think Google has a way to do this. I'd easily be able to free up multiple gigs of space if this were possible.
I've already bit the bullet and deleted the biggest offenders but I have a ton of emails with 1-2 attachments (pdfs, zip files, some images, etc.) that might "only" be 15 MB but I definitely don't want to delete the email since it has a record of something. Not just the attachment but the corresponding email chain.
I will tell you who this is for: my parents who “back up” their photos by emailing them to themselves, and finally get convinced to use a real cloud photo solution.
I don't know if it can be used with total confidence because that HN thread makes it sound like they delete the original email and create a new email with the same meta data but some of the comments indicate that's not quite the same as the original. If you had to present this email as evidence, you could run into friction since the original no longer exists. Technically it looks like you can back the original up but as someone mentioned in a comment that seems like it would add a lot of friction in a legal case.
I have no intent on ever needing to use old emails with large attachments in a legal case but knowing this could be a problem makes me hesitant. Although on the bright side, it would be fine to use for anything you 100% know won't ever be used legally.
Meta: Can someone more familiar with the rules of HN please tell me why some Show HN posts get immediately “flagged” while others don’t? I have seen commercial entires like this be flagged while this one is on the first page.
I have not used Windows for decades. With that context:
> For $30 you should sign your binary so you don't have a UAC popup.
How much does it cost to be able to sign a binary so you can deploy it on Windows without a UAC popup? How arduous is it?
> Also is it not doable with Google takeout ( with Gmail )?
It sure is. You do a takeout and iterate over the compressed mbox looking for media attachments. Then you write them out. The edge cases, and the actual value is ensuring you properly grab all the media dispositions.
I also have emails from people who like to zip up a bunch of pictures and then email them to me - my own script takes care of this detail but I wonder if most other tools, including this one does.
I rebuilt the app because I was feeling that same fatigue. It felt like every cool new tool I looked at wanted to upload personal data to a remote server, hook it up to a third-party AI API, or charge a recurring fee.
The original version of the app actually was a cloud-based SaaS. But I figured people would feel significantly more comfortable having a sensitive tool like this run entirely on their own hardware instead of in the cloud like everything else. Making it local-first also makes it easier for people to download and try it out.
Interesting! I already have a Python script that can download anything from Gmail. Making it a product?! Really have not thought about it! Which is why I am probably broke Ha Ha
Just pushed an update to the site around this. Changing the text to "Downloaded" still might confuse someone, so I removed that line from the illustration altogether.
I like your idea. While installing the app, I suddenly had an idea for the logo: what do you think about using a tilted old photo of a child as the app icon?
Totally fair, though. In my defense, 98% of my time went into wrestling with IMAP parsing architectures, optimizing memory, and code-signing certificates instead of designing custom CSS layouts from scratch. I'll finesse the design in the future.
> 98% of my time went into wrestling with IMAP parsing architectures, optimizing memory, and code-signing certificates instead of designing custom CSS layouts from scratch
// 1. Retrieve our current position from the script's property store
const scriptProperties = PropertiesService.getScriptProperties();
let startIndex = parseInt(scriptProperties.getProperty('START_INDEX')) || 0;
// Locate or create the destination folder
let folder;
const folders = DriveApp.getFoldersByName(FOLDER_NAME);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(FOLDER_NAME);
}
// 2. Process batches in a loop
// Updated search query to ignore USPS and non-primary tabs
const searchQuery = 'has:attachment -from:usps.gov -category:promotions -category:updates -category:social (filename:jpg OR filename:jpeg OR filename:png OR filename:zip)';
while (true) {
const threads = GmailApp.search(searchQuery, startIndex, BATCH_SIZE);
// If the search returns empty, we've hit the end of the inbox
if (threads.length === 0) {
console.log("Extraction completely finished.");
scriptProperties.deleteProperty('START_INDEX');
deleteTriggers(); // Clean up so it doesn't keep running
return;
}
for (let i = 0; i < threads.length; i++) {
const messages = threads[i].getMessages();
for (let j = 0; j < messages.length; j++) {
const attachments = messages[j].getAttachments();
for (let k = 0; k < attachments.length; k++) {
const attachment = attachments[k];
const name = attachment.getName().toLowerCase();
const type = attachment.getContentType();
const size = attachment.getSize();
// Apply size threshold (102,400 bytes = 100KB) and file type filter
if (size > 102400) {
if (type.includes('image/') || name.endsWith('.zip')) {
folder.createFile(attachment);
}
}
}
}
}
// Increment our starting index for the next batch
startIndex += BATCH_SIZE;
// 3. The Stopwatch Check
if (Date.now() - START_TIME > TIME_LIMIT) {
console.log(`Approaching timeout at index ${startIndex}. Saving state and passing the baton...`);
scriptProperties.setProperty('START_INDEX', startIndex.toString());
scheduleNextRun();
return; // Exit to avoid the hard timeout exception
}
}
}
function scheduleNextRun() {
deleteTriggers(); // Prevent duplicate overlapping triggers
ScriptApp.newTrigger("autoExtractGmailMedia")
.timeBased()
.after(60 * 1000) // Fire a new execution 1 minute from now
.create();
}
function deleteTriggers() {
const triggers = ScriptApp.getProjectTriggers();
for (let i = 0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() === "autoExtractGmailMedia") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
Deselect everything, select "Mail", create export, wait until it's done, and then download the zip.
When you export Mail with Takeout, Google dumps your entire history into a huge .mbox file. If you have a 20-year-old account, you're downloading tens of gigabytes of raw text data, headers, and metadata just to get to the images. Once you have that huge file, you still have to figure out a way to extract and decode the image attachments from the raw email text.
Mail Memories just gives you what you want: the photos.
That said, if no AI is really important, I guess it's worth $29, though I can't tell if you used AI to build it or not from here.
Like, I just one-shot a script that does the same with Claude, after it listed 5 free projects that do the same, including one GUI. The whole thing took less time than writing this comment.
Now, if it were $2.99, I probably would have just paid you.
The OP had posted a detailed reply here as well, that they since deleted - I think because they didn't want to deal with all the pushback here.
Building on top of it let me solve a few major protocol headaches directly in the client:
The app filters out signature junk (like tiny social media and logo icons), pulls down just the raw attachments instead of downloading entire 20-year-old message threads, and handles thousands of images while gracefully managing Google's rate limits (to avoid connection drops).
I intentionally chose a local IMAP pipeline over the official Gmail API because of platform gatekeeping. To use the API for this, Google forces independent developers into a "Restricted Scope" tier, which requires an annual $15,000+ third-party security assessment.
Going the local IMAP route lets me bypass that completely while keeping user data 100% local and secure.
My main complaints:
- Why is this $30?
- Why is it Windows/Mac only?
- Why is it Gmail only when it's using IMAP?
But what really irks me is that you know you can do this exact thing with like two Linux CLI commands?
[1] https://github.com/mrtazz/maeI'm assuming the author put in the effort to validate their program handles all kinds of pictures. With that assumption:
- how did *you* validate the one-shot script that Claude handed you works correctly?
- after all said and done, and getting it to work correctly, did you end up spending atleast $30 in time, effort and money?
I am curious how coding agents would affect the future of "micro apps" - apps/scripts that do one thing and just one thing very well.
I'm pretty sure the dev has good intentions, the app is safe, and it works... but I'm not going to find out because it's too much money and too risky.
It is a good idea, though. I'll check the comments for free, open-source alternatives, but if I don't find one, I'll probably just generate a script that does this when I get back home.
For apps without a network-effect, or highly specialized domains, coding agents are driving a convergence of the cost of software toward the cost of tokens to generate it. OP should have MIT licensed this, collected his 15m, and moved on to the next idea.
That said, the $29 price point is for the execution and friction-removal. Turning a raw script into a compiled, code-signed desktop app that handles OS security gates (Mac Dev ID and Windows Smartscreen), dynamically manages Google rate limits, and a provides a beautiful UI for non-technical users takes a lot of effort.
For people who want to rescue their photos without opening a terminal - or who don't even know what a terminal is - this app is a huge win for them.
What a day. I was told my landing page looks like an AI wrote it, got roasted for a confusing illustration metric (and rightly so), and received the ultimate rite of passage: being told my app could be replaced by a couple of Linux CLI commands.
Unironically, thanks everyone. Because of your feedback, the site copy's a little tighter, and the Windows installer no longer throws a scary UAC prompt. I couldn't have asked for a better (or more intense) test.
For example I'm always 1-2 GB away from my Google account being full. I've pruned Google Drive to the absolute bare minimum.
I've had my Google account for a really long time. There's tens of thousands of emails since day 1. However, there's many emails that have attachments.
For example my friends or someone might have sent me a bunch of images and there's a very long email thread going on with them. I want to delete the 300 MB of photos without deleting the email thread. I don't think Google has a way to do this. I'd easily be able to free up multiple gigs of space if this were possible.
I've already bit the bullet and deleted the biggest offenders but I have a ton of emails with 1-2 attachments (pdfs, zip files, some images, etc.) that might "only" be 15 MB but I definitely don't want to delete the email since it has a record of something. Not just the attachment but the corresponding email chain.
THE GOOD:
Their FAQ says it uses OAuth to connect to your Google account and the emails never leave your browser.
It also costs 83 cents for 1 month so you can go nuts. Alternatively you can pay 1 cent per email if you have a handful.
I see another HN thread about it here from a few years ago: https://news.ycombinator.com/item?id=32462878
THE BAD:
I don't know if it can be used with total confidence because that HN thread makes it sound like they delete the original email and create a new email with the same meta data but some of the comments indicate that's not quite the same as the original. If you had to present this email as evidence, you could run into friction since the original no longer exists. Technically it looks like you can back the original up but as someone mentioned in a comment that seems like it would add a lot of friction in a legal case.
I have no intent on ever needing to use old emails with large attachments in a legal case but knowing this could be a problem makes me hesitant. Although on the bright side, it would be fine to use for anything you 100% know won't ever be used legally.
Also is it not doable with Google takeout ( with Gmail )?
> For $30 you should sign your binary so you don't have a UAC popup.
How much does it cost to be able to sign a binary so you can deploy it on Windows without a UAC popup? How arduous is it?
> Also is it not doable with Google takeout ( with Gmail )?
It sure is. You do a takeout and iterate over the compressed mbox looking for media attachments. Then you write them out. The edge cases, and the actual value is ensuring you properly grab all the media dispositions.
I also have emails from people who like to zip up a bunch of pictures and then email them to me - my own script takes care of this detail but I wonder if most other tools, including this one does.
You can get a cert for $130-300/yr, and then you can use signtool to sign it.
The world needs more of this
I rebuilt the app because I was feeling that same fatigue. It felt like every cool new tool I looked at wanted to upload personal data to a remote server, hook it up to a third-party AI API, or charge a recurring fee.
The original version of the app actually was a cloud-based SaaS. But I figured people would feel significantly more comfortable having a sensitive tool like this run entirely on their own hardware instead of in the cloud like everything else. Making it local-first also makes it easier for people to download and try it out.
Be honest, is "Emily D" a real person you got organic feedback from? Small thing that makes the vibed site off-putting.
It says "Storage: 1.3 GB saved", but then says it is Read-only.
Yes, use Google Takeout if you want a full account archive. It's a pain if you just want to get your photos, though.
You have to deal with huge .mbox files, download gigabytes of unnecessary text, and sometimes you have to wait days for the export.
The short version is that Mail Memories lets you get the images you want instead of an all-or-nothing data dump.
Totally fair, though. In my defense, 98% of my time went into wrestling with IMAP parsing architectures, optimizing memory, and code-signing certificates instead of designing custom CSS layouts from scratch. I'll finesse the design in the future.
You're just using imapflow and their Gmail search method. Why are you making things up? https://imapflow.com/docs/guides/fetching-messages#gmail-spe...
You call that function with this query over and over again:
filename:(jpg OR jpeg OR png OR gif OR webp OR heic OR tif) after:${year}/01/01 before:${year + 1}/01/01
And then you call their download method: https://imapflow.com/docs/guides/fetching-messages#downloadi...
All you did was throw together a frontend, package it into Electron, paywall it, and try to obfuscate the code.
What part of that is "wrestling IMAP parsing architectures"?
function autoExtractGmailMedia() { const START_TIME = Date.now(); const TIME_LIMIT = 1000 * 60 * 5; // 5 minutes (leaves a 1-minute safety buffer) const BATCH_SIZE = 50; const FOLDER_NAME = "Gmail_Media_Export";
}function scheduleNextRun() { deleteTriggers(); // Prevent duplicate overlapping triggers ScriptApp.newTrigger("autoExtractGmailMedia") .timeBased() .after(60 * 1000) // Fire a new execution 1 minute from now .create(); }
function deleteTriggers() { const triggers = ScriptApp.getProjectTriggers(); for (let i = 0; i < triggers.length; i++) { if (triggers[i].getHandlerFunction() === "autoExtractGmailMedia") { ScriptApp.deleteTrigger(triggers[i]); } } }