NTX Embedded customer package — unified Octolux HMI management app, brand guide, skills, and customer projects.

## What's included

### Unified Octolux App (`apps/octolux/`)

Single Node.js server on port 8830 with 7 sections:

- **Dashboard** (`/dashboard/`) — HMI fleet overview: device cards with live snapshots, reset, deploy/stream/VNC/camera quick-launch
- **Projects** (`/projects/`) — customer project picker with framed bezel preview (Mock) and one-click deploy
- **Deploy** (`/deploy/`) — HMI deploy previewer: pixel-accurate device-resolution preview, project selector, device scanner filtered by model, Push to device with orientation control
- **VNC** (`/vnc/`) — interactive remote desktop via CDP: click, scroll, type directly on the device's kiosk browser
- **Screencast** (`/screencast/`) — live display stream via SSE relay (one upstream MJPEG connection, zero polling)
- **Remote** (`/remote/`) — CDP remote view
- **Camera** (`/camera/`) — dual-stream workcell camera viewer with zoom controls, per-stream rotation, and Take Controls

### Camera (`/camera/`)

Live workcell camera viewer with WebRTC WHEP streaming via Cloudflare:

- **Dual-stream layout** — semistatic (9:16 portrait) on the left, zoom (16:9 landscape) on the right
- **Per-stream rotation** — each stream viewport rotates independently in place; semistatic has a 270deg base rotation to correct for portrait-mounted 16:9 camera
- **Global rotation control** — 0/90/180/270deg from the header dropdown, synced across all viewers via SSE
- **Take Controls** — associate this container with the selected workcell via Curium (same as Hydrogen editornav dropdown)
- **Zoom camera controls** — pan (arrow buttons), zoom (slider), X/Y position, Home command — appears on hover when you have controls
- **Camera command API** — proxies RPC commands to Lithium room via WebSocket for move, zoom, home, get_position

Camera API endpoints:

| Method | Path | Purpose |
|--------|------|---------|
| `GET` | `/camera/api/workcells` | List workcells with live cameras |
| `GET` | `/camera/api/state` | Current rotation and viewer count |
| `POST` | `/camera/api/rotate` | Set rotation — broadcasts via SSE |
| `GET` | `/camera/api/controls` | Current container association status |
| `POST` | `/camera/api/take-controls` | Associate container with workcell |
| `POST` | `/camera/api/release-controls` | Disassociate container |
| `POST` | `/camera/api/camera-command` | Send camera RPC command via Lithium WebSocket |

### Skills

- **ntx-brand** — dark-mode color palette (charcoal + orange + cyan), Inter font stack, HMI screen sizes, touch-target rules
- **ntx-app-header** — NTX-branded 44px single-row header pattern
- **octolux-deploy** — preview and deploy HMI interfaces to devices
- **octolux-vnc** — remote desktop streaming
- **octolux-bootstrap** — first-time HMI device setup (Chromium, VNC, autostart, Carbon registration)
- **octolux-launcher** — HMI launcher architecture reference (Weston, Chromium kiosk, Apache)
- **octolux-list** — discover online HMI devices via Carbon IP API
- **octolux-fork** — fork reference HMI interfaces into customer repos
- **octolux-device-profile** — SSH device system profile collection
- **active-project** — cross-app active customer project state

### Customer projects

5 demo customer HMIs under `customers/`:

- **Ciridian** — smart bed sleep console (7" landscape)
- **Gas Station Sign** — fuel price console (10.1" landscape)
- **Subway Toaster** — commercial toaster oven display (10.1" landscape)
- **Teazzers** — boba beverage dispenser (15.6" landscape)
- **Teazzers Refreshers** — self-order kiosk (10.1" portrait)

## Installation

Automatically installed by gallia `install.mjs` when the container's user is a member of the `ntx-embedded` Carbon org. No GitHub access required — downloaded from this wiki page as `ntx-embedded.tar.gz`.

Manual install:
```bash
curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/ntx-embedded/ntx-embedded.tar.gz -o /tmp/ntx-embedded.tar.gz
mkdir -p ~/ntx-embedded && tar xzf /tmp/ntx-embedded.tar.gz -C ~/ntx-embedded
cd ~/ntx-embedded && bash install.sh
```
