> For the complete documentation index, see [llms.txt](https://docs.eyepop.ai/developer-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.eyepop.ai/developer-documentation/deploying/vms/milestone/running-detection.md).

# Running Detection

Subscribe a camera, run EyePop inference, and see bounding boxes

With the EyePop runtime registered and the API key set, you can run detection by subscribing a camera to EyePop's metadata topic in XProtect Server.

### Subscribe a camera

1. In the Management Client, open a camera and enable the EyePop metadata topic on its Processing Server / analytics configuration (the topic named `objects` by default).
2. Enabling the topic makes XProtect auto-create an analytics camera for it via its VPS driver. **Restart Smart Client** before checking for bounding boxes — XProtect doesn't pick up the newly created analytics camera until it restarts.

### Watch camera status

Open the management page's **Cameras** tab. A subscribed camera appears automatically, with a status badge:

| Status                    | Meaning                                                                                                         |
| ------------------------- | --------------------------------------------------------------------------------------------------------------- |
| `running`                 | Actively processing and publishing detections.                                                                  |
| `connecting` / `starting` | Coming up.                                                                                                      |
| `paused (offline)`        | Subscribed, but the camera itself is reporting offline in XProtect.                                             |
| `error`                   | Hover the badge for the reason — commonly a bad or expired API key, or an RTSP source that isn't available yet. |

### What comes back

**Bounding boxes** — On Smart Client you will see a bounding box with class label for any detected people & objects.

### Default behavior

No configuration is required for basic detection. Every camera that isn't explicitly assigned a workflow uses the built-in **`default`** workflow, which detects common objects with EyePop's `eyepop.common-objects` ability. To change what a camera detects, see [Workflows](/developer-documentation/deploying/vms/milestone/workflows.md).

### Troubleshooting

| Symptom                                               | Fix                                                                                                                                     |
| ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Camera enabled, but no bounding boxes in Smart Client | Restart Smart Client — it doesn't pick up a newly auto-created analytics camera until restarted.                                        |
| Camera stuck on `error`                               | Hover the status badge for the reason; most commonly an unset or invalid EyePop API key, or the camera's RTSP source not yet available. |
| An `.env` change doesn't take effect                  | `docker compose restart` reuses the baked-in environment. Recreate with `docker compose up -d --force-recreate` after editing `.env`.   |

### Next steps

* [Workflows](/developer-documentation/deploying/vms/milestone/workflows.md) — control what each camera detects
* [Configuration](/developer-documentation/deploying/vms/milestone/configuration.md) — `.env`, configMaps, and the EyePop API key
