I love @jb55 and all his work to lead Nostr into the huge ecosystem we have today. However, he is wrong about NIP-94. NIP-94 was discussed for 2 months, agreed and merged. Amethyst is just implementing the consensus. I am not the one going sideways to implement my own way of doing things.

Replies (77)

This is the same way we quote everything else. Polls, Long form content, other Kind 1s... It's still in spec. Kind 1s don't require inline images.
I tend to agree it's not cool for the biggest client to just invent new standards without asking, but if he manages to make something that works and is backwards-compatible that could be good. But I think the biggest issue here is that you've implemented NIP-94 on Amethyst in a way no one (I think) expected it to be implemented: for inline images -- which is probably a fault of the NIP and the discussions not ever being clear about their intents and purposes. We should address that by rewording the NIP.
Debating this is good and healthy for the protocol. We should come to consensus about how this NIP should be implemented though. Users want their content to be seen and and they'll use whichever client or clients allow that to happen.
Any Nostr event can be quoted in a Kind 1 with nostr:nevent... That means any new event kind can be quoted. Damus doesn't need to load the preview if they thing the preview is slow. They can simple do an @note1 text and get users to click on it.
If you don’t want other clients to see images from your users than so be it. Once they realize that no one can see their image posts you will quickly lose users anyways. I’m done talking about this. cya ✌️
It would have been insanely easy for him to make this backwards compatible. Instead he opted to build this on a deprecated mention spec with no url hint to make it maximally backwards *incompatible*. Bcash vibes.
I fully agree here, #[3]. I'd stop recommending Amethyst and stop using it myself if it means that the majority of users can no longer see my images. You may be right in the long run, we don't know, but we shouldn't alienate the majority of the user base while we figure these things out.
The point is that NIP-94 wasn't meant to be for embedded images in kind:1 notes. If someone really wants to reference a kind:1063 they should be able to, paste a nevent code and that's fine, but they shouldn't expect other social clients to be able to understand these events, so it makes no sense to make that the default way of loading images. The best way to ensure that the protocol is kept simple is to not assume other clients will implement whatever NIP you think it's cool -- you can implement anything you want, but you should still make it so the experience works for others that don't.
BHN 🍁's avatar
BHN 🍁 2 years ago
If(response.type == nip-94){ //do nips } else{ //no nips :( }
I am favor of there being a standardized way of sharing files within notes, but nip-94 seems to be something completely different than that
Backwards incompatible changes to core functionality like this hurt everyone. This is how forks on open source projects can happen. If developers disagree with the direction of where an app is going, it can be forked as a new project, or a competitor will take over. The market will ultimately decide.
I find really funny that people are calling this a backward incompatible change or a "hard fork" as if it's breaking from the past. NIP-94 is a simple new event that is now being quoted in kind 1 in the right way of doing so. This is not a breaking change at all. This will keep happening at event kind.
Just a Nostr pleb here but isn't that setting completely subjective standards and therefore adding politics into it? How can we have clients competing for the best experience and most features, within the rules of the NIPs, while at the same time asking for all-vs-all compatibility?
I think a core issue is that kind1 is getting overloaded with specs. Two mention specs, quote repost. We should probably stop adding shit or kind1 posts are going to be impossible to implement in new clients. This is why I like the longform kind, still text but we can have markdown, inline images, etc without having to overload kind1 with more interpretation and parsing.
This is the definition of stubborn. Clearly people are not ready for this change yet. Please show some humility. ✌
Default avatar
nobody 2 years ago
100%. We need consensus of simple things like sharing photos! This is damaging for adoption of Nostr. Case in point: My partner is new to Nostr as of a few days ago... and she's a #Damus user. My photos from Amethyst don't load on her client. I chalked it up to "new tech glitches" but the lasting impression on her is: "Oh, so this App doesn't work" and "So photos don't work? Oh this is too confusing anyways". 😟🙁
Default avatar
nobody 2 years ago
Yes. Clients don't have to be the same... But not even loading photos is a HUGE issue.
How is proposing an optional header to a NIP comparable to this in any way? Our relays will never implement non-backwards compatible changes in this way - full stop. If clients can’t access our relays we lose all of our value. I think you completely misunderstand where I’m coming from.
I agree. Please create a short tutorial on what the best practice is for building apps on top of nostr, it would greatly benefit the community. Bluesky is tackling this problem with their "Lexicon" system, perhaps nostr could do something similar?
I didn’t say any of that... I half expected you to reply with something along the lines: we won’t let it happen under our watch ✊ Oh well it’s Monday and I didn’t intent to join the drama so I apologize and please forget I tagged you
It’s quoting this note which has images. Your change will still break images in damus and every other client, forcing it to use quoted posts to view images. image
😂 very well, my apologies then. The timing was odd given the conversation we just had about NIP98 and the context of this thread. I am passionate about making sure people get their notes and other stuff. We won’t let it happen. 🫂
But NIP94 is not a direct image. It is a quote event. I would expect to be rendered as such. Here a post with a quoted image nostr: note1z3dt56fh42r85wf7tu6hq7fcecu9xpnj8kntxeg6zpps3j9gqhxqlh
Having two different ways to display images is too confusing. A much better and backwards compatible way could be done in either two ways: 1. nevent with internal kind and image url tlv. This would at least allow other clients to use the url if they don’t want to implement the attachment nip. 2. Keep the url and reference the metadata event id in a tag with a url index. 3. Probably many other ways that wouldn’t break anything. If you really want this to be a file attachment instead of image then you could just keep the original upload method and let users know that clients might not be able to see your image if you use a file attachment. All up to you, but damus will not be implementing this nip for image uploads, as stated before I think it’s simpler to encode this information into a completely optional small string so that its available on the post itself and so that clients can use the information to do all the hash checking stuff, but when they are ready, not forcing it on them. Cheers,
Agreed. It could have been done in a backwards compatible way. NIP94 is just way too short. Maybe in future, have a Q&A section within each NIP with regards to backwards compatibility and apriori event types?
Do nostr clients currently fetch the mime-type for each url that is inside a kind:1 note from a remote server? Or is this information embedded meaning there is no need to send a request to a remote HTTP server somewhere? Other than privacy issues, isn't this bad for UX since there is always few seconds that images are shown as links before the UI would reflow. Is there a way to implement loading placeholder or blurhash with just kind:1 notes?
someone's avatar
someone 2 years ago
I was off for a while. what is the current block size?
If users can't all connect on the very basics of social media like text & images, it seems to me this presents a potential hurdle of unintended censorship.