NAMEFRAME Frame the world. Name the frames.

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.

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#

  1. Capture

    Unreal populates the scene, samples a camera, renders RGB, depth and an instance-ID pass, and writes a raw dump: a capture.json plus one folder per frame.

  2. 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.

  3. Label

    Boxes, segmentation polygons and keypoints get derived from the ID buffer and the recorded transforms, along with a per-instance instances.jsonl manifest.

  4. Report

    A browsable HTML report with frame and instance counts, the quality gates, and RGB overlays you can actually look at.

  5. 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.

Determinism

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#

ArtifactWhereWhat it is for
Raw dumpyour capture folderThe re-derivable source of truth. Keep it.
Reportreport/index.htmlEyeballing frames and overlays.
Datasetdataset/Training. YOLO and/or COCO, split into train/val/test.
Validationvalidation/validation.htmlThe 0 to 100 scorecard, with a reason for every penalty.
Metadata v1sidecar plus SQLite indexQuerying and comparing runs later.

Full detail in Outputs and formats.

Requirements at a glance#

You want to…You need
Try the whole pipeline offlinePython 3.11+. No Unreal, no GPU, no licensed assets.
Generate from your own Unreal levelUnreal Engine with the NameFrameCapture plugin, and a GPU.
Drive Unreal from the command lineThe above, plus the Remote Control API enabled in the project.
Let an AI assistant driveThe above, plus pip install -e ".[mcp]".

See Installation for the exact steps.