Open an LDraw model and turn it around in 3D, zoom in on any corner and step through the build the way its
instructions do. Large models, such as a whole mosaic, stay smooth to move.
Private. The viewer runs in your browser, so your file never leaves your device.
Files. LDraw .ldr and .mpd models, the format most LEGO building programs can export.
Parts. Drawn from LDraw's own part shapes. A part LDraw does not have shows as a plain box.
Drag to turn the model, scroll or pinch to zoom, and right-drag to move it. Click a part to see what it is.
Draw calls
Triangles
Render time on the CPU, p50 / p95 / p99
Frame interval, p50 / p95
Loading: parse / batch / first frame
Batches / parts drawn on their own
Render time is how long this page takes to hand one frame to the graphics card. Frame interval is the time between frames on screen, which your display's refresh rate caps. Both are measured in your browser and never sent anywhere.
Loading the partsReadyThis model could not be drawn. Check that it is an LDraw file.The LDraw parts library could not be reached, so the model could not be drawn. Check your connection and try again.This browser cannot draw in 3D (it needs WebGL 2). The LDraw Model Checker can still list the model's parts and draw a flat view.That file is too big for the viewer, which handles models up to 5 MB.StepPlay the buildPauseMosaic, 32 by 32 tilesShow performanceHide performancemeasuringstepLDraw colourLooking up this partThis part has no page on this site yet.Part pages are unavailable right now.LDraw does not have this part, so it is shown as a plain box.Copy a link to this viewThe model loaded. LDraw has no part called {name}, so it is drawn as a plain box ({count} in this model).The drawing context is gone. The viewer is waiting for the browser to give it back.The context came back, and the model was drawn again.The parts library could not be reached, so the model could not be drawn ({count} of its files failed). The rest of the page still works.The parts library is back, and the model was drawn again.Run the benchmarkStopDrawing {parts} parts, {mode}: run {run} of {total}Done. These numbers describe this device and browser only.Stopped.The benchmark could not finish in this browser.Copiedbatchedone draw per partPartsDrawingDraw callsFrame, p50 / p95CPU, p50 / p95LoadYour mosaic from the Brick Mosaic MakerYour model from the LDraw Model CheckerLink copiedThis browser would not copy it, but the link to this view is in the address bar.A file you open stays on your device, so a link can only show the samples.
Getting an LDraw file
Most LEGO building programs can save or export a model as LDraw, usually as an .ldr file, or as an
.mpd file when the model has submodels. To list a model's parts with links, check which bricks
connect, or compare two versions of a build, open it in the
LDraw Model Checker.
Under the hood
Each part is built once. The three.js LDraw loader starts building a part again for every copy that was waiting for it, then keeps one. The viewer hands every copy the first build instead, which is where most of the loading time on a large model went.
Copies are drawn together. A model is normally drawn as three or more separate draws per part: its faces, its edges and its outline edges. The viewer redraws copies of a part in the same colour as one batch, and each edge colour as one batch, so the number of draws depends on how many different parts a model has, not how many it places.
Some parts stay single. A mirrored part has to be drawn with its faces turned the other way, and see-through parts have to be drawn back to front. A batch can do neither, so those parts are drawn on their own.
Steps cost nothing. Copies in each batch are sorted by build step, so showing a step changes how many copies are drawn rather than rebuilding the scene.
Every part file is found on the first try. The parts library is mirrored on this site's CDN with an index of where each file lives, so the viewer never asks for a file in the wrong folder.
Measured performance
Measured on October 6, 2026 in Google Chrome 154 on a
13-inch MacBook Pro (2020) with a 2.3 GHz quad-core Intel Core i7 and Intel Iris Plus Graphics, drawing generated models of growing size around the same camera path. Each frame
includes the graphics card's work, and the chart shows the middle (p50) frame.
The same measurements as a table
Parts
Drawing
Draw calls
Frame, p50
CPU, p50
100
batched
60
5.1 ms
0.7 ms
100
one draw per part
300
5.6 ms
1.2 ms
500
batched
52
4.6 ms
0.3 ms
500
one draw per part
1,500
13.6 ms
4.8 ms
1,000
batched
52
7 ms
0.3 ms
1,000
one draw per part
3,000
17.1 ms
9 ms
2,500
batched
52
8.6 ms
0.3 ms
2,500
one draw per part
7,500
49.5 ms
24.9 ms
10,000
batched
52
20.9 ms
0.5 ms
Your device will differ. The benchmark further down runs the same models on yours.
Watch it fail
Each button breaks something on purpose, on this page only, so you can see how the viewer copes.
The model loads anyway: the unknown part is drawn as a plain box and counted.
The browser takes the page's drawing context away, as a driver crash would, and the viewer draws again when it comes back.
The viewer asks for its parts from a folder that does not exist, says so, and offers to try again.
Without WebGL 2 the page loads nothing heavy: it says so up front and points to the LDraw Model Checker, which can still list a model's parts and draw a flat view.
Run it on your device
The benchmark draws generated models of growing size, batched and then one draw per part, on a hidden canvas of the
same size every time. Each frame waits for the graphics card to finish, so the timings include its work. It takes a
minute or two, and the results stay in your browser.