Skip to content
360 Gaussian Pro logo360 Gaussian Pro

Command line

Run extract, mask, align, mesh and train from a terminal, without opening the app window.

Experimental. The command line is new in 1.2.0. Commands and setting names may still change.

360 Gaussian Pro can run its whole pipeline from a terminal, without opening the window. Use it to process clips overnight, from a script, on a remote machine, or as one step in your own tooling.

The command line is the app itself, started without its window:

  • Same engine. Every step runs the same code as the app, with the same defaults, so the result is the same.
  • Same project folder. The project goes where the app would put it, next to the input. Start a clip on the command line and open it in the app, or the other way round, and it carries on where it stopped.
  • Same settings. Settings are stored in the project's run_settings.json, the same file the app writes.
  • Same license. Your license, or the trial limit of 14 frames per project, applies the same way.
Build a commandPick the parts — the command updates below
360GaussianPro-cli.exe run "D:\clips\walk.insv" --set fps_value=2 --set build_mesh=true

run does every step, resuming where the project stands · two frames per second · build the collision mesh

CommandInputOptions

Where to find it

The installer puts a second program next to the app:

%LOCALAPPDATA%\Programs\360GaussianPro\360GaussianPro-cli.exe

Open Command Prompt or PowerShell in that folder, or add the folder to your PATH. Use 360GaussianPro-cli.exe, not 360GaussianPro.exe — the app's own exe prints nothing to the terminal, and the terminal doesn't wait for it.

First run

Accept the license terms once on each computer. If you've already used the app on this computer, they're accepted. Otherwise read the terms and add --accept-eula to your first command:

360GaussianPro-cli.exe license status --accept-eula

To activate a license key on a computer that only uses the command line:

360GaussianPro-cli.exe license activate YOUR-LICENSE-KEY

Build your own command

Every command has the same four parts:

360GaussianPro-cli.exe  <command>  <input>  [options]
  1. Command — which step to run. run does the whole pipeline.
  2. Input — the video file or photo folder. Put quotes around paths with spaces.
  3. Options — change a setting with --set NAME=VALUE. Repeat it for each setting.
  4. Check before you run — settings shows the values the clip would run with, so a typo shows up before hours of processing:
360GaussianPro-cli.exe settings "D:\clips\walk.insv" --set fps_value=2

For example, to process a walk-through at two frames per second, mask people and tripods, and build a collision mesh:

360GaussianPro-cli.exe run "D:\clips\walk.insv" ^
  --set fps_value=2 ^
  --set "sam3_last_text_prompt=person, tripod" ^
  --set build_mesh=true

