score - order - test - fine-tune - repeat
From protein sequence,
to real molecules,
to discovery, in weeks.
We screen proteomes against hundreds of millions of molecules in the lab to power LULA, so you can launch programs with real molecules in weeks, fine-tune on the results, and order better molecules.
Launch workflow
Find molecules. Get molecules. Test. Fine-tune. Repeat.
01 Target
protein sequence
02 Score
rank orderable hits
03 Order
Wallet Credits
04 Fine-tune
better molecules
Discovery Launch
Place the 1,000,000 Wallet Credit, 6,000-molecule validation bundle and receive molecules, scores, validation files, and data for the next fine-tuned round.
score → select → order, in one Wallet Credits flow
From a target sequence to a molecule order.
Bring a protein sequence. LULA-2 scores a fixed-price slice of Om Accessible Space and returns ranked, orderable rows. Pick the hits you want to test, spend Wallet Credits, and Om ships the molecules.
Create an API key, fund Wallet Credits, then run the SDK flow.
Real SDK flow
Define target + client
from pathlib import Path
from uuid import uuid4
import polars as pl
from omtx import OmClient
JAK2_V617F_SEQUENCE = "YOUR_JAK2_V617F_PROTEIN_SEQUENCE"
client = OmClient(api_key="YOUR_API_KEY")Launch LULA-2 scoring
job = client.lula2.score(
protein_sequence=JAK2_V617F_SEQUENCE,
source="om",
tier=50,
n=50_000,
top_k=10_000,
idempotency_key="jak2-v617f-lula2-r1",
)Collect ranked hits
artifact_paths = []
result_dir = Path("outputs/jak2-v617f-lula2-r1")
for job_id in job["job_ids"]:
client.jobs.wait(job_id, poll_interval=5, timeout=3600)
artifact_paths.extend(
client.jobs.download_all_artifacts(
job_id,
output_dir=result_dir / job_id,
overwrite=True,
)
)
score_tables = [
pl.read_parquet(path)
for path in artifact_paths
if path.suffix == ".parquet"
]
score_rows = pl.concat(score_tables).sort("score", descending=True)
selected_hits = score_rows.head(100).to_dicts()Order with Wallet Credits
addresses = client.molecules.shipping_addresses()
order = client.molecules.order(
items=selected_hits,
shipping_address_id=addresses["default_shipping_address_id"],
idempotency_key=f"jak2-v617f-round-1-{uuid4()}",
)
print(order["order_number"])50K
Om molecules
100
selected hits
Om
orderable rows
1 order
Wallet Credits
- 01
Define the target
JAK2 V617FBring the protein sequence for a real target like JAK2 V617F.
- 02
Score Om space
50K moleculesRun LULA-2 against an Om Accessible Space tier and get ranked molecules back.
- 03
Select molecules
top 100Pick the highest-confidence rows you want moved onto the bench.
- 04
Order with credits
Wallet CreditsSpend Wallet Credits on the selected hits. Om ships you molecules. That's it.
bring your hits, order molecules
Start with LULA, generated molecules, docking, Boltz, or internal ML. Pick the molecules you want to test; Om turns selected orderable hits into a Wallet Credits-funded order.
early molecule partner
LULA-1 & LULA-2
Score molecules from 10 Wallet Credits / 1K scored.
What it is
Om’s small-molecule protein interaction foundation model.
What LULA means
Ligand Underpinned Latent Associations.
How it's trained
2D ligand binding data and protein sequence alone, with no structure in training.
What you get
A binding score you can use to rank molecules directly from sequence and SMILES.
Structure-first systems like BoltzBio's Boltz-2 and Nesso-1 model each protein-ligand pair before scoring. LULA embeds the target once, then scores molecules directly from SMILES and sequence, without crystal structures, docking, or folding.
LULA-1
FastScreens broadly across many targets — the default for low-cost, high-throughput molecule scoring.
LULA-2
High-ResScores about 200 molecules/sec for the hardest targets — protein-protein interfaces, flat pockets — where precision matters most.
50×
lower than BoltzBio API with LULA-2 High-Res at 50 Wallet Credits / 1K scored
~200×
faster than Nesso-1 using LULA-2 throughput
200/sec
LULA-2 scoring throughput for direct molecule ranking
250×
lower than BoltzBio API with LULA-1 Fast at 10 Wallet Credits / 1K scored
References: BoltzBio public pricing lists $0.025/molecule small-molecule pricing; Nesso-1 Technical Report reports roughly one prediction per second on one GPU. Checked July 30, 2026.
what data is powering LULA?
We screen entire proteomes against hundreds of millions of molecules, to power proteome-wide interaction models like LULA-1 and LULA-2.
The technology
Pico-scale library × library screening: every molecule in one library tested against every protein in another, simultaneously.
The economics
Multiplexed at massive scale instead of one compound at a time — orders of magnitude cheaper than the status quo.
Feeds the next model
Every screen becomes training signal — sharpening every future LULA-1 and LULA-2 run.
300M data points per protein
1,000 proteins a month capacity
~900B data points a quarter
enrichment results, verified
Top-ranked molecules carry the signal.
Across proteome-scale evaluation, LULA-1 recovered 267,324 known binders in the top 1,000 ranked molecules per target versus 4,877.6 expected under random ranking. Family AUROC remains strongest across the same druggable target families.
composition and performance · target-family AUROC
evaluated target-family coverage
Ligase/Synthase
0.829· 151
Oxidoreductase
0.811· 424
Transferase
0.808· 187
Ion channel
0.808· 147
Phosphatase
0.808· 134
Hydrolase
0.805· 351
Kinase
0.800· 707
Transporter/Pump
0.796· 191
Receptor/GPCR
0.793· 959
Protease
0.786· 316
Other
0.750· 1,528
Epigenetic/Chromatin
0.727· 207
Nucleic-acid enzyme
0.716· 137
EF@1000
54.8x
Aggregate enrichment in the top 1,000 ranked molecules per target.
Known binders recovered
267,324
Recovered in top-ranked candidate sets across the benchmark.
Random baseline
4,877.6
Expected known binders under random ranking.
The donut shows evaluated target-family coverage across 5,439 targets; slice size is target share and color tracks AUROC. The benchmark result is measured by known-binder recovery in the top-ranked candidate set.
fast, then precise where it counts
LULA-2 turns hard targets into real hits.
On these five targets LULA-2 recovers 3.3x to 28.9x more known binders in the top 1000 than LULA-1 — a mean enrichment gain of 10.3x.
Top-1000 precision on a 12-target product panel, fixed LULA-2 checkpoint; muted bar is LULA-1, accent bar is LULA-2. LULA-1 covers every target broadly, and LULA-2 is the high-resolution pass for protein-protein interfaces, flat pockets and other targets where selectivity matters.
attention discovery
Attention finds real contacts across 164 independent structures.
LULA-1 trains on ligand binding data and protein sequence alone. This is what its attention finds anyway, checked against real, recent PDB structures it never trained on.
- 01
Trained on binding data alone
LULA-1 learns from real ligand binding measurements and protein sequence. No 3D structure is part of training, ever.
- 02
Attention ranks the residues
Its cross-attention between ligand and protein surfaces which residues correlate most with binding — a sequence-level signal alone.
- 03
Structure models seed a pocket
Those ranked residues, together with the ligand, seed a predicted pocket and binding pose using Chai-1 and other structure models.
- 04
Checked against real structures
The result correlates closely with real, independently solved PDB structures — on targets the model never trained on.












































































































































































































































































































































































































