Skip to main content

Step 4 — Deploy Ultralytics YOLOv8

This article refers to Platform v3.0.0. The current Platform version is v3.2.0.
warning

This step assumes the MQTT Broker, Video Simulator, and Video Player are already running on the node.

Overview

The Ultralytics YOLOv8 Inference Server runs real-time object detection on the video stream the simulator publishes. It subscribes to the simulator's MQTT topic, runs YOLOv8 on every frame, then publishes back to MQTT:

  • A video output stream with the original frames overlaid by detections (bounding boxes, labels).
  • A telemetry stream with the inference metrics (object types, counts, inference time).
YOLOv8 in the pipeline

YOLOv8 in the pipeline

Feature summary:

  • Tasks supported — object detection, pose estimation, segmentation, classification, oriented bounding box (OBB) detection.
  • Models — a curated set of pre-trained YOLOv8 models, plus support for uploading your own .pt (TorchScript) model.
  • Outputs — annotated video stream + telemetry stream, both over MQTT.

Add Ultralytics YOLOv8 to your Library

Marketplace badge
Ultralytics YOLOv8 icon

Ultralytics YOLOv8 Inference Server

Subscribes to an MQTT video stream, runs YOLOv8 inference, and publishes annotated video plus telemetry back over MQTT.

YOLOv8 in the Marketplace

YOLOv8 in the Marketplace

YOLOv8 in the App Library

YOLOv8 in the App Library

Deploy Ultralytics YOLOv8

  1. Open the Node Details page and click Add card → Application.
Add card menu

Add card menu

Select Application

Select Application

  1. Select app and version. Pick Ultralytics YOLOv8 Inference Server and its latest version. Click Next.
Select YOLOv8

Select YOLOv8

  1. App Secrets. Keep the defaults and click Next.
App Secrets for YOLOv8

App Secrets for YOLOv8

  1. Compose Config. The exposed knob is the Yolo Webbrowser Port — the port for the app's file browser, used later to upload custom models. Leave the default 10020.
Compose Config for YOLOv8

Compose Config for YOLOv8

  1. App Config. Paste the JSON below to detect objects on the simulator's stream with the coco_yolov8n model.

    {
    "yolov8": {
    "inference_server": {
    "agnosticNms": false,
    "augment": false,
    "classes": [],
    "conf": 0.5,
    "displayNameDetections": "yolov8_detections_01",
    "displayNameTelemetry": "yolov8_telemetry_01",
    "displayNameVideoOutput": "yolov8_video_01",
    "iou": 0.7,
    "lineWidth": 0,
    "maxDet": 300,
    "model": "coco_yolov8n",
    "showBoxes": true,
    "showConf": true,
    "showLabels": true,
    "streamBuffer": true,
    "vidStride": 1,
    "videoOutputEnabled": true
    },
    "system": {
    "debugLevel": "info"
    },
    "video_input": {
    "displayName": "video_simulator_01"
    }
    }
    }

    Key fields:

    SectionParameterValueDescription
    video_inputdisplayNamevideo_simulator_01The input video stream — must match the Video Simulator's displayName.
    yolov8displayNameVideoOutputyolov8_video_01The output video stream the server publishes back to the broker.
    yolov8displayNameTelemetryyolov8_telemetry_01The output telemetry stream (used in step 6 to ingest into InfluxDB).
    yolov8modelcoco_yolov8nThe pre-trained YOLOv8 model to run. See Pre-trained models below.

    Every field is documented in the right-hand README panel of the wizard.

Send YOLOv8 deployment

Send YOLOv8 deployment

tip

The telemetry stream is what gets persisted in InfluxDB and rendered in Grafana later in the tutorial. Keep displayNameTelemetry aligned with the Ingester configuration in Step 6.

Verify the deployment

The YOLOv8 workload card appears on the Node Details page. When it turns green (Started), the inference server is running.

YOLOv8 workload card

YOLOv8 workload card

Watch the annotated stream

Switch the Video Player to the YOLOv8 output stream by editing its App Config (pencil icon on the Video Player workload card).

Edit Video Player App Config

Edit Video Player App Config

Replace its config with:

{
"video_player": {
"system": {
"debugLevel": "info"
},
"video": {
"deviceDisplayName": "yolov8_video_01"
}
}
}

