Technical reference

OMLA Documentation

Everything you need to publish a model, integrate the registry, and settle royalties directly. OMLA publishes signed model manifests — identity, lineage, royalty split, and public payment pointers. Commercial users meter their own usage, resolve who is owed what with the open resolver, and pay creators directly. OMLA never holds or moves funds, and it keeps no records of usage, payers, or payments — because it never receives them.

Cover graphic: a stack of documentation pages marked V1.0 — everything, documented

Overview

OMLA keeps models freely usable for personal and research work and attaches one obligation to commercial use: once per calendar quarter (YYYY-Q1 through YYYY-Q4), self-assess a 30% royalty on the greater of attributable revenue or run cost and pay the creators directly within 60 days after quarter end. Distribution is recursive through each model's published split. Nothing is reported or submitted to OMLA. The commercial workflow is four steps: local ledger, calculate, resolve, pay.

1. Creators publish & sign

A signed manifest: cryptographic identity, lineage, the royalty split, and public payment pointers. Nothing enters the registry without the creator's signature.

2. OMLA serves the registry

Signed snapshots and a public read API. That is all OMLA does — no reports, no statements, no payment tracking.

3. Users meter & resolve

Commercial users keep their own usage records, self-assess the 30% greater-of royalty, and run the open resolver to get a percentage per wallet.

4. Users pay wallets directly

Payment goes straight to each creator's published pointers. No reporting, no records at OMLA, ever.

Getting started — creators

  1. Read the License — OMLA Model License & Royalty Terms v2.0 (Direct Settlement).
  2. Open the registration wizard. It generates an Ed25519 key in the browser and downloads an AES-256-GCM encrypted omla-creator-key-v1 bundle. Keep two offline backups; the full secret is never displayed, copied, or sent.
  3. Declare lineage: each OMLA-registered parent and how you derived from it (fine-tune, merge, distill, quantize).
  4. Add payee wallets and public payment pointers — a Lightning address, an on-chain address, a Stripe Payment Link, a PayPal.Me link, or your own invoice URL. Pointers are public.
  5. Set the split: what you retain (capped by how you derived — a fine-tune keeps at most 5%) and the share of each upstream parent. Everything sums to 100% and the wizard shows a live "$100 through this model" preview.
  6. Sign and submit. The wizard signs the v5 registration message — which pins your manifest hash — and the server verifies every signature before writing anything.

Creator hub for the plain-language version; Technical §9 for the byte-level flow.

Getting started — commercial users

You never need an OMLA account. Once per calendar quarter: keep a local ledger, calculate the 30% greater-of obligation, resolve, and pay each published payee directly within 60 days after quarter end. Nothing is submitted to OMLA.

# 1. Download and verify a signed snapshot against an independently pinned key
curl -O https://omla-ai.org/registry/v2/snapshot.jsonl.gz
curl -O https://omla-ai.org/registry/v2/index.json
# index.json's self-declared pubkey_b64 is informational, not a trust root

# 2. Resolve your usage ledger into a settlement sheet
omla-resolve --ledger usage.csv --snapshot registry/v2/ --total 4200.00 --period 2026-Q3

# 3. Pay each wallet line within 60 days after quarter end.
#    Memo (optional): OMLA:<model-id-prefix>:<quarter>

Users hub for lanes and worked examples; Technical §12 for the algorithm; resolver integration guide for platform patterns.

Registry data

The registry has two equivalent read surfaces. Prefer the static snapshot files: they are signed, cacheable, and mirror-friendly. The live PostgREST API serves the same tables for interactive queries (anon key in assets/js/config.js).

Signed snapshot files

