NameFrame documentation
NameFrame turns an Unreal Engine level into a labelled, verified training dataset. Unreal renders the pixels and records the raw truth. Python does the rest: labels, checks, scoring, and YOLO or COCO export.
Which path is mine?
There are two ways to use NameFrame: a panel inside Unreal, or the command line. Pick one in thirty seconds.
No Python neededUnreal Studio
A panel in the Unreal editor. Click through nine pages, press Generate, get a dataset.
PythonCommand line
One command produces a full dataset with a report and a scorecard. No Unreal and no GPU required.
AILet an assistant drive
Expose NameFrame to Claude or any MCP client, with dry-run defaults and an approval queue inside Unreal.
What NameFrame actually does#
Synthetic datasets tend to fail in one specific, expensive way. The images look plausible and the labels are quietly wrong. A box drifts off the person. An occluded target is still labelled as visible. A scene randomiser silently stops randomising. You find out after training, which is the worst possible time.
NameFrame is built around that failure mode. It keeps a strict boundary between the two halves of the system:
Unreal owns capture
Scene population, deterministic randomisation, cameras, weather, RGB, depth, per-instance ID buffers, and the raw per-frame truth for every actor.
Python owns derivation
Boxes, segmentation, keypoints, quality gates, reports, YOLO and COCO export, validation, lineage and experiments. All of it offline, from the recorded truth.
Because the raw truth is written to disk, you can re-derive labels in a different format, with different rules, months later, without re-rendering anything in Unreal.
The pipeline in five stages#
Capture
Unreal populates the scene, samples a camera, renders RGB, depth and an instance-ID pass, and writes a raw dump: a
capture.jsonplus one folder per frame.Verify
Twelve pre-flight gates run against the dump before anything is labelled. Determinism, colour collisions, pixels versus transforms, missing visible targets, ground contact, population spacing, and more.
Label
Boxes, segmentation polygons and keypoints get derived from the ID buffer and the recorded transforms, along with a per-instance
instances.jsonlmanifest.Report
A browsable HTML report with frame and instance counts, the quality gates, and RGB overlays you can actually look at.
Dataset and validate
A deterministic train/val/test split exported as YOLO and/or COCO, then scored 0 to 100 with a letter grade and an HTML scorecard.
The same seed gives you the same frames, the same splits and the same labels. That is what makes an A/B experiment worth running: change one thing, and the difference in the dataset is that one thing.
What you get out#
| Artifact | Where | What it is for |
|---|---|---|
| Raw dump | your capture folder | The re-derivable source of truth. Keep it. |
| Report | report/index.html | Eyeballing frames and overlays. |
| Dataset | dataset/ | Training. YOLO and/or COCO, split into train/val/test. |
| Validation | validation/validation.html | The 0 to 100 scorecard, with a reason for every penalty. |
| Metadata v1 | sidecar plus SQLite index | Querying and comparing runs later. |
Full detail in Outputs and formats.
Requirements at a glance#
| You want to… | You need |
|---|---|
| Try the whole pipeline offline | Python 3.11+. No Unreal, no GPU, no licensed assets. |
| Generate from your own Unreal level | Unreal Engine with the NameFrameCapture plugin, and a GPU. |
| Drive Unreal from the command line | The above, plus the Remote Control API enabled in the project. |
| Let an AI assistant drive | The above, plus pip install -e ".[mcp]". |
See Installation for the exact steps.