A macOS app for reconstructing 3D USDZ models from photo sets, with built-in GLB export and web embed generation.
- macOS 15.0 or later
- Apple Silicon Mac (M1 or later) — or an Intel Mac with a 4GB AMD GPU and 16GB RAM
- The Object Capture API will simply report "not supported" on incompatible hardware
No external dependencies. Blender is not required — GLB conversion is handled natively.
- Reconstruct 3D USDZ models from a folder of photos using Apple's RealityKit Object Capture
- Export to GLB format for Android and cross-platform use — no Blender required
- Optionally generate a web-optimised version (~20–40MB) alongside the full-quality model
- Generate a ready-to-paste HTML embed snippet for model-viewer
- Load previously processed USDZ files to generate GLB or copy the embed snippet without reprocessing
- Live session log with timestamped progress messages
- Poster image support for the web embed (shown while the 3D model loads)
See Photogrammetry Studio output in the wild:
- Whitby Abbey 3D Model — reconstructed from handheld iPhone photos, embedded using the generated model-viewer snippet
- Launch Photogrammetry Studio
- Under Files, click Choose… next to Input Folder and select your folder of photos
- Click Choose… next to Output File and choose a save location for the
.usdz - Under Options, choose your detail level (Full is recommended for archival quality)
- Click Begin Processing (or press ⌘Return)
- When complete, click Export GLB to generate the cross-platform version
- Scroll down to HTML Embed Snippet and copy the embed code for your website
The quality of your 3D model depends almost entirely on the quality of your photo capture. A few minutes of care here saves hours of disappointment later.
The basics:
- Take a minimum of 100 photos — more is better for complex subjects
- Overlap adjacent shots by 70% or more
- Walk in concentric rings at different heights: low angle, eye level, elevated
- Keep the subject fully in frame in every shot
- Shoot in overcast or diffuse light — harsh shadows confuse feature matching
- Keep consistent camera settings throughout: same focal length, aperture, ISO, shutter speed
What works well:
- Stone, brick, wood, and other textured surfaces
- Architectural details and facades
- Objects with varied colour and texture
What works poorly:
- Reflective or transparent surfaces (glass, water, polished metal)
- Featureless surfaces (plain white walls, smooth plastic)
- Moving subjects or elements (flags, foliage in wind, people)
- Very dark subjects
For large architectural subjects (ruins, facades, monuments):
- LiDAR depth data from iPhone Pro is not useful at range — standard JPEGs are fine
- Walk the perimeter in passes rather than trying to capture everything in one sweep
- Use Sequential sample ordering if your shots follow a continuous path
| Level | Mesh Quality | Typical File Size | Best For |
|---|---|---|---|
| Preview | Very low | < 5MB | Quick sanity check only |
| Reduced | Low | ~10–20MB | Drafts and previews |
| Medium | Balanced | ~20–50MB | Web embedding |
| Full | High | ~100–400MB | Archival, print reference |
| Raw | Unprocessed | Very large | Professional post-production pipelines |
Recommendation: Use Full for your primary output and enable Export web version to automatically generate a Medium-detail copy optimised for embedding.
Photogrammetry Studio generates HTML embed code using Google's model-viewer web component, which supports:
- Interactive 3D viewing in any modern browser
- AR viewing on iOS (via USDZ and AR Quick Look)
- AR viewing on Android (via GLB and Scene Viewer)
Upload both the .glb and .usdz files to your web server. Your server must serve them with the correct MIME types — add these to your Nginx config:
types {
model/gltf-binary glb;
model/vnd.usdz+zip usdz;
}The HTML Embed Snippet section offers three variants:
- Basic — 3D viewer with camera controls only
- With AR — adds AR button for iOS and Android viewers
- With Poster — adds a flat image shown while the model loads (recommended for large files)
For the poster image, select a good photo of your subject in the Files section, then upload it to your server alongside the 3D files.
| Use case | Recommended detail | Expected GLB size |
|---|---|---|
| Web embed | Medium (-web version) | 20–50MB |
| iOS AR Quick Look | Full | 100–400MB |
| Archival | Full | 100–400MB |
Use the Export web version checkbox to automatically generate a Medium-detail -web.glb and -web.usdz alongside your full-quality output. The embed snippet automatically uses the web versions when available.
GLB export is handled by the bundled USDZToGLB Swift library — no Blender or external tools required.
The converter uses Apple's ModelIO framework to extract geometry and textures directly from the USDZ file. It is optimised for Apple Object Capture output and produces fully spec-compliant GLB 2.0 files.
Supported:
- Mesh geometry (positions, normals, UV coordinates)
- Albedo / base colour texture (embedded in the GLB)
- PBR metallic-roughness material
Not currently supported:
- Multiple materials per model
- Normal maps, roughness maps, ambient occlusion maps
- Animations or skeletal rigs
- USD variants or level-of-detail switching
Validate your GLB output at gltf.report — a clean validation result confirms the file is spec-compliant and will load correctly across platforms.
- Initial release
- RealityKit Object Capture integration
- Native USDZ → GLB conversion (no Blender required)
- Web-optimised export at Medium detail
- HTML embed snippet generator with Basic, AR, and Poster variants
- Poster image support
- Load existing USDZ without reprocessing
- Session log with timestamped progress
Photogrammetry Studio is built on top of several Apple frameworks and open standards:
- RealityKit Object Capture — Apple's photogrammetry API, which does all the heavy lifting of reconstructing 3D geometry from photographs
- ModelIO — Apple's framework for importing and working with 3D assets, used for USDZ → GLB conversion
- model-viewer — Google's open source web component for embedding 3D models, used in the generated HTML snippets
- glTF 2.0 — The Khronos Group's open standard for 3D model interchange, which GLB is the binary form of
- gltf.report — An excellent open source GLB validation tool
- Bug reports and feature requests: GitHub Issues
- General enquiries: support@jadownes.com
- Author: J.A. Downes — jadownes.com
If Photogrammetry Studio is useful to you, the best way to say thanks is to star the repository or share it with someone who might find it useful.
MIT Licence — see LICENSE for details.
You are free to use, modify, and distribute this software. Attribution is appreciated but not required.
