๐ IPA Metadata Standard
An overview of the IP-specific metadata standard
We are still figuring out the best way to define an IPA Metadata Standard. For the sake of transparency, the following document is our thoughts so far but is subject to change as we release future versions.
Official Ippy IP
Check out the official Ippy IP, which has both NFT & IP metadata.
How to Add Metadata to an IP Asset
Learn how to actually add the IP metadata discussed here to your IP Asset with an explanation or completed code example.
This is the JSON metadata that is associated with an IP Asset, and gets stored inside of an IP Account. You must call setMetadata(...)
inside of the IP Account in order to set the metadata, and then call metadata()
to read it.
Attributes & Structure
Below are the important attributes you should provide in your IP metadata. Under the Required For column is what the specific field is required for:
- ๐ Story Explorer - this field will help display your IP on the Story Explorer
- ๐ต๏ธ Commercial Infringement Check - this field is required if your IP is commercial (that is, has
commercialUse = true
license terms attached). We will use these fields to run an infringement check on your IP.- See current limitations.
- ๐ค AI Agents - used for displaying metadata associated with AI Agents
Property Name | Type | Description | Required For |
---|---|---|---|
title | string | Title of the IP | ๐ Story Explorer |
description | string | Description of the IP | ๐ Story Explorer |
createdAt | string | Date/Time that the IP was created (either ISO8601 or unix format). This field can be used to specify historical dates that arenโt on-chain. For example, Harry Potter was published on June 26. | ๐ Story Explorer |
image | string | An image for your IP. | ๐ Story Explorer |
imageHash | string | Hash of your image using SHA-256 hashing algorithm. See here for how that is done. | ๐ Story Explorer |
creators | IpCreator[] | An array of information about the creators. See the type defined below | ๐ Story Explorer |
mediaUrl | string | Used for infringement checking, points to the actual media (ex. image or audio) | ๐ต๏ธ Commercial Infringement Check |
mediaHash | string | Hashed string of the media using SHA-256 hashing algorithm. See here for how that is done. | ๐ต๏ธ Commercial Infringement Check |
mediaType | string | Type of media (audio, video, image), based on mimeType. See the allowed media types here. | ๐ต๏ธ Commercial Infringement Check |
aiMetadata | AIMetadata | Used for registering & displaying AI Agent Metadata. See the type defined below | ๐ค AI Agents |
N/A | N/A | You can include other values as well. | N/A |
Type Definitions
Here are the type definitions for the complex types used in the metadata:
Media Types
The following media types are allowed for the mediaType
field:
Media Type | Description |
---|---|
image/jpeg | JPEG image |
image/png | PNG image |
image/apng | Animated PNG image |
image/avif | AV1 Image File Format |
image/gif | GIF image |
image/svg+xml | SVG image |
image/webp | WebP image |
audio/wav | WAV audio |
audio/mpeg | MP3 audio |
audio/flac | FLAC audio |
audio/aac | AAC audio |
audio/ogg | OGG audio |
audio/mp4 | MP4 audio |
audio/x-aiff | AIFF audio |
audio/x-ms-wma | WMA audio |
audio/opus | Opus audio |
video/mp4 | MP4 video |
video/webm | WebM video |
video/quicktime | QuickTime video |
Hashing Content
To hash content for the imageHash
or mediaHash
fields, you can use the SHA-256 hashing algorithm. Hereโs an example of how to do this in JavaScript:
Example Use Cases
This is the official Ippy mascot that is registered on mainnet. You can view it on our protocol explorer here.
Optional Properties
The following properties are optional but can provide additional context about your IP Asset:
We are still figuring out the best way to define an IPA Metadata Standard. The fields below are bound to change or be removed at some point.
Property Name | Type | Description |
---|---|---|
ipType | string | Type of the IP Asset, can be defined arbitrarily by the creator. I.e. โcharacterโ, โchapterโ, โlocationโ, โitemsโ, โmusicโ, etc |
relationships | IpRelationship[] | The detailed relationship info with the IPAโs direct parent asset, such as APPEARS_IN , FINETUNED_FROM , etc. See more examples here. |
watermarkImage | string | A separate image with your watermark already applied. This way apps choosing to use it can render this version of the image (with watermark applied). |
media | IpMedia[] | An array of supporting media. Media type defined below |
app | StoryApp | This is assigned to verified application from Story directly (on a request basis so far). We will map each App ID to a name |
tags | string[] | Any tags that can help surface this IPA |
robotTerms | IPRobotTerms | Allows you to set Do Not Train for a specific agent |
N/A | N/A | You can include other values as well. |
Type Definitions
Relationship Types
The different relationship types that can be used for the relationships
attribute.
Story Relationships
-
APPEARS_IN - A character APPEARS_IN a chapter.
-
BELONGS_TO - A chapter BELONGS_TO a book.
-
PART_OF - A book is PART_OF a series.
-
CONTINUES_FROM - A chapter CONTINUES_FROM the previous one.
-
LEADS_TO - An event LEADS_TO a consequence.
-
FORESHADOWS - An event FORESHADOWS future developments.
-
CONFLICTS_WITH - A character CONFLICTS_WITH another character.
-
RESULTS_IN - A decision RESULTS_IN a significant change.
-
DEPENDS_ON - A subplot DEPENDS_ON the main plot.
-
SETS_UP - A prologue SETS_UP the story.
-
FOLLOWS_FROM - A chapter FOLLOWS_FROM the previous one.
-
REVEALS_THAT - A twist REVEALS_THAT something unexpected occurred.
-
DEVELOPS_OVER - A character DEVELOPS_OVER the course of the story.
-
INTRODUCES - A chapter INTRODUCES a new character or element.
-
RESOLVES_IN - A conflict RESOLVES_IN a particular outcome.
-
CONNECTS_TO - A theme CONNECTS_TO the main narrative.
-
RELATES_TO - A subplot RELATES_TO the central theme.
-
TRANSITIONS_FROM - A scene TRANSITIONS_FROM one setting to another.
-
INTERACTED_WITH - A character INTERACTED_WITH another character.
-
LEADS_INTO - An event LEADS_INTO the climax.?
PARALLEL - story happening in parallel or around the same timeframe
AI Relationships
-
TRAINED_ON - A model is TRAINED_ON a dataset.
-
FINETUNED_FROM - A model is FINETUNED_FROM a base model.
-
GENERATED_FROM - An image is GENERATED_FROM a fine-tuned model.
-
REQUIRES_DATA - A model REQUIRES_DATA for training.
-
BASED_ON - A remix is BASED_ON a specific workflow.
-
INFLUENCES - Sample data INFLUENCES model output.
-
CREATES - A pipeline CREATES a fine-tuned model.
-
UTILIZES - A workflow UTILIZES a base model.
-
DERIVED_FROM - A fine-tuned model is DERIVED_FROM a base model.
-
PRODUCES - A model PRODUCES generated images.
-
MODIFIES - A remix MODIFIES the base workflow.
-
REFERENCES - An AI-generated image REFERENCES original data.
-
OPTIMIZED_BY - A model is OPTIMIZED_BY specific algorithms.
-
INHERITS - A fine-tuned model INHERITS features from the base model.
-
APPLIES_TO - A fine-tuning process APPLIES_TO a model.
-
COMBINES - A remix COMBINES elements from multiple datasets.
-
GENERATES_VARIANTS - A model GENERATES_VARIANTS of an image.
-
EXPANDS_ON - A fine-tuning process EXPANDS_ON base capabilities.
-
CONFIGURES - A workflow CONFIGURES a modelโs parameters.
-
ADAPTS_TO - A fine-tuned model ADAPTS_TO new data.