PathContents
/registry/v2/index.jsonCurrent signed pointer: immutable path, sequence, previous-index hash, domain-separated Merkle root, pinned key id, and Ed25519 signature
/registry/v2/snapshots/{seq}/index.jsonImmutable signed index for one sequence
/registry/v2/snapshots/{seq}/models/{uuid}.jsonFull manifest, creator signature evidence, and Merkle inclusion proof
/registry/v2/snapshots/{seq}/models/{uuid}/payees.jsonPre-flattened payee vector plus evidence and inclusion proof
/registry/v2/snapshot.jsonl.gzEvery manifest, one JSON object per line
/registry/v2/CHANGELOG.jsonlAppend-only history of snapshot runs

Live API (public read, no auth beyond the anon key)

MethodEndpointDescription
GET/rest/v1/models?order=created_at.descList registered models (embed registry_status(*) for status)
GET/rest/v1/models?name=ilike.*{query}*Search models by name
GET/rest/v1/model_splits?model_id=eq.{uuid}Retention (basis points) and manifest version
GET/rest/v1/model_upstream_shares?model_id=eq.{uuid}Upstream share per lineage parent
GET/rest/v1/payee_shares?model_id=eq.{uuid}Payee shares within the retained portion
GET/rest/v1/wallets?model_id=eq.{uuid}&select=id,model_id,address,wallet_verified,created_atPublic payee addresses; wallet_verified means creator-signed + format-validated, not destination ownership
GET/rest/v1/payment_pointers?wallet_id=eq.{uuid}&order=positionPublic payment pointers
GET/rest/v1/lineage_edges?child_id=eq.{uuid}Declared lineage
GET/rest/v1/registry_status?model_id=eq.{uuid}ACTIVE / REVOKED / DELISTED + reason

Writes (creators — signature-gated Edge Functions)

MethodEndpointDescription
POST/functions/v1/register-modelRegister a model — verifies the v5 signed message and the manifest hash
POST/functions/v1/update-manifestReplace split / payees / pointers with signed v2 prior-state evidence
POST/functions/v1/registry-statusIntegrity transitions (OMLA reviewers only; admin-gated)

Database schema

Supabase PostgreSQL (Postgres 17). Every manifest table is world-readable; there are no write policies at all — writes happen only through signature-verifying SECURITY DEFINER functions. All share arithmetic is integer basis points.

TablePurposeKey columns
modelsImmutable model registryid, name, key set, key_fingerprint, signatures, message version (5), accepted License version + digest, signature_verified, registered_by
model_metadataKey/value overlay; signed weight_hash is immutablemodel_id, key, value (JSONB, ≤ 16 KB)
lineage_edgesDAG derivation relationshipsparent_id, child_id, relationship
model_splitsWhat the model retains, in basis pointsmodel_id, retain_bp (0–10000), manifest_version
model_upstream_sharesShare flowing to each lineage parentmodel_id, parent_id, share_bp (≥ 1)
payee_sharesDivision of the retained share among the model's walletsmodel_id, wallet_id, share_bp (sums to 10000)
walletsPublic payee addresses; the legacy-named wallet_verified field means creator-signed + format-validated, not destination ownershipmodel_id, address (omla1…), wallet_verified
payment_pointersPublic payment pointers, 1–8 per walletwallet_id, rail, value (≤ 512), position
registry_statusIntegrity status per modelmodel_id, status (ACTIVE / REVOKED / DELISTED), reason, transitioned_at
license_acceptancesImmutable License-acceptance evidencemodel, account, version, digest, timestamp
audit_logAppend-only, SHA-256 hash-chained event logseq, entity, entity_id, action, actor, before_state, after_state, prev_hash, entry_hash

Relationship types (lineage_edges.relationship)

Allowed values: fine-tune, merge, distill, quantize. The relationship determines the retention cap (below).

Splits & retention caps

Every model publishes a split in basis points (1 bp = 0.01%): what it retains, and what flows to each lineage parent. Retention is capped by how the model was derived, and the caps are enforced in the wizard, the Edge Function, and the database:

