Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save madebyollin/b24f76ed8e54dc22975e4869a0fdaf5d to your computer and use it in GitHub Desktop.

Select an option

Save madebyollin/b24f76ed8e54dc22975e4869a0fdaf5d to your computer and use it in GitHub Desktop.
Claude's Mentra Live Hardware Notes

Claude's Mentra Live Hardware Notes

Verified 2026-03-03, firmware asg-client v34.0 (build date 2026-02-04).

ADB

Both USB and WiFi ADB work. Mentra's own blog notes the charging cable "also works as a USB cable so developers are free to access, modify, and replace Mentra Live's software" (https://mentraglass.com/blogs/blog/making-mentra-live).

adb devices -l
# 0123456789ABCDEF  device  product:MentraLive  model:Mentra_Live

adb connect <GLASSES_IP>:5555  # WiFi also works; IP visible in companion app

0123456789ABCDEF is a common factory-default serial on MediaTek hardware (not specific to this unit). Your device may show the same or a different value.

OS / SoC

adb shell getprop ro.build.version.release   # 11
adb shell getprop ro.build.version.sdk       # 30
adb shell getprop ro.build.date              # Wed Feb  4 22:03:12 CST 2026
adb shell getprop ro.product.board           # k61v1_64_bsp
adb shell getprop ro.product.cpu.abi         # arm64-v8a
adb shell getprop ro.build.tags              # test-keys

The official Mentra spec sheet (https://mentraglass.myshopify.com/pages/live) lists the chipset as MTK8766. The board string from getprop says k61v1_64_bsp, which is a MediaTek BSP name. Whether these refer to the same die is unresolved — BSP names don't always match marketing chip names.

test-keys means the ROM was signed with non-production keys. ADB being accessible at all confirms USB debugging is enabled as shipped, which is what actually allows sideloading.

RAM and storage:

adb shell cat /proc/meminfo | head -3
# MemTotal:  2003020 kB

adb shell df -h /data
# /dev/block/dm-12  24G  328M  23G  2%  /data

Camera

adb shell dumpsys media.camera

One camera, back-facing, HAL 3.6. Key fields from the metadata dump:

android.lens.facing:                         BACK
android.lens.info.availableApertures:        [2.8]
android.lens.info.availableFocalLengths:     [3.3]
android.lens.info.availableOpticalStabilization: [0]   # no OIS
android.scaler.availableMaxDigitalZoom:      [4.0]
android.flash.info.available:                TRUE
android.control.aeAvailableTargetFpsRanges:  [15,15] [20,20] [5,30] [30,30]

Supported output formats: JPEG (33), YUV_420_888 (35), RAW_SENSOR (34).

Max fps per resolution (from availableMinFrameDurations, YUV_420_888 only):

Resolution Max fps
4032×3024 10
3840×2160 20
1920×1080 30
≤ 1920×1440 30

Parse the full table yourself:

adb shell dumpsys media.camera 2>&1 | python3 -c "
import sys, re
lines = sys.stdin.read()
sec = lines[lines.find('availableMinFrameDurations'):]
sec = sec[:sec.find('availableStallDurations')]
for fmt, w, h, dur in re.findall(r'\[(\d+)\s+(\d+)\s*\]\s*\[(\d+)\s+(\d+)\s*\]', sec):
    if fmt == '35':
        print(f'{w}x{h}: {1e9/int(dur):.0f} fps')
"

IMU

adb shell dumpsys sensorservice

4 hardware sensors, no magnetometer:

Sensor Type string Min Hz Max Hz FIFO
ACCELEROMETER android.sensor.accelerometer 50 200 4500 events
GYROSCOPE android.sensor.gyroscope 10 400 4500 events
UNCALI_GYRO android.sensor.gyroscope_uncalibrated 10 400
DEVICE_ORIENTATION android.sensor.device_orientation on-change

Software-fused (AOSP, not hardware): Game Rotation Vector, Gravity, Linear Acceleration.

The sensorservice dump includes recent events with timestamps. On this device, gyro events arrive at ~5 ms intervals (~200 Hz) and accel at ~20 ms (~50 Hz) at the default idle rate:

GYROSCOPE: last 10 events
  (ts=81.390s) -0.00, 0.00, 0.02
  (ts=81.395s) -0.00, 0.01, 0.02
  ...
ACCELEROMETER: last 50 events
  (ts=80.515s) 6.30, 0.72, -7.64
  (ts=80.535s) 6.19, 0.87, -7.52
  ...

Timestamp synchronization: IMU events use CLOCK_BOOTTIME (seconds since boot, confirmed from the values above). Android Camera2 SENSOR_TIMESTAMP also uses CLOCK_BOOTTIME on SDK ≥ 24 (docs). This device is SDK 30, so camera and IMU timestamps share a clock. Not independently verified by comparing a simultaneous camera+IMU capture — relying on the documented Android guarantee.

Audio

adb shell cat /proc/asound/cards
# 0 [mtsndcard]: mt-snd-card

adb shell cat /proc/asound/devices
# multiple capture PCM devices listed (indices 3, 5, 7, 10, 12, ...)

The dumpsys audio recording log shows asg_client using src:MIC:

adb shell dumpsys audio 2>&1 | grep "rec update\|rec stop"
# 20:32:06 rec update riid:87 uid:10058 src:MIC pack:com.mentra.asg_client
# 20:32:09 rec stop  riid:87 uid:10058 src:MIC pack:com.mentra.asg_client

Standard AudioRecord with MIC source should work in a sideloaded app; not independently tested beyond confirming the system app uses it successfully.

Storage layout

adb shell ls /sdcard/
# DCIM  Documents  asg  lv  mentra_crash_logs  ...

adb shell cat /sdcard/asg/metadata.json
# {"versionCode":34,"versionName":"34.0",
#  "apkUrl":"https://github.com/Mentra-Community/MentraOS/releases/download/asg-client/asg-client-34.apk",
#  "sha256":"86368379502e34cae75e8453773ffa903977a1419d424b3adc0addd0a859b3ff"}

/sdcard/lv/ contains OTA logs with timestamps of each update step.

ASG client

adb shell dumpsys package com.mentra.asg_client | grep -E "versionName|flags|codePath"
# versionName=34.0
# flags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA UPDATED_SYSTEM_APP ALLOW_BACKUP ]
# codePath=/data/app/.../com.mentra.asg_client-.../

adb shell dumpsys package com.mentra.asg_client | grep -E "camera|CAMERA"
# androidx.camera.extensions.impl
# android.permission.CAMERA
# android.permission.FOREGROUND_SERVICE_CAMERA
# android.permission.CAMERA_BACKGROUND

UPDATED_SYSTEM_APP means it ships as a system app but is updated via OTA into /data/app. It uses CameraX. A sideloaded app declaring the same camera permissions should be able to open the camera when asg_client is not actively using it — standard Android camera exclusivity applies, but this has not been tested.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment