An open-source research platform for local-first visual assistance, connecting lightweight first-person sensing with multimodal inference on a nearby laptop or edge host.
中文 · Quick Start · Hardware Guide · ACL 2026 Paper · Safety & Privacy · Roadmap
OpenSQZ Glass 3D-printed frame and sensing hardware.
Important: The large model does not run on the ESP32 glasses. OpenSQZ Glass uses a sensing-computing split: the wearable captures first-person image and audio streams, while a nearby user-controlled computer performs local inference and speech generation.
Research boundary: OpenSQZ Glass is a research prototype. It is not a certified navigation aid, medical device, safety-critical system, or production-ready skill platform.
- [2026.08.04] 📢📢📢 We introduce OpenSQZ Glass as the umbrella project for our sensing hardware, local multimodal runtimes, and related research tracks. Explore the project map.
- [2026.08.03] 🥳🥳🥳 We integrated the experimental OmniRuntime, including the control panel, ESP32 bridge, prompt switching, and local session recording/replay tools. Try it now!
- [2026.07.22] 🔥🔥🔥 We open-source the complete first hardware release: an editable STEP frame, 3MF print plate, sanitized BOM, project images, and a bilingual build guide. Try it out!
- [2026.07.21] ⭐️⭐️⭐️ OpenSQZ Glass was demonstrated at WAIC 2026 and featured by InfoQ in OpenSQZ Glass: Bringing End-Side Full-Duplex Omnimodal Models into the First-Person Wearable World.
- [2026.07.20] 🚀🚀🚀 Our 3D-printed wearable hardware demo, OmniGlass-Edge, was accepted to UbiComp/ISWC 2026 Posters & Demos! See the open hardware guide.
- [2026.07] 📄📄📄 Our ACL 2026 System Demonstration paper, OpenGlass: A Sensing-Computing Split Architecture for Local MLLM-Driven Real-Time Visual Assistance, is now available in the ACL Anthology. Read the paper.
- [2026.04.26] 🎉🎉🎉 Our OpenGlass sensing-computing split system, one research track within the broader OpenSQZ Glass project, was accepted to the ACL 2026 System Demonstrations track!
- [2026.03.03] 🔥🔥🔥 The OpenGlass repository is officially released with ESP32 sensing firmware and evaluation scripts. Try it out!
OpenSQZ Glass brings several related research directions into one repository without treating them as one finished product. The common idea is simple:
System overview for the UbiComp/ISWC hardware direction, adapted from Figure 1. Network credentials are replaced with a public-safe local-configuration prompt.
| On the glasses | On the nearby host | In this repository |
|---|---|---|
| ESP32-S3 camera and PDM microphone capture first-person context | A laptop or edge host runs ASR/VLM/TTS or MiniCPM-o locally | Firmware, host bridges, evaluation tools, experimental runtime, session replay, and hardware documentation |
The sensing device, model backend, and publication track are independent axes. An ESP32 is a device, MiniCPM-V and MiniCPM-o are model paths, and ACL or UbiComp/ISWC identifies a research snapshot rather than a separate product fork.
flowchart LR
subgraph D["Wearable sensing"]
ESP["ESP32-S3 glasses\ncamera + microphone"]
ROKID["Rokid\nplanned public adapter"]
RAYNEO["RayNeo\nplanned adapter"]
end
ESP --> BRIDGE["OpenSQZ host bridge"]
ROKID -.-> BRIDGE
RAYNEO -.-> BRIDGE
subgraph H["Nearby laptop / edge host"]
BRIDGE --> CORE["Core path\nMiniCPM-V 4.5\nmodular ASR / VLM / TTS"]
BRIDGE --> OMNI["Omni path\nMiniCPM-o 4.5\nllama.cpp-omni"]
CORE --> OUT["Local speech output"]
OMNI --> OUT
BRIDGE --> SESSION["Local logs and replay"]
end
Solid arrows represent code or artifacts present in the public repository. Dashed device links are planned and must not be interpreted as released support.
| Research direction | Device | Model/backend | Scope | Maturity |
|---|---|---|---|---|
| ACL 2026 / OpenGlass-Core | ESP32-S3 glasses | MiniCPM-V 4.5, modular ASR/VLM/TTS | Sensing-computing split, local visual assistance, evaluation and latency artifacts | Published research baseline; reproduction artifacts available |
| UbiComp/ISWC Hardware | OpenSQZ 3D-printed ESP32 frame | Backend-independent | CAD, print plate, BOM, module placement, assembly and validation documentation | Public draft; several hardware facts still require verification |
| OmniRuntime / ESP32 | ESP32-S3 glasses | MiniCPM-o 4.5 + llama.cpp-omni |
Control panel, live multimodal bridge, prompt switching, recording and replay | Experimental; observed on the maintainer setup, clean-machine validation pending |
| OmniRuntime / Rokid | Rokid glasses | MiniCPM-o 4.5 | APK-to-host bridge and shared runtime | Planned public integration; required bridge/APK source is not in the current public tree |
| Future device adapters | RayNeo and other glasses | To be selected | Additional device-specific transport adapters | Planned; no public implementation yet |
Current development default: MiniCPM-o 4.5 is the default experimental runtime path. The ACL 2026 system is a distinct, reproducible research snapshot built around MiniCPM-V 4.5; it is one part of OpenSQZ Glass, not the identity of the whole project.
| Device family | Public artifacts | Current status |
|---|---|---|
| ESP32-S3 prototype | Camera/PDM firmware, device registry format, host bridge, evaluation scripts, CAD/BOM/docs | Primary public sensing path; local Wi-Fi and DHCP configuration required |
| Rokid | Launcher profile and documentation references | Not runnable from a clean public clone because the required bridge source and APK are not currently published |
| RayNeo | No adapter source yet | Reserved as a future device boundary; not currently supported |
The control panel is intended to make repeated runs one-click after a one-time setup. It does not download model weights, clone upstream repositories, compile llama.cpp-omni, or flash the ESP32 for you.
Current clean-clone status: The panel UI starts from the repository root, but the current launcher still reads machine-specific paths from
runtime/openglass_omni/panel.py. The includedruntime.local.jsonloader is not yet connected to that panel. Follow the effective configuration locations below; a code update is still required before this can be called a portable one-click installation.
The currently exercised maintainer path uses:
- Windows 11, Python 3.10, and an activated Conda environment.
- An NVIDIA GPU and CUDA-capable
llama.cpp-omnibuild. - Visual Studio 2022 C++ Build Tools and CMake.
- Arduino IDE with ESP32 board support for firmware flashing.
- MiniCPM-o 4.5 GGUF weights stored outside this repository.
- A local Wi-Fi network shared by the host and ESP32 glasses.
Model weights are not distributed by this repository.
Keep all three repositories independent. Do not copy OpenSQZ Glass files into MiniCPM-o-Demo.
The public launcher follows the current V2 process chain: llama-omni-server -> worker -> gateway -> demo. It targets the maintained master branches of both upstream projects. The three-process V1 chain used for the WAIC demonstration (worker launching llama-server itself) is a historical setup, not the default installation path documented here.
git clone --branch master https://github.com/tc-mb/llama.cpp-omni.git
cd llama.cpp-omni
cmake -B build -DCMAKE_BUILD_TYPE=Release -DGGML_CUDA=ON -DLLAMA_CURL=OFF
cmake --build build --config Release --target llama-omni-server -j
cd ..
git clone --branch master https://github.com/OpenBMB/MiniCPM-o-Demo.git
cd MiniCPM-o-Demo
python -m pip install -r requirements.txt
cd ..
git clone https://github.com/OpenSQZ/OpenGlass.git
cd OpenGlass
python -m pip install -r runtime/openglass_omni/requirements.txtBecause upstream master branches can change, record the exact commit SHAs used for every validated OpenSQZ Glass runtime release. Upstream changes may alter ports, arguments, protocols, TTS behavior, or process ownership.
Place the MiniCPM-o 4.5 GGUF modules in one external directory. The current launcher expects the main model path passed with -m; the vision, audio, TTS, and Token2Wav files must follow the layout required by your checked-out llama.cpp-omni revision.
MiniCPM-o-4_5-gguf/
├── MiniCPM-o-4_5-Q4_K_M.gguf
├── vision/
├── audio/
├── tts/
└── token2wav-gguf/
Follow the upstream llama.cpp-omni prerequisites for exact filenames and downloads.
Create the ignored local device registry:
Copy-Item examples/configs/devices.example.json runtime/openglass_omni/devices.jsonEdit runtime/openglass_omni/devices.json:
{
"devices": [
{
"name": "My-Glasses",
"esp32_host": "YOUR_ESP32_IP",
"esp32_port": 80,
"rotate": 0
}
]
}nameis the ID shown in the panel dropdown.esp32_hostis the DHCP address printed by the ESP32 serial monitor after boot.rotateis clockwise camera rotation:0,90,180, or270.- The local registry is ignored by Git. Never commit private device addresses.
At present, these are the effective settings:
| What to configure | Effective location now | Value |
|---|---|---|
| MiniCPM-o-Demo checkout | panel.py CONFIG["minicpm_demo_dir"] |
Absolute path containing upstream worker.py and gateway.py |
llama-omni-server binary |
panel.py CONFIG["procs"]["llama"] |
Compiled executable under llama.cpp-omni/build |
| Main GGUF model | Same llama command after -m |
Absolute path to the main MiniCPM-o 4.5 GGUF |
| Glasses name/IP/rotation | runtime/openglass_omni/devices.json |
One entry per ESP32 glasses prototype |
| Prompt presets | panel.py CONFIG["presets"] |
Interaction prompts shown by the current panel |
runtime.example.json and prompts.json document the intended local configuration boundary, but the current panel does not consume either file. Copying the runtime example to runtime.local.json does not yet replace the hardcoded panel paths or prompt presets. This is a known integration issue, not a user configuration mistake.
Open CameraWebServer_PDM_Audio/CameraWebServer_PDM_Audio.ino, set YOUR_WIFI_NAME and YOUR_WIFI_PASSWORD, select the correct ESP32-S3 board, and upload the firmware. Open Serial Monitor at 115200 baud and copy the assigned IP into your local devices.json.
The tracked firmware currently contains placeholders. examples/configs/esp32_wifi.example.h is documentation-only and is not yet included by the firmware; a later code change will move credentials into an ignored local header.
Activate the same Python environment used for MiniCPM-o-Demo, then run from the OpenGlass repository root:
python glasses_panel.pySelect ESP32 Glasses, choose the device name, and click Start. The current panel attempts to start:
llama-omni-server :22500
-> worker :22400
-> gateway :8006
-> ESP32 bridge / local view :8080
The chain is ready only when all four process indicators are green and the first-person view is updating. A successful UI launch alone does not prove the model, audio, image, and response path is complete.
- Stop stops only the active device bridge and keeps the shared backend stages available.
- Restart restarts the active bridge with the selected prompt.
- Stop All asks the bridge to finish session recording, then stops gateway, worker, and backend in reverse order.
- Closing the panel normally calls synchronous cleanup before the panel process exits.
- Force-killing the panel, closing the terminal abruptly, or using processes started outside the current panel may leave services running. Check listening ports before restarting.
Get-NetTCPConnection -State Listen -ErrorAction SilentlyContinue |
Where-Object LocalPort -in 22500,22400,8006,8080,18080The hardware track publishes the physical design separately from any model backend:
- AI Glasses Open-Source Report (English)
- Hardware release overview
- Editable STEP source and 3MF print plate
- Sanitized BOM
- Safety and privacy boundary
Available artifacts include an editable STEP file, a 3MF print plate, a sanitized BOM, and approved project images. STL exports, a public wiring diagram, pin map, soldering guide, complete validation results, and the assembly video are not part of the current public release.
OpenGlass/
├── glasses_panel.py # Root entry point for the experimental panel
├── runtime/openglass_omni/ # Panel, ESP32 bridge, recording and replay
├── CameraWebServer_PDM_Audio/ # ESP32-S3 camera + PDM microphone firmware
├── eval_benchmark/ # ACL/Core evaluation and latency scripts
├── hardware/ # CAD, BOM, images and bilingual build report
├── papers/acl2026.md # ACL/Core publication page
├── docs/ # Architecture, quickstart, safety and roadmap
├── examples/configs/ # Sanitized local-configuration templates
└── assets/ # Prototype photos, figures and logos
Upstream model projects and model weights remain external dependencies and are not vendored here.
- A clean-machine end-to-end Omni run has not yet been verified from the current public tree.
- The current panel still contains machine-specific runtime paths instead of consuming
runtime.local.json. - Prompt presets are still embedded in
panel.py; the standaloneprompts.jsonfile is not yet connected. - ESP32 Wi-Fi credentials still require editing the tracked
.ino; the local header template is not wired in yet. - Normal panel close performs cleanup, but abnormal termination can leave child or externally started processes running.
- The public repository does not currently contain the Rokid bridge source or APK.
- RayNeo support is planned but not implemented.
- Long-running Omni sessions, robust barge-in, session restart, and skill injection are active experiments, not solved platform features.
- Hardware battery life, comfort, charging/debug behavior, autofocus behavior, wiring, and final print settings require further verification.
- Model responses can be wrong or delayed. Do not rely on the system for certified navigation or safety-critical decisions.
See the roadmap and release checklist for the remaining work.
The ACL 2026 paper documents the OpenGlass-Core research snapshot. It does not define the full scope of OpenSQZ Glass or the later MiniCPM-o runtime and hardware tracks.
- Title: OpenGlass: A Sensing-Computing Split Architecture for Local MLLM-Driven Real-Time Visual Assistance
- Authors: Mengzhang Li and Yuan Yao
- Venue: ACL 2026 System Demonstrations, pages 829-839
[ACL Anthology] [PDF] [DOI]
@inproceedings{li2026openglass,
title={OpenGlass: A Sensing-Computing Split Architecture for Local MLLM-Driven Real-Time Visual Assistance},
author={Li, Mengzhang and Yao, Yuan},
booktitle={Proceedings of the 64th Annual Meeting of the Association for Computational Linguistics (Volume 3: System Demonstrations)},
pages={829--839},
year={2026}
}OpenSQZ Glass is distributed under the Apache License 2.0.
Issues and focused pull requests are welcome at the OpenSQZ/OpenGlass repository. Before contributing:
- Do not commit Wi-Fi credentials, private IP registries, model weights, personal data, raw private sessions, or absolute local paths.
- Keep MiniCPM-o-Demo and
llama.cpp-omnias independent upstream checkouts rather than copied source trees. - Mark experimental device/backend combinations honestly and avoid production-readiness or certified-safety claims.
- Document the exact upstream branch and commit used for runtime changes.

