omxlabs presents omxplorer

GPU native. Agent native. Multimodal.

One workspace for a 100-million-row sheet, a video and a picture, and the models that read them. It runs on your own GPU, and you can work in it by talking to an agent.

Linux runsMac runs on CI MacsWeb runs
omxplorer · Linux · why did the robot drop it?
▶Watch the story 56 s

Why did the robot drop it? 63,344 real robot runs from 13 labs, their video and 16.8M telemetry rows, in one app. Watch the fault get found.
↳ DROID (CC-BY-4.0) · omxcode docs/goals/47-report.md

63,344real robot episodes from 13 labs, one row each, in one sheetDROID, CC-BY-4.0 · goal 47
16.8Mtelemetry rows, joined to the episodes by a link you confirm16,847,616 rows · goal 47
~40msa question in words, answered over every telemetry rowJOIN LINKED, 37–42 ms in the check's runs · goal 47
30msa filter change over 100M rows, from input to pixels on screenmedian · Rust + Polars 37.0 ms · measured at 856a7e9, before the release build · docs/data-benchmark.md
1 · GPU native

Your data stays on the GPU.

In most data apps, the numbers are computed in one place and drawn in another: copied off the GPU, sent through a server, parsed by a browser, then redrawn. omxplorer is one Mojo program. Your rows stay in GPU memory, the kernels run right there, and only the answer, a few numbers, travels to the screen in the same process.

TodayGPUcomputesCPU memoryholds a copyPython serverserializesbrowserparses, redraws⏳ every hop waits
Four programs, three hand-offs. Every click pays for all of them.
omxploreryour GPUone Mojo processdatastays herekernelscomputescreensame processthe windowonly the answer😎 nothing copied, nothing serialized
One process on one GPU. The rows never move; only the answer does.
0.6ms

a chart over 1 million rows

30ms

a dashboard click over 100 million rows, on one workstation

1process

Data, kernels and screen in one Mojo program. No server, no JSON, no browser in between (on Linux, checked).

RTX 3090 · omxcode README (chart 0.5–0.7 ms) · the 100M dashboard: goal 38's median click, measured at 856a7e9, before the release build, docs/data-benchmark.md · honest edge: a median chart over 100M rows in memory takes about 0.7 s · on the web, a server streams the screen

One tap, start to finish
1 · you

Tap “Sum” in the chart's title and pick “Median”.

2 · the app

The tap is a message. update() changes the chart's state; view() describes the new screen.

3 · the engine

The group-by and median run as GPU kernels over all 1M rows, in the same process.

4 · the screen

Only what changed is redrawn, and the bars spring to their new heights.

done6.4ms

the median per group over 1M rows, RTX 3090

omxplorer · orders_1m.csv · 1,000,000 rows

A real recording: change a word in the chart's sentence, and a million rows are recomputed on the GPU.

2 · Agent native

Agents don't click. They call.

Today an agent uses an app like a tourist with a menu they can't read: it looks at a screenshot and points. In omxplorer, every button also describes itself: its name, what it needs, and whether it's allowed right now. The agent reads that list and calls the button directly.

Today🤖😵 is this Export? click (812, 344)
Screenshots, pixel coordinates, guesses. Slow, and it breaks when the layout moves.
omxplorerset_word("Median")split_clip(at=12.4)make_reel()disabled: no tool🤖😄 I'll call make_reel()
Every button is also a tool with a name and arguments. A disabled button isn't on the list.
Connect your agent in three steps

1 · Get the agent link

In a copy of the omxcode repo, run this. It prints one claude mcp add omxplorer … line; run that once.

scripts/agent.sh omxplorer

2 · Your agent sees the tools

omxplorer speaks MCP, the standard Claude Code and other agents already use. There's nothing to set up per button: every control is a tool from the first line of code.

3 · Talk instead of hunting

“Revenue by product, largest first, top 5.” Edit by talking, not by learning a thousand buttons. Or hand the agent a script and let it run.

A real session: Claude Code driving omxplorer, no screenshots
→ choose-a-file  {"path": "orders_1m.csv"}
→ create-table
→ insert-chart
→ ask  {"text": "revenue by product, largest first, top 5"}
← Now: chart0: 0.6 ms
An agent can do nothing a person couldn't.

The tools are the buttons, so the agent sees exactly what you'd see, and is bound by the same rules.

Read the agent docs
omxcode README · docs/agent.md
3 · Multimodal

Every kind of data, in one afternoon.

Today the sheet lives in Excel, the charts in Spotfire, the footage in a video editor and the model in a notebook, with exports in between. In omxplorer they're cards on one sheet, on one GPU, and they can be joined.

The video work below is built, checked and on main (goal 39).

TodayExcelthe sheetSpotfirethe chartsa video editorthe footagea notebookthe modelexport.csvre-importuploadcopy, paste😩 four apps, and copies between them
Four apps that don't know about each other. Every question is an export.
omxploreromxplorer · one GPUtelemetry100M rowsvideoframes → rowsmodelnextchartmap🤩 joined on time, one afternoon
Numbers and video on one sheet, with models next. A video's frames are just more rows.
Every kind of data

Sheets

Sheets, pivots and charts over CSV and Parquet. 100M-row files open in 0.2 s.

Live now

Video

Frames become rows at about 400 a second at 720p. Split, trim, and let the rows cut a reel.

Live now

Pictures

Pictures open as cards on the sheet. GPU crop, blur and captions are built underneath, not in omxplorer yet.

In progress

Audio

Speech and sound as rows you can search and cut.

Planned
Bring your own model

Pick a model

A vision or audio model from Hugging Face. Not a chatbot: a detector, a segmenter, a classifier.

Convert it to MAX

MAX runs it fast on your GPU. omxconsole will do the converting.

Planned

It runs inside omxplorer

In the same process as your data. No server, no upload.

In progress

Its answers are rows

Boxes and masks land in a table you can join, chart and ask.

In progress

Where it stands: OWLv2 (find more like this, from one tapped example) and SAM 2.1 (outlines) already run in process in the framework's own tests, through PyTorch, on Linux with NVIDIA, and their answers come back as rows. Next: wire them into omxplorer, then any Hugging Face model, converted to MAX.

Live now, and what's next.

Now

  • Sheets, pivots, charts and reports over 100M-row files
  • The sentence chart: tap a word, ask
  • An agent can drive its buttons: 55 of 121 components proven so far
  • Video becomes rows; reels, split and trim; the drone
  • The robot story: 63,344 real episodes, video, telemetry and the paper, linked

Next

  • omxplorer in your browser, live on omxlabs.tech (hosting not set up yet)
  • Models inside omxplorer: OWLv2, SAM 2.1
  • Any Hugging Face model, converted to MAX
  • Audio becomes rows
  • Ask, answered by a model on your own GPU

Later

  • Share with a team
  • Apple GPUs on real Macs (the Metal build runs on CI Macs today)
  • Real-world footage at scale
Under the hood

Built on three technologies we made for it.

Each one also works on its own and has its own site.

About omxlabs
omxlabs

The answer is already in your data. We put it on one screen.

omxlabs builds GPU-native, agent-native software, written in Mojo. omxplorer is our first product.

Every kind of data. One GPU. Ask it anything.

Meet omxplorerWatch the slides
Why did the robot drop it? A real failure, found in 56 seconds

A real recording: DROID (CC-BY-4.0), 16,847,616 telemetry rows at 15 Hz (= 312 hours of runs), driven through omxplorer's agent tools · omxcode docs/goals/47-report.md