The big why behind Blossom
Laeserin, IMO the short answer here is that Blossom is about resiliency. Dead simple, pragmatic "Universal" resource addressing with viral replication and easy fallback trumps features and flexibility (i.e. not NIP-96, certainly not IPFS).
Stop here if you don't care about the details (you have been warned). I'm verbose, I’m not AI, and it’s not my problem if certain anons have an attention span of 280 characters.
(...)
Still here? Good.
==============
The long version
==============
Illustrative use case: Anon wants to upload their favourite meme to Nostr.
Simplified flow:
1. Anon uploads their media to a Blossom server (PUT /upload), gets a universally addressable hash at the root of the server (GET anonsblossomserver.xyz/{sha256}.png).
2. Anon can also optionally mirror (or configure their client to mirror by default) to as many other Blossom servers as they wish. For instance, Anon sets their Nostr client to mirror to blossom.band and blossom.primal.net, so from here on they can retrieve a copy of their media from blossom.band/{sha256}.png or blossom.primal.net/{sha256}.png.
3. Anon then posts a kind 1 note referencing anonsblossomserver.xyz/{sha256}.png.
4. Nostr clients, even those that don’t know anything about Blossom, try to retrieve the resource from the link. The resource is there, the server is up; happy days, the client just retrieved Anon’s meme over HTTP.
Now assume that, in a joint effort, the Ministry of Truth and Ministry of Love decide that anonsblossomserver.xyz is not doing proper age verification with government IDs and biometrics, so they take the domain down.
At the same time, in this alternative reality, nostr:nprofile1qqsglv2qkn5dmmuhee9cy8fywfu2rfp4xd3xy0myqg2gfvmjl9yqqrqpp4mhxue69uhkummn9ekx7mqpzemhxue69uhhyetvv9ujumn0wd68ytnzv9hxgqgkwaehxw309aex2mrp0yh8qunfd4skctnwv46qye8cpd goes evil and decides that non-Blossom stuff is so much better than Blossom that they will make blossom.band incompatible to focus on their other tool, notreallyblossom.band, with several cool not-Blossom features, Microsoft vs Netscape style.
So now anonsblossomserver.xyz/{sha256}.png returns 404 and blossom.band/{sha256}.png returns The Fishcake's favourite photo of a dog telling you to pay to retrieve your image from notreallyblossom.band/path/{notReallyTheOriginalSha256}.png, serving a slightly compressed photo of a dog with a watermark (sorry for making you the evil villain of the story here, The Fishcake; I hope you forgive me).
Nostr clients that are Blossom-aware can now fall back to other Blossom servers:
1. The client finds out that anonsblossomserver.xyz/{sha256}.png is broken.
2. Instead of giving up, it retrieves Anon’s kind 10063, which contains a list of their favourite Blossom servers.
3. The client then tries to download {sha256}.png from each server in the list until it finds one that works. It can even detect The Fishcake’s evil version of the attack by hashing the blob and verifying that it doesn’t match the hash in the original URL. It then proceeds to retrieve media from blossom.primal.net, finds it, and all is well.
Now let’s assume that blossom.primal.net is also down, but other anons have mirrored the media to other popular blissim servers like supeuperdupperblossom.ch. Clients can even fall back to a list of popular servers, ask each server if they have a copy of the media (/HEAD {sha256}.png), and, if they do, download it from there.
There’s of course a bit more to it, with optional endpoints around media optimisation, listing images for a certain npub, reporting bad stuff, paying to host, retrieving metadata, etc. But the core functionality is basically what I stated above.
Hopefully this is helpful.
nostr:nprofile1qqszv6q4uryjzr06xfxxew34wwc5hmjfmfpqn229d72gfegsdn2q3fgpzfmhxue69uhkummnw3e82efwvdhk6tcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszythwden5te0dehhxarj9emkjmn99urf278z, I'm thinking about putting together a "Why Blossom" presentation/domain like Fiatjaf did for the Outbox model. What do you think?
#Blossom #TheBigWhy #GrowNostr #NonCanonical #ShowBeALongFormArticle #ButItWontBecauseImLazy