500M training data points
8% of the human proteome
300M molecules screened per protein
why the loop compounds
Mass screening turns molecule orders into a better model.
Behind the score/order workflow, Om screens proteins and molecules at scale, turns measured signal into better LULA rankings, and supports validation when teams want experimental data back. Internal benchmarks guide what gets exposed publicly.
- 01
Target signal
start from the protein
- 02
Measured data
validate pairings at scale
- 03
Better LULA
train the next ranking
- 04
Molecule Fulfillment
move hits to the bench
callable by agents
Connect Om where the work is happening.
Use Om from Codex or Claude Code with hosted MCP OAuth. Direct API and CLI paths stay available when you need production orchestration.
Codex
OAuth remote MCP
Add the hosted Om MCP endpoint, then complete the OAuth login.
Setup
codex mcp add omtx --url https://agents.omtx.ai/mcp
codex mcp login --scopes email omtxRestart Codex, then ask for om_status or pricing_get to confirm the server is attached.
Claude Code
OAuth remote MCP
Register the remote HTTP MCP server, then authenticate from /mcp.
Setup
claude mcp add --transport http omtx https://agents.omtx.ai/mcpRestart Claude Code, run /mcp, complete OAuth in the browser, then ask for om_status.
Latest Articles

40 million scored. 6,000 actually made.
Send one protein sequence, have Om rank roughly 40 million molecules with LULA-2, and get back physically validated binders from the top 6,000.
August 2, 2026 · 5 min read
Read More
LULA-1 is now open-weight on Hugging Face
LULA-1 scores protein-ligand pairs from sequence and SMILES, with local weights for non-commercial research and hosted scoring for commercial workflows.
July 31, 2026 · 6 min read
Read More
Vibe Discovery Is Coming
Om MCP brings Diligence, Data Access, Artifacts, Jobs, and Hub workflows into Codex, Claude Code, and OAuth-capable MCP harnesses.
April 8, 2026 · 12 min read
Read MoreWhile you're vibin'...
Watch the discovery playlist.

A little birdy said to ask Om MCP to make a vibe video for your discovery efforts. Want to ask for your favorite vibe video style?








