Photobucket charged $5 to unlock my childhood - the bucket was empty
Last month I finally deleted my Yahoo account. Took me twenty minutes of security questions I invented at sixteen and a password reset email that went to an address I stopped checking in 2011. I felt productive. I felt like an adult closing loops.
Then I read lutr’s post about Photobucket and remembered I probably still have one of those too.
The story in one sentence
A developer cleaning up old online accounts tried to recover childhood photos from Photobucket, got paywalled behind a $5/month subscription marketed as a one-time $5 memory tax, paid it anyway, and discovered the account had zero images in it.
That’s the whole arc. The comedy is in the specificity.
Why this hit the front page
Photobucket is a nostalgia grenade. If you posted on forums between roughly 2005 and 2012, your screenshots, avatars, and meme JPEGs probably lived on Photobucket hotlinks. The service was the Imgur of a previous internet - simple upload, paste the URL, move on with your life.
Then it didn’t move on with yours.
The linked post opens with lutr doing exactly what a lot of us are doing now: auditing dead accounts. He’d already recovered hundreds of old screenshots from Imgur. Photobucket, he figured, must be older. Richer. More embarrassing.
The login screen greets him with copy that sounds like a hostage negotiation:
You shared them. We protected them.
Protected against what? Corporate greed, apparently. The landing page copy says it’s time to relive them for just $5 - until you read the fine print and realize it’s $5 per month. Not a ransom. A subscription trap dressed up as nostalgia.
HN didn’t upvote this because Photobucket is news. Photobucket has been doing variations of this for years. They upvoted it because the emotional setup is universal and the punchline is brutal.
The $5 that bought nothing
Here’s the detail that stuck with me. After wrestling with his dignity, lutr pays. Enters the card. Clicks through. Gets in.
--> // making it invisible to querySelectorAll. // // `data-cfasync="false"` keeps this rescue script executable even when // Rocket Loader is active. It rescues module scripts via two strategies: // 1. Query the DOM for type$="-module" + src (covers case A) // 2. Regex-parse the raw HTML for commented-out script tags (covers case B) // Dynamically-created scripts bypass Rocket Loader entirely. (function () { if (window.__markdyRescue) return; window.__markdyRescue = true; var rescued = false; function rescueModuleScripts() { if (rescued) return; rescued = true; var srcs = []; // Strategy 1: Rocket Loader kept the tag in DOM but changed the type. // type="module" → type="{uuid}-module" (still has src attribute) document.querySelectorAll('script[type$="-module"][src]').forEach(function (s) { srcs.push(s.src); }); // Strategy 2: Rocket Loader COMMENTED OUT the script tag entirely: // // These are invisible to querySelectorAll, so we parse the raw HTML. // We handle both attribute orderings (type-first or src-first). var html = document.documentElement.innerHTML; var reSrcFirst = //g; var reTypeFirst = //g; var m; while ((m = reSrcFirst.exec(html)) !== null) { srcs.push(m[1]); } while ((m = reTypeFirst.exec(html)) !== null) { srcs.push(m[1]); } // Re-inject each found src as a real module script. // Deduplicate first, then inject. Dynamically-created scripts bypass // Rocket Loader entirely. Modules with the same URL are only executed // once by the browser (cached), so re-injecting already-running scripts // is safe. var seen = {}; srcs.forEach(function (src) { if (seen[src]) return; seen[src] = true; var fix = document.createElement('script'); fix.type = 'module'; fix.src = src; fix.setAttribute('data-cfasync', 'false'); document.head.appendChild(fix); }); } // Rescue when user clicks the placeholder (fallback if autoplay failed). document.addEventListener('click', function (e) { var t = e.target; if (t && typeof t.closest === 'function' && t.closest('.markdy-placeholder')) { rescueModuleScripts(); } }); // Rescue automatically after a short delay for autoplay. // Only fires if initAll() never ran (no data-markdy-init on any root). setTimeout(function () { if (document.querySelector('.markdy-root:not([data-markdy-init])')) { rescueModuleScripts(); } }, 1500); }());The dashboard says:
Start filling your bucket…
Empty. Not “processing.” Not “restoring from archive.” Empty.
Photobucket had already implied his photos were waiting behind the paywall - “You shared them. We protected them” - and charged him anyway. Five dollars gone. The post’s editor’s note adds one more knife twist: the payments page had refund language in a footnote. He noticed it after the charge cleared.
I’ve paid stupid internet taxes before. Domain renewals for projects I forgot existed. A year of a note-taking app I opened twice. This one hits different because the product being sold was your own past.
What HN is arguing about
The thread splits cleanly into two camps, and both have a point.
Camp one: this is predatory and possibly illegal. equinoxnemesis put it bluntly - if they told you your photos were there and charged you to access them when the account was empty, that’s chargeback territory. Several people shared similar Photobucket emails threatening deletion unless you subscribe. The anger isn’t abstract. It’s “you held my forum history hostage and lied about the inventory.”
Camp two: you were always the fool for trusting free cloud storage. MarkusWandel’s comment is the uncomfortable one: treat all free cloud storage as ephemeral. hamburgererror asked why childhood memories were on a random website in the first place. jadar shrugged - no company stores your data free forever.
The most useful comment might be okramcivokram’s: when Photobucket emailed about account deletion, they logged in, skipped the subscription, and found a download your data option while closing the account. Free. No $5. lutr’s path wasn’t the only path - which makes the dark pattern worse, not better.
Read it / skip it
| If you… | Then… |
|---|---|
| Had a Photobucket account in the forum era | Read the original - you’ll feel seen, then slightly sick |
| Still have hotlinked images breaking across the old web | Check whether the host is paywalled before assuming the files are gone |
| Are cleaning up old accounts this year | Look for export/download flows before you hit “subscribe” |
| Already back up everything locally | Skip the post; you won this argument in 2009 |
The lesson isn’t “Photobucket bad,” though they are. It’s that free hosting is a loan, not a vault. The lender can change the terms, paywall your memories, or go bankrupt - and the only copy that survives is the one you actually own.
I still don’t know if my Photobucket account has anything in it. I’m not sure I want to find out badly enough to fund a subscription. My Yahoo photos, if any existed, are probably gone with the account I just deleted.
Maybe that’s the real tax: not $5 a month, but the slow discovery that the internet you grew up on was never saving things for you. It was just holding them until the bill came due.
Discussion on Hacker News · Source: lutr.dev · Submitted by lutr
Hoang Yell
A software developer and technical storyteller. I read Hacker News every day and retell the best stories here — in English and Vietnamese — for curious people who don't have time to scroll.