# What telemetry does Luxonis collect?

Luxonis collects opt-out, anonymous product telemetry to understand how products are used and how reliably common workflows
complete. Aggregated usage and outcome data helps us prioritize improvements, focus compatibility testing, detect regressions, and
identify workflows that need better reliability or documentation.

The categories below are a high-level summary of the telemetry specification. They intentionally group related measurements rather
than list every event property.

## What is collected

### Shared Technical Metadata

All telemetry may include the emitting product and component, plus the application or SDK version and deployment channel when
those values are available. These fields help identify the software context of an event; they do not identify a person, host, or
physical device.

For ModelConverter and Tools CLI, optional system context also includes the operating-system version, architecture and processor
family, Python version, CPU count, and whether the process runs in CI, Docker, or Luxonis cloud infrastructure. It excludes
hostnames, paths, and environment-variable values.

### DepthAI

 * Pipeline lifecycle and complexity: whether a pipeline starts or ends, its duration, and a sanitized summary of its nodes,
   connections, and host/device bridges. Node types and safe properties may be included; custom node names and sensitive
   properties are redacted. Raw pipeline schemas, scripts, and model paths are not collected.
 * Coarse runtime context: the SDK language, host operating system and version, whether the application runs as an OAK App or
   through Python, and the SDK library version.
 * Device lifecycle and connection: SDK load, device connection, periodic keepalive, disconnection, and connection duration;
   coarse device model, platform, transport and speed, standalone mode, and device OS version. Short-lived random session, device,
   and pipeline IDs correlate these events without using hardware identifiers.
 * Device resource usage: periodic RVC2 and RVC4 summaries of memory use, CPU use, and chip temperatures. Logs, crash dumps, and
   raw device identifiers are not collected.
 * Pipeline camera settings: configured camera socket, resolution, frame rate, frame-sync mode, and whether HDR is enabled.
 * Model Zoo usage: whether an official public model was loaded, its public model and team slugs, and whether it came from cache.
   Private model and team slugs are redacted.
 * OAK Viewer * Application and backend activity: application launch mode and lifecycle, pipeline state transitions, and the
   controlled names of Viewer backend endpoints handling requests.
    * Configuration: selected pipeline presets and neural models, sanitized neural-network and stereo-depth settings, and sensor
      stream summaries such as camera socket, resolution, and configured, streamed, or received frame rates.
    * Device health: aggregate device discovery counts; product model, connection type, and USB generation; supported device
      features and calibration status; connection bandwidth; and disconnect or recovery attempts.
    * Calibration: whether a calibration flow is a first run, aggregate data and coverage progress, and aggregate quality results
      such as Sampson error and angle changes. Images, calibration files, and diagnostic bundles are not collected.
    * Correlation: the Viewer flow name groups related telemetry. The current Viewer implementation uses an application ID as its
      analytics distinct identifier; the telemetry specification prohibits adding other persistent identifiers.

### AI Inference

 * ModelConverter * Conversion setup: target platform, configuration source and structure, input-model format and count,
   calibration and archive settings, output/upload choices, and sanitized target-specific options such as quantization or
   optimization settings.
    * Execution context: whether conversion runs in Docker, uses a development image or GPU, has custom-image or resource-limit
      overrides, and the resolved target toolchain version.
    * Conversion result: controlled success, failure, or interruption state; duration; coarse failure category; output-count and
      peak-memory buckets; and whether final or intermediate outputs were uploaded. Model names, paths, URLs, configuration
      contents, tensor names, and exception text are not collected.
 * Tools CLI * YOLO conversion setup: effective YOLO and exporter family, whether the version was supplied or auto-detected,
   target platform, input encoding and size, class-name override presence and count bucket, and remote-upload choices.
    * Conversion result: controlled success, failure, or interruption state; duration; coarse failure category; whether ONNX
      export and NN Archive generation succeeded; and whether a remote upload was attempted or succeeded. Model paths, raw class
      names, plugin names, URLs, and exception text are not collected.
    * Correlation: a synthetic, per-conversion ID groups configuration and result events without identifying a user, device, or
      installation.

### OAK Apps

 * `oakctl` command lifecycle: when a command begins and completes, its normalized command path, which flags were present, whether
   the command was valid, coarse parse-error category, success or failure, and execution duration. Argument values and positional
   arguments are not collected.
 * Runtime context: the host operating system and CPU architecture, plus the name of a matched coding-agent environment variable
   when applicable. Prompts, source code, workspace contents, and environment-variable values are not collected.
 * Short-lived correlation: an ephemeral per-process session ID and a short-lived correlation ID may group nearby `oakctl`
   commands, then rotate after inactivity. Command arguments containing paths, device identifiers, credentials, tokens, or other
   sensitive values are redacted or excluded.

## What Is Not Collected

Telemetry is limited to predefined, structured fields. Luxonis telemetry does not collect:

 * Personally identifiable information (PII): names, email addresses, user, team, or account IDs, or persistent hardware
   identifiers.
 * Credentials: passwords, API keys, access tokens, device adoption secrets, QR payloads, or environment-variable values.
 * Raw media or project data: images, video, sensor recordings, datasets, calibration media, model files, or model contents.
 * Free-form user content: prompts, source code, scripts, configuration contents, command or argument values, filenames, paths,
   URLs, logs, stack traces, or exception text.

Public identifiers selected from a controlled catalog, such as an official Model Zoo slug, may be collected. Private names and
other user-provided values are redacted or excluded.

## How to Opt Out

Set the applicable environment variable before starting the product:

| Product | Opt-out environment variable setting |
| --- | --- |
| DepthAI (Python or C++) | `DEPTHAI_TELEMETRY=0` |
| ModelConverter and Tools CLI | `LUXONIS_TELEMETRY_ENABLED=false` |
| `oakctl` | `OAKCTL_ANALYTICS=0` |

These settings disable anonymous product telemetry emitted by the listed local client. They do not disable logs stored locally,
information you explicitly submit in an error report, or data you deliberately send to Luxonis Hub to use a cloud workflow.