The ^ continues the command on the next line in Command Prompt. In PowerShell, use a backtick ` instead, or write it all on one line.

Commands

Command What it does
run The whole pipeline: extract, mask, align, train. Picks up where the project stands.
extract Extracts frames, and the camera's motion and GPS data, into the project folder.
mask Masks the keyword (for example person) on every frame with SAM 3, together with the lens mask.
align Aligns the frames, splits them into training images, adds detail photos, and builds the collision mesh if it's on.
mesh Rebuilds the collision mesh from an aligned project. Takes seconds.
train Trains the splat with the built-in Brush trainer.
settings Lists every setting you can change, with its value.
license status, activate <key> or deactivate the license on this computer.

Add --help to any command for its options, e.g. 360GaussianPro-cli.exe run --help. The help text calls the program gpcli — that's the same program.

Input

The input is one of:

  • a 360 video: Insta360 .insv, DJI .osv, or a stitched 2:1 .mp4 / .mov
  • an ordinary video: phone, drone or GoPro .mp4 / .mov / .m4v
  • a folder of photos: Insta360 .insp stills, or .jpg / .jpeg / .png (subfolders included)

The type is detected the same way as when you drop the file into the app. The project folder is always created next to the input: D:\clips\walk.insv goes to D:\clips\walk\, a photo folder D:\photos\facade to D:\photos\facade_processed\.

Options

Option Works with What it does
--set NAME=VALUE all but license Changes one setting. Repeat for each setting.
--settings FOLDER all but license Copies settings from another project (its folder or its run_settings.json).
--accept-eula all but settings Accepts the license terms on this computer. Needed once.
--from STEP run Redoes the pipeline from extract, mask, align or train instead of resuming.
--download-sam-model run, mask Downloads the SAM 3 masking model if it isn't on this computer yet (one time; about 1.9 GB on NVIDIA, 3.7 GB on AMD and Intel). Without it, keyword masking is skipped and only lens masks are written.

Resuming

run checks the project first. It skips every step that's already done with the current settings, and starts at the first step that's missing or whose settings changed. On a finished project it prints Nothing to do and stops. Use --from to redo a step on purpose.

extract (and run --from extract) deletes the project's existing frames before extracting new ones.

Output and exit codes

Progress is printed as plain text lines, starting with [gpcli] <clip> (<input type>) -> <project folder> and ending each step with [gpcli] OK or [gpcli] FAILED and the reason. The command line doesn't write the app's log file, so redirect the output if you want to keep it:

360GaussianPro-cli.exe run "D:\clips\walk.insv" > walk_log.txt 2>&1
Code Meaning
0 Finished, or nothing to do
1 A step failed, or a setting, input or --settings folder was wrong (the reason is printed)
2 The command itself was mistyped (unknown command or option)

Press Ctrl+C to stop a running step.

Settings

Settings are applied in this order — later ones win:

  1. the app's defaults for this kind of input
  2. the project's own run_settings.json, if the project already exists
  3. --settings (another project's settings)
  4. --set (one setting at a time)

--set values are saved into the project, so the next run keeps them.

360GaussianPro-cli.exe settings                       :: the defaults
360GaussianPro-cli.exe settings "D:\clips\walk.insv"  :: the values this clip runs with

A misspelled setting name stops the command with unknown setting before anything runs. Text values aren't checked, so copy them exactly from the tables below.

Value types:

  • On/off: true / false (also on / off, 1 / 0)
  • Numbers: 2, 0.5
  • Text: written as is. Quote the whole option when it has spaces: --set "sam3_last_text_prompt=person, car"

Reuse settings made in the app

Set up one clip in the app, run at least the Extract step so its settings are saved, then copy them to other clips:

360GaussianPro-cli.exe run "D:\clips\walk2.insv" --settings "D:\clips\walk1"

--settings copies the same settings as Paste Settings to All in the app, including the Advanced COLMAP flags. It keeps each clip's own log-to-Rec.709 choice and detail-photo folder. It does not copy hand-painted masks or manual edits to the aligned model. It does copy the trim, so add --set trim_start=0 --set trim_end=0 if the clips differ in length.

Settings reference

Extract

Setting Default What it does
fps_value 1.0 How many frames to extract. Meaning depends on extraction_mode.
extraction_mode seconds seconds: fps_value frames per second. frames: keep every Nth frame.
use_sharp_extractor true Pick the sharpest frame in each interval.
sharpness_window 10 How many neighbouring frames are compared to find the sharpest.
trim_start 0.0 Start of the clip to use, in seconds.
trim_end 0.0 End of the clip to use, in seconds. 0 = to the end.
rolling_shutter true Rolling shutter correction. Supported cameras only.
apply_dlog_lut auto Convert I-Log / D-Log M footage to normal colours. auto, true or false.
lut_exposure 0 Brightness for log footage, -100 to 100.
lut_contrast 0 Contrast for log footage, -100 to 100.
lut_saturation 0 Saturation for log footage, -100 to 100.
lut_tint 0 Green (−) to magenta (+) for log footage, -100 to 100.
hdr_ilog false Also export HDR (EXR) training images. Insta360 I-Log .insv only, for Postshot.
hdr_compression piz piz (lossless) or dwaa (lossy, about 2.6× smaller).
hdr_color_space acescg acescg or rec2020.

Split

Setting Default What it does
split_preset cube5 Views per lens: 1view, cube5 or 9view. Stitched 360 always uses cube6.
tile_format jpg jpg (fast, small) or png (lossless, slow).
tile_jpeg_quality 95 JPEG quality, 60 to 100.

Mask

Setting Default What it does
sam3_enabled true Mask objects by keyword with SAM 3.
sam3_last_text_prompt person What to mask. Comma-separated: person, tripod.
sam3_confidence 0.5 Detection threshold, 0 to 1. Lower masks more.
circle_mask_enabled true Mask the edge of the fisheye lens.
circle_mask_value 0.0 Lens mask size, -1 to 1. Higher masks less.
circle_mask_invert false Mask everything except the lens shape.

Align

Setting Default What it does
skip_alignment false Stop after extract and mask (and the split for 360).
matcher_type sequential sequential, spatial (by GPS) or exhaustive.
sequential_overlap 17 / 10 Neighbours each frame is matched with. 17 for dual-fisheye, 10 for the rest.
loop_detection true Find places you walked past twice. Sequential only.
use_glomap true Fast global solver. false = incremental.
fold_autofix false Geometry timeline check. Dual-fisheye only.
feature_quality_preset default low_quality, default or high_quality.
lens_priors auto Starting lens calibration: auto, off, or a camera preset.
stage1_feature_reuse false Reuse fisheye features.
export_txt false Also write the model as COLMAP text files.
detail_photos_dir empty Folder of detail photos to add to the aligned model.
train_keep_pct 100 Camera filter: train on this percentage of the aligned frames.

Collision mesh

Setting Default What it does
build_mesh false Build a collision mesh during align.
mesh_formats glb Comma-separated: glb, gltf, ply, obj.
mesh_proj_dist 5.0 Detail. Lower = finer.
mesh_trim 5.0 Close gaps. 5 = the INT preset, 10 = EXT. 0 = off.
mesh_visibility_sigma 3.0 Surface retention. Lower keeps more surface.
mesh_smooth 3 Smoothing passes.
mesh_faces 400000 Face limit. 0 = no limit.
mesh_keep_largest true Keep only the largest piece.

Train

Setting Default What it does
backend brush brush, or none to stop after alignment.
train_params.br_total_steps 30 Training length in thousands of steps (30 = 30,000).
train_params.br_max_splats 3000 Maximum splats in thousands (3000 = 3 million).
train_params.br_max_resolution 1920 Training images are scaled down to this size.
train_params.br_sh_degree 3 Colour detail by view angle. Lower = smaller file, less shine.
train_params.br_export_every_k 5 Save a .ply every N thousand steps.
train_params.br_export_name gaussian_splat_{iter}.ply File name. {iter} = step number.
train_params.br_custom_args empty Extra options passed to Brush as is.

settings also lists some older fields kept for older projects. Leave those as they are.

Examples

Whole pipeline with the defaults:

360GaussianPro-cli.exe run "D:\clips\walk.insv"

Only the first 90 seconds:

360GaussianPro-cli.exe run "D:\clips\walk.insv" --set trim_end=90

Align only, and train later in the app with Postshot or LichtFeld:

360GaussianPro-cli.exe run "D:\clips\walk.insv" --set backend=none

Redo the alignment with the high-quality preset, keeping frames and masks:

360GaussianPro-cli.exe run "D:\clips\walk.insv" --from align --set feature_quality_preset=high_quality

Rebuild the mesh with exterior gap closing, as GLB and OBJ:

360GaussianPro-cli.exe mesh "D:\clips\walk.insv" --set mesh_trim=10 --set mesh_formats=glb,obj

Process every clip in a folder with the settings of one set up in the app (PowerShell):

Get-ChildItem D:\clips\*.insv | ForEach-Object {
    & "$env:LOCALAPPDATA\Programs\360GaussianPro\360GaussianPro-cli.exe" run $_.FullName `
        --settings D:\clips\template --set trim_start=0 --set trim_end=0
}

Limits

  • One clip or photo folder per command. Batches are made in the app.
  • Brush only. Postshot and LichtFeld training run from the app — use --set backend=none and train there.
  • No hand-painted masks or picked objects. Keyword and lens masks work. Brush strokes on single frames and object picks are made in the Masking tab; masks painted for all frames are used.
  • mask rewrites the masks of every frame it runs on, so strokes painted on single frames in the app are lost. align never overwrites an existing mask.
  • The project folder is fixed next to the input.
  • A Vulkan-capable GPU is needed for alignment, as in the app.