IP Vault is WZRD Studio’s on-chain rights registry. Every image, video, audio clip, or character blueprint you finalize inside the Studio can be promoted to a verifiable intellectual property record on Story Protocol — a blockchain layer purpose-built for creative IP. Registration mints an NFT that permanently anchors your content to a wallet address, enables programmable licensing, and creates a transparent royalty trail for derivative works.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/gratitude5dee/wzrd-studio-desktopfinal/llms.txt
Use this file to discover all available pages before exploring further.
Route
/ip-vault
How It Works
IP Vault is built on two layers. TheipVaultService (src/services/ipVaultService.ts) handles all Supabase database interactions. The registerVaultItemOnStory and claimVaultRevenueOnStory helpers in src/lib/story/registration call the @story-protocol/core-sdk directly with a connected wallet. Metadata is pinned to IPFS via the story-ipfs-metadata Supabase edge function before any on-chain transaction is submitted.
Registration Workflow
Add an asset to IP Vault
Any finalized project asset, character blueprint, or generation output can be added to the vault. Call The service resolves the source record, copies its media URL, thumbnail, and metadata into a new
ipVaultService.finalizeSource() with a FinalizeIPVaultSourceInput:ip_vault_items row with registration_status: "draft", and builds an initial proof packet capturing provenance. The call is idempotent — if the source has already been vaulted, the existing item is returned.Connect your wallet
IP Vault uses the same Thirdweb wallet used for WZRD authentication. Before registering, ensure:
- A wallet is connected (
storyWallet.isConnected === true) - The wallet is switched to the Story Aeneid test network (
storyWallet.isOnAeneid === true)
Pin metadata to IPFS
Before the on-chain call, IP Vault pins two metadata files to IPFS using the
story-ipfs-metadata edge function:- IP metadata (
ip_metadata_uri,ip_metadata_hash) — title, description, creator, content hash, and asset URL in Story Protocol’s IP metadata standard - NFT metadata (
nft_metadata_uri,nft_metadata_hash) — ERC-721-compatible token metadata
Register on-chain
Click Register in the IP Inspector panel. IP Vault:
- Pins metadata (if not already done)
- Marks the item
registeringviaipVaultService.markRegistering() - Calls
registerVaultItemOnStory(client, item, { walletAddress })using the Story Protocol SDK - Calls
ipVaultService.persistRegistration()with the returnedipId,tokenId,txHash,nftContract, androyaltyVaultAddress
registration_status: "registered" and the Story Explorer URL is stored for direct linking.Registration Statuses
| Status | Meaning |
|---|---|
draft | Added to the vault; metadata not yet pinned |
metadata_ready | IPFS metadata pinned; ready to register on-chain |
registering | On-chain transaction in flight |
registered | Successfully registered — ip_id and tx_hash are set |
failed | Registration failed; error stored in proof_packet.registrationError |
Licensing Profiles
When registering, choose a license profile that defines how others may use your IP:None
All rights reserved. No downstream licensing terms are attached. (
none)Non-Commercial Social Remix
Allows free remixing for non-commercial, social purposes. No revenue share required. (
non_commercial_social_remix)Commercial Use
Allows commercial use of the IP. A minting fee and revenue share can be configured. (
commercial_use)Commercial Remix
Allows commercial derivative works. Configurable
commercial_rev_share (%) and minting_fee_wip. (commercial_remix)Creative Commons Attribution
Free use with attribution required. Maps to the CC BY license framework. (
creative_commons_attribution)Derivative Works
IP Vault supports registering an asset as a derivative of one or more existing registered IPs on Story Protocol:- Root IP
- Derivative
The asset is an original work — no parent IPs.
relationship_type: "root".Revenue Claims
Once an IP is registered and has accumulated royalties in its Story Protocol royalty vault, you can claim them directly from IP Vault:- Select a registered item in the gallery
- Click Claim revenue in the IP Inspector
- IP Vault calls
claimVaultRevenueOnStory(client, item, walletAddress)via the Story Protocol SDK - The transaction hash and claim timestamp are persisted to
last_claim_tx_hashandlast_claimed_at
Revenue claims require the royalty vault to have a positive balance. The claim transaction pays gas from your connected wallet. Claimed tokens are sent to the wallet address registered with the IP.
IP Vault Gallery
The gallery panel on the left of the IP Vault page provides:- Search — filters by
title,description, andasset_kind - Status filter —
all,draft,metadata_ready,registering,registered,failed - Thumbnail grid with registration status badges
- Click any item to load it into the IP Inspector
ipVaultService API
The service layer (src/services/ipVaultService.ts) handles all database interactions:
list(filters?)
list(filters?)
Returns all
ip_vault_items for the current user, newest first. Optional projectId, status, and search filters.get(itemId)
get(itemId)
Fetches a single vault item by ID. Returns
null if not found.finalizeSource(input)
finalizeSource(input)
Resolves the source record (project asset, final asset, blueprint, or generation output), copies its metadata, and creates a
draft vault item. Idempotent — returns the existing item if the source has already been vaulted.updateRights(itemId, input)
updateRights(itemId, input)
Updates licensing and derivative relationship fields without touching registration state.
markRegistering(itemId)
markRegistering(itemId)
Sets
registration_status to "registering". Called automatically before the on-chain registration transaction is submitted.pinStoryMetadata(itemId)
pinStoryMetadata(itemId)
Calls the
story-ipfs-metadata edge function to upload IP and NFT metadata to IPFS and writes the resulting URIs and hashes back to the vault item row. Returns a StoryMetadataPinResult containing the updated IPVaultItem.persistRegistration(itemId, result)
persistRegistration(itemId, result)
Writes the on-chain registration result (
ip_id, token_id, tx_hash, nft_contract, royalty_vault_address, license_terms_ids) to the vault item and updates registration_status to "registered". Also builds a detailed proof_packet.story snapshot.markRegistrationFailed(itemId, message)
markRegistrationFailed(itemId, message)
Sets
registration_status: "failed" and records the error message in proof_packet.registrationError. Called automatically if any step of the registration flow throws.Proof Packet
Every vault item carries aproof_packet JSON object that accumulates provenance data across the item’s lifecycle:
Source Types
IP Vault can vault assets from four source types:| Source Type | Description |
|---|---|
project_asset | Any asset in the project_assets table (uploads, renders, Sourcify imports) |
final_project_asset | Exported final deliverables from final_project_assets |
character_blueprint | Named characters, environments, or props from the Blueprint system |
generation_output | AI generation outputs from generation_outputs |