Model registration

Publish Your Model

Register your OMLA-licensed model to get a unique wallet address, declare contribution splits, and appear in the public registry. Six steps — takes about 5 minutes.

Sign-in required. Creating a registration writes to the live registry, which is gated by row-level security. Sign in or create an account before Step 6.
1Identity
2Keypair
3Lineage
4Wallet
5Splits
6Review

Step 1: Model Identity

Identify your model. The SHA-256 hash of your model weights anchors the registration cryptographically.

Why a name, description, and weight hash?

Three fields, three different jobs:

  • Name & description are human-readable and appear on your model's public registry page. Choose something discoverable — don't just call it "MyModel".
  • SHA-256 hash of the weights is the cryptographic anchor: a 64-character hex string computed over the exact bytes of your weight file. Two different weight files have different hashes, so the hash uniquely identifies this version of the model. It prevents someone else from claiming your weights under a different name, and lets inference gateways verify they're running the OMLA-registered bytes.
  • Source URL (optional) points commercial users at where to download. Hugging Face, Civitai, your own S3 — doesn't matter. OMLA does not host the weights.

If your model is a quantization or adapter of a larger base, hash the bytes that ship together with this registration — not the base model. You'll declare the relationship to the base in Step 3.

Compute with: sha256sum your-model.bin or use the file picker below to hash in-browser.
File never leaves your device — SHA-256 computed locally.

Step 2: Ed25519 Keypair

Your model registration is signed with an Ed25519 keypair. This gives you a cryptographic identity as the model's creator. The public key is stored on-chain; you keep the secret key.

What is this keypair for and how do I keep it safe?

Ed25519 is a fast, modern digital-signature scheme. It produces very small keys (32-byte public, 64-byte secret) and very short signatures (64 bytes). The browser generates your keypair locally; nothing is sent over the network.

Three places the keypair matters:

  1. Registration signature. Right now, you'll sign the final registration payload so anyone can verify the record was created by you.
  2. Future updates. To change a wallet, rotate splits, or update metadata, you'll need to sign the change with this secret key. Without it you cannot update your model.
  3. Proof of ownership. If someone disputes the registration, you prove you're the creator by signing a challenge with the secret key.

Safe storage: paste the secret key into a password manager (1Password, Bitwarden, etc.) or an encrypted file. Never commit it to git, never post it in Discord/Slack, never email it. OMLA does not store it and cannot recover it if lost — recovery requires the board verifying your identity via email + recomputing the weight hash.

What is Ed25519? A fast, secure elliptic-curve digital signature scheme. The public key (32 bytes) uniquely identifies you. The secret key (64 bytes) signs registrations and future updates. Never share your secret key.
Click "Generate Keypair" to create a new keypair in your browser. Keys are generated locally and never transmitted.

Step 3: Lineage Declaration

If your model is derived from other OMLA-registered models, declare them here. Each upstream model gets a contribution weight (0–1.0) representing how much of the royalty pool flows upstream. The remainder stays with your model's splits.

How do I pick a contribution weight?

The weight is your honest estimate of how much of this model's value came from the upstream model. Some rules of thumb:

  • Fine-tune on a base model. Common: 0.60–0.80 upstream. The base did most of the heavy lifting; you shaped the behavior.
  • Quantization / distillation. Very high: 0.90–0.98 upstream. You changed the efficiency profile, not the capabilities.
  • Merge of two peer models. Split based on parameter count or evaluation contribution; totals must still be ≤ 1.0.
  • Adapter / LoRA layered on a base. Often 0.70–0.90 upstream; your work is the delta.
  • Training from scratch. Leave the lineage section empty. This is original work — 100% of the pool stays here.

Weights less than 1.0 leave a remainder, which becomes your "original contribution" portion and is split via Step 5. Weights summing to more than 1.0 will be rejected by the database.

Non-OMLA bases (like Meta Llama, Stable Diffusion) can't receive royalties through OMLA — but you should still declare them for transparency. A future field will capture these as informational external lineage.

Contribution weight: A value between 0 and 1. If upstream model A has weight 0.40, then 40% of royalties received by your model flow upstream to Model A (and recursively to its lineage). Weights across all upstream models must total ≤ 1.0.
No upstream models? Leave this blank if your model is original work. You'll still have room for contributors in Step 5 — collaborators, funders, the friend whose cluster you borrowed.

Step 4: Wallet Setup

Your OMLA wallet address is a Bech32m-encoded routing identifier (prefix: omla1). It resolves to your chosen payment rail — Stripe, PayPal, Lightning, ACH, SEPA, or Wise.

