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.
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]
- Command — which step to run.
rundoes the whole pipeline. - Input — the video file or photo folder. Put quotes around paths with spaces.
- Options — change a setting with
--set NAME=VALUE. Repeat it for each setting. - Check before you run —
settingsshows 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
.inspstills, 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(andrun --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:
- the app's defaults for this kind of input
- the project's own
run_settings.json, if the project already exists --settings(another project's settings)--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(alsoon/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=noneand 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.
maskrewrites the masks of every frame it runs on, so strokes painted on single frames in the app are lost.alignnever 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.