Capability Map

Capability Map

The Crown ships with more than most owners ever find. Here is the whole menu in two lanes, what you can use today without writing a line, and every route an engineer can build on, plus a short guide to picking the right one.


Every way in, for people and for code

The Crown ships with more than most owners ever find. Here is the whole menu in two lanes, what you can use today without writing a line, and every route an engineer can build on, plus a short guide to picking the right one.

Sixty-second orientation

The Crown does two things. It measures electrical activity at eight points on your scalp, 256 times a second. And it runs a small computer on your head that turns that firehose into things a human can act on, a focus score, a calm score, five frequency bands, a signal-quality reading.

Everything Neurosity offers is a different way of getting at one or both of those. The apps hand you the interpretations. The developer routes let you choose your own altitude, interpretations, frequency bands, or the raw signal itself.

The one thing to hold on to

There are two fundamentally different paths out of the headset, and almost every practical question, does it work away from home? do I need a login? will a firewall break it?, comes down to which one you picked. Section 03 draws them.

What you can use without writing code

Seven things, all included with the headset. Most owners use one of them.

The mobile app

iOS and Android. The everyday face of the device.

Connect the Crown to Wi-Fi, watch your focus in real time, run sessions up to an hour, and check battery and signal. It also carries NeuroAdaptive Audio, music that adjusts itself based on what your brain is doing, rather than a fixed playlist.

NeuroAdaptive Meditation

Guided sessions that respond to your calm score.

The soundscape shifts as you settle, so the feedback loop is closed rather than you just listening to a recording. Bundled into the same app.

Neurosity Music

Beta

Spotify recommendations chosen by your brain activity.

Hooks your Spotify account up to the Crown and suggests tracks based on your current state. Still labelled a beta, and nothing has been published about how it will be offered once the beta ends.

The Developer Console

No code needed

A website, despite the name, and the most underused thing Neurosity ships.

At console.neurosity.co you can watch your live brainwaves, record raw EEG sessions and download them, train Kinesis commands, and flip the seven device settings. You do not need to be a programmer to use any of it. “Developer” in the name puts people off, which is a shame.

Kinesis training

Experimental

Teach the Crown to recognise an imagined movement.

You repeatedly imagine a specific action, say, pushing with your right arm, and the Console learns your pattern. Once trained, that thought becomes a trigger you can attach to something. Neurosity is candid that lag and accuracy are still being worked on, so treat it as a toy for now rather than a control system.

The MCP server

No code needed

Talk to your brain data through Claude or ChatGPT, in plain English.

Add https://mcp.neurosity.co as a connector and you can simply ask: “how has my focus been this week?” or “record two minutes and chart it.” This is the single biggest no-code capability Neurosity has, and it is barely advertised, it is also how the numbers in this document were read off the loaned headset.

The seven device settings

The toggles in your Console, worth knowing what they do.

Activity Logging quietly saves focus and calm snapshots over time. System Haptics enables the two vibration motors in the band. OSC, OSC Performance, OSC Batch and LSL open the developer routes in section 04, leave them off if you are not using them. Support Access lets Neurosity’s support team look at your device; keep it off unless you are in a ticket.

How data actually gets out

This is the fork that decides everything else. The Crown can either shout onto your local Wi-Fi, or send data up to Neurosity’s cloud and back down to you.

