> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mentraglass.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Camera Glasses

> Understand camera-equipped glasses such as Mentra Live

Camera glasses have cameras for photo and video capture, but may not have displays. Mentra Live is the primary example.

## Mentra Live

* **Camera**: 1080p with streaming
* **Display**: No
* **Microphone**: Yes (with VAD)
* **Speaker**: Yes
* **Buttons**: Yes (press, double press, long press)
* **LEDs**: RGB + white privacy light
* **WiFi**: Yes

```typescript theme={null}
// Mentra Live capabilities
{
  modelName: "Mentra Live",
  hasCamera: true,
  hasDisplay: false,
  hasMicrophone: true,
  hasSpeaker: true,
  hasButton: true,
  hasLight: true,
  hasWifi: true
}
```

## Building for Camera Glasses

Use capabilities to detect camera-equipped hardware and adapt the rest of your app experience.

```typescript theme={null}
protected async onSession(session: AppSession, sessionId: string, userId: string) {
  const caps = session.capabilities;

  if (!caps?.hasCamera) {
    session.logger.warn('No camera available');
    return;
  }

  const camera = caps.camera;
  if (camera) {
    session.logger.info('Resolution:', camera.resolution);
    session.logger.info('Can stream:', camera.video.canStream);
    session.logger.info('Can record:', camera.video.canRecord);
  }
}
```

Camera capture, photo upload, and camera streaming are documented in the standalone Mentra Bluetooth SDK docs.

<Card title="Camera And Streaming" icon="camera" href="https://bluetooth-sdk-docs.mentra.glass/camera-streaming/">
  Request photos and start camera streams from supported smart glasses.
</Card>

## Audio-First Interactions

Without displays, use voice, buttons, and LEDs for feedback.

```typescript theme={null}
protected async onSession(session: AppSession, sessionId: string, userId: string) {
  await session.audio.speak('Ready');

  session.events.onTranscription(async (data) => {
    if (!data.isFinal) return;
    await this.handleCommand(data.text);
  });

  session.events.onButtonPress(async (data) => {
    if (data.button === 'select') {
      await session.audio.speak('Button pressed');
    }
  });
}
```

## WiFi Connectivity

```typescript theme={null}
if (caps.hasWifi) {
  session.logger.info('Device has WiFi');
}
```

## Best Practices

* Provide clear audio feedback because camera glasses may not have displays.
* Use button shortcuts for quick actions.
* Use LEDs for brief status indicators when available.
* Always check capabilities before enabling hardware-specific flows.

## Next Steps

<CardGroup cols={2}>
  <Card title="Display Glasses" icon="display" href="/app-devs/core-concepts/hardware-capabilities/display-glasses">
    G1, Vuzix - display features
  </Card>

  <Card title="Bluetooth SDK Camera Docs" icon="bluetooth" href="https://bluetooth-sdk-docs.mentra.glass/camera-streaming/">
    Camera, photo, and streaming docs
  </Card>

  <Card title="Audio" icon="volume" href="/app-devs/core-concepts/speakers/text-to-speech">
    Audio features
  </Card>

  <Card title="Overview" icon="microchip" href="/app-devs/core-concepts/hardware-capabilities/overview">
    Back to overview
  </Card>
</CardGroup>
