# cobyalmond/lumos-litra architecture

> Architecture diagram of the GitHub repository cobyalmond/lumos-litra, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/cobyalmond/lumos-litra
- Repository: https://github.com/cobyalmond/lumos-litra

## Overview

Lumos-Litra is a macOS menu-bar utility for controlling one or more Logitech Litra lights. The user adjusts power, brightness, temperature, and sync options in the menu; LitraManager coordinates device discovery, USB commands, hardware-button sync, camera-triggered power, and circadian temperature. The README also documents launch-at-login support. Relationships below use the excerpts and README; some discovery, location, and manager details are only partially sampled.

Main entry points: [`LumosLitra/LitraManager.swift`](https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/LitraManager.swift) (Light manager), [`LumosLitra/MenuBarView.swift`](https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/MenuBarView.swift) (Light controls), [`LumosLitra/LitraHIDMonitor.swift`](https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/LitraHIDMonitor.swift) (Button report monitor), [`LumosLitra/LumosLitraApp.swift`](https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/LumosLitraApp.swift) (Menu bar app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App interface"]
  node_appentry["Menu bar app"]
  node_menu["Light controls<br/>[MenuBarView.swift]"]
end

subgraph group_coord["Light coordination"]
  node_manager["Light manager<br/>[LitraManager.swift]"]
end

subgraph group_device["Device access"]
  node_device["Litra USB device<br/>[LitraDevice.swift]"]
  node_hid["Button report monitor"]
end

subgraph group_automation["Automatic sync"]
  node_camera["Camera monitor"]
  node_sun["Solar calculations<br/>[SunPosition.swift]"]
  node_location["Location services"]
end

node_user(("Mac user"))
node_usb["Litra lights"]
node_cameras["System cameras"]
node_login["Login service"]

node_user -->|"uses controls"| node_menu
node_appentry -->|"presents"| node_menu
node_appentry -->|"creates"| node_manager
node_menu -->|"sets controls"| node_manager
node_menu -->|"registers launch"| node_login
node_manager -->|"sends commands"| node_device
node_device -->|"controls via USB"| node_usb
node_manager -->|"starts monitor"| node_hid
node_hid -->|"forwards reports"| node_manager
node_hid -->|"listens for buttons"| node_usb
node_manager -->|"starts and stops"| node_camera
node_camera -->|"observes activity"| node_cameras
node_manager -->|"calculates temperature"| node_sun
node_manager -->|"requests coordinates"| node_location

click node_appentry "https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/LumosLitraApp.swift"
click node_menu "https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/MenuBarView.swift"
click node_manager "https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/LitraManager.swift"
click node_device "https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/LitraDevice.swift"
click node_hid "https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/LitraHIDMonitor.swift"
click node_camera "https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/CameraMonitor.swift"
click node_sun "https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/SunPosition.swift"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_appentry,node_menu,node_user toneBlue
class node_manager toneAmber
class node_device,node_hid toneMint
class node_camera,node_sun,node_location toneRose
class node_usb,node_cameras,node_login toneIndigo
```

## Components

### App interface

- [Menu bar app](https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/LumosLitraApp.swift): `LumosLitra/LumosLitraApp.swift`
- [Light controls](https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/MenuBarView.swift): `LumosLitra/MenuBarView.swift`

### Light coordination

- [Light manager](https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/LitraManager.swift): `LumosLitra/LitraManager.swift`

### Device access

- [Litra USB device](https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/LitraDevice.swift): `LumosLitra/LitraDevice.swift`
- [Button report monitor](https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/LitraHIDMonitor.swift): `LumosLitra/LitraHIDMonitor.swift`

### Automatic sync

- [Camera monitor](https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/CameraMonitor.swift): `LumosLitra/CameraMonitor.swift`
- [Solar calculations](https://github.com/cobyalmond/lumos-litra/blob/main/LumosLitra/SunPosition.swift): `LumosLitra/SunPosition.swift`
- **Location services**

### Other components

- **Mac user**
- **Litra lights**
- **System cameras**
- **Login service**

## Connections

- Mac user → Light controls: uses controls (evidence: `LumosLitra/MenuBarView.swift`)
- Menu bar app → Light controls: presents (evidence: `LumosLitra/LumosLitraApp.swift`)
- Menu bar app → Light manager: creates (evidence: `LumosLitra/LumosLitraApp.swift`)
- Light controls → Light manager: sets controls (evidence: `LumosLitra/MenuBarView.swift`)
- Light controls → Login service: registers launch (evidence: `LumosLitra/MenuBarView.swift`)
- Light manager → Litra USB device: sends commands (evidence: `LumosLitra/LitraManager.swift`)
- Litra USB device → Litra lights: controls via USB (evidence: `LumosLitra/LitraDevice.swift`)
- Light manager → Button report monitor: starts monitor (evidence: `LumosLitra/LitraManager.swift`)
- Button report monitor → Light manager: forwards reports (evidence: `LumosLitra/LitraHIDMonitor.swift`)
- Button report monitor → Litra lights: listens for buttons (evidence: `LumosLitra/LitraHIDMonitor.swift`)
- Light manager → Camera monitor: starts and stops (evidence: `LumosLitra/LitraManager.swift`)
- Camera monitor → System cameras: observes activity (evidence: `LumosLitra/CameraMonitor.swift`)
- Light manager → Solar calculations: calculates temperature (evidence: `LumosLitra/LitraManager.swift`)
- Light manager → Location services: requests coordinates (evidence: `LumosLitra/LitraManager.swift`)