How does the omla1… address actually move money?

The omla1… address is not a payment instrument itself. It's a globally unique identifier that OMLA resolves to whatever real payment method you chose (your Stripe Connect account ID, your PayPal email, your Lightning address, etc.).

Flow, during a quarterly payout:

  1. A commercial user's usage report generates $X of royalty owed to models including yours.
  2. The quarterly-payout job calls resolve_splits(), which returns a table of (omla1… address, rail, percentage).
  3. For each row, the job looks up the rail + rail_identifier and calls the rail's execute().
  4. Stripe / PayPal / Lightning actually moves the money; OMLA records the payment.

Your rail_identifier (Stripe acct_…, PayPal email, Lightning address) is private — not shown on your public registry page. You can change it later by signing an update with your Ed25519 secret key.

Which rail should I pick? If you're in the US, Stripe Connect is the easiest and cheapest. If you're international, PayPal is more universal but charges more. If you already have a Lightning wallet, Lightning is nearly free and instant. Multiple wallets per model are supported — you can add more later from your dashboard.

What is an OMLA wallet address? An omla1… address is a globally unique identifier that maps to your real payment method. When commercial users pay your model's wallet, the OMLA system routes funds to your configured rail. A single payment auto-splits to all upstream creators.
Will be generated from your model ID after registration
Example: omla1qq0emf5v8xgs5gwtk4gec7fy5k7spvgc8q3m2
The destination on your chosen rail. Not publicly displayed.

Step 5: Contribution Splits

Declare who receives what percentage of this model's royalty pool. The royalty pool is the portion of payments that stays at this model (after upstream lineage weights are applied). Splits must total 100%.

What is "this model's royalty pool" vs upstream?

When $100 arrives at your wallet, it's split in two phases:

  1. Upstream flow-through. If Step 3 declared a base model with contribution weight 0.40, $40 flows up to the base model (and recursively to its ancestors). You don't control how that $40 is split — that's the base model's own splits table.
  2. Local pool (this step). The remaining $60 is yours to divide among the people who built this model. You + collaborators + funding recipients. Those divisions must sum to 100% of the local pool.

Common patterns:

  • Solo creator: one row, 100% to your own wallet.
  • Co-creators: two or three rows summing to 100%. Disputes go through the complaint system, not a rewrite of this table after the fact (changes need co-signer consent — see the roadmap).
  • Grant funder: a percentage earmarked for your grant giver, remainder to yourself.
  • Nonprofit donation: a percentage to a charity's OMLA wallet.

Every recipient's wallet here must itself be a valid OMLA address (either an existing one or a freshly-generated one bound to their chosen rail).

Example: If your model has a 40% upstream contribution weight to Model A, then 40% of payments flow upstream. The remaining 60% stays in your model's pool. If you split that 60% as 80% to yourself and 20% to a co-creator, you receive 48% of total payments and your co-creator receives 12%.
Total: 0%

Step 6: Review & Sign

Review your registration details. When ready, sign the payload with your Ed25519 secret key. This signature proves you control the keypair and authorizes the registration.

What exactly am I signing, and what happens when I submit?

You're signing a canonical JSON blob: { name, hash, pubkey, wallet, license }. The signature lives in models.registration_signature and anyone can verify it later against the stored public key. It's the cryptographic proof that the keypair's owner authorised this registration.

On submit (live mode):

  1. The browser POSTs to the Supabase REST API with your user JWT.
  2. Row-Level Security confirms your signed-in email matches the creator_email you typed in.
  3. Database triggers validate: no lineage cycles, weight sums, split totals, Bech32m address format, unique Ed25519 public key.
  4. Initial compliance state is seeded as REGISTERED.
  5. You're redirected to your model's detail page with the generated UUID and wallet.

In preview mode (no Supabase configured), submit downloads a signed registration JSON for manual email submission to verify@omla-ai.org — useful while the production database is being set up.

Model Identity

Name
Domain
SHA-256 Hash

Cryptographic Identity

Public Key

Payment

Wallet
Rail
Licensev8-10-2025

Structure

Lineage
Contributors
Used locally to sign the registration payload. Never sent to the server.
What happens on submit: Your signed registration is sent to the OMLA Supabase database. Your model is immediately visible in the registry with REGISTERED compliance state. Your OMLA wallet address is generated and displayed.
Backup path: If Supabase is not yet configured, Submit will download your registration JSON for manual submission to verify@omla-ai.org.