CONVERT
A file with no index,
given one — in your browser.
Drop a .las, .laz, .ply, .pcd or .xyz in. You get a .copc.laz back. Nothing is uploaded. The file is read, indexed and written inside this tab; the only thing this site ever sent you is the page and the code that does the work.
What you drop in
A LAZ is a list of points. Compressed, in order, and with nothing in it that says where anything is.
So a viewer has to download all of it before it can draw the first point — which is why a two-gigabyte scan does not open in a browser at all.
What you get back
A COPC is still a LAZ file. Same container, same compression; everything that read the first one reads this one.
What is added is an octree inside it, and a table at the end saying where each node lives. A viewer reads the header, the table, and then only the nodes it can actually see — by HTTP range.
The work is done by @voxelkloud/wasm-build: the same partitioner voxelkloud convert runs on a workstation, compiled to wasm. A cloud indexed here and the same cloud indexed there are the same tree — not two implementations that agree until they do not.
It runs in a worker, which is what lets this page keep painting and keep counting while it works: a build is one synchronous call into wasm, and on the page’s own thread nothing else would happen until it returned. The worker is ended as soon as the file comes back, so the memory a large build needs goes with it instead of staying resident.
The ceiling is 20 million points, measured rather than guessed: a 20M-point tile peaks around 1.7 GB of browser memory, and a tab that asks for twice that is a tab that gets killed. Past it the honest answer is the command line, and the message you get says so. A phone will manage a small scan and struggle with a large one.