Amethyst 0.37.0: NIP-95 (Images on relays)

Now your images can be spread to as many or as few relays as you want.

- Adds popup to choose which image server to use by nostr:npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z

- Adds choice of NostrImg.com by nostr:npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z

- Adds choice of NIP-95 relays by nostr:npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z

- BugFix for AUTH w/ Nostr.wine by nostr:npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z

Download:

- Play Edition with Translations: https://github.com/vitorpamplona/amethyst/releases/download/v0.37.0/amethyst-googleplay-universal-v0.37.0.apk

- F-Droid Edition without Translations: https://github.com/vitorpamplona/amethyst/releases/download/v0.37.0/amethyst-fdroid-universal-v0.37.0.apk

Reply to this note

Please Login to reply.

Discussion

Since notes are not editable or deletable, what do you think about an option to have a 3 second timer when you tap post so you can cancel it you see a typo?

Great idea. I also though about a preview before posting it. When people see the post as it will be displayed, they are more inclined to stop and verify it. Do you want to put a bounty into it?

How does that work?

So any relays support NIP-95? Which ones?

👀

It's about event size for now. I was able to upload memes to many of them... Large images not so much.

Interesting.

I must be missing something on this NIP. I'll have to read it again later.

So confused. Isn't NIP95 just metadata?

Nip 94 is metadata. Nip 95 is full file in relays.

NIP-95 sounds like a lot of legal liability, depending on your juridiction.

How to handle outright abuses?

In the same way you have to handle them in text. The legal framework is quite similar.

The big questions are now, which relays will implement NIP-95 and then which relay operators will enable it?

#[0]

He’s gone rogue.

Definitely not mine

Are you sure? Because you are already hosting 7 NIP-95 images :)

I’m blocking it now

👀

See, that's your legitimate choice.

😂

😂

That would drastically increase the storage requirements of your server right? You’re already paying $600+ per month for Damus servers

Yes and storing binary data in json is very inefficient. Not to mention note size limits.

Yes, and yes! 🐶🐾🫡💯💯💯

Single value is a valid json. So it is as (un)efficient as base64...

Hang on so I can limit images to only one relay???

NostrFans will be launching earlier than planned!

I thought that was what onlyzaps was when I first heard about it.

Lol same haha.

Mine actually is what you think it is. I've just been waiting for a way to limit images to subscribers only. Now I have it!

Then we're going to find out if #[10] likes hairy, busted toenail, half chipped off nail polish, mat burn scarred, H width feet or just the classically pretty ones.

🤣

Amethyst has added the function to choose what relays your images spread to.

With this, I should be able to get an alpha build of NostrFans up and running very shortly.

nostr:nevent1qqsxjzauednulq7xhdj3sxg25vy0nft3udqpzeu3d6agn36lrqdkw6qpz3mhxue69uhhyetvv9ujumn0wd68ytnzvupzq3svyhng9ld8sv44950j957j9vchdktj7cxumsep9mvvjthc2pjuqvzqqqqqqy5j3hca

Isn’t someone can target specific relay with a lot of MB images data? 🤔 Then relay will just block it.

They don't need NIP-95 for that. You can simply send large kind 1s.

On my to-do list for tomorrow… Add Kind 30064 to my relay’s blacklist… Problem solved. No CSAM on my server…

🤷‍♂️

Kind 30064 is NIP-95 files. Given that I run an explicitly sex and porn-friendly relay I don’t want to run the risk of actually hosting child porn.

Good call. But NIP 95 is not your main problem. I assume you know that people can do this with any event kind. If they just want to turn your server into a storage of illegal content, they have all the nips available to do so. I would target the intention, not the tool.

When it comes to getting hauled into court intent matters. I can document a track record of working to prevent the dissemination of CSAM and other illegal content.

Rabble and I proposed “NIP-69” as a first step to get workable, bottom-up content moderation on Nostr.

Just today I somewhat publicly challenged the ASACP (the porn industry’s organization that fights CSAM) to get involved in the content moderation questions related to Nostr. I asked them to make statements supporting your approach to NIP-94 and to oppose NIP-95.

I’m doing my part. My intent is clear.

Can Amethyst add anything in the upload interface to help you?

Thanks for asking (seriously). I'm not a lawyer, but having been in the adult industry for ~15 years I've learned a thing or two…

The problem is if you're hosting adult content (images/videos, it's not really an issue with text) you need proof of consent and proof of age (plus the proof ownership or license to use that you need for all content). The site doesn't always have to have proof of consent / age on file, but it does need to confirm that they exist.

For example - take a photo of someone else on a beach and upload it to the Internet - no problem - it's a public place and there's no expectation of privacy. Do the same thing on a nude beach and you need proof of age and proof of consent.

The moment you host something without at least a nominal check of age and consent you open yourself up to all sorts of problems. The laws on CSAM and things like revenge porn are really strict and the penalties are often harsh. Big corporations get away with more because they have teams of lawyers. But a single significant legal incident can put a small company out of business.

I've got over a million unique images in my porn database at the moment (and probably another 600K or so I need to import). It's terabytes of data. And if I've learned one thing dealing with those is you don't store images/videos in databases - you store them externally.

nostr:npub1xv6axulxcx6mce5mfvfzpsy89r4gee3zuknulm45cqqpmyw7680q5pxea6 had suggested an approach where there was a more traditional POST to submit the image/video. That's something I could consider. But then it gets to your interface question - I'd need some sort of confirmation of:

- ownership/license

- consent

- age

But it's one thing when someone confirms those things on my site, but it's another thing for me to trust a 3rd party to confirm those things. Maybe… But I'd have to think about it some more.

But at the end of the day storing images/videos in the relay database is a non-starter for me even with all the documents in the world. I know better than to do that. Which is why I love NIP-94, but not NIP-95.

And done. Kind 30064 has been blocked on relay.s3x.social.

I thought briefly about just specifying a really small size so it could be used for things like animated emojis - but then I took a look at how much you could show in a small file and I figured that was a bad idea as well. The pic below is only 21kb and it shows plenty - enough that if the content were illegal it would be a problem.

Let people put their CSAM on someone else's relay!

https://void.cat/d/TNcQJ1nbGEPCxXUqTTMMzR.webp

Wrong kind, though. 30064 was in an old version of the NIP. The current ones are 1064 for file headers and 1065 for the actual base64 data.

Thanks! But isn't it the other way around?

> Another defined event is the `1065` which is used as a header for the data contained in an event 1064. This way the data can be disclosed without overloading the communications when sending a large amount of data.

For now I've blocked both. Is there any point storing the header if you're not going to store the data?

nostr:npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z would be really happy if you would add nostr:npub1zxzmle6ysrvsqa4fujq352hsvclhu5faenyl6qnvxy3ux229z2aslmvwsx https://nostrfiles.dev/ as an image and video service 🙂

I am also offering audio messages since a bit. Maybe this could be another interesting feature for Amethyst as well?

Any chance you can have your server reply via a Relay API with NIP 95 data? You could just store all images as NIP-95 events (say saving the json file itself on disk) and send them back signed via that interface.