Of course they have to upload to their servers to send, they're built on a server based architecture where all information must necessarily flow through the server. I don't think it's accurate to say Signal is just sending a link, though. The storage on my phone would certainly disagree because Signal itself is clearly storing the images and videos themselves, not links. To compare it Nostr, the way Signal operates would be more akin to if pictures were text encoded into the note itself rather than linked in the note and uploaded to some server.
Nextcloud can't simply share a link because my server is not configured to allow public links like that. The only way recipients are getting an image shared this way from my server is if the Nextcloud app is obtaining a copy from my server and passing it off to another app through the share functionality.
What I want is for Amethyst to leverage the built-in android functionality to pass the content itself to another app to decide how it's shared. If Discord wants to upload it, send a link, and simply fetch and render on the other side, fine, whatever. If Signal has to store the content on their servers until it can be delivered, fine. But as is, there's an artificial barrier between Nostr content on Amethyst and other social apps. Amethyst is even capable of *receiving* content shared this way from other apps and then handling it in its preferred way, starting a fresh note and prepping to upload it for hosting and inclusion in the note as if added directly from my phone. It just can't return the favor by passing content directly to other apps.