Skip to content

Willow-Walker/PhotogrammetryStudio

Repository files navigation

Photogrammetry Studio

A macOS app for reconstructing 3D USDZ models from photo sets, with built-in GLB export and web embed generation.

Photogrammetry Studio screenshot


Requirements

  • 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.


Features

  • 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)

Live Demo

See Photogrammetry Studio output in the wild:

  • Whitby Abbey 3D Model — reconstructed from handheld iPhone photos, embedded using the generated model-viewer snippet

Quick Start

  1. Launch Photogrammetry Studio
  2. Under Files, click Choose… next to Input Folder and select your folder of photos
  3. Click Choose… next to Output File and choose a save location for the .usdz
  4. Under Options, choose your detail level (Full is recommended for archival quality)
  5. Click Begin Processing (or press ⌘Return)
  6. When complete, click Export GLB to generate the cross-platform version
  7. Scroll down to HTML Embed Snippet and copy the embed code for your website

Capturing Photos

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

Detail Levels

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.


Web 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)

Serving your files

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;
}

Embed variants

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.

File size guidance

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 Conversion

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.


Changelog

v1.0.0

  • 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

Acknowledgements

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

Contact & Support

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.


Licence

MIT Licence — see LICENSE for details.

You are free to use, modify, and distribute this software. Attribution is appreciated but not required.

About

macOS app for reconstructing 3D models from photos using RealityKit Object Capture, with native GLB export and web embed generation

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages