Postshot Train (mtb)
Train Gaussian Splat / NeRF radiance fields from ComfyUI
- images
- project_file_path
This is the odd one out in MTB, and easily the most advanced. Postshot Train (mtb) doesn't make an image - it takes a set of images of a scene and trains a radiance field (a 3D Gaussian Splat or a NeRF) from them, so you can end up with a navigable 3D reconstruction instead of a flat picture. It does this by driving Jawset's Postshot application from inside your ComfyUI graph.
Be clear-eyed about what this is: it's a wrapper around external software, not a self-contained node. Postshot is a separate desktop app (Windows) that does the actual reconstruction; this node shells out to its command-line tool. So the value is workflow glue - if you're already generating or collecting multi-view images in ComfyUI, this lets you kick off a splat/NeRF training run without leaving the graph. If you've never touched photogrammetry or Gaussian Splatting, this is a deep-end node and not where you start.
It lives in its own postshot corner of MTB Nodes (comfy_mtb) by melMass.
How it works
Gaussian Splatting and NeRFs both reconstruct a 3D scene from many photos taken around it, then let you render new viewpoints. Splats represent the scene as millions of little 3D blobs and render fast; NeRFs represent it as a neural field and render slower but can be very detailed. The node feeds your images to the Postshot CLI, picks a reconstruction profile, runs the training, and returns the path to the resulting project file.
Per the node's own docs, you must run the Postshot GUI at least once and log in before the CLI will work, and if you installed it somewhere non-standard you set the location in ComfyUI's Settings > MTB.
The inputs and outputs that matter
images- the multi-view set of the scene. More coverage, better reconstruction.profile- the reconstruction model. Options areSplat MCMC(the default and the recommended profile for most scenes - it caps the number of splat primitives, so it controls memory and disk),Splat ADC(similar, with a density knob), and five NeRF sizesS/M/L/XL/XXL. Per the docs, NeRF L is the recommended default when you want good image quality; S is toy-scale, XL/XXL push fine detail at heavy cost. NeRFs render much slower than splats.train_steps_limit(default 30) - how long training runs. Higher means more refinement and more time.image_select(best/all, defaultbest) - whether Postshot auto-picks the best frames or uses everything you gave it.postshot_cli- the path topostshot-cli.exe. Defaults to the standard Windows install location; change it if yours differs.
There are several optional tuning inputs - among them splat_density, max_num_splats, max_image_size, num_train_images, gpu, and export_splat_ply (set a path to export a .ply splat file). Leave them at defaults until you know why you're changing them.
Output is project_file_path (STRING) - the location of the trained Postshot project, which you open in Postshot to view or export.
How to install it
The ComfyUI side is normal: ComfyUI Manager → search MTB Nodes → install → restart, or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/melMass/comfy_mtb
The catch is the external dependency. You must install Jawset Postshot separately (it's a Windows application), run its GUI once and log in, and make sure the postshot_cli path points at its executable. Without Postshot itself installed, this node has nothing to call.
Common issues & troubleshooting
"postshot-cli not found." The postshot_cli path is wrong, or Postshot isn't installed. Fix the path in the node or in Settings > MTB, and confirm the app is actually installed at that location.
It errors before training even starts. The docs are explicit: run the Postshot GUI at least once and log in first. The CLI relies on that initial setup; skipping it is the classic first-run failure.
Windows-shaped by default. The default CLI path is a C:/Program Files/... Windows path. This node is built around a desktop app that's Windows-first - running it on a headless Linux GPU box is not the intended setup.
Reconstruction looks rough. That's usually input coverage, not the node. Radiance fields need many overlapping views of the scene; a handful of frames from one angle can't reconstruct geometry. Give it more, well-distributed images, and start with Splat MCMC before reaching for the slow, heavy NeRF profiles.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | These image will get save to disk first | |
| profile | COMBO | Splat MCMC | The radiance field model profile to train |
| image_select | COMBO | best | How to select training images from the source image sets |
| train_steps_limit | INT | 301–1000 | Number of kSteps to train the model for |
| output_path | STRING | output | path to save the project to Absolute paths are kept as is, relatives are from the output directory. |
| postshot_cli | STRING | C:/Program Files/Jawset Postshot/bin/postshot-cli.exe | — |
| gpuopt | INT | 00–255 | Specify the index of the GPU to use |
| num_train_imagesopt | INT | 0 | If image-select best is used, specifies the number of training images to select |
| max_image_sizeopt | INT | 1600 | Downscale training images such that their longer edge is at most this value in pixels. Disabled if zero. |
| max_num_featuresopt | INT | 8 | Maximum number of 2D kFeatures extracted from each image. |
| splat_densityopt | FLOAT | 1.000.125–8 | Controls how much additional splats are generated during training.Applies only in 'Splat ADC' profile. |
| max_num_splatsopt | INT | 3000 | Sets the maximum number of splats (in kSplats) created during training. Applies only in 'Splat MCMC' profile. |
| export_splat_plyopt | STRING | If not empty will also save a ply file. Absolute paths are kept as is, relatives are from the output directory. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| project_file_path | STRING | — |