nips/54.md
2023-12-11 12:44:47 -03:00

2.6 KiB

NIP-54

Inline Resource Metadata

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. Because of this, the url is fetched without the fragment parameters, unlike using query parameters.

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. Notice the usage of # instead of ?.

The metadata can be appended to any url, like this NIP-21 one: nostr:nevent1qq...pm#a-metadata-name=a-metadata-value.

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
  • #
  • m=image%2Fjpeg
  • &
  • 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.

Usage

An url with added metadata can be used anywhere a normal url can, whether embedded in an event's .content field or as an event tag value.

Example:

{
  "kind": 1,
  "content": "What a great place! https://xyz.com/filename#m=image%2Fjpeg&dim=1920x1080`",
  // ... other event fields
}

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.