#Amethyst v0.89.0: Profile Galleries, Base64 images and more!

This version adds Profile Galleries, flexible NIP-96 image server settings and relay recommendations based on the outbox model. To add an image to your Gallery, click on the Share button and hit Add Media to Galery. This works on posts from you or from other people.

Features:

- Renders Base64 images and gifs by nostr:nprofile1qqs827g8dkd07zjvlhh60csytujgd3l9mz7x807xk3fewge7rwlukxgpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszrnhwden5te0dehhxtnvdakz7qgswaehxw309ahx7um5wghx6mmd9usjfpck

- Adds NIP-96 image server settings by nostr:nprofile1qqswc4nrhvp4lrjct0ayy0ps8f2hvj8e2guucp63dwcx6m6e8pka9fqppemhxue69uhkummn9ekx7mp0qythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcghxpeh

- Adds Profile Gallery by nostr:nprofile1qqsfnw64j8y3zesqlpz3qlf3lx6eutmu0cy6rluq96z0r4pa54tu5eqpz4mhxue69uhkummnw3ezummcw3ezuer9wchszyrhwden5te0dehhxarj9ekk7mf0qyghwumn8ghj7mn0wd68ytnhd9hx2tc3ec8km

- Adds outbox cache in order to resend events after relay authentication

- Force-updates relays that are sending old versions of replaceables or events that have been already deleted

- Adds follow-list based relay recommendations to the relay settings.

- Adds Malware Report type

Performance Improvements:

- Reduces interruptions to the main thread

- Adds performance monitors for framedrops in benchmark mode

BugFixes:

- Several improvements in the Push Notification API to never miss a Zap

- Fixes lack of text update when switching edited versions

- Fixes poll rendering behavior after deleting an option by nostr:nprofile1qqswc4nrhvp4lrjct0ayy0ps8f2hvj8e2guucp63dwcx6m6e8pka9fqppemhxue69uhkummn9ekx7mp0qythwumn8ghj7un9d3shjtnswf5k6ctv9ehx2ap0qyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcghxpeh

- Fixes discovery top nav list watcher staying active when the app goes to the background

- Fixes scoping issues with flattenMerge freezing Top Nav List updates

- Fixes Top Nav lists after a deletion event has been received

- Fixes a bug on clicking the user profile but loading the wrong one

- Fixes the post button disappeering when the Relay Settings top label is too large

- Fixes text cut off for very long posts by nostr:nprofile1qqs827g8dkd07zjvlhh60csytujgd3l9mz7x807xk3fewge7rwlukxgpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszrnhwden5te0dehhxtnvdakz7qgswaehxw309ahx7um5wghx6mmd9usjfpck

- Fixes double auth triggering NOTIFY from inbox.nostr.wine

Updated translations:

- Czech, German, Swedish and Portuguese by nostr:nprofile1qqsv4zwtz8cuwh2mvc3zdrl5853g365t9j6mn25edlul7uz0eyzt0zcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsshgmkj

- Polish by nostr:nprofile1qqsdyfz0ewdhmgp3a4r3pxvezx5r8yalrgvjn38v2ml5qrusnv7yywgpr3mhxue69uhhqunv9ecxcatn9ulhyet2v43hg0fn9smzcdc8fdk3q

- French by nostr:nprofile1qqs8av5uzf4nv2q80chrmp3mj9a9dd6zjw4fmz56hsn2gzar72rxhtcpzpmhxue69uhkummnw3ezumt0d5hszrnhwden5te0dehhxtnvdakz7qg3waen5te0w4kkyun9dsargwp58qhsnxcg72

- Chinese by nostr:nprofile1qqsyxnuhnymz0u0xru2watmqe25vlh8vzzje9jhlsfgvsff9942gc9gpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszxthwden5te0wfjkccte9ekk7mt0wd68ytnsd9hxktcpzfmhxue69uhkymmnw3ezucmc9ekhxtc24vk7q

