3.3 KiB
NIP-54
Inline Resource Metadata
draft
optional
author:arthurfranca
author:Giszmo
author:jb55
author:vitorpamplona
Inline resource metadata is additional information associated with urls in notes that clients can optionally use to enhance resource loading.
It uses URI Fragment that agents (such as web browsers) never send to the server.
The URI fragment follows media fragments structure. For example, one could use t=number_of_seconds
to start playing a video at the specified position along with an extra percent-encoded name-value pair separated by &
char like https://xyz.com/a-video.mp4#t=24&a%20name=a%20value
.
The metadata can be appended to any url, like this NIP-21 one: nostr:nevent1qq...pm#a-metadata-name=a-metadata-value
.
It is suggested to also add imeta
tags to events to aid in loading resource placeholders.
NIP-94 File Fragments
Besides available w3c and proprietary URI fragment usage, nostr uses existing NIP-94 tags as file fragment name-value pairs. NIP-94 event .content
is equivalent to alt
fragment field. For example, one could join the following strings to form an image url with inline metadata:
https://nostr.build/i/863321bb1ae68830ebcf9a343ca0a5e0ce2323d0a55b7fbe86f7a886cf61db8d.jpg
#
dim=3024x4032
&
alt=A%20scenic%20photo%20overlooking%20the%20coast%20of%20Costa%20Rica
&
blurhash=eVF%24%5EOI%3A%24%7BM%7Bo%23*0-nNFxakD-%3FxVM%7DWEWB%25iNKxvR-oetmo%23R-aen%24
Multiple array values use repeated names and are positioned in the same order of ocurrence in the tag array. For instance, ["aes-256-gcm", 'i-am-a-key', 'i-am-an-iv']
becomes aes-256-gcm=i-am-a-key&aes-256-gcm=i-am-an-iv
imeta tag
Metadata fragments are great for sharing urls with extra embedded metadata. They are also good for copying and pasting a resource's url from one note to a new one without losing its metadata.
But some clients can prepare image and video placeholders faster if specific fields are present outside of .content
.
For these resources, it is suggested to also add dim
, alt
and blurhash
(e.g. of a specific video frame), if available, to imeta
tags.
Complete example:
{
"kind": 1,
"content": "What a great place! https://xyz.com/example.jpg#dim=3024x4032&alt=A%20scenic%20photo%20overlooking%20the%20coast%20of%20Costa%20Rica&blurhash=eVF%24%5EOI%3A%24%7BM%7Bo%23*0-nNFxakD-%3FxVM%7DWEWB%25iNKxvR-oetmo%23R-aen%24`",
"tags": [
[
"imeta",
"url https://xyz.com/example.jpg",
"dim 3024x4032",
"alt A scenic photo overlooking the coast of Costa Rica",
"blurhash eVF$^OI:${M{o#*0-nNFxakD-?xVM}WEWB%iNKxvR-oetmo#R-aen$"
]
]
// ... other event fields
}
Recommended client behavior
When uploading images during a new post, clients can collect metadata after the image is uploaded and then include the url with inline metadata in the post.
When pasting urls during post composition, the client could download the image and add some metadata before the post is sent.
Clients can use alt
value to add accessible text for people who prefer not to
load images, visibility-impaired users, or text clients.