RelationshipRetention cap
fine-tune5% (500 bp)
quantize2% (200 bp)
distill10% (1000 bp)
merge10% (1000 bp)
Worked example — $100 through a 3-deep chain. NovaBase-Instruct-4bit (a quantization) → NovaBase-Instruct (a fine-tune) → NovaBase-70B (original). Resolution is recursive: the quantizer retains 2% ($2.00), the fine-tuner retains 5% of the $98.00 that flows up ($4.90), and the original creator receives the rest ($93.10). Most of the money flows to the original creators — automatically, at any depth.

An original model (no lineage) retains exactly 100%. Within the retained share, teams divide among their own wallets with payee_shares (basis points, summing to 10000). Details and invariants: Technical §8.

Payment pointers

Each wallet publishes 1–8 public payment pointers — how payers actually settle. Supported rails: lightning (address or BOLT12 offer — recommended), btc, eth (incl. USDC), sol, stripe-link (Stripe Payment Link), paypal-me, and invoice-url (your own invoicing page or billing email — private fiat rails go here). Every pointer is validated against an anchored regex in the browser, the Edge Function, and the database. The full regex table: Technical §7.

The resolver

omla-resolve/2.0 is the pinned, deterministic algorithm that flattens the lineage graph and turns a usage ledger into a percentage — and optionally integer cents — per wallet. Fixed-point integer math (UNITS = 1e8), largest-remainder rounding, a 0.1% dust floor, a depth cap of 32, and cycle defense. Python and JS implementations ship with shared test vectors and produce byte-identical output.

// In the browser (vendored, no CDN):
const vectors = OMLAResolver.flatten(manifests);
const sheet   = OMLAResolver.resolve({
  usage: [{ model_id, weight }], total_cents, period: '2026-Q3', vectors
});

# Or from the command line:
omla-resolve --ledger usage.csv --snapshot registry/v2/ --total 4200.00 --period 2026-Q3

Full algorithm, constants, and the settlement-sheet format: Technical §12.

Direct settlement

Registry integrity

Every model carries a registry status: ACTIVE (normal), REVOKED (flagged — still resolvable, reason shown), or DELISTED (removed from listings after review — reserved for fraud, impersonation, legal orders, or DMCA outcomes; the manifest remains resolvable for upstream shares). Transitions are reviewer actions with recorded reasons, all audit-logged. OMLA does not track payment compliance — enforcement of payment is the creators' license right. Details: Registry integrity and Technical §14.

Security & verification

Glossary

TermMeaning
ManifestA model's complete signed public record: identity, lineage, split, and payees with pointers
Manifest hashSHA-256 of the canonical payees + split JSON — signed by the creator's key, checked by the server
OMLA walletAn omla1… Bech32m payee address — the stable identifier a wallet keeps while its pointers change
Payment pointerA public instruction for paying a wallet: Lightning, BTC, ETH, SOL, Stripe link, PayPal.Me, or invoice URL
SplitBasis-point allocation: what a model retains vs. what flows to each lineage parent
Retention capCeiling on what a derivative may retain: fine-tune 5%, quantize 2%, distill 10%, merge 10%
Payee shareBasis-point division of the retained share among a model's own wallets
Lineage DAGDirected acyclic graph of parent→child derivation relationships (cycle-checked at insert)
SnapshotA signed, static export of the whole registry under /registry/v2/, with a strictly increasing seq
Resolveromla-resolve/2.0 — the deterministic algorithm turning usage into per-wallet percentages
Settlement sheetThe resolver's canonical output: wallet lines with percent, units, optional cents, and pointers
Safe harborResolving against a signed snapshot ≤ 90 days old at calendar-quarter end discharges that quarter's obligation
Registry statusACTIVE, REVOKED, or DELISTED — integrity of the registry entry, never payment behaviour
Key fingerprintSHA-256 of (algorithm ‖ classical key ‖ PQ key) — the stable registry identity
Basis point (bp)1/100 of a percent; all shares are integer bp — no floats in the split path