Open source
The engine is open. Read it, run it, build on it.
LocalMesh Engine is the part that turns photographs into a textured mesh, on your own graphics card, with nothing leaving the machine. It is published on GitHub under Apache 2.0. From one photograph it runs Microsoft's TRELLIS.2; from four, it runs TencentARC's Pixal3D, converted to FP8 here so the whole path fits on an 8 GB card.
Apache 2.0
Runs offline
One NVIDIA card, 8 GB
One photo, or four
Nothing is uploaded
Made with it
Six objects, four images each, generated on a laptop RTX 4060. A full turn each, as they left the engine, under one environment light.
What we added to TRELLIS.2
TRELLIS.2 turns a single photograph into a textured mesh. This is what sits on top of it.
- Four photographs of one object. TRELLIS.2 works from one image. This path puts your front, right, left and back on a single grid and lets the model decide there — on the coarse volume first, then in each of the two passes that carve the surface — instead of building four objects and averaging them. The multi-view weights are TencentARC's Pixal3D (MIT), converted to FP8 here so the whole path fits on an 8 GB card.
- The angle of each photograph is measured. Depth Anything 3 reads from the pixels which angle each photograph was taken from, and which side each profile shows, so a turn made by hand does not have to be a clean quarter turn. When the reading is not clear-cut the engine goes back to a perfect quarter turn, and the result says which of the two it used.
- The four images are cropped to one scale. Each crop is sized on the height of the subject, and turning around does not change a height. Cropped on its own, a motorcycle reached the model at scales 37.9 % apart between its views and came out too thick; a cassette, 39.7 %. On a subject taller than wide, a head or a figure, the crops already agreed and nothing changes.
- A piece is removed only if it is small and adrift. Small next to the largest piece, and standing away from it. On the samurai: 1,133 separate pieces, of which 185 were really adrift and were removed, 1.21 % of the surface; the 941 lying flat on the shell stayed, because removing those punches a hole where they sat. If the cleanup ever wants more than 5 % of the surface it does nothing, and says so.
- The material is checked before the file leaves. The model writes a metal value of 0.6 to 0.8 on a resin figure. That is noise, and in any viewer it darkens the colour and tints the reflections, so it is written to zero. It also bakes a transparency that copies the luminance: 53 % of a black cassette came out marked see-through, and some viewers render that as glass, so an opaque object ships without one. And back faces are turned on from the open edges the mesh really has, instead of on everything.
- Made for a card with 8 GB. FP8 weights, and the models are loaded one after another so the card is free between steps. The triangle count is set by the tier, 150,000 at Standard, and the safety limits are read off the card: a shape too heavy to remesh is brought back under the limit instead of taking the driver down.
Running it
- 1Install it. Ten steps, not three. Three CUDA extensions are compiled on your own machine, so you need Python 3.12, the CUDA 12.8 toolkit and a C++ compiler before anything else. No weights ship with the code and the engine does not fetch them for you: about 9.5 GB by hand for one photograph, 14.3 GB for four, and DINOv3 waits on a human at Meta approving your access. Measured on Windows; Linux should work, and we have not run it.
- 2Point it at a photograph. One image gives you a mesh, and it is the shorter install. Add right, left and back and the engine fuses all four: 4.8 GB more weights, and one more extension to compile. Three sides or none, two is refused.
- 3Get a .glb. Textured, UV unwrapped, oriented Y up. It opens in Blender, in Unreal, in anything that reads glTF.
Or take the application
LocalMesh is the studio around this engine: a board where photographs become objects, a library, an image studio, and a viewer. 14 days free, then $39 once. No subscription.
Download LocalMesh