Browser-local converter
JPG to OBJ converter
Turn a JPG into a Wavefront OBJ relief on your own machine, ready to open in Blender, Maya or any other 3D application. Each pixel's brightness becomes height by a rule you control. The result is a relief of the image, not a 3D model of what the photograph shows.
Drop your JPG files here
STL, OBJ, PLY, GLB, glTF, 3MF, SVG and DXF, plus PNG and JPG as height relief. Nothing is uploaded: files are read and converted inside this tab. Checking what this device can handle...
Queue
No files yet. Drop files above, or use the file picker.
Output
Units
Size and placement
Repair and cleanup
These can change the shape, so they need a before-and-after review before export.
Inspection
Add a model to see its dimensions, mesh health and estimated volume.
What this JPG to OBJ conversion does and does not do
- The result is a height relief: lighter pixels are higher, darker pixels lower. A photograph of an object does not become a 3D model of that object, because a single image records no shape behind it.
- JPEG compression leaves faint 8-by-8 pixel blocks in smooth gradients, and a relief turns them into real bumps. A PNG or other lossless copy of the same image gives a cleaner surface.
- A JPG has no transparency, so the whole rectangle becomes relief. To leave empty space around a shape, paint it black (or white, with invert on) before converting.
- The OBJ carries geometry only. The colours of the image are not written as a texture or as vertex colours, and no uv layout is generated, so the relief opens untextured.
- Relief height, base thickness and width are set in millimetres. OBJ itself records no unit, so the numbers in the file are millimetres and your 3D application has to be told so, or scaled on import.
- The image is resampled onto a grid, and both the grid and the resulting triangle count are shown before you convert. Height comes from Rec. 709 luminance, so hue does not matter, only lightness.
Troubleshooting
The relief is huge or tiny in Blender
OBJ has no unit field, and Blender reads the numbers as metres by default. The file is written in millimetres, so set the import scale to 0.001 or scale the object after importing.
The surface is covered in faint square patches
Those are JPEG compression blocks, turned faithfully into geometry. Use a PNG of the original if you have one, or lower the detail setting so the blocks average away.
There is a raised slab around my logo
The background of the JPG is being read as height. Make the background pure black, or pure white with invert on, so it sits at the base level.
The triangle count is too high for my scene
Lower the detail setting. The sampled grid and triangle count are shown before converting, so you can choose the cost before paying it.
Questions
JPG to OBJ or JPG to STL?
The geometry is the same. Choose OBJ for 3D applications such as Blender, where it is the more common interchange format, and STL for slicers and 3D printing.
Can this turn a photo into a 3D model?
Not of the thing in the photo. Brightness is mapped to height, which is a deliberate and documented transform, not depth estimation. A dark object close to the camera ends up low, not near.
Is my photo uploaded?
No. The browser decodes the image and the relief is built in a Web Worker in this tab. There is no upload endpoint anywhere in this project, and the Content Security Policy blocks cross-origin requests.
Is the OBJ checked before I download it?
Yes. Like every export here, it is parsed again after it is written, and its triangle count and bounding box are compared with the relief that was built.
Related tools
- JPG to STLConvert a JPG into a printable relief on your own machine.
- PNG to OBJTurn a PNG into a Wavefront OBJ relief on your own machine, ready to open in Blender, Maya or any other 3D application.
- OBJ viewerOpen a Wavefront OBJ locally, with its groups, normals and material colours.
- OBJ to STLTurn a Wavefront OBJ into a printable STL entirely inside this tab.