STATION 00 — ENTRY

CaveViewer logo: a skull in a flight helmet

See the whole cave
before you swim it.

CaveViewer is a free 3D viewer built for cave divers and survey teams, made to open photogrammetry scans too large for anything else — from a few hundred megabytes up past 150GB — and fly through them smoothly on Windows, macOS, or Linux.

Free. No ads. No account. Works offline once installed. Windows, macOS & Linux.

CaveViewer rendering a textured cave passage in blue-lit photogrammetry detail, with the minimap and control column visible

Inside an actual cave scan, fully textured — headlamp and ambient fill lighting both visible, minimap bottom-left, controls bottom-right.

Station 01
The Tool

Built for scans too big to open anywhere else

A multi-gigabyte cave scan will choke most viewers. CaveViewer splits the model into a 3D grid of spatial chunks and only keeps the chunks near your current position loaded — so frame rate stays smooth no matter how large the full system is.

Navigation

Fly through it like you're really there

Free-fly camera with WASD movement, mouse look, vertical movement, barrel rolls, and a speed boost — plus camera bookmarks (save a view with Ctrl+1–9, jump back with 1–9) for returning to a spot instantly.

Lighting

Headlamp, plus an ambient fill when you need it

Adjustable headlamp brightness for the cone in front of you, and a separate global ambient light to wash out shadows across the whole cave when you want to see everything at once.

Orientation

A minimap that knows where the passage actually is

Click anywhere on the minimap to jump there instantly — it lands you inside the actual passage near your current depth, not floating in empty rock.

CaveViewer showing a plain lit gray cave surface with texture off, and the minimap visible in the bottom-left corner

Inspection

Mesh, texture, or flat-faceted shading

Toggle wireframe to inspect scan density and quality, toggle photo texture on or off, and switch between smooth and flat-faceted shading to see the raw triangulation of the scan.

CaveViewer showing a cave passage in wireframe mode with the Mesh button highlighted, full triangle mesh visible

Multiple maps

Switch caves without closing the program

Open a different map mid-session with one click. First-time imports show real progress in-window; maps you've opened before load instantly from a local cache.

Always current

Check for updates from the launch screen

One click checks for a newer version and installs it automatically — no separate downloads to track down by hand.

Any machine

Windows, macOS, and Linux, the same way

Download the build for your system and run it — no Python install, no terminal commands, no dependencies to track down. The controls and features are identical everywhere.

No size limit

Built for scans way past what fits in memory

Very large exports are read in a single streaming pass and written straight to disk in spatial pieces, so opening a scan never requires loading the whole thing into RAM at once — even when the file is far bigger than your computer's memory.

Tuning

Advanced settings for underpowered laptops and huge caves

An optional settings panel lets you cap how much RAM and GPU memory CaveViewer is allowed to use, how many background threads help load chunks, and how big those chunks are — useful if you're running on a laptop, or importing a scan on the larger end.

CaveViewer's Advanced Settings panel, showing Streaming Performance and Map Parsing options like RAM target, GPU memory target, worker count, and chunk size

Customization

Set the void to whatever color helps you see

The empty space beyond the scan doesn't have to be black — drag the R, G, and B sliders in the Color panel to pick a background that makes wireframe or thin passages easier to read against.

CaveViewer's Background Color panel open over a wireframe cave view, with R, G, and B sliders set to a dark red

Station 02
Compatibility

Bring your own scan

CaveViewer reads the formats survey and photogrammetry software actually export. Drop in a folder, and it figures out the rest.

.OBJ + .MTL + tiled .JPG — Agisoft Metashape and similar photogrammetry exports
.GLB — binary glTF, including models with textures embedded directly in the file

Station 03
On Screen

Everything you need is one column, one corner

Every adjustable control — headlamp, global light, render distance, mesh and texture toggles, the background color picker, switching maps — lives in a single column anchored to the bottom-right corner. A live readout above the minimap shows your current frame rate and how many chunks are loaded, in real time.

FPS 58 · CHUNKS 214 (0 pending)
BRIGHTNESS − 5 +    GLOBAL LIGHT − 2 +    DISTANCE − 4 +
[ MESH ] [ TEXTURE ] [ SHADE ] [ OPEN ] [ HELP ] [ COLOR ]
Close-up of CaveViewer's bottom-right control column: brightness, global light, distance, then Mesh, Texture, Shade, Open, Help, and Color buttons

The whole column, live — Mesh, Texture, and the new Shade toggle for switching between smooth and flat-faceted surfaces.

CaveViewer's full-screen controls reference, listing every key and button, shown while a cave loads

This full reference appears automatically while a map loads, and anytime after via the HELP button — including camera bookmark slots (save with Ctrl+1–9, recall with 1–9).

Station 04
Getting In

Install

Grab the build for your system — no Python install, no terminal commands to memorize, no dependencies to hunt down.

  1. Download the build for your platform

    From the Releases page, grab the .dmg for macOS (Apple Silicon), the .zip for Windows, or the .AppImage for Linux (matching your CPU — x86_64 or aarch64).

  2. Install it

    macOS: open the DMG and drag CaveViewer into Applications. The first time it opens, go to Settings → Privacy & Security and allow it to run.
    Windows: extract the zip anywhere, then double-click launch.bat inside the folder.
    Linux: run chmod +x CaveViewer-*.AppImage, then launch it directly — no system install needed.

  3. Launch CaveViewer

    You'll land on the splash screen with a Select Map button — or click Download Sample Maps if you don't have a scan of your own yet and want to try it out first.

  4. Point it at your map

    Select the folder containing your .obj+.mtl or .glb file. First time opening a new map, it imports and caches it once — every open after that is instant.

CaveViewer's launch screen with the skull logo, version number, and Select Map button

What you see on launch — click Select Map and pick your map folder, or try a sample map instead.

CaveViewer's progress screen while importing a brand-new map for the first time, parsing geometry

First time opening a new map only — every open after this is instant.

CaveViewer's Sample Maps dialog, listing Devils Eye and Peacock Springs Cave System with Save to buttons

No scan of your own yet? Download a real cave system from the Sample Maps dialog and open it the same way.

Station 06
Field Notes

The dives behind the data

The scans CaveViewer opens come from real mapping expeditions. Here's footage from two of the systems the tool has been tested and used on.

Video thumbnail: Wes Skiles Peacock Springs State Park 3D Mapping Initiative Watch on YouTube

Wes Skiles Peacock Springs State Park — 3D Mapping Initiative

Peacock Springs, near Live Oak, Florida, is one of the longest underwater cave systems in the continental U.S. — nearly 33,000 feet of surveyed passage across two major springs and six sinkholes. This covers the effort to map it in 3D.

Video thumbnail: Devil's Eye Mapping Update, February 2026 Watch on YouTube

Devil's Eye — Mapping Update, February 2026

Devil's Eye is one of the entrances into the Ginnie Springs cave system in High Springs, Florida, and one of the most-dived training cave systems in the world. This is a progress update from the ongoing effort to map it.

Station 07
Surface

Built by people who use it

CaveViewer started as a way to actually look at the survey data from real dives, not just collect it.

Brian Deatherage (K3rnalPanic)
CO-CREATOR
Zsolt Zsabo
CO-CREATOR · BOTTOMLINE PROJECTS SCIENTIFIC DIVE TEAM
mr_v
CONTRIBUTOR