Skip to content
NAMEFRAMEApply for Pilot

How long does it take to generate a synthetic dataset in Unreal Engine?

Measured, not estimated: on one mid-range desktop, a labelled 300-frame dataset takes between ten minutes and half an hour end to end, and which end of that range you land on is decided almost entirely by the scene. The numbers below are twelve real captures, most of them downloadable from this site, timed from their own file timestamps.

Fastest 300 frames
7.5 minutes, open coast
Slowest 300 frames
26 minutes, dense city
Labelling those frames
Half a minute
Measured on
RX 6750 XT, i5-12400F, 32 GB

Twelve captures, timed

All of these are 300-frame runs on the same machine, and every one includes 16 warm-up renders per frame, the settling that keeps ray-traced lighting from arriving as speckle. That quality cost is inside the numbers rather than waiting to surprise you.

SceneResolution300 framesPer frame
Beach at sunset1280×7207.5 min1.5 s
Parisian street, flyover1280×7207.6 min1.5 s
Parisian street, dawn to dusk1280×7207.4 min1.5 s
Football pitch at night1280×96013.5 min2.7 s
Quarry1280×96017.6 min3.5 s
Prison yard1280×96018.3 min3.7 s
Beach, aerial stills1280×96018.7 min3.8 s
Barnyard1280×96019.2 min3.8 s
Mountain village1280×96019.3 min3.9 s
Russian winter town1280×96020.6 min4.1 s
Airbase1280×96021.3 min4.3 s
Parisian street, determinism corpus1280×96026.2 min5.3 s

The spread is the finding. A sea horizon renders in 1.5 seconds and a street with three and a half thousand actors takes 5.3, on identical settings. Nobody can quote you a time without seeing your scene, and anyone who does is quoting their fastest one.

The bottom row is also carrying more than geometry: the determinism corpus re-scatters its whole population before every frame and changes the weather every five, and each of those changes is settled before the shutter. Variety is paid for in seconds per frame.

The rest of the pipeline barely registers

Capture dominates. On the beach run, the two stages that turn rendered frames into a training-ready dataset cost this:

StageTimeWhat happened
Capture7.5 to 26 minrenders every frame, plus its truth buffers
Labelling0.5 min23,560 instances derived from the identity buffers
Export to YOLO and COCO1.0 minboth formats at once, with the train/val split

Half a minute for 23,560 labelled instances is the part worth pausing on, because it is the part that replaces human work. Hand annotation at even ten seconds a box, which is optimistic for aerial objects a few pixels wide, puts the same count at over sixty hours. The labels here are read from the engine’s identity buffers instead, so the cost does not scale with how many objects are in the frame.

What actually moves the number

The scene, more than anything

A 3.5x spread on identical settings. Dense geometry, foliage and reflective surfaces all bill per frame, and they bill again in every warm-up render.

Resolution

1280×960 carries twice the pixels of 1280×720 and roughly tracks it in cost. Capture at the resolution your model trains at, not above it.

Per-frame randomization

Re-scattering the population and changing the weather are paid before every frame, and each change has to settle. A placed-once scene skips both bills.

Warm-up renders

The 16 warm-ups in these numbers exist because unsettled lighting arrives as noise in the pixels. Cutting them makes the timer look better and the frames worse.

What the timer does not show

The honest part of this page. The minutes above start when a finished scene starts capturing, and most of a real project happens before that: building or buying the level, placing the zones, deciding the classes, and the test runs where the composition turns out wrong. Our beach capture took 7.5 minutes; the two 12-frame test runs and the reframing before it took most of an hour.

A 12-frame test costs seconds and answers the questions that matter, which is why the workflow is test first, capture second. Budget your calendar for the scene and the iteration, and your machine time for the capture.

Doing it with NameFrame

The pipeline these numbers come from is three commands, and the captures behind most of the rows are published in full so the timings can be checked against their own file timestamps.

nameframe capture-unreal job.json
nameframe label   D:/runs/beach  D:/runs/beach/labels
nameframe dataset D:/runs/beach  D:/runs/beach/dataset --format yolo,coco

The datasets themselves, with their validation reports, are on the datasets page. The reason the warm-up renders are not optional is measured on the determinism page.