NinjaDepth — the depth-map manual
NinjaDepth (深 fukasa, "depth") turns any image into a grayscale depth map or a textured 3D mesh. Drop in a photo, an AI-generated scene or any picture and get back a depth PNG or a GLB you can open in Blender, Three.js or a VR viewer. It runs on Depth Anything V2 and DPT-MiDaS. This manual covers the UI, the models and the API.
What NinjaDepth is
A one-command monocular depth tool: a FastAPI service (depth_app.py) wrapping two
state-of-the-art models, with a drag-and-drop browser UI. No accounts, no database — you give it an
image, it gives you geometry. It's the estate's creative/vision utility rather than a security app.
docker run -p 18025:18025 ghcr.io/scottgardner777/ninja-depth:latest, then open
http://localhost:18025/ui.The browser UI
Open /ui and (1) drag in any JPEG, PNG or WebP, (2) pick a model, (3) optionally raise
the mesh resolution for more detail, then watch the depth map render beside your original. Brighter
= nearer, darker = farther. From there you download the depth PNG or export a 3D model.
Choosing a model
Depth Anything V2 (Small) is the fast default and usually the best-looking result. DPT-Hybrid MiDaS is the alternative when you want a second opinion on a tricky image — reflective surfaces, sky, or unusual compositions where one model reads the scene better than the other. Try both; they're a toggle away.
The 3D mesh & GLB export
Beyond the flat depth map, NinjaDepth builds a textured 3D mesh by displacing a grid along the depth channel and wrapping your original image over it as the texture, then exports a GLB. Higher mesh resolution = more vertices = finer relief (and a larger file). Open the GLB in Blender, drop it into a Three.js scene, or load it in any VR/GLTF viewer.
Driving it from the API
Everything the UI does is an HTTP call, so you can batch it: POST an image to the depth endpoint and receive the depth PNG, or request the mesh to get a GLB back. That makes NinjaDepth a building block — feed it frames, product shots or map tiles and pipe the output straight into a renderer or an asset pipeline.
Availability
NinjaDepth is fully runnable locally right now (Docker, one line above), but it is not yet hosted at
a public estate URL — ninja.ing/depth is reserved and undeployed. This manual is staged
and goes live at ninja.ing/depth/RTFM when the hosted instance ships; until then it
documents the local app and its API.