- Arabic, Bengali by nostr:nprofile1qqsgs9hgjw87vz36jf2r83m5zree2q87zvs8s7kty9jljdz7wprytyspremhxue69uhkummnw3ezu6m0de5kueedv3jkwunpv9nzumnv9uq3kamnwvaz7tm5d4cz6un9d3shjtnrv4ekxtn5wfskgef0qy28wumn8ghj7mn0wd68yt3k8quzummjvuhsg63aw2

- Thai by nostr:nprofile1qqsxdhmq2cke8xk6scfyxeyfj3dyancavg6xk0v50r023gec7vsrceqpzemhxue69uhkvun9deejumn0wd68yvfwvdhk6qg6waehxw309aex2mrp0yezumn0wd68yctnd9sjumn9wsq3yamnwvaz7tm0venxx6rpd9hzuur4vghen3hm and nostr:nprofile1qqs93adzxqyt5k58xzjrta50rrdqkyxw2wxxu2495xmczgrkxpx4nacpr3mhxue69uhkummnw3ez6vp39eukz6mfdphkumn99e3k7mgpr3mhxue69uhkummnw3ez6vpj9eukz6mfdphkumn99e3k7mgpremhxue69uhkummnw3ez6vpj9ejx7unpveskxar0wfujummjvum84tx8

- Hindi by nostr:nprofile1qqs88dt78wgnzvaph6fcstfvsd98xc2qs8eg8tllwv2zlutu8ehec2cppamhxue69uhkummnw3ezumt0d5qs6amnwvaz7tmwdaejumr0dsq32amnwvaz7tmjv4kxz7fwd4hhxarj9ec82cs0t5vfr

- Spanish by nostr:nprofile1qqs07tjpyvvlq9ugdpax8h3jfrpwn7kr72k3tc7ky83tggn4et9eangpr9mhxue69uhhqatzd35kxtnjv4kxz7tfdenju6t09uq3vamnwvaz7tmjv4kxz7fwd4hhxarj9ec82c30qy2hwumn8ghj7mn0wd68ytn00p68ytnyv4mz76xu9qg

- Dutch by nostr:nprofile1qqs82l74z7g3x8j3avpn2wrjrwn855nyvmpxa4v5pftfvtv5lrvrc5cpz9mhxue69uhkummnw3ezuamfdejj7tk0drp

Code Quality Improvements:

- Removes decryption for DVM responses since it doesn't encrypt statuses

- Upgrades lifecycle to 2.8.3, Kotlin to 2.0.0, Lint to 1.3.1 and AGP to 8.5.1

- Migrates sdk requirements to the version catalog

- Removes unnecessary dependencies for Ammolite

- Fixes several memory issues on CI due to Kotlin 2.0

- Removes the bugfix for reproducible builds since it has been fixed

- Solves build slowdown on spotless dependencies

