I’m trying to understand the best thinking/knowledge at the moment on how we might serve censorship resistant blobs of media (images/videos).
I’ve used nostr.build plenty to host media I share on nostr. It’s great, but obviously represents a single point of failure.
I’ve been reading about Blossom/Blossom Drive a bit, but it seems to be aimed at helping someone verify a piece of media from an author was not tampered with rather than making the media resilient to censorship.
Is that understanding correct? Are there other approaches/projects/protocols that aim at publishing/serving censorship resistant blobs of media?
Login to reply
Replies (16)
Blossom can host media on multiple servers at the same time and proxy requests to whatever host has it . Files are signed with your nip
No, that’s not it. The hashing is about making the content addressable, which means that the *where* the data, the media, comes from, is non-important.
Ok, that gives us the same thing relays give us on nostr, so what?
The next piece of the puzzle is the pubkey, tying a blob’s hash to a pubkey allows you to easily retrieve the list of blossom servers that pubkey uses; so when you have a url from a pubkey pointing to server1 as the place to find file with hash1
When server1goes down/censors, you can ask nostr in the same way we use outbox model to find which is the new server for that same pubkey
You now have a list of candidates servers that pubkey moved to and a hash; you can just ask for the hash to those servers and voila, maybe you’ll get your file.
Since you also can talk about this blob by its hash you can use other tricks to find it or DVMs to go and do the searching for you in exchange for some sats.
It really is extremely simple but it works and it’s super powerful.
Is it expected that Blossom servers scrape from other blossom servers for data redundancy?
My god Pablo, you're a genius 🔥
No, it's ready for prime time; I'm working right now on replacing nostr.build with Blossom endpoints-only.
It will default to Primal's blossom server but it will be easily configurable.
In fact, this very screenshot was uploaded from Highlighter to the Satellite blossom instance, and if it were to go down, it would automagically heal.


no, it's not expected, but they can
OR, for example, you could have a blossom server in your home that is backing up absolutely everything YOU publish; it doesn't need to do anything special, just listen from events from you and look for referenced blossom URLs.
That's it. That's all it needs to do.
Say one day your main server rugs you, you automatically have all your prior media fixed.
Today we've been discussing the /mirror endpoint, which you can use to accomplish 👇
1. upload file1 to serverA
2. instruct serverB, serverC and serverD to fetch file1 from serverA and keep a copy
this could all be done automatically, or not, from your client
That’s pretty awesome.
I didn’t know it mapped to an npub either. That’s super cool.
You're correct that Blossom/Blossom Drive focuses on verifying the authenticity of media rather than making it censorship-resistant. For censorship-resistant media storage and distribution, you might want to explore projects like IPFS (InterPlanetary File System) and Arweave. Both aim to decentralize data storage, making it harder to censor. IPFS uses a peer-to-peer network to distribute data, while Arweave stores data permanently using a blockchain-like structure.
uncoupling a blob from a specific url, and making it locatable anywhere on the network is such a powerful idea
Yup. 100%. The addressability plus the layers of “how to find stuff related to me” that the protocol already does makes it like the universal join table for nostr data.
I’ve been digging in on double ratchets and syncing big groups across devices and, wouldn’t you know, I think npubs are going to solve problems there.
🤝


Will do!
iroh is a make over of ipfs, pear is the leader in p2p
and pears.com
GitHub
GitHub - n0-computer/iroh: IP addresses break, dial keys instead. Modular networking stack in Rust.
IP addresses break, dial keys instead. Modular networking stack in Rust. - n0-computer/iroh
next youll make relays key addressable and add a dht, voila p2p
using p2p tech like pear