Anthony Accioly
Always curious. Eventually consistent. Strongly opinionated, intermittently technically correct.
Labels & self-deception: Computer geek, people builder, world citizen, homelab mad scientist, cat person.
My personal relay: wss://haven.accioly.social
PGP: 1BBD C23D 1853 255D 6415 D2EC 814E DF85 1AAB 370E
Anthony Accioly
8/8 20:53:39
๐
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
โฌ
Laeserin ๐ป๐ฆ
8/8 18:08:41
๐
That's a description of the endpoints. My problem is that I have no idea what it does and why it's supposedly so much better than a media server.
โฌ
The Fishcake (nostr.build)
8/8 18:04:45
๐
You can read all you need at https://blossom.band with all the links to all the BIPs, Iโve done the mental heavy lifting for ya ๐คฃ
โฌ
Laeserin ๐ป๐ฆ
8/8 18:00:05
๐
I legit can't figure Blossom out. I've read the specs, but "Ich verstehe nur Bahnhof." ๐คท๐ปโโ๏ธ
โฌ
Laeserin ๐ป๐ฆ
8/8 17:57:43
๐
Is Blossom the reason why media servers are downloading copies of my pictures and serving up their version, instead of the original?
Cuz, I find that sorta creepy.
โฌ
The Fishcake (nostr.build)
8/8 16:45:45
๐
Redirect can get you only so far, because it redirects from the upload endpoint, making it a single point of failure.
Integrity of a media is undesirable by the majority, since it prevents any sort of transcoding or asynchronous optimization, resulting in slower uploading times (if sync optimized) or shitty user experience that is caused by gigantic files with a ton of redundant and unused by the client info.
Lastly, the assumption that service MUST deduplicate content to be compliant, is naive at best. People want to own their uploads and not share them with others, services want to provide individuals with their own libraries, making things more challenging. Lastly, deduplication of the content based on hash is highly inefficient at scale, forcing services to come up with a bunch of workarounds, and maintain risk of deleting/overwriting someone elseโs files at any moment.
Overall, I understand what you are preaching, but at the same time ideologies are never productive in the real world.
Mirroring could have been added easily to nip96, if it wasnโt for people hyping toward the next thing. Thatโs exactly how we are ending up with fragmented clients that cannot keep up with 4 standards for DMs, 4 standards for media hosting, and so on.
โฌ
daniele
8/8 16:36:35
๐
Serving media in Blossom can be managed with a redirect, like you do, and this offer a good degree of flexibility to separate the upload endpoint and the actual storage.
> Note that the "<sha256-hash>" part is from the original file, not from the transformed file if the uploaded file went through any server transformation.
Instead I find this part quite problematic because it does not easily permit to test the file integrity. I need a nip94 event or an imeta tag with the "x" value to check it.
Media transformation is a powerful feature but adds a lot of complexity.
Finally I don't read in the nip anything about mirroring (not only multiple uploads) of the assets, and fallbacks in the download procedure, aspects that seem important in the decentralized context of Nostr.
โฌ
The Fishcake (nostr.build)
8/8 9:56:25
๐
NIP96 does not prescribe how I serve the media (endpoint to be specific) and allows me to make a more reliable service with a clear separation of concerns. In blossom I am forced to accept uploads and serve media from the same exact hostname, therefore forcing me to make trade-offs that hurt speed or availability.
โฌ
daniele
8/8 6:59:33
๐
I got it, thanks.
Btw it seems that Blossom is getting more traction than nip96, isn't?
Why do you prefer nip96?
โฌ
The Fishcake (nostr.build)
8/8 6:10:03
๐
The standard (and recommended) way is nip96, blossom protocol in our case is just an addon and it gives you a link that will redirect to the original media
โฌ
daniele
8/8 6:00:12
๐
Oh, image.nostr.build is not Blossom?
Now I see that blossom.nostr.build exists.
โฌ
The Fishcake (nostr.build)
8/8 5:56:04
๐
Thatโs not how it works, only Blossom, not the standard one.
โฌ
daniele
8/8 0:46:02
๐๐ค ๐คฃ
nostr:npub1nxy4qpqnld6kmpphjykvx2lqwvxmuxluddwjamm4nc29ds3elyzsm5avr7 this image has the wrong hash in the url:
It should be e63f8c6dbe7423b2d5cf62a0b5b64b556bac5234ad501ea295742d5cda4717e4
Anthony Accioly
8/6 16:12:10
๐
Deleted account, but not before spamming every relay on earth. "Tina" made through my strict L1 only WoT. She got more than 3 folks from my 200 person follow list to follow it. I'm more than impressed.
โฌ
b32ba91ee18e28e0eff1ea52b0df8534891b99372c7a38a14522ff5e19f340fb
โฌ
โฌ
โฌ
โฌ
โฌ
403bba2dc637f391a4d127a6720a38e2616a1744721ab83facff893be26fe31f
โฌ
9d43ad81411b1b3836dc6684e5aa8c7e887e22d0dac01a8a2530876ecd424909
โฌ
Anthony Accioly
7/25 17:28:53
๐
So Carl got some competition now. I love to see more cat content :)
โฌ
Anthony Accioly
4/15 8:52:00
๐
GM fishcake. And GN for ke 0:51 AM here, lol.
โฌ
The Fishcake (nostr.build)
4/15 8:33:39
๐๐ค ๐คฃ
GM, time to dent the world and maybe make a few holes in it, while we are at it! ๐โ๏ธ๐ซ๐ฅ๐
nostr:nevent1qqspdp3senv0wz33ppcwh7wqpl37q0hz2myrlxvznz4lyue3yg32mqspr9mhxue69uhkuurjdau8jtntwf5hxarpwpekktnvwc636vzj
โฌ
168630ccd8f70a310870ebf9c00fe3e03ee256c83f998298abf273312222ad82
Anthony Accioly
4/4 20:32:40
๐
Thanks for your service Fishcake. Moderating bigger Blossom and NIP-96 instances is already a lot of work. Doing that plus dealing with notes from real people who are willing to attack your service (and you personally) every time moderation doesnโt go their way is almost impossible. Iโve seen so many instance mods put in serious effort to keep Mastodon instances alive, only to eventually give up because of constant attacks, doxxing, smear campaigns, threats to their families, and all sorts of nonsense.
I have no illusion that some owner / admin moderation is needed at both the relay and media server levels, but when Nostr grows past the "manageable" 20K daily active users and heads toward 200K or even 2M+ users, decentralised moderation (beyond just reports) is going to need some real attention.
I think we need something like Stack Exchange, where a certain number of reports trigger a media/post review. That review could then be handled either by consensus among a few "reputable" users or by a single "highly reputable" user (where reputation is defined by a mix of relay/media server trust and npub metrics). Maybe even add some perks for voluntary moderation to sweteen the deal, i.e., some sats, bigger upload limits, Nostr badges, etc. Gamifying moderation has its own issues, but at scale, it tends to work pretty well.
โฌ
The Fishcake (nostr.build)
4/4 18:53:58
๐๐ค ๐ซก
I am always conflicted when doing media moderation. On one side we have clear rules about what is and is not acceptable, on the other side I donโt know if the person even knows they upload to us. Problem with lack of transparency about the full chain of services, and one of the difficulties with decentralization ๐ค
Anthony Accioly
10/24 19:46:13
๐
Brazilian here. No hate for vegans at all, and I'm not one of the "Nostr Carnivorous Way of Life" influencers, but honestly, I don't know how vegans do it. You might as well ask me to stop drinking water.
โฌ
The Fishcake (nostr.build)
10/24 19:41:28
๐๐ถ ๐คฃ
I canโt imagine being a vegetarian (or worse, vegan) after eating a steak with some good wine to follow it. How!? ๐๐ซ๐ฅฉ๐ซ๐ท๐ฅฉ๐ซ