Open http://<NODE_IP>:5080 again — the player now shows the same video annotated with detected objects.

Annotated stream in the Video Player

Annotated stream in the Video Player

Use a different pre-trained model

Switch the model field in App Config to any of the curated names below. For example, to run pose estimation use coco_yolov8n-pose.

Pose estimation in the Video Player

Pose estimation in the Video Player

Available pre-trained models:

TypeModelSize (px)mAP val 50-95CPU ONNX (ms)A100 TensorRT (ms)Params (M)FLOPs (B)
Object detectioncoco_yolov8n64037.380.40.993.28.7
Object detectioncoco_yolov8s64044.9128.41.2011.228.6
Object detectioncoco_yolov8m64050.2234.71.8325.978.9
Object detectioncoco_yolov8l64052.9375.22.3943.7165.2
Object detectioncoco_yolov8x64053.9479.13.5368.2257.8
Object detectionopenimagev7_yolov8n64018.4142.41.213.510.5
Object detectionopenimagev7_yolov8s64027.7183.11.4011.429.7
Object detectionopenimagev7_yolov8m64033.6408.52.2626.280.6
Object detectionopenimagev7_yolov8l64034.9596.92.4344.1167.4
Object detectionopenimagev7_yolov8x64036.3860.63.5668.7260.6
Segmentationcoco_yolov8n-seg64036.7 / 30.596.11.213.412.6
Segmentationcoco_yolov8s-seg64044.6 / 36.8155.71.4711.842.6
Segmentationcoco_yolov8m-seg64049.9 / 40.8317.02.1827.3110.2
Segmentationcoco_yolov8l-seg64052.3 / 42.6572.42.7946.0220.5
Segmentationcoco_yolov8x-seg64053.4 / 43.4712.14.0271.8344.1
Posecoco_yolov8n-pose64050.4 / 80.1131.81.183.39.2
Posecoco_yolov8s-pose64060.0 / 86.2233.21.4211.630.2
Posecoco_yolov8m-pose64065.0 / 88.8456.32.0026.481.0
Posecoco_yolov8l-pose64067.6 / 90.0784.52.5944.4168.6
Posecoco_yolov8x-pose64069.2 / 90.21607.13.7369.4263.2
Posecoco_yolov8x-pose-p6128071.6 / 91.24088.710.0499.11066.4
OBBdotav1_yolov8n-obb102478.0204.773.573.123.3
OBBdotav1_yolov8s-obb102479.5424.884.0711.476.3
OBBdotav1_yolov8m-obb102480.5763.487.6126.4208.6
OBBdotav1_yolov8l-obb102480.71278.4211.8344.5433.8
OBBdotav1_yolov8x-obb102481.361759.1013.2369.5676.7
Classificationimagenet_yolov8n-cls22469.0 / 88.312.90.312.74.3
Classificationimagenet_yolov8s-cls22473.8 / 91.723.40.356.413.5
Classificationimagenet_yolov8m-cls22476.8 / 93.585.40.6217.042.7
Classificationimagenet_yolov8l-cls22478.3 / 94.2163.00.8737.599.7
Classificationimagenet_yolov8x-cls22479.0 / 94.6232.01.0157.4154.8

Use your own TorchScript model

The YOLOv8 server can also run your own TorchScript (.pt) models. Upload the file via the app's file browser, then point model at it.

  1. Open http://<NODE_IP>:10020 in a browser to reach the YOLOv8 file browser.

    ParameterDefault valueSet in
    Port10020Compose Config
    UsernamebbruserApp Secrets
    PasswordbbrpasswordApp Secrets
YOLOv8 file browser login

YOLOv8 file browser login

  1. Click Upload and pick the .pt file.
Upload a model

Upload a model

Model uploaded

Model uploaded

  1. Edit the YOLOv8 App Config and replace model with the file name. For example, best.pt:

    {
    "yolov8": {
    "inference_server": {
    "model": "best.pt",
    ...
    },
    ...
    }
    }

Summary

The YOLOv8 server runs real-time object detection on the simulator's stream and publishes both an annotated video and a telemetry stream back to MQTT. In Step 5 you will deploy InfluxDB to persist the telemetry; the next two steps wire it through to a Grafana dashboard.