flowchart LR C["Neurosity Crown
8 channels at 256 Hz"] C -. "local path, no login" .-> W["Your Wi-Fi
UDP port 9000"] W -. OSC .-> A1["An app on the same network"] W -. LSL .-> A2["A research pipeline"] C -- "cloud path, login required" --> N["Neurosity servers"] N --> S["The SDK"] S --> A3["Your app, anywhere"] S --> A4["Other people's headsets"]

The same brainwaves leave the Crown by two paths. The dashed path shouts onto your local network, nothing to sign into, but it dies the moment you leave the Wi-Fi. The solid path goes through Neurosity’s servers, a login is required, and in exchange it works from anywhere and can serve users who aren’t you.

The six routes for engineers

RouteLanguagesPathBest at
Official SDKJS/TS, Python (beta), Dart/Flutter, C# via a Unity portCloudActual products. The full API surface, multi-user auth, works anywhere.
MCP serverNone, it’s a URLCloudGetting an AI assistant to read and reason about brain data with almost zero build.
WebSocketsAnythingCloudStreaming into a web or server app without pulling in the SDK.
OSCAnything that speaks OSCLocalDriving TouchDesigner, Max/MSP, Ableton, Resolume, Unity, Processing, no SDK needed on the receiving end.
LSLC++, Python, MATLABLocalResearch. Millisecond-accurate timestamps, sync across machines, nothing dropped.
BrainFlowPython, C++, Java, C#, R, Julia, Rust, moreLocalWriting code that also runs on Muse, OpenBCI and others. Ships filters and denoising.

One nuance on the cloud path

The SDK reference documents a Bluetooth connection mode alongside Wi-Fi, there’s a streamingState() method that reports which is active, and a createBluetoothToken() for authenticating a Bluetooth client. So “cloud” isn’t strictly always-online for every case. I found the API surface but not a setup guide, so test it before you depend on it.

Everything you can read

Twelve live streams, all available through the SDK. Pick your altitude.

StreamWhat you getAltitude
focus()Probability you’re focused, updating continuouslyInterpreted
calm()Probability you’re calmInterpreted
kinesis()Fires when you think a trained imagined movementInterpreted
predictions()Raw model output for any label you’ve trainedInterpreted
powerByBandAverage power in delta, theta, alpha, beta, gammaProcessed
psdPower spectral density, power across the frequency spectrumProcessed
rawFiltered EEG in epochs of 16 samples per channel, ~every 62.5 msRaw
rawUnfilteredThe same epochs with no notch or bandpass appliedRaw
signalQuality()Per-channel electrode contact qualityDiagnostic
signalQualityV2()Same, normalised to a 0-1 score per channelDiagnostic
accelerometer()Head movementSensor
status()Battery, charging, sleep state, connectionDevice

Read this row twice

signalQuality() arrives in the same stream as everything else. Most consumer neuro products fail because they confidently display numbers derived from an electrode that lost contact ten minutes ago. Gate your UI on this before you build anything else.

Everything you can send

The Crown is not read-only, which surprises people. Five things you can push back at it.

CallWhat it does
haptics()Buzz the two motors at P7 and P8, back left and right side of the band. Up to seven named effects queued per command, with names like strongClick100. Almost nobody uses this.
changeSettings()Flip any of the seven device settings from code. You can turn OSC on for a session and off again when you’re done.
addMarker()Drop a labelled timestamp into the EEG stream, “the stimulus appeared here.” Essential for any experiment.
record() / startRecording()Capture raw brainwaves to a saved dataset, either for a fixed duration or open-ended with a handle you close later.
trainingRecord labelled trials and train your own classifier, not just the built-in Kinesis ones.

There is also a full experiments API, create an experiment, save trials and predictions against it, drop markers inside recordings, which is a small research platform hiding inside a consumer SDK.

The part nobody mentions: building for other people

Most Crown projects are one person wiring up their own headset. The SDK quietly supports far more than that, and this is the difference between a hobby script and a product.

  • OAuth. createOAuthURL(), getOAuthToken() and removeOAuthAccess() mean a stranger can click “connect my Crown” in your app and grant it access to their own device, without ever handing you their password. This is the whole foundation of a multi-user product.

  • API keys. createApiKey() gives you headless, server-side authentication for anything that runs without a browser.

  • Custom tokens. createCustomToken() issues a JWT so you can bridge your own existing user accounts to Neurosity identities.

  • Device management. addDevice(), removeDevice() and transferDevice() let you handle onboarding and handover in your own interface rather than sending people off to Neurosity’s.

Why this matters more than the data APIs

Every idea in the audit becomes shippable the moment you can onboard someone who is not you. OAuth is the single most consequential thing in the SDK for anyone thinking about a product, and it is buried at the bottom of the reference docs.

Developing without a headset on your head

Nobody debugs for eight hours wearing an EEG band. And some of the states you most need to test, a lifted electrode, a dying battery, a dropped connection, are miserable to reproduce deliberately. There are four ways around this, and most serious projects end up using three of them.

OptionRealismBest for
The hosted online demoSyntheticDeciding whether to bother at all
Device EmulatorSynthetic, full OSCI, demos, scripted device states
notion-osc-serverSynthetic, OSC onlyAnything on the local path
Recorded sessionsRealEverything that has to be right
1. The hosted online demo

Neurosity runs a hosted simulator that anyone can try without owning a Crown. You request access and login details arrive by email. It gives you the Console with live simulated brainwaves and focus metrics, walkthroughs of the neurofeedback and focus-session flows, and, the part that matters here, a live environment to exercise the JavaScript and Python SDKs against.

If you are still deciding whether the Crown is worth building on, start here. No usage limits are published, so treat it as an evaluation tool rather than a development dependency.

2. Device Emulators

Emulators are created from console.neurosity.co/emulators. Neurosity describes an emulator as a private virtual EEG machine running the actual Neurosity operating system, not a data faker bolted onto the SDK, but the real OS with synthetic sensors underneath. That distinction matters, because it means the surface your code talks to is the same one it will meet in production.

What an emulator gives you:

  • Raw, PSD and power-band brainwaves

  • Awareness metrics, calm and focus

  • EEG recording exported as EDF, JSON or CSV

  • Device info, status and settings, so your settings UI is testable

  • Timesync and event markers

  • Activity logs

The SDK also exposes setEmulatorStatus(), which is the quietly valuable bit: you can script device states. Battery at 3%. Charging. Asleep. Connection lost mid-stream. These are exactly the paths that ship broken, because on real hardware you can only test them by waiting for them.

Worth it when you have continuous integration to run, a demo to give without a headset on stage, or an onboarding flow that needs testing dozens of times a day. Not worth it if you’re one person building one thing, record a real session instead.

3. notion-osc-server: enough for the local path

An open-source Node simulator of the OSC server that runs on the device itself. Neurosity built it specifically to validate BrainFlow and neuromore Studio integration, which tells you exactly what it’s good for.

Clone it, npm install, npm start. A .env file overrides the device UUID, model name and version, sampling rate, channel count and channel names, and the OSC host and local/remote ports. The channel defaults are the Crown’s own, CP3, C3, F5, PO3, PO4, F6, C4, CP4, so what you build against lines up with your real hardware.

If your project lives on OSC, this covers you completely.

4. Record once, replay forever

The most underrated option, because it is the only one that produces real data. record({ label, duration }) captures a session; it saves to the device first, then uploads to cloud storage with metadata in Firestore. If the network is down at the time, the device uploads when it comes back, so a recording made on a train is not lost.

Synthetic data is clean. Real EEG is not, and almost every bug you will ship is in the handling of the mess. Which is why the fixture set matters more than the mechanism:

What to record before you write the real code
RecordingWhy you need it
Eyes closed, 60sYour end-to-end sanity check. Closing your eyes produces a large, unmistakable jump in alpha power. It is the oldest reliable result in EEG. If your pipeline can’t see that jump, your pipeline is broken, and you’ll know it in one test rather than three weeks.
Eyes open baseline, 60sThe control the above is measured against. Same posture, same room, same time of day.
Deliberately bad contactWear the band loose, or lift one electrode. This is the fixture your signal-quality gate is built against, and there is no other honest way to get it.
Blink, chew, nod, walkMuscle and movement artifacts are enormous compared to brain signal and they dominate real recordings. Record them on purpose so you can prove your filtering survives them.
A real focus session, 25 minActual work, not simulated work. Focus scores over a genuine Pomodoro look nothing like a synthetic ramp.
A genuinely distracted sessionYour negative case. Without it you cannot tell whether your product detects focus or just detects “headset is on.”
Battery low / charging / disconnectEasier to script with setEmulatorStatus() than to reproduce, the one place an emulator earns itself.

The workflow most projects converge on

The demo to evaluate → record a real fixture set on your own head over one afternoon → develop and test against those recordings → add an emulator only when you have CI or demos that need one. The recordings stay useful forever; the emulator is the part you can turn off.

Choosing your route

Five questions, asked in this order, land you on one of six routes. The order matters, the constraints near the top are the ones you cannot engineer around later.

Ask the questions top to bottom. Each one is a constraint you can’t retrofit, you cannot bolt multi-user auth onto an OSC project, and you cannot make a cloud stream millisecond-accurate after the fact. The last box is the default, not a failure: if nothing above forced your hand, BrainFlow gives you filtering for free and portability to other hardware.

The same six routes, scored

When more than one door would work, this is what you’re trading.

RouteSetupOff your Wi-FiOther usersFidelitySurvives a Neurosity outage
SDKModerate, auth, installYesYes, via OAuthAll altitudesNo
MCPTrivial, paste a URLYesPer-accountInterpretedNo
WebSocketsModerateYesYou build itAll altitudesNo
OSCTrivial, flip a toggleNoNoPerform or rawYes
LSLModerateNoNoRaw, timestampedYes
BrainFlowEasy, one libraryNoNoRaw + filtersYes
Your first thirty minutes, by route
RouteWhat to actually do first
MCPAdd https://mcp.neurosity.co as a connector in Claude or ChatGPT. Ask it what your focus has been. Nothing to install.
OSCTurn on OSC and OSC Perform Mode in your Console. Open any OSC monitor listening on UDP 9000. Confirm messages arrive before you open TouchDesigner, that isolates the network problem from the patch problem.
BrainFlowpip install brainflow, then BoardShim(BoardIds.CROWN_BOARD, params). If nothing arrives, it is your firewall, BrainFlow’s own docs warn that broadcast is commonly blocked.
LSLFlip the LSL toggle in the Console, then open LabRecorder and check the Crown appears as a discoverable stream. Discovery working is the whole first milestone.
SDKInstall the JS SDK, not Python, which is still beta. Log in, subscribe to signalQuality() first rather than focus(). You’ll learn more in five minutes about whether your headset is seated than from any focus number.
WebSocketsOnly worth it if pulling in the SDK is genuinely a problem. Start with the SDK and drop down later if you must.
Four ways people pick wrong
  • Choosing OSC because the tutorial used it. Most Crown tutorials are creative-coding demos, so OSC looks like the default path. Then you try to give the thing to a friend and discover it only works in your flat. Decide the multi-user question before you write anything.

  • Reaching for raw EEG when Perform Mode would do. Raw is 256 Hz across eight channels and you will spend a week on filtering before you see anything. If a human is going to look at the output, Perform Mode’s 4 Hz smoothed metrics are almost certainly what you actually wanted.

  • Building the UI before the signal-quality gate. The demo looks great on your own well-seated headset and falls apart on someone else’s. Subscribe to signalQuality() first and make “I can’t read you right now” a first-class state.

  • Starting with the Python SDK. It is still marked beta. Prototype in JavaScript, port later if you need Python’s analysis ecosystem, or reach it through BrainFlow instead.

You are allowed to use more than one

These routes are not exclusive, and the good projects mix them. A common shape: Perform Mode over the SDK drives everything the user sees, while record() captures raw sessions in the background for later analysis, cheap live loop, full fidelity when you need to look properly. Another: prototype on OSC because it’s a single toggle and instant feedback, then rebuild on the SDK once you know the idea works and you want to ship it.

The catches, stated plainly

  • OSC and LSL need the same Wi-Fi. They rely on network broadcast, and firewalls and campus networks routinely block it, BrainFlow’s own docs warn about exactly this. Fine for your studio; unusable as consumer onboarding.

  • The cloud path depends on Neurosity staying in business. OSC and LSL keep working locally if the servers go dark. The SDK and MCP do not. Worth an hour of thought before you commit.

  • Focus and calm are relative, not absolute. They’re probabilities, and your own baseline drifts with headset fit, hydration and time of day. Comparing your score to someone else’s is meaningless without a normalisation layer nobody has built yet.

  • Kinesis is experimental. Neurosity says so themselves, lag and accuracy are open problems. Don’t put it on the critical path of anything.

  • Your electrode coverage has gaps. Eight channels at CP3, C3, F5, PO3, PO4, F6, C4, CP4, frontal, central, parieto-occipital. Strong for attention and alpha; no temporal or true prefrontal sites, which limits emotion and drowsiness work.

  • The Python SDK is still marked beta. JavaScript is the mature path.

Sources. The Neurosity SDK reference for every method named on this page, the OSC and haptics documentation, and the emulator documentation. Device figures were read live from the Neurosity connector.

Capability map · Crown 3 · companion to the Crown Ecosystem Audit

Explore more

This site covers what the documentation doesn't: the things I wish someone had handed me first.