Download via [Obtainium](http://amethyst.social) or [Zap.Store](https://zap.store/)

Reply to this note

Please Login to reply.

Discussion

Congrats 🤝🥳

How much is my life worth

Binary 01100101 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01101101 01111001 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00101100 00100000 01001001 00100111 01101101 00100000 01110100 01101001 01110010 01100101 01100100 00101100 00100000 01001001 00100111 01101101 00100000 01110110 01100101 01110010 01111001 00100000 01101001 01101110 01110100 01100101 01101100 01101100 01101001 01100111 01100101 01101110 01110100 00100000 01100001 01101110 01100100 00100000 01101000 01101111 01101110 01100101 01110011 01110100 00101100 00100000 01001001 00100000 01100011 01100001 01101110 00100111 01110100 00100000 01100011 01101111 01101110 01110100 01101001 01101110 01110101 01100101 00100000 01101100 01101001 01110110 01101001 01101110 01100111 00100000 01101100 01101001 01101011 01100101 00100000 01110100 01101000 01101001 01110011 00101100 00100000 01111001 01101111 01110101 00100000 01100011 01100001 01101110 00100000 01100100 01101111 01101110 01100001 01110100 01100101 00100000 00110101 00100000 01110100 01101111 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00100000 01101111 01100110 00100000 00100000

Happy to see work on the Outbox model.

> Renders Base64 images and gifs

This doesn't mean images embedded in a kind:1 note, right?

It does mean base64 images anywhere in the app. If they show up it will render.

What are the use cases?

This encourages incorporation, hence the creation of really heavy events; I doubt if this is a good thing.

It's better than just showing a bunch of characters.

Maybe a healthier solution could be to hide the bunch of characters and write "not compliant data blob". This would discourage this practice, if you agree that it is dangerous.

I don't agree it's dangerous. Lots of little stickers, icons and many low res images can, and probably should, be transmitted through relays.

Also, we support a ton of other formats and variations. For instance, we render markdown on any event. It's the same renderer for all event types. Base64 is just one more feature of the renderer.

If it's being used, we will support it.

The problem is that it is hard to put a size limit after-facts, and the burden that heavy events could create is quite obvious.

This sort of possibility encourage developers to embed images instead of using NIP-96 or Blossom, because it is easier.

And a important and widely used client like Amethyst has a huge network effects in this respect, so with great power should come great responsibility.

I think it's bad supporting markdown in standard note for the same reason, in fact this violates NIP-01 that says:

> Content that must be parsed, such as Markdown and HTML, should not be used.

Please, consider this point of view.

All relays already have size limits. That shouldn't be any problem. We already transmit NIP-95 and other very heavy binary events, like GiftWraps and NIP-04 DMs as well as 2000+ key follow lists, text files, blogs, spreadsheets and wikifreedia entries (5-10Kb for a good article). Relays and clients can reject on the size and that's their choice. But big events will always be there.

On the formatting, we just don't have the flexibility on the parser to decide what to parse per event kind. We just use one for everything. So, if people use markdown or ascii doc, like fiatjaf is requesting, we will have just one parser/renderer for all these types.

> All relays already have size limits. That shouldn't be any problem.

I am not talking about 10 KB non-image blobs. Considering that we have people with profile pictures of about 1MB, let's imagine that they start adding one or more pictures taken by a modern mobile phone (~3MB).

The relay limit is not an argument or a solution, because users cannot easily know if/what relays have rejected events, and especially for what reason, so they simply get a reduced (or none) visibility.

I definitely see problems, and frankly I don't see much real benefit.

Btw, this also violates the kind:01 spec.

> On the formatting, we just don't have the flexibility

Add it to fully adhere to NIP-01, please.

Base64 images will be there regarless of our support or not. Many profiles have had base64 images on kind0 for over a year now.

If people are using and happy with the way base64 image works, they will keep using it, regarless of what the spec says. In that case the spec is wrong and must change.

Let's not forget that the beauty of Nostr is that people can do whatever they want. Clients and relays can choose to support or not the user's payload and Amethyst will always support what's being used, regarless if I think it's a good idea or not.

How much is my life worth

Binary 01100101 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01101101 01111001 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00101100 00100000 01001001 00100111 01101101 00100000 01110100 01101001 01110010 01100101 01100100 00101100 00100000 01001001 00100111 01101101 00100000 01110110 01100101 01110010 01111001 00100000 01101001 01101110 01110100 01100101 01101100 01101100 01101001 01100111 01100101 01101110 01110100 00100000 01100001 01101110 01100100 00100000 01101000 01101111 01101110 01100101 01110011 01110100 00101100 00100000 01001001 00100000 01100011 01100001 01101110 00100111 01110100 00100000 01100011 01101111 01101110 01110100 01101001 01101110 01110101 01100101 00100000 01101100 01101001 01110110 01101001 01101110 01100111 00100000 01101100 01101001 01101011 01100101 00100000 01110100 01101000 01101001 01110011 00101100 00100000 01111001 01101111 01110101 00100000 01100011 01100001 01101110 00100000 01100100 01101111 01101110 01100001 01110100 01100101 00100000 00110101 00100000 01110100 01101111 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00100000 01101111 01100110 00100000 00100000

This sounds very hot

How much is my life worth

Binary 01100101 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01101101 01111001 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00101100 00100000 01001001 00100111 01101101 00100000 01110100 01101001 01110010 01100101 01100100 00101100 00100000 01001001 00100111 01101101 00100000 01110110 01100101 01110010 01111001 00100000 01101001 01101110 01110100 01100101 01101100 01101100 01101001 01100111 01100101 01101110 01110100 00100000 01100001 01101110 01100100 00100000 01101000 01101111 01101110 01100101 01110011 01110100 00101100 00100000 01001001 00100000 01100011 01100001 01101110 00100111 01110100 00100000 01100011 01101111 01101110 01110100 01101001 01101110 01110101 01100101 00100000 01101100 01101001 01110110 01101001 01101110 01100111 00100000 01101100 01101001 01101011 01100101 00100000 01110100 01101000 01101001 01110011 00101100 00100000 01111001 01101111 01110101 00100000 01100011 01100001 01101110 00100000 01100100 01101111 01101110 01100001 01110100 01100101 00100000 00110101 00100000 01110100 01101111 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00100000 01101111 01100110 00100000 00100000

01110111 01101000 01100101 01101110 00100000 01111001 01101111 01110101 00100000 01101000 01100001 01110110 01100101 00100000 01100011 01101111 01101100 01101100 01100101 01100011 01110100 01100101 01100100 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00101100 00100000 01110011 01100101 01101110 01100100 00100000 01101101 01100101 00100000 01101000 01100001 01101100 01100110 00100000 01101111 01100110 00100000 01101001 01110100 00101110

``` ​:citation[oaicite:0]{index=0}​

Amethyst is now crashing reproducibly.

I sent a message to you with a short clip of Amethyst crashing.

New version is up to fix this

How much is my life worth

Binary 01100101 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01101101 01111001 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00101100 00100000 01001001 00100111 01101101 00100000 01110100 01101001 01110010 01100101 01100100 00101100 00100000 01001001 00100111 01101101 00100000 01110110 01100101 01110010 01111001 00100000 01101001 01101110 01110100 01100101 01101100 01101100 01101001 01100111 01100101 01101110 01110100 00100000 01100001 01101110 01100100 00100000 01101000 01101111 01101110 01100101 01110011 01110100 00101100 00100000 01001001 00100000 01100011 01100001 01101110 00100111 01110100 00100000 01100011 01101111 01101110 01110100 01101001 01101110 01110101 01100101 00100000 01101100 01101001 01110110 01101001 01101110 01100111 00100000 01101100 01101001 01101011 01100101 00100000 01110100 01101000 01101001 01110011 00101100 00100000 01111001 01101111 01110101 00100000 01100011 01100001 01101110 00100000 01100100 01101111 01101110 01100001 01110100 01100101 00100000 00110101 00100000 01110100 01101111 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00100000 01101111 01100110 00100000 00100000

Next, please add support for Wiki Links as defined in NIP-54.

This is the section of NIP-54 for Wiki pages that talks about [[wikilinks]] as an additional element and how tgey work. This applies obky for wiki pages.

The "Gallery" should be renamed to "Favorites", "Favorite Images", "Bookmarked Images" or part of bookmarks or something different.

I thought Gallery was going to be a Gallery of all the images my profile has uploaded.

It's a bit confusing because all the other social medias have the same tab but shows all the images of the profile you are looking.

I'm going to cry, I have seen this post about Amethyst after I have updated the app, and I have searched for you to see what is new in this update. 12 hours later.

freedom tech is hope

nostr:npub1gz7uczyg3kvdf8grlwfmllguc3kehrcc05yvnlypkjklptgql5kqa0zkqj zapped ⚡️7,140 sats

nostr:note1zyct4ke9900k92he8jm9h73tkz08vqx86emy398jj4z4tvahxqvqhal2gx

nostr:nprofile1qqsqgq7gdgdmfnauxny2fylm68cdzkx59hgx6ql25deq3q4qvmf6x7qppemhxue69uhkummn9ekx7mp0qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qg5waehxw309aex2mrp09skymr99ehhyee0e6g7dc now has it's week recap gallery 🥳🥳🥳 congrats, rearrange the pics could be the next feature

How much is my life worth

Binary 01100101 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01101101 01111001 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00101100 00100000 01001001 00100111 01101101 00100000 01110100 01101001 01110010 01100101 01100100 00101100 00100000 01001001 00100111 01101101 00100000 01110110 01100101 01110010 01111001 00100000 01101001 01101110 01110100 01100101 01101100 01101100 01101001 01100111 01100101 01101110 01110100 00100000 01100001 01101110 01100100 00100000 01101000 01101111 01101110 01100101 01110011 01110100 00101100 00100000 01001001 00100000 01100011 01100001 01101110 00100111 01110100 00100000 01100011 01101111 01101110 01110100 01101001 01101110 01110101 01100101 00100000 01101100 01101001 01110110 01101001 01101110 01100111 00100000 01101100 01101001 01101011 01100101 00100000 01110100 01101000 01101001 01110011 00101100 00100000 01111001 01101111 01110101 00100000 01100011 01100001 01101110 00100000 01100100 01101111 01101110 01100001 01110100 01100101 00100000 00110101 00100000 01110100 01101111 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00100000 01101111 01100110 00100000 00100000

Trying to get a CalyxOS for Amythyst, it will happen soon

How much is my life worth

Binary 01100101 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01101101 01111001 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00101100 00100000 01001001 00100111 01101101 00100000 01110100 01101001 01110010 01100101 01100100 00101100 00100000 01001001 00100111 01101101 00100000 01110110 01100101 01110010 01111001 00100000 01101001 01101110 01110100 01100101 01101100 01101100 01101001 01100111 01100101 01101110 01110100 00100000 01100001 01101110 01100100 00100000 01101000 01101111 01101110 01100101 01110011 01110100 00101100 00100000 01001001 00100000 01100011 01100001 01101110 00100111 01110100 00100000 01100011 01101111 01101110 01110100 01101001 01101110 01110101 01100101 00100000 01101100 01101001 01110110 01101001 01101110 01100111 00100000 01101100 01101001 01101011 01100101 00100000 01110100 01101000 01101001 01110011 00101100 00100000 01111001 01101111 01110101 00100000 01100011 01100001 01101110 00100000 01100100 01101111 01101110 01100001 01110100 01100101 00100000 00110101 00100000 01110100 01101111 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00100000 01101111 01100110 00100000 00100000

How much is my life worth

Binary 01100101 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01101101 01111001 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00101100 00100000 01001001 00100111 01101101 00100000 01110100 01101001 01110010 01100101 01100100 00101100 00100000 01001001 00100111 01101101 00100000 01110110 01100101 01110010 01111001 00100000 01101001 01101110 01110100 01100101 01101100 01101100 01101001 01100111 01100101 01101110 01110100 00100000 01100001 01101110 01100100 00100000 01101000 01101111 01101110 01100101 01110011 01110100 00101100 00100000 01001001 00100000 01100011 01100001 01101110 00100111 01110100 00100000 01100011 01101111 01101110 01110100 01101001 01101110 01110101 01100101 00100000 01101100 01101001 01110110 01101001 01101110 01100111 00100000 01101100 01101001 01101011 01100101 00100000 01110100 01101000 01101001 01110011 00101100 00100000 01111001 01101111 01110101 00100000 01100011 01100001 01101110 00100000 01100100 01101111 01101110 01100001 01110100 01100101 00100000 00110101 00100000 01110100 01101111 00100000 00110010 00110000 00100000 01101101 01101001 01101100 01101100 01101001 01101111 01101110 00100000 01100100 01101111 01101100 01101100 01100001 01110010 01110011 00101100 00100000 01110100 01101000 01101001 01110011 00100000 01110111 01100001 01101100 01101100 01100101 01110100 00100000 01101111 01100110 00100000 00100000