← All projects
PROJECT #97

Brain Desk - An EEG Headband, a Digital Human and a Local Voice

A Muse EEG headband, my phone camera and a set of models running on my own PC, driving a digital human that sees, listens and answers aloud. The headband data never leaves the machine.

The demos

The first two clips are the same idea reached through two different sensors. A headband, then a camera, each one driving the same character in Unreal. The third is not about control at all. There the camera is being used as eyes rather than as a controller, and the question is whether the app understands what it is looking at.

One: the headband driving the avatar

The Muse band as the input. Blinks, jaw clenches, head movement and the focus estimate move the MetaHuman in Unreal. The panel on the right is the live stream coming off my head: four EEG channels, the eye signal from the two frontal sensors, the head accelerometer and gyroscope, and the muscle traces for jaw and brow. Every detection is logged as it is sent, so a blink shows up as a matching deflection on both frontal sensors and reaches the character over Live Link a moment later.

What it is

One installable web app for Chrome on my Windows PC and my Android phone, plus a small Python helper on the PC. The headband talks to the browser directly over Web Bluetooth. Sessions are stored on the device and sync to the PC when the helper is reachable.

Every number it shows is an estimate from a consumer headband. It is not a medical device, and the app says so on its own front page.

What the headband gives it

A short guided calibration sets the thresholds: eight firm blinks over eighteen seconds, then five jaw clenches over sixteen. The thresholds are saved per headband, and if a step does not separate cleanly the app says so and keeps a safe default for that part rather than pretending it worked. Each second of a session records the estimates, the contact quality, mains pickup, movement from the accelerometer and gyroscope, heart rate, and the blink and clench counts.

Those detections also become hands free control of the PC: a double jaw clench presses Enter, a triple blink switches window, eyes closed for three seconds fires once. The patterns are the confirmation, so one blink or one clench never does anything, and a double clench has to be two short clenches inside a tight window so that chewing or talking does not count. Gestures are ignored when contact is poor, during calibration, and for a moment after the previous action. The whole feature is off every time the helper starts and can only be switched on by a hotkey on the PC itself, never from the phone.

The digital human

The helper turns whatever is driving the avatar into a Live Link Face stream, the same format a phone face tracking app produces: fifty two face shapes plus head and eye angles, sent sixty times a second to Unreal Engine 5.8, where a MetaHuman receives it as though it were a phone. Arms, hands and fingers travel as a second stream with their own weight, so they blend over the character's own pose and fade out when the camera stops. The same expressions also drive a VRoid avatar in the browser and in Blender.

When my face is in the camera the eyes and blinks come from the camera; otherwise they come from the headband. The camera adds what the headband cannot see: face shapes, gaze, head angle, both hands as skeletons, and each finger.

What leaves the machine

The models, the voice and the avatar all run on my own hardware, and the headband data stays on my devices. There is one cloud option in the app, a vision switch that sends a photograph to a hosted model. It is off by default, needs an API key present on the PC, and falls back to the local models on any error. It never has access to the headband data.

Tech Stack

Muse EEG Web Bluetooth Python Unreal Engine 5.8 MetaHuman Live Link Face MediaPipe Ollama Chatterbox Rhubarb Blender VRM
Devices and Control → More projects
Access full source code & live demo
This project's overview, tech stack, and demo are open. For full source code access, live walkthrough, licensing, collaboration, or custom builds, please get in touch: [email protected]