Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
601285e
Add first-class GARfVDB instance segmentation with portable NanoVDB a…
swahtz Jul 9, 2026
1117de4
Switch CDF to be calculated on data load and not stored in the SAM2 a…
swahtz Jul 9, 2026
a1dc408
Add interactive GARfVDB feature-overlay viewer with live controls
swahtz Jul 17, 2026
5d6418c
Merge branch 'main' into garfvdb
swahtz Jul 17, 2026
c77005f
Restore changes
swahtz Jul 17, 2026
52c7a74
Fix imports from fvdb-core -> fvdb_reality_capture move
swahtz Jul 17, 2026
dc8cb76
Format fix
swahtz Jul 17, 2026
27c2067
Update docs/api/frgs/mesh_basic.rst
swahtz Jul 20, 2026
d379fcb
Update docs/api/frgs/mesh_dlnr.rst
swahtz Jul 20, 2026
1573d72
Update docs/api/frgs.rst
swahtz Jul 20, 2026
f6ea5f6
Update docs/api/frgs.rst
swahtz Jul 20, 2026
cd5f4e2
Update docs/tutorials/instance_segmentation.rst
swahtz Jul 20, 2026
eae2e78
Rename "carrier" to "gaussians" in the GARfVDB integration
swahtz Jul 20, 2026
1a7208b
Add .garfvdb to gitignore
swahtz Jul 20, 2026
09ce838
Rename checkpoint "envelope" to "container"
swahtz Jul 20, 2026
de91da8
Fix grammar in parse_training_checkpoint docstring
swahtz Jul 20, 2026
af4e61b
Document the container schema vs. method version axes
swahtz Jul 20, 2026
5f708f8
Change default image downsample factor to 4 to match reconstruction
swahtz Jul 20, 2026
9a71e02
Add safetensors to docs requirements
swahtz Jul 20, 2026
d70720e
Fix mask-selection CDF: index probabilities by mask id, drop -1 padding
swahtz Jul 20, 2026
f12232e
Fix JPEG rescale, Resize intrinsics, retry counter, and doc indentation
swahtz Jul 20, 2026
a939db5
Convert SAM2 inputs to RGB, apply true 3x3 mask erosion, and keep Gau…
swahtz Jul 20, 2026
497d04a
Apply optimized reconstruction poses before mask generation, persist …
swahtz Jul 20, 2026
1d8606f
Fix docs build
swahtz Jul 20, 2026
5d171e5
Docs build fix
swahtz Jul 20, 2026
f430322
Docs build fix
swahtz Jul 20, 2026
2198553
Fix device-mismatch and empty-render-target edge cases (Copilot review)
swahtz Jul 20, 2026
3f78149
Import SummaryWriter lazily so the package imports without tensorboard
swahtz Jul 20, 2026
ecd4bb6
Fix GARfVDB artifact tests for the rebuilt fvdb
swahtz Jul 21, 2026
a364be4
Formatting fix
swahtz Jul 21, 2026
413de1e
Fix mask-CDF degenerate case and HSV->RGB conversion (Copilot review)
swahtz Jul 22, 2026
8cb9473
Fix ExponentialLRWithRampUpScheduler.get_lr() divide by zero when max…
swahtz Jul 22, 2026
3fb96a1
Fix viewer pca input checking.
swahtz Jul 22, 2026
44e4216
Guard mask-id -1 padding in scale lookups (Copilot review)
swahtz Jul 22, 2026
d1743fa
Fix orbit radius and document conditional PCA return shapes (Copilot …
swahtz Jul 22, 2026
c99fb9f
Add polling timeout for FileLock on worker threads (Copilot review)
swahtz Jul 23, 2026
b517274
Fix --viewer-ip-address help text (Copilot review)
swahtz Jul 23, 2026
45373b9
Merge branch 'main' into garfvdb
swahtz Aug 20, 2026
66dcd5b
Rename frgs instance-segmentation command to segment-instances
swahtz Aug 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
fVDB-Reality-Capture Version History
====================================

## Unreleased
## Version 0.6.0 - Unreleased

- Added first-class GARfVDB scale-conditioned instance segmentation through the Python API and
`frgs instance-segmentation` command.
- Added portable `.garfvdb` bundles using NanoVDB encoder fields, safetensors network weights, and a PLY Gaussian
carrier. Manifests carry an explicit `schema_version` used to select an exact reader for future compatibility.
Added product-aware `frgs show` and `frgs resume` dispatch.
- Integrated GARfVDB preprocessing with the standard scene-transform pipeline. SAM2 supervision is represented by a
registered, namespaced scene attribute so it composes with other derived scene products without replacing the
scene cache or discarding existing attributes.
- Added a method-neutral, versioned training-checkpoint envelope and resume-handler registry. `frgs resume` now
dispatches stable method IDs without relying on product extensions or falling through unknown methods to Gaussian
reconstruction.

### Gaussian Splatting API

Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

fVDB-Reality-Capture is a reality-capture toolbox built on top of [fVDB](https://fvdb-core.readthedocs.io). It
provides high-level abstractions and APIs for common reality capture tasks, such as loading sensor data, reconstructing
radiance fields, extracting meshes and point clouds, visualization, and exporting results across standard formats such
radiance fields, learning scale-conditioned instance feature fields, extracting meshes and point clouds, visualization,
and exporting results across standard formats such
as PLY and USD (USDC/USDZ).

By leveraging the power of fVDB, fVDB-Reality-Capture can scale reconstruction to very large or dense
Expand Down
14 changes: 14 additions & 0 deletions docs/api/checkpoints.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Training checkpoints
====================

Reality Capture training checkpoints use a method-neutral, versioned envelope. The envelope identifies the stable
Comment thread
swahtz marked this conversation as resolved.
Outdated
method ID and keeps method-owned optimizer, dataset, and model state inside ``state``. Product extensions such as
``.garfvdb`` are not used for resume dispatch.

Each method owns its method ID and any adapter for checkpoints written before the envelope was introduced. The
``frgs resume`` command separately owns resume-handler registration and output defaults, keeping CLI policy out of
the serialization layer.

.. automodule:: fvdb_reality_capture.checkpoints
:members: TrainingCheckpoint, create_training_checkpoint, load_training_checkpoint,
parse_training_checkpoint, register_legacy_checkpoint_adapter
12 changes: 9 additions & 3 deletions docs/api/frgs.rst
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
``frgs 🐸 CLI Tool``
==========================================

fVDB-Reality-Capture provides a command-line interface (CLI) tool called ``frgs`` for tools related to Gaussian splatting.
fVDB-Reality-Capture provides a command-line interface (CLI) tool called ``frgs`` for tools related to Gaussian Splatting
Comment thread
swahtz marked this conversation as resolved.
Outdated
and derived spatial products.
``frgs`` is pronounced "frogs" 🐸, and is short for **F**\ vdb-\ **R**\ eality-capture **G**\ aussian **S**\ platting.

This tool allows users to perform Gaussian-splatting-related tasks such as reconstruction, format conversions,
mesh and point cloud extraction, and visualization directly from the command line, without needing to write any code.
This tool covers reconstruction, derived instance feature fields, format conversion, mesh and point-cloud extraction,
Comment thread
swahtz marked this conversation as resolved.
Outdated
and visualization directly from the command line without requiring Python code.


``frgs convert``
Expand All @@ -28,6 +29,11 @@ mesh and point cloud extraction, and visualization directly from the command lin

.. include:: frgs/mesh_basic.rst

``frgs instance-segmentation``
Comment thread
swahtz marked this conversation as resolved.
Outdated
--------------------------------

.. include:: frgs/instance_segmentation.rst

``frgs mesh-dlnr``
----------------------

Expand Down
2 changes: 1 addition & 1 deletion docs/api/frgs/evaluate.rst
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,6 @@
│ -s, --save-images, --no-save-images │
│ Whether to save the rendered images. Defaults to True. (default: True) │
│ --device STR|DEVICE │
│ Device to use for computation. Defaults to "cuda". (default: cuda)
│ Device to use for computation. Defaults to "cuda:0". (default: cuda:0)
╰────────────────────────────────────────────────────────────────────────────────────────────────╯

15 changes: 15 additions & 0 deletions docs/api/frgs/instance_segmentation.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
.. code-block:: text

usage: frgs instance-segmentation [-h] [INSTANCE-SEGMENTATION OPTIONS] PATH

Train a GARfVDB scale-conditioned instance feature field from an existing Reality Capture reconstruction.

Example:

frgs instance-segmentation ./colmap_dataset \
--reconstruction-path scene.ply \
--out-path scene.garfvdb

Required inputs are the original posed-image dataset and the matching Reality Capture PLY or checkpoint.
The output is a portable directory containing NanoVDB encoder grids, safetensors network weights, and the
exact filtered Gaussian carrier.
2 changes: 1 addition & 1 deletion docs/api/frgs/mesh_basic.rst
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,6 @@
│ -o PATH, --output-path PATH │
│ Path to save the extracted mesh (default is "mesh.ply"). (default: │
│ mesh.ply) │
│ -d STR, --device STR Extract a mesh from a Gaussian Splat reconstruction. (default: cuda)
│ -d STR, --device STR Extract a mesh from a Gaussian Splat reconstruction. (default: cuda:0)
Comment thread
swahtz marked this conversation as resolved.
Outdated
╰────────────────────────────────────────────────────────────────────────────────────────────────╯

2 changes: 1 addition & 1 deletion docs/api/frgs/mesh_dlnr.rst
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,6 @@
│ -o PATH, --output-path PATH │
│ Path to save the extracted mesh (default is "mesh.ply"). (default: │
│ mesh.ply) │
│ -d STR, --device STR Extract a mesh from a Gaussian Splat reconstruction. (default: cuda)
│ -d STR, --device STR Extract a mesh from a Gaussian Splat reconstruction. (default: cuda:0)
Comment thread
swahtz marked this conversation as resolved.
Outdated
╰────────────────────────────────────────────────────────────────────────────────────────────────╯

2 changes: 1 addition & 1 deletion docs/api/frgs/points.rst
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,6 @@
│ -o PATH, --output-path PATH │
│ Path to save the extracted mesh (default is "mesh.ply"). (default: │
│ points.ply) │
│ -d STR, --device STR Device to use for computation (default is "cuda"). (default: cuda)
│ -d STR, --device STR Device to use for computation (default is "cuda:0"). (default: cuda:0)
╰────────────────────────────────────────────────────────────────────────────────────────────────╯

2 changes: 1 addition & 1 deletion docs/api/frgs/reconstruct.rst
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
│ -d STR|DEVICE, --device STR|DEVICE │
│ Which device to use for reconstruction. Must be a cuda device. You can pass in a │
│ specific device index via cuda:N where N is the device index, or "cuda" to use the │
│ default cuda device. CPU is not supported. Default is "cuda". (default: cuda)
│ default cuda device. CPU is not supported. Default is "cuda:0". (default: cuda:0)
│ -v, --verbose, --no-verbose │
│ If set, show verbose debug messages. (default: False) │
│ -nc INT INT INT, --nchunks INT INT INT │
Expand Down
14 changes: 7 additions & 7 deletions docs/api/frgs/resume.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@

usage: frgs resume [-h] [RESUME OPTIONS] PATH

Resume reconstructing a 3D Gaussian Splat radiance field from a checkpoint. This command loads a
model checkpoint and continues reconstruction from that point. The dataset used to create the
checkpoint must be at the same path as when the checkpoint was created.
Resume a Reality Capture training run. The versioned checkpoint envelope identifies the method and dispatches
its registered resume handler. Source dataset paths recorded by the checkpoint must remain available.

Example usage:

Expand All @@ -13,7 +12,7 @@

╭─ positional arguments ───────────────────────────────────────────────────────────────────────╮
│ PATH │
│ Path to the checkpoint file containing the Gaussian Splat radiance field. (required) │
│ Path to a versioned Reality Capture training checkpoint. (required)
╰──────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ options ────────────────────────────────────────────────────────────────────────────────────╮
│ -h, --help │
Expand All @@ -32,12 +31,13 @@
│ -d STR|DEVICE, --device STR|DEVICE │
│ Which device to use for reconstruction. Must be a cuda device. You can pass in a │
│ specific device index via cuda:N where N is the device index, or "cuda" to use the │
│ default cuda device. CPU is not supported. Default is "cuda". (default: cuda)
│ default cuda device. CPU is not supported. Default is "cuda:0". (default: cuda:0)
│ -v, --verbose, --no-verbose │
│ If set, show verbose debug messages. (default: False) │
│ -o PATH, --out-path PATH │
│ Path to save the output PLY file. Defaults to `out.ply` in the current working │
│ directory. Path must end in .ply, .usdc, or .usdz. (default: out_resumed.ply) │
│ Output product path. The default is selected by the checkpoint method. (default: None) │
│ -r {None}|PATH, --reconstruction-path {None}|PATH │
│ Override a reconstruction referenced by a derived-product checkpoint. (default: None) │
╰──────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ io options ─────────────────────────────────────────────────────────────────────────────────╮
│ Configure saving and logging metrics, images, and checkpoints. │
Expand Down
10 changes: 4 additions & 6 deletions docs/api/frgs/show.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

usage: frgs show [-h] [SHOW OPTIONS] PATH

Visualize a Gaussian splat radiance field in a saved PLY or checkpoint file. This will plot the
splats in an interactive viewer shown in a browser window.
Visualize a saved Reality Capture product. Supported inputs are Gaussian PLY/checkpoint files
and portable GARfVDB bundle directories.

# Example usage:

Expand All @@ -14,8 +14,7 @@
frgs show model.pt --viewer-port 8888

╭─ positional arguments ───────────────────────────────────────────────────────────────────────╮
│ PATH Path to the input PLY or checkpoint file. Must end in .ply, .pt, or │
│ .pth. (required) │
│ PATH Path to a PLY, checkpoint, or .garfvdb bundle. (required) │
╰──────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ options ────────────────────────────────────────────────────────────────────────────────────╮
│ -h, --help show this help message and exit │
Expand All @@ -25,6 +24,5 @@
│ The port to expose the viewer server on. (default: 127.0.0.1) │
Comment thread
swahtz marked this conversation as resolved.
Outdated
│ -v, --verbose, --no-verbose │
│ If True, then the viewer will log verbosely. (default: False) │
│ --device STR|DEVICE Device to use for computation (default is "cuda"). (default: cuda)
│ --device STR|DEVICE Device to use for computation (default is "cuda:0"). (default: cuda:0)
╰──────────────────────────────────────────────────────────────────────────────────────────────╯

39 changes: 39 additions & 0 deletions docs/api/instance_segmentation.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
Instance segmentation
=====================

Portable bundle format
----------------------

``.garfvdb`` manifests use the schema name ``fvdb_reality_capture.garfvdb`` and an integer ``schema_version``.
The current version is available as :data:`ARTIFACT_SCHEMA_VERSION`. Loaders select an exact version-specific
reader and raise :class:`GARfVDBArtifactVersionError` for unsupported versions.

GARfVDB
-------

.. currentmodule:: fvdb_reality_capture.instance_segmentation

.. autoclass:: GARfVDB
:members:

.. autoclass:: GARfVDBTrainer
:members: new, from_state_dict, from_checkpoint_file, train, to_product, state_dict

.. autoclass:: GARfVDBConfig
:members:

.. autoclass:: GARfVDBTrainingConfig
:members:

.. autoclass:: GARfVDBTransformConfig
:members:

.. autoclass:: GARfVDBMaskAttribute
:members:

.. autoclass:: GenerateGARfVDBMasks
:members:

.. autoexception:: GARfVDBArtifactError

.. autoexception:: GARfVDBArtifactVersionError
5 changes: 4 additions & 1 deletion docs/api/transforms.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,8 @@
:special-members: __init__, __call__

.. autoclass:: fvdb_reality_capture.transforms.Identity
:members:
:members:

.. autoclass:: fvdb_reality_capture.transforms.SceneTransformConfig
:members:
:special-members: __init__, __call__
Comment thread
swahtz marked this conversation as resolved.
4 changes: 4 additions & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ Features
- Extraction of high-quality meshes and point clouds from reconstructed radiance fields, with support for various output
formats.
- Visualization tools for inspecting sensor data, radiance fields, and reconstruction results.
- Scale-conditioned 3D instance feature fields using GARfVDB, stored as portable NanoVDB-based artifacts.
- Extensible design that allows users to easily add new functionality and customize existing components.
- Comprehensive documentation and tutorials to help users get started quickly.
- Automatic scaling to multiple GPUs in a single machine for large-scale reconstructions
Expand Down Expand Up @@ -96,6 +97,7 @@ A common reality capture pipeline typically resembles the figure below:
tutorials/sensor_data_loading_and_manipulation
tutorials/radiance_field_and_mesh_reconstruction
tutorials/frgs
tutorials/instance_segmentation

.. toctree::
:maxdepth: 1
Expand All @@ -107,7 +109,9 @@ A common reality capture pipeline typically resembles the figure below:
api/sfm_scene
api/tools
api/transforms
api/checkpoints
api/frgs
api/instance_segmentation

.. toctree::
:maxdepth: 1
Expand Down
Loading
Loading