Downloads · 30 days
6
21% of all-time downloads
tnguyen2002/overwatch2-killfeed-detector
overwatch2-killfeed-detector is a object detection model from tnguyen2002. Use it when you need objects located in an image. It is set up for ultralytics. The card lists the license as agpl-3.0.
A YOLOv8s detector that finds killfeed rows in Overwatch 2 gameplay — the banners that appear top-right when a player is eliminated.
Downloads · 30 days
6
21% of all-time downloads
All-time downloads
28
Public
Repo size
67.9 MB
Likes
0
Public
Click a slice to open those files.
.onnx45.4 MB · 67%
From the Hugging Face model README
A YOLOv8s detector that finds killfeed rows in Overwatch 2 gameplay — the banners that appear top-right when a player is eliminated.
Locating the row is the first stage of finding kills in a VOD. Once you have the box you can OCR the attacker's name and attribute the kill; without it you are guessing from frame differences or audio, both of which fire on the wrong things.
Evaluated on the dataset's held-out test split (45 images, 61 boxes) — images never seen in training or validation.
| Metric | Value |
|---|---|
| mAP@50 | 0.9936 |
| mAP@50-95 | 0.8302 |
| Precision | 0.9784 |
| Recall | 0.9836 |
Inference measured at ~25 ms/image at 640px on Apple MPS; substantially faster on a CUDA GPU.
The high mAP@50 is expected and not as impressive as it looks: a killfeed row is a fixed, high-contrast UI element in a predictable screen region, which is close to the easiest case object detection has. The gap down to 0.83 at mAP@50-95 is the honest number — box edges are loose, because a row's exact boundary is ambiguous where the coloured bar fades into its border.
from ultralytics import YOLO
model = YOLO("killfeed.pt")
results = model.predict("frame.png", imgsz=640, conf=0.25)
for box in results[0].boxes:
x1, y1, x2, y2 = box.xyxy[0].tolist()
print(f"kill_row at ({x1:.0f}, {y1:.0f}) - ({x2:.0f}, {y2:.0f}) conf={box.conf.item():.2f}")
An ONNX export (killfeed.onnx) is included for runtimes without PyTorch.
Feed it the killfeed band, not the whole frame. The model was trained on crops
of the top-right region — (x0, x1, y0, y1) = (0.62, 1.00, 0.00, 0.42) as
fractions of the frame. Passing a full 1920×1080 screenshot will work poorly,
because at 640px inference the row shrinks to a handful of pixels.
| Base | yolov8s.pt |
| Data | tnguyen2002/overwatch2-killfeed-rows — 453 images, 626 boxes |
| Epochs | 50 |
| Image size | 640 |
| Batch | 16 |
| Optimizer | auto |
| Ultralytics | 8.4.95 |
The released checkpoint has had its optimizer and EMA state stripped (89.5 MB → 22.5 MB); it scores identically to the full checkpoint.
One: kill_row.
The model finds rows. It does not identify who got the kill, which hero was used, or whether a row is a final blow or an assist — those are downstream problems and there are no labels for them here.
AGPL-3.0, inherited from Ultralytics YOLOv8, which this model was trained with and which its weights derive from. Ultralytics offers a separate Enterprise licence for use without AGPL obligations.
Note the network clause: AGPL-3.0 requires that users interacting with the software over a network be able to obtain its corresponding source. If you deploy this model in a service, that applies to you.
The training images contain Overwatch 2 UI and hero art, © Blizzard Entertainment. This model is published for research use and is not endorsed by or affiliated with Blizzard.
@misc{overwatch2_killfeed_detector,
title = {Overwatch 2 Killfeed Row Detector},
author = {Tom Nguyen},
year = {2026},
url = {https://huggingface.co/tnguyen2002/overwatch2-killfeed-detector}
}