Integrations
Browser test workflow
WebSocket server and feedback nodes Supported; Chrome extension Beta. The test needs no special hardware. Named web platforms are examples only, not confirmed integrations.
This page is the recommended first end-to-end test of browser neurofeedback with any device, or none. Finish each phase and its “Validate” list before the next one. You check the browser path from Studio to the extension first, with a generated signal, and then add a real or simulated EEG source. That way you can tell a device problem from a browser-path problem. Background is in Browser neurofeedback, Chrome extension guide and Browser constraints. For a BrainBit device with an OSC bridge on top of these steps, see BrainBit test workflow.
Phase 0: prerequisites
Section titled “Phase 0: prerequisites”| Item | Requirement | Status |
|---|---|---|
| Operating system | Windows 10 or 11 x64 is the recommended platform for this test. The macOS package is universal, built for Intel and Apple silicon. Ubuntu packages are also published. See Setup. | Supported |
| Browser | Google Chrome. Firefox and Safari are Not available. | Beta |
| neuromore Studio | This page describes 1.8.2. The latest public release is 1.7.3, see What changed since 1.7.3. The WebSocket server needs 1.7.0 or newer. Studio closes at startup with an “OUT OF DATE” message if the neuromore cloud reports a newer version than yours, so an older build may not start. | Supported |
| Account | A neuromore account to sign in to Studio, see Editions and licensing. The Signal Generator, the BrainFlow node and the feedback nodes are available to every account. Which windows you get depends on your account. This test uses the Classifier, Session Control and Signal View windows. If one is missing from Windows > Add, contact neuromore. | Supported |
| Extension | The neuromore Chrome extension loaded unpacked, see Chrome extension guide. | Beta |
| EEG hardware | Optional. Step B works without hardware through the BrainFlow Synthetic board. Any device you own can replace it, see Devices. | Depends on device |
Supported means implemented in the code and intended for use.
Validate:
- The extension is listed in
chrome://extensionsand its icon is pinned. - Studio starts.
Phase 1: Studio settings check
Section titled “Phase 1: Studio settings check”- Start neuromore Studio and sign in.
- Open NMStudio > Settings and select Network. On macOS, this menu is inside the Studio window, not in the system menu bar.
- In the group “Websocket Server”, check that “Listen TCP Port” is 4547. The extension always connects to
ws://127.0.0.1:4547, so leave the default. A changed port only applies after a Studio restart.
Validate:
- NMStudio > Settings > Network shows “Listen TCP Port” 4547. If the Websocket Server group is missing, your Studio is older than 1.7.0.
- No other program uses TCP port 4547. Studio shows no warning in its window or its log if the port is busy. To check, close Studio and run
lsof -i :4547on macOS or Linux, ornetstat -ano | findstr 4547on Windows. A line for port 4547 in the state LISTEN or LISTENING means another program holds the port. Close that program, then start Studio again.
Phase 2: classifier
Section titled “Phase 2: classifier”Step A checks the browser path with a generated signal. Step B adds an EEG source and a simple Alpha chain.
Use the Default layout (Windows > Layouts > Default), which has every window this page uses. If you stay on another layout, such as Classifier Designer, add the Session Control window with Windows > Add > Session Control.
A View node’s In port takes one connection. If the port is already connected and you connect something else to it, Studio drops the new connection and shows no message, so the Signal View window keeps showing the old signal. Before you connect a new signal to the View node, always remove the existing connection: click the connection line to select it, then press Delete (Backspace on macOS).
Step A: synthetic signal
Section titled “Step A: synthetic signal”- In the Back-End File System window, select your personal folder and click the plus button (tooltip “Create new file”). Enter a name, choose the type Classifier and confirm. See also Getting Started.
- Double-click the new file to open it in the Classifier window. Until a classifier is open, the palette only shows “Create and activate a Classifier first.”
- From the Input palette tab, add a Signal Generator node: Signal Type Sine, Frequency 0.1, Amplitude 0.5, DC-Offset 0.5. The value then moves slowly between 0 and 1. Do not keep the defaults (Frequency 1, Amplitude 1, DC-Offset 0): they give -1 to 1, which is out of range for the feedback nodes.
- From the Output palette tab, add a Volume Control node and a Brightness Control node. Do not rename them: the extension matches “Volume Control” and “Brightness Control” exactly.
- Connect the Signal Generator output to both feedback nodes.
- From the Output palette tab, add a View node and connect the Signal Generator output to its In port. The Signal View window now shows the value.
- Leave the Volume Control node’s Mode at “Studio Volume”. This also scales Studio’s own audio.
- Save the classifier.
You can run phase 3 with step A alone first.
Step B: real or simulated EEG
Section titled “Step B: real or simulated EEG”Pick one source:
- No hardware: from the Sensors palette tab, add a BrainFlow node. Board ID is Synthetic by default. Click Apply. One port per channel then appears next to the existing “EEG” port, possibly after a moment. The EEG port carries 16 channels at 250 Hz. Status: Supported, see BrainFlow boards.
- Your own device: add its device node instead, for example the OpenBCI node for a Cyton on the native driver (8 channels at 250 Hz). Status: Supported. A driver or device appears only if your account has access to it. Any OSC source can feed OSC Input nodes on UDP 4545 instead. See Devices for setup and status.
With a BrainFlow node, keep these in mind:
- Click Apply again each time you reopen the classifier or restart Studio. A reopened classifier does not connect the board until you do. Until then the node shows “Device not connected” and the Begin Session button stays disabled.
- Ignore a “Battery low.” warning on the node. BrainFlow boards report no battery level in Studio, so the warning says nothing about the real battery.
- If you see the “Search for devices” button in the Devices window, do not press it during the test. It can remove the BrainFlow device, which ends a running session.
Then build the chain:
- From the Utils tab, add a Select Channels node and connect the device’s “EEG” port to it. Set Channels to one electrode, for example C3 on the Synthetic board. Enter an exact channel name or a 1-based index in list order: C3 is 2 and Oz is 7 on the Synthetic board. A name that matches no channel sets the graph error “Channel ‘X’ not found”, which blocks the session start. Only the first channel of a multi-channel input reaches the browser, so pick one channel here.
- Remove any existing connection into the View node’s In port, then connect Select Channels to it. Check that the Signal View window shows a live signal. With a real headset it should react to blinks or jaw clenching.
- Build the chain Select Channels, then FFT (DSP tab), then Frequency Band (DSP tab, set Band to Alpha, 8 to 12 Hz).
- Remove the connection from Select Channels into the View node, then connect the Frequency Band output to the View node. With the default FFT settings at 250 Hz, the first value appears after about 2 seconds. Watch for a minute and note the range of values you see.
- Add a Remap node (Math tab) after Frequency Band. Set Input Min and Input Max to the observed range, keep Output Min 0 and Output Max 1, and enable the “Clamp Output” checkbox (off by default). Only then does Remap limit its output to 0 to 1. Studio does not clamp feedback values.
- Remove the connection from Frequency Band into the View node, then connect the Remap output to the View node. Check that the value moves within 0 to 1.
- Delete the Signal Generator (if present) and connect the Remap output to both feedback nodes, then save the classifier.
Note the Remap range again whenever you change the Studio version. A range noted on one version does not carry over to another.
In 1.7.3: The FFT node defaults to order 7 with no window, so the first band value at 250 Hz appears after about 0.5 seconds and band values can change faster. Band values are also scaled differently.
With the Synthetic board the feedback value moves, but it does not reflect a brain: the board generates data in software. Each channel is a fixed sine tone with random noise, and channel n sits at 5 × n Hz. C3 is 10 Hz, the only channel with a tone inside the Alpha band. Oz is 35 Hz, so only noise lands in the band. Any movement in Alpha is noise, not a brain effect. This step shows that the device-to-browser chain works.
Validate (after each step):
- Step A: the Signal View window shows a slow wave between 0 and 1.
- Step B: the Signal View window shows a live signal from the device or the Synthetic board, and then a Remap value that stays between 0 and 1.
- Neither feedback node shows a “Value not in range” error.
- The classifier is saved without graph errors. Graph errors block the session start, and that includes “Device not connected”, so connect the device or click Apply first. Some accounts are exempt from this check.
Phase 3: browser session
Section titled “Phase 3: browser session”Safety: Feedback can change screen brightness and volume quickly. Avoid this setup if you are sensitive to flashing or flickering light. Keep volume moderate. Stop if you feel uncomfortable. To stop feedback, end the session with the stop button in the Session Control window (tooltip “End the Session”), or click Disconnect in the Chrome extension popup.
Lower your system volume before you start. The extension sets media volume anywhere from 0 to 100% and page brightness down to black, up to 10 times a second, with no smoothing. A narrow Remap range makes the swings larger.
- In Chrome, open a page with a
<video>or<audio>element and start playback. YouTube is an example, not a confirmed integration. - Click the extension icon, then “Connect”. Chrome may ask whether the site can access your local network. Allow it, or the connection fails. If the popup closes at this point, answer the prompt and reopen the popup. If the button already reads “Connected”, do not click it again. Use “Disconnect” only when you want to reconnect. Do not navigate or reload the tab during the test: that drops the connection, and the extension does not reconnect until you click Connect again.
- In Studio, click the Begin Session button in the Session Control window. You can also start the session before you connect, because Studio tells a client that connects later about a running session.
- Watch for about 30 seconds. With the step A signal, loudness and page or video brightness rise and fall together in a 10-second cycle. With step B they follow the Remap output. Whether Chrome applies this on a given page depends on the page and its player.
- Stop the session with the stop button (tooltip “End the Session”). Pause does not stop feedback. If the page’s volume or brightness does not return to normal, reload the page.
Validate:
- The popup shows “Connected”. If it shows an error instead, see Common failures.
- Audible volume follows the classifier value.
- The page or video brightens and darkens with the classifier value.
Phase 4: record outcome
Section titled “Phase 4: record outcome”Note these for every run, including failed ones, and send them to neuromore with Help > Support, which opens an email to neuromore support:
- Studio version (Help > About) and operating system with version.
- Chrome version and extension download date.
- Signal source for step B: Synthetic board, or the device model, connection type and driver.
- Whether steps A and B each worked.
- Which page you tested and whether volume and brightness reacted.
- For failures: the Studio log and error text from the tab’s Chrome developer console. For more log detail, set NMStudio > Settings > General > Log Level to Debug. Each start writes a new file,
Logs/NMStudio_<date>_<time>.txt, in the Studio data folder, see the FAQ. For BrainFlow boards also send brainflow.log, see BrainFlow boards.
In 1.7.3: The log is a single file,
NMStudio_Log.txt, directly in the Studio data folder. Studio overwrites it on every start, so copy it before you restart.
Common failures
Section titled “Common failures”Browser-side symptoms are also covered in the Troubleshooting table of the Chrome extension guide.
| Symptom | Likely cause | What to do |
|---|---|---|
| Popup shows “Could not connect. Check that neuromore Studio is running on port 4547, and that this site is allowed to access your local network.” | Studio not running, the WebSocket port is not 4547, another program holds the port, or the site has no local network permission | Start Studio first. Check phase 1 and restart Studio after a port change. To allow local network access: open the site’s settings from the icon to the left of the address bar, allow Local network access, reload the page, then click Connect again |
| Popup shows “Cannot connect on this page. Open a normal website, reopen the extension, then click Connect.” | The active tab does not allow the extension to run, such as a chrome:// page or the Chrome Web Store |
Open a normal website tab, reopen the extension, then click Connect |
| Connected, but nothing changes | No session running, or a feedback node was renamed | Start the session. Keep the names “Volume Control” and “Brightness Control” |
| Volume stops reacting, or “Value not in range” on a node | Value outside 0 to 1 | Step A: set Amplitude 0.5 and DC-Offset 0.5. Step B: enable “Clamp Output” on Remap |
| Feedback barely moves in step B | The Remap range came from the wrong signal, because the View node still showed an older connection | Remove the connection into the View node, connect Frequency Band, and note the range again |
| Begin Session button stays disabled | A graph error, such as “Device not connected”, “Channel ‘X’ not found” or “Value not in range” | Fix the error shown in the graph. “Value not in range” keeps the button disabled while the value is out of range, and clears once values are back in range |
| BrainFlow node shows “Device not connected” after you reopen the classifier | Apply was not clicked again | Click Apply |
| BrainFlow node keeps only the EEG port and shows “Device not connected” after the first Apply | Connection still in progress, or the board rejected the session, for example wrong serial port. After an earlier successful connection, old channel ports can remain | Wait a moment, then check the Studio log and brainflow.log, see BrainFlow boards |
| Studio’s own audio changes too | Volume Control Mode “Studio Volume” | Expected, see Browser constraints |
| Works on one page, not on a streaming site | Custom player, iframe or DRM video | Report the site |