One GPU. A whole network.
AI-RAN WG3 · WI#6A rack is the wrong answer at the edge. ULAP ONE puts a private 5G core, a radio access network, a spectrum sensor and edge-AI video on one accelerated node, so connectivity and compute arrive together instead of as two procurements.
01 · 5G core + RAN
Open5GS core and an srsRAN Project gNB on one node. ZMQ virtual RF by default; conducted SDR and O-RU 7.2x fronthaul are the other two fabrics. UERANSIM supplies bulk L3 UEs.
02 · GPU co-tenancy
The AI tenant and the radio share one accelerator. The mode controller is the gate: below the degrade threshold the AI workloads yield bandwidth and GPU back to the RAN, with dwell timers so the decision cannot flap.
03 · TVWS spectrum sensing
A ResNet18 classifier over I/Q, six signal classes, advisory only. PAWS grant state is the authority for transmit, not the model.
04 · Super-resolution video
SPAN on the display path, RealESRGAN targeted at archive recordings. The uplink degrades, the picture does not have to.
Capability register
narrative copy — may lag not read from the registerOne register, not two. The list above is read from /api/control/capabilities, which parses docs/CAPABILITIES.md. Until 2026-08-04 this page
kept its own hand-maintained copy of the same twelve rows, so one of the two could drift and
nothing would catch it. The hand-written list survives only as a fallback and says so
whenever it is on screen.
NOW means the register cites evidence for a capability, not that this console
measured it today.
Every evidence string above is stamped DECLARED, including the ones that
carry a number. Until 2026-08-04 the SR row read 30+ fps live, printed bare in the same grey this
console uses for a measured sub-label; the measured GB10 figure is 4.6 fps, about 6.5x lower, and the "30+" figure was SPAN inference
throughput rather than the delivered stream. A design target and a measurement are now two
separate clauses in the register, and neither can borrow this page's authority: nothing here
is a reading. The delivered rate is measured on Video.
One command stands the network up
zero-touchmake up-all # probes hardware, picks sim or conducted SDR, handles the RF gate make status # is the whole network up make health # per-service health make doctor # host tools, GPU, RF licence
Reach for these first. Hand-picking a RAN mode walks straight into the RF affirmation gate,
which the guided command handles for you. rf_licence.yaml is the sole radiation authority and no document overrides it.
Why the live console is operator-only
The control plane changes state: it provisions subscribers, issues eSIM profiles, starts and stops the stack, and can put a shell on the host. That surface is reachable on the tailnet and is view-only on a public domain. It is deliberately not the front door, which is why the landing page is a status board and not a set of buttons.
How to read a state anywhere on this console
never colour aloneEvery state on this console is drawn as three things at once: a glyph, a word and a colour. The glyph survives greyscale, colour-blindness and print; the word survives a screen reader; the colour is the fastest of the three and the least reliable. No state anywhere is carried by colour on its own.
A contract-backed pass. Something answered and the answer was what the contract requires.
A failed gate, or a deployed component that is not answering. A real red.
Attention. Real but old, a limit on a claim, or a boundary you must not read past. This is the only job the accent colour does.
Neutral scope or provenance. Never a verdict in either direction.
Absent. Not measured, or not deployed. Neither a pass nor a failure, and never counted as either.
Every number on this page was read by your browser inside its own poll window.
At least one source has not answered inside its poll window. Numbers fed by it are real but old, and the age is stated per source.
At least one source that IS deployed stopped answering. Anything it feeds is last-known, not current.
Every source here is opt-in and was never brought up. That is absence, not failure.
No source has answered yet. Nothing on this page is asserted either way.
The last one is the one that matters. Absence of a measurement reads as absence everywhere on this console, never as a pass and
never as a failure. A component nobody deployed is not broken, and a number nobody measured is not zero. These two
rows are not typed out here twice: the second is generated from the same table liveness.svelte.ts gives every live route, so this
legend cannot describe a vocabulary the console has stopped using.