Skip to main content

Overview

FERAL ingests first-person camera frames over HUP and feeds them to the vision pipeline for scene analysis and conversational context.

What ships today

FERAL does not ship a driver for any glasses vendor. What it ships is the receiving half: any node that can send a glasses_frame over HUP becomes a first-person camera for the brain.
Earlier versions of this page listed Meta Ray-Ban, Vuzix Blade 2 and a “FERAL Glasses (reference)” device as supported, and documented a hardware.glasses settings block with ar_overlay, stream_resolution and stream_fps. None of that existed. No code in this repository implements any of those vendors or reads any of those settings keys. The table above is what the code actually does.

Connecting glasses

Because the brain accepts frames rather than driving hardware, the integration point is a node, not a FERAL-side driver. Write (or use) a node that owns the Bluetooth or Wi-Fi connection to the glasses and forwards frames as glasses_frame messages. The node SDKs (feral-nodes/python-node-sdk, ts-node-sdk, Swift, Kotlin) all speak the envelope. The practical path today is a phone: the companion app already holds the BLE connection to a wearable and is already a registered node, so it forwards frames without any new transport work.

Connection Setup

1

Register a node that sends frames

There is no hardware.glasses settings block — the brain reads no such keys. A node registers over HUP like any other, declaring a camera capability, and then sends glasses_frame messages. See the node SDK README for the registration handshake.
2

Pair the glasses

Put your glasses in pairing mode (varies by device), then list paired devices and complete pairing through the WebUI or the device-pair API:
The WebUI’s Settings → Devices screen renders the same registry with a “Pair” button per advertised device.
3

Start the video stream

The video stream starts automatically once paired. Verify:

Video Streaming Protocol

Frames reach the vision pipeline as discrete HUP messages, not as a video stream the brain connects to:
The brain never opens a stream. It receives whatever the node chooses to send, so resolution, frame rate and codec are the node’s decisions, not FERAL settings.
This section previously documented stream_resolution, stream_fps, codec and vision_interval as configurable settings. The brain reads none of those keys — they exist in no source file. Set the capture rate in the node that owns the camera.

Scene Analysis Pipeline

The brain processes video frames through a multi-stage pipeline:
1

Frame capture

Frames are sampled at the configured vision_interval (default: every 2 seconds).
2

Object detection

Local YOLO model identifies objects, people, and text in the scene.
3

Scene description

The vision LLM generates a natural-language description of the current scene.
4

Context injection

The scene description is added to the brain’s context window, available for queries and proactive reasoning.
Example scene context:

AR Overlay Commands

Send visual overlays to the glasses display:

Hands-Free Voice

With glasses connected, FERAL’s voice pipeline uses the glasses microphone and speaker:
  • Wake word detection runs on-device (glasses)
  • Audio streams to the brain for processing
  • Responses play through the glasses speaker or bone conduction

Privacy Controls

settings.json
When store_frames is true, video frames are saved locally for memory recall. This uses significant disk space (~2 GB/day at 720p). Frames never leave your machine.

Troubleshooting

Frames arrive as HUP glasses_frame messages from a registered node, so check the node first: is it connected to /v1/node, did node_register succeed, and is it actually sending? A node that connects but never sends looks identical to glasses that are off.
Lower the capture rate in the node — the brain has no frame-rate setting. If the vision model is a cloud one, latency also tracks your connection; a local model removes that leg.
FERAL has no AR overlay feature. Nothing in the brain renders to a glasses display, and there is no ar_overlay setting. Drawing on the lens is the node’s and the vendor SDK’s job.