A SwarmUI extension that turns images into 3D Gaussian Splats directly inside the browser.
https://github.com/user-attachments/assets/c71d7912-4fa1-4b15-a6fe-c7ea75f13da8
Nine reconstruction models are supported:
Note: VGGT and InstantSplat output geometry-initialised point clouds represented as Gaussians with fixed scale and opacity — they are not the result of a full 3DGS training optimisation loop. Results are usable for previewing and exporting but will not match the quality of a dedicated 3DGS training pipeline.
Gaussian results are saved as .ply (default) or .splat; Pixal3D and TRELLIS.2 results are saved as .glb. MoGe supports textured GLB, untextured GLB, Gaussian PLY, and Gaussian SPLAT. All formats are rendered interactively in the dedicated Splat Viewer tab.
Single image Single image 1+ images (VGGT) 2+ images (InstantSplat)
(ml-sharp) (TripoSplat) │ │
│ │ ▼ ▼
▼ ▼ [Splat Viewer → drop images & select model]
[Generate 3D Splat button] │ │ │
│ │ │ │
└──────────┬───────────┴─────────────────────┴────────────────────────┘
▼ (base64 → server)
SharpSplat API (C#)
│
┌───────────┼─────────────┬───────────┐
▼ ▼ ▼ ▼
ml-sharp TripoSplat VGGT InstantSplat
(single img)(single img) (1+ imgs) (2+ imgs, MASt3R)
│ │ │ │
└───────────┴─────────────┴───────────┘
▼
.ply output
│
[if format = splat]
▼
ply2splat → .splat
saved to Output/{user}/splats/
│
▼
Splat Viewer tab (WebGL)
GPU and memory disclosure: Pixal3D and TRELLIS.2 are substantially more resource-intensive than the splat viewer and the lighter reconstruction paths. They keep the GPU busy for an extended period and can require significant VRAM, system RAM, temporary working memory, and disk space while generating geometry, remeshing, and baking PBR textures. Exact requirements depend on the GPU, backend configuration, and input, but low-VRAM systems may run slowly due to model offloading or fail with an out-of-memory error. Close other GPU-heavy applications and avoid running multiple native 3D jobs concurrently.
Python dependencies are installed automatically on first use:
| Package | Purpose |
|---|---|
| ml-sharp | Monocular 3DGS reconstruction (single image) |
| TripoSplat | Single-image 3DGS reconstruction with SH (model weights ~3 GB, downloaded from HuggingFace on first use) |
| VGGT | Multi-view 3D reconstruction |
| huggingface_hub | Downloads VGGT / TripoSplat model weights (first run only) |
| InstantSplat | MASt3R-based multi-view reconstruction (cloned from GitHub on first use, ~1.2 GB checkpoint downloaded automatically) |
| ply2splat | PLY → .splat conversion (only needed when output format is .splat) |
Pixal3D and TRELLIS.2 use ComfyUI's native nodes. Their Comfy-Org model files are downloaded automatically on first use and verified by SHA-256. A fresh TRELLIS.2 installation downloads approximately 8.9 GB; Pixal3D requires a similarly large download plus its MoGe camera-estimation model. These downloads are separate from the temporary memory and output storage used during generation.
MoGe also uses native ComfyUI inference, including MoGe-3 support present in current ComfyUI source even though the ComfyUI tutorial only describes MoGe-1/2. Update ComfyUI and its dependencies, then restart SwarmUI and the backend after installing this extension update. Gaussian output additionally uses the extension's SharpSplatMoGeToSplat adapter and ComfyUI's SplatToFile3D / SaveGaussianSplat nodes. No separate Microsoft MoGe Python installation is required.
Only the selected MoGe checkpoint is downloaded on first use, into SwarmUI's geometry_estimation model folder forwarded to ComfyUI. Downloads use the existing lock, temporary-file cleanup, and SHA-256 verification. Existing files are reused; MoGe-2 also reuses the checkpoint installed for Pixal3D. Sources are the official Comfy-Org/MoGe repository:
| Model | Checkpoint | Approximate Download |
|---|---|---|
| MoGe-1 | moge_1_vitl_fp16.safetensors | 628 MB |
| MoGe-2 | moge_2_vitl_normal_fp16.safetensors | 662 MB |
| MoGe-3 | moge_3_vitl_fp16.safetensors | 741 MB |
Compact SPLAT export automatically installs ply2splat when missing using the existing NumPy-constrained installer. It does not install ml-sharp or VGGT.
From the extension directory:
dotnet run --project tests/WorkflowChecks.csproj -p:StaticWebAssetsEnabled=false
python -m unittest discover -s tests -p test_moge.py -v
node --check Assets/sharp_splat.js
Use the ComfyUI Python environment (or another environment with PyTorch) for the Python tests. These checks cover workflow selection, API validation, and geometry-to-Gaussian conversion without downloading model weights or running inference.
Or clone manually into src/Extensions/:
cd src/Extensions
git clone https://github.com/GlenCarpenter/SwarmUI-SharpSplat
Note: The Generate 3D Splat button in the image viewer uses the selected single-image model, including Pixal3D, TRELLIS.2, and all MoGe versions. For MoGe it also uses the selected MoGe output format. Use the Splat Viewer tab directly for VGGT and InstantSplat.
GLB outputs are meshes, with the source image embedded as a texture when enabled. Gaussian PLY and SPLAT contain geometry-derived Gaussians, with RGB-derived spherical-harmonic colors, adaptive isotropic scales, and fixed opacity. They are not optimized 3DGS reconstructions, and PLY here means Gaussian PLY, not a triangle mesh or plain point cloud. MoGe estimates visible surfaces only; hidden surfaces and object backsides remain missing. See the MoGe project and MoGe-3 project page.
All outputs are saved in the user's splats directory, listed in the viewer, and downloadable. The output choice and inference settings persist between sessions. The <sharpsplat> automatic prompt tag does not select MoGe.
You can also drop or browse to an image in the Splat Viewer sidebar directly.
Choosing between ml-sharp and TripoSplat:
TripoSplat can also be used from the Splat Viewer tab, which is useful for generating from an image that wasn't produced by SwarmUI.
Model files downloaded on first use:
| File | Description |
|---|---|
diffusion_models/triposplat_fp16.safetensors | Main denoising UNet |
clip_vision/dino_v3_vit_h.safetensors | DINOv3 ViT-H image encoder |
vae/triposplat_vae_decoder_fp16.safetensors | Splat VAE decoder |
vae/flux2-vae.safetensors | Flux VAE (image encoding) |
background_removal/birefnet.safetensors | Optional background removal |
VGGT can work from a single image but produces significantly better results with multiple photos of the same subject taken from different angles (like a photogrammetry capture).
Tips for best results:
InstantSplat uses NVIDIA's MASt3R geometry initialisation pipeline and requires at least 2 images. On first use it clones the InstantSplat repository and downloads a ~1.2 GB MASt3R checkpoint automatically.
Tips for best results:
Open Settings in the Splat Viewer sidebar to configure:
| Setting | Description |
|---|---|
| Open in viewer after generation | Automatically navigate to the Splat Viewer tab when a splat finishes. |
| Reconstruction model | ml-sharp, TripoSplat, VGGT, InstantSplat, Pixal3D, TRELLIS.2, MoGe-1, MoGe-2, or MoGe-3. |
| MoGe output | Textured GLB (default), untextured GLB, Gaussian PLY, or compact Gaussian SPLAT. Separate from the other models' output preference. |
| Resolution level | (MoGe) 0-9, default 9. Higher levels capture more detail at higher inference cost. |
| Refinement steps | (MoGe-3) 0-8, default 3. Sparse refinement passes; 0 disables refinement. |
| Pad images to square | (VGGT / InstantSplat) Resize each input image to fit within a square and pad with neutral grey rather than centre-cropping. Useful when your source images are landscape or portrait. Low-confidence grey border splats are filtered out automatically. |
| Output format | PLY (default, no conversion) or SPLAT (compact binary, requires ply2splat). |
| Generate Repair Prompt button | Shows the Generate Repair Prompt button in the Export Canvas section. Intended for use with the ml-sharp repair LoRA — see below. Off by default. |
All settings are remembered between sessions.
<sharpsplat> prompt tagAdd <sharpsplat> anywhere in your prompt to automatically generate a splat from every image produced by that generation, without clicking the button manually.
a photo of a red apple on a wooden table <sharpsplat>
ml-sharp or TripoSplat). VGGT and InstantSplat are not available via the prompt tag.The tag is available in the prompt autocomplete — type <sharpsplat to see it suggested.
.ply and .splat files are listed in the left sidebar, newest first.The Export Canvas section in the Splat Viewer sidebar lets you capture the current rendered frame as a PNG.
Output/local/splats_export/ with a filename of splatname_timestamp.png, or Download to download it directly to your browser's download folder.The Generate Repair Prompt button produces a prompt pre-filled with the current camera movement delta, designed for use with the flux2-klein9b-lora-mlsharp-3d-repair LoRA. The workflow is:
The prompt takes the form:
Referring to the scene in image 1, restore the perspective of the scene in image 2. Repair the perspective and missing areas. The camera has moved by: {"x":0,"y":0,"z":0,"pitch":0,"yaw":0,"roll":0}
Position values (x, y, z) are world-space translation deltas relative to the initial camera position at scene load. Rotation values (pitch, yaw, roll) are in degrees.
Note: This feature is designed for ml-sharp splats. The repair LoRA was trained on ml-sharp output — results with TripoSplat splats may vary. VGGT and InstantSplat produce multi-view reconstructions with different geometry characteristics that the repair LoRA was not trained for.
This button is hidden by default. Enable it in Settings → Generate Repair Prompt button.
| Action | Control |
|---|---|
| Orbit | Left-click + drag |
| Zoom | Scroll wheel |
| Pan | Right-click + drag |
When a .glb mesh is selected, the sidebar shows a Lighting section. The controls update the rendered view immediately:
| Control | Effect |
|---|---|
| Exposure | Adjusts tone-mapping exposure for the complete rendered image. |
| Fill | Controls soft hemisphere illumination, including light from above and darker fill from below. |
| Key | Controls the intensity of the main directional light. |
| Azimuth | Rotates the key light horizontally around the model. |
| Elevation | Moves the key light above or below the model. |
| Reset Lighting | Restores the default exposure, intensities, and key-light direction. |
Lighting settings are remembered between browser sessions. They affect the interactive viewer and images captured with Export Canvas, but they do not modify the GLB file or its embedded KHR_lights_punctual lights. Lighting controls are hidden for Gaussian splats because splat colors are rendered without the mesh lighting setup.
The built-in mesh viewer is intended for previewing generated assets and producing quick canvas captures, not for replacing a full 3D content-creation application. Downloaded GLB files can be imported into Blender through File → Import → glTF 2.0 (.glb/.gltf), or opened in other software with glTF 2.0 support. From there, continue the workflow with persistent scene lights, cameras, materials, animation, compositing, and renderer-specific effects. The appearance may vary between applications because environment lighting, color management, shadows, and some renderer settings are not stored portably in the GLB.
PLY as SPLAT or KSPLATSPLAT as KSPLATA SwarmUI extension that turns images into 3D Gaussian Splats directly inside the browser.
https://github.com/user-attachments/assets/c71d7912-4fa1-4b15-a6fe-c7ea75f13da8
Nine reconstruction models are supported:
Note: VGGT and InstantSplat output geometry-initialised point clouds represented as Gaussians with fixed scale and opacity — they are not the result of a full 3DGS training optimisation loop. Results are usable for previewing and exporting but will not match the quality of a dedicated 3DGS training pipeline.
Gaussian results are saved as .ply (default) or .splat; Pixal3D and TRELLIS.2 results are saved as .glb. MoGe supports textured GLB, untextured GLB, Gaussian PLY, and Gaussian SPLAT. All formats are rendered interactively in the dedicated Splat Viewer tab.
Single image Single image 1+ images (VGGT) 2+ images (InstantSplat)
(ml-sharp) (TripoSplat) │ │
│ │ ▼ ▼
▼ ▼ [Splat Viewer → drop images & select model]
[Generate 3D Splat button] │ │ │
│ │ │ │
└──────────┬───────────┴─────────────────────┴────────────────────────┘
▼ (base64 → server)
SharpSplat API (C#)
│
┌───────────┼─────────────┬───────────┐
▼ ▼ ▼ ▼
ml-sharp TripoSplat VGGT InstantSplat
(single img)(single img) (1+ imgs) (2+ imgs, MASt3R)
│ │ │ │
└───────────┴─────────────┴───────────┘
▼
.ply output
│
[if format = splat]
▼
ply2splat → .splat
saved to Output/{user}/splats/
│
▼
Splat Viewer tab (WebGL)
GPU and memory disclosure: Pixal3D and TRELLIS.2 are substantially more resource-intensive than the splat viewer and the lighter reconstruction paths. They keep the GPU busy for an extended period and can require significant VRAM, system RAM, temporary working memory, and disk space while generating geometry, remeshing, and baking PBR textures. Exact requirements depend on the GPU, backend configuration, and input, but low-VRAM systems may run slowly due to model offloading or fail with an out-of-memory error. Close other GPU-heavy applications and avoid running multiple native 3D jobs concurrently.
Python dependencies are installed automatically on first use:
| Package | Purpose |
|---|---|
| ml-sharp | Monocular 3DGS reconstruction (single image) |
| TripoSplat | Single-image 3DGS reconstruction with SH (model weights ~3 GB, downloaded from HuggingFace on first use) |
| VGGT | Multi-view 3D reconstruction |
| huggingface_hub | Downloads VGGT / TripoSplat model weights (first run only) |
| InstantSplat | MASt3R-based multi-view reconstruction (cloned from GitHub on first use, ~1.2 GB checkpoint downloaded automatically) |
| ply2splat | PLY → .splat conversion (only needed when output format is .splat) |
Pixal3D and TRELLIS.2 use ComfyUI's native nodes. Their Comfy-Org model files are downloaded automatically on first use and verified by SHA-256. A fresh TRELLIS.2 installation downloads approximately 8.9 GB; Pixal3D requires a similarly large download plus its MoGe camera-estimation model. These downloads are separate from the temporary memory and output storage used during generation.
MoGe also uses native ComfyUI inference, including MoGe-3 support present in current ComfyUI source even though the ComfyUI tutorial only describes MoGe-1/2. Update ComfyUI and its dependencies, then restart SwarmUI and the backend after installing this extension update. Gaussian output additionally uses the extension's SharpSplatMoGeToSplat adapter and ComfyUI's SplatToFile3D / SaveGaussianSplat nodes. No separate Microsoft MoGe Python installation is required.
Only the selected MoGe checkpoint is downloaded on first use, into SwarmUI's geometry_estimation model folder forwarded to ComfyUI. Downloads use the existing lock, temporary-file cleanup, and SHA-256 verification. Existing files are reused; MoGe-2 also reuses the checkpoint installed for Pixal3D. Sources are the official Comfy-Org/MoGe repository:
| Model | Checkpoint | Approximate Download |
|---|---|---|
| MoGe-1 | moge_1_vitl_fp16.safetensors | 628 MB |
| MoGe-2 | moge_2_vitl_normal_fp16.safetensors | 662 MB |
| MoGe-3 | moge_3_vitl_fp16.safetensors | 741 MB |
Compact SPLAT export automatically installs ply2splat when missing using the existing NumPy-constrained installer. It does not install ml-sharp or VGGT.
From the extension directory:
dotnet run --project tests/WorkflowChecks.csproj -p:StaticWebAssetsEnabled=false
python -m unittest discover -s tests -p test_moge.py -v
node --check Assets/sharp_splat.js
Use the ComfyUI Python environment (or another environment with PyTorch) for the Python tests. These checks cover workflow selection, API validation, and geometry-to-Gaussian conversion without downloading model weights or running inference.
Or clone manually into src/Extensions/:
cd src/Extensions
git clone https://github.com/GlenCarpenter/SwarmUI-SharpSplat
Note: The Generate 3D Splat button in the image viewer uses the selected single-image model, including Pixal3D, TRELLIS.2, and all MoGe versions. For MoGe it also uses the selected MoGe output format. Use the Splat Viewer tab directly for VGGT and InstantSplat.
GLB outputs are meshes, with the source image embedded as a texture when enabled. Gaussian PLY and SPLAT contain geometry-derived Gaussians, with RGB-derived spherical-harmonic colors, adaptive isotropic scales, and fixed opacity. They are not optimized 3DGS reconstructions, and PLY here means Gaussian PLY, not a triangle mesh or plain point cloud. MoGe estimates visible surfaces only; hidden surfaces and object backsides remain missing. See the MoGe project and MoGe-3 project page.
All outputs are saved in the user's splats directory, listed in the viewer, and downloadable. The output choice and inference settings persist between sessions. The <sharpsplat> automatic prompt tag does not select MoGe.
You can also drop or browse to an image in the Splat Viewer sidebar directly.
Choosing between ml-sharp and TripoSplat:
TripoSplat can also be used from the Splat Viewer tab, which is useful for generating from an image that wasn't produced by SwarmUI.
Model files downloaded on first use:
| File | Description |
|---|---|
diffusion_models/triposplat_fp16.safetensors | Main denoising UNet |
clip_vision/dino_v3_vit_h.safetensors | DINOv3 ViT-H image encoder |
vae/triposplat_vae_decoder_fp16.safetensors | Splat VAE decoder |
vae/flux2-vae.safetensors | Flux VAE (image encoding) |
background_removal/birefnet.safetensors | Optional background removal |
VGGT can work from a single image but produces significantly better results with multiple photos of the same subject taken from different angles (like a photogrammetry capture).
Tips for best results:
InstantSplat uses NVIDIA's MASt3R geometry initialisation pipeline and requires at least 2 images. On first use it clones the InstantSplat repository and downloads a ~1.2 GB MASt3R checkpoint automatically.
Tips for best results:
Open Settings in the Splat Viewer sidebar to configure:
| Setting | Description |
|---|---|
| Open in viewer after generation | Automatically navigate to the Splat Viewer tab when a splat finishes. |
| Reconstruction model | ml-sharp, TripoSplat, VGGT, InstantSplat, Pixal3D, TRELLIS.2, MoGe-1, MoGe-2, or MoGe-3. |
| MoGe output | Textured GLB (default), untextured GLB, Gaussian PLY, or compact Gaussian SPLAT. Separate from the other models' output preference. |
| Resolution level | (MoGe) 0-9, default 9. Higher levels capture more detail at higher inference cost. |
| Refinement steps | (MoGe-3) 0-8, default 3. Sparse refinement passes; 0 disables refinement. |
| Pad images to square | (VGGT / InstantSplat) Resize each input image to fit within a square and pad with neutral grey rather than centre-cropping. Useful when your source images are landscape or portrait. Low-confidence grey border splats are filtered out automatically. |
| Output format | PLY (default, no conversion) or SPLAT (compact binary, requires ply2splat). |
| Generate Repair Prompt button | Shows the Generate Repair Prompt button in the Export Canvas section. Intended for use with the ml-sharp repair LoRA — see below. Off by default. |
All settings are remembered between sessions.
<sharpsplat> prompt tagAdd <sharpsplat> anywhere in your prompt to automatically generate a splat from every image produced by that generation, without clicking the button manually.
a photo of a red apple on a wooden table <sharpsplat>
ml-sharp or TripoSplat). VGGT and InstantSplat are not available via the prompt tag.The tag is available in the prompt autocomplete — type <sharpsplat to see it suggested.
.ply and .splat files are listed in the left sidebar, newest first.The Export Canvas section in the Splat Viewer sidebar lets you capture the current rendered frame as a PNG.
Output/local/splats_export/ with a filename of splatname_timestamp.png, or Download to download it directly to your browser's download folder.The Generate Repair Prompt button produces a prompt pre-filled with the current camera movement delta, designed for use with the flux2-klein9b-lora-mlsharp-3d-repair LoRA. The workflow is:
The prompt takes the form:
Referring to the scene in image 1, restore the perspective of the scene in image 2. Repair the perspective and missing areas. The camera has moved by: {"x":0,"y":0,"z":0,"pitch":0,"yaw":0,"roll":0}
Position values (x, y, z) are world-space translation deltas relative to the initial camera position at scene load. Rotation values (pitch, yaw, roll) are in degrees.
Note: This feature is designed for ml-sharp splats. The repair LoRA was trained on ml-sharp output — results with TripoSplat splats may vary. VGGT and InstantSplat produce multi-view reconstructions with different geometry characteristics that the repair LoRA was not trained for.
This button is hidden by default. Enable it in Settings → Generate Repair Prompt button.
| Action | Control |
|---|---|
| Orbit | Left-click + drag |
| Zoom | Scroll wheel |
| Pan | Right-click + drag |
When a .glb mesh is selected, the sidebar shows a Lighting section. The controls update the rendered view immediately:
| Control | Effect |
|---|---|
| Exposure | Adjusts tone-mapping exposure for the complete rendered image. |
| Fill | Controls soft hemisphere illumination, including light from above and darker fill from below. |
| Key | Controls the intensity of the main directional light. |
| Azimuth | Rotates the key light horizontally around the model. |
| Elevation | Moves the key light above or below the model. |
| Reset Lighting | Restores the default exposure, intensities, and key-light direction. |
Lighting settings are remembered between browser sessions. They affect the interactive viewer and images captured with Export Canvas, but they do not modify the GLB file or its embedded KHR_lights_punctual lights. Lighting controls are hidden for Gaussian splats because splat colors are rendered without the mesh lighting setup.
The built-in mesh viewer is intended for previewing generated assets and producing quick canvas captures, not for replacing a full 3D content-creation application. Downloaded GLB files can be imported into Blender through File → Import → glTF 2.0 (.glb/.gltf), or opened in other software with glTF 2.0 support. From there, continue the workflow with persistent scene lights, cameras, materials, animation, compositing, and renderer-specific effects. The appearance may vary between applications because environment lighting, color management, shadows, and some renderer settings are not stored portably in the GLB.
PLY as SPLAT or KSPLATSPLAT as KSPLAT