Cli Anything Cloudcompare

by hkuds34f519533bc1No license51K starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 2 weeks ago

Command-line interface for CloudCompare — Agent-friendly harness for CloudCompare, the open-source 3D point cloud and mesh processing software. Supports 41 commands across 9 groups: project management, session control, point cloud operations (subsample, filter, segment, analyze), mesh operations, distance computation (C2C, C2M), transformations (ICP, matrix), export (LAS/LAZ/PLY/PCD/OBJ/STL/E57), and interactive REPL.

Instructions onlyData & Analytics
AI-generated overview

Command-line harness that drives CloudCompare for 3D point cloud and mesh processing tasks.

What it does
This skill documents a command-line interface that wraps CloudCompare, the open-source 3D point cloud and mesh processing software. It exposes 41 commands in 9 groups covering project and session management, point cloud operations such as subsampling, cropping, filtering, segmentation and scalar-field analysis, mesh operations, cloud-to-cloud and cloud-to-mesh distance computation, transformations including ICP registration, and export to formats such as LAS, LAZ, PLY, PCD, OBJ, STL and E57. Commands operate on a project JSON file and can emit JSON output for agent consumption, and outputs can be registered back into the project.
When to use it
Use it when an agent needs to process 3D point clouds or meshes from the command line, for example to subsample, crop, denoise, segment or classify ground points, compute distances or curvature, register scans, or convert and export data between point cloud and mesh formats. It suits survey, scan and 3D data workflows that would otherwise require the CloudCompare graphical application.
Requirements
Python 3.10+ and a local CloudCompare installation (tested with CloudCompare 2.13.2 via Flatpak on Linux; macOS and Windows builds are downloaded from the project site). The skill is instructions only and ships no scripts; the described CLI is installed separately via pip.

cli-anything-cloudcompare

Agent-friendly command-line harness for CloudCompare — the open-source 3D point cloud and mesh processing software.

41 commands across 9 groups.

Installation

bash
pip install cli-anything-cloudcompare

Prerequisites:

  • Python 3.10+
  • CloudCompare installed on your system
    • Linux (Flatpak): flatpak install flathub org.cloudcompare.CloudCompare
    • macOS/Windows: download from https://cloudcompare.org

Tested with: CloudCompare 2.13.2 (Flatpak, Linux)

Global Options

These options must be placed before the subcommand:

bash
cli-anything-cloudcompare [--project FILE] [--json] COMMAND [ARGS]...
OptionDescription
-p, --project TEXTPath to project JSON file
--jsonOutput results as JSON (for agent consumption)

Command Groups

1. project — Project Management (3 commands)

project new

Create a new empty project file.

bash
# Create a project with default namecli-anything-cloudcompare project new -o myproject.json
# Create a project with a custom namecli-anything-cloudcompare project new -o myproject.json -n "Bridge Survey 2024"
# JSON output for agentscli-anything-cloudcompare --json project new -o myproject.json

Options: -o/--output TEXT (required), -n/--name TEXT

project info

Show project info and loaded entities.

bash
cli-anything-cloudcompare --project myproject.json project info
# JSON outputcli-anything-cloudcompare --project myproject.json --json project info
project status

Show quick project status (cloud count, mesh count, last operation).

bash
cli-anything-cloudcompare --project myproject.json project status

2. session — Session Management (4 commands)

session save

Save the current project state to disk.

bash
cli-anything-cloudcompare --project myproject.json session save
session history

Show recent operation history.

bash
# Show last 10 operations (default)cli-anything-cloudcompare --project myproject.json session history
# Show last 5 operationscli-anything-cloudcompare --project myproject.json session history -n 5

Options: -n/--last INTEGER

session set-format

Update the default export format for future operations.

bash
# Set default cloud export to LAScli-anything-cloudcompare --project myproject.json session set-format --cloud-fmt LAS --cloud-ext las
# Set default mesh export to OBJcli-anything-cloudcompare --project myproject.json session set-format --mesh-fmt OBJ --mesh-ext obj
# Set both cloud and mesh defaultscli-anything-cloudcompare --project myproject.json session set-format \  --cloud-fmt PLY --cloud-ext ply \  --mesh-fmt STL --mesh-ext stl

Options: --cloud-fmt TEXT, --cloud-ext TEXT, --mesh-fmt TEXT, --mesh-ext TEXT

session undo

Remove the last operation from history (soft undo — does not delete output files).

bash
cli-anything-cloudcompare --project myproject.json session undo

3. cloud — Point Cloud Operations (21 commands)

All cloud commands take CLOUD_INDEX (0-based integer from cloud list) and most accept --add-to-project to register the output back into the project.

cloud add

Add a point cloud file to the project.

bash
# Add a LAS filecli-anything-cloudcompare --project myproject.json cloud add /data/scan.las
# Add with a labelcli-anything-cloudcompare --project myproject.json cloud add /data/scan.las -l "roof scan"

Options: -l/--label TEXT

cloud list

List all clouds currently in the project.

bash
cli-anything-cloudcompare --project myproject.json cloud list
# JSON output for parsing indicescli-anything-cloudcompare --project myproject.json --json cloud list
cloud convert

Convert a cloud from one format to another (format determined by file extension).

bash
# LAS → PLYcli-anything-cloudcompare cloud convert /data/scan.las /data/scan.ply
# PCD → LAScli-anything-cloudcompare cloud convert /data/cloud.pcd /data/cloud.las
cloud subsample

Reduce the number of points using RANDOM, SPATIAL, or OCTREE method.

bash
# Random: keep 100 000 pointscli-anything-cloudcompare --project myproject.json cloud subsample 0 \  -o /data/sub_random.las -m random -n 100000
# Spatial: minimum distance 0.05 m between pointscli-anything-cloudcompare --project myproject.json cloud subsample 0 \  -o /data/sub_spatial.las -m spatial -n 0.05
# Octree: level 8cli-anything-cloudcompare --project myproject.json cloud subsample 0 \  -o /data/sub_octree.las -m octree -n 8 --add-to-project

Options: -o/--output TEXT (required), -m/--method [random|spatial|octree], -n/--param FLOAT, --add-to-project

cloud crop

Crop a cloud to an axis-aligned bounding box.

bash
# Keep points inside the boxcli-anything-cloudcompare --project myproject.json cloud crop 0 \  -o /data/cropped.las \  --xmin 0.0 --ymin 0.0 --zmin 0.0 \  --xmax 10.0 --ymax 10.0 --zmax 5.0
# Keep points OUTSIDE the boxcli-anything-cloudcompare --project myproject.json cloud crop 0 \  -o /data/exterior.las \  --xmin 0.0 --ymin 0.0 --zmin 0.0 \  --xmax 10.0 --ymax 10.0 --zmax 5.0 --outside

Options: -o/--output TEXT (required), --xmin/ymin/zmin/xmax/ymax/zmax FLOAT (all required), --outside, --add-to-project

cloud normals

Compute surface normals via the octree method.

bash
# Compute normals at octree level 6cli-anything-cloudcompare --project myproject.json cloud normals 0 \  -o /data/with_normals.ply --level 6
# Compute normals oriented toward +Zcli-anything-cloudcompare --project myproject.json cloud normals 0 \  -o /data/with_normals.ply --level 6 --orientation plus_z --add-to-project

Options: -o/--output TEXT (required), --level INTEGER (1–10), --orientation [plus_x|plus_y|plus_z|minus_x|minus_y|minus_z], --add-to-project

cloud invert-normals

Flip all normal vectors in the cloud.

bash
cli-anything-cloudcompare --project myproject.json cloud invert-normals 0 \  -o /data/flipped_normals.ply --add-to-project

Options: -o/--output TEXT (required), --add-to-project

cloud filter-sor

Statistical Outlier Removal — removes isolated noise points.

bash
# Default parameters (k=6 neighbours, 1.0 std ratio)cli-anything-cloudcompare --project myproject.json cloud filter-sor 0 \  -o /data/denoised.las
# Custom parameterscli-anything-cloudcompare --project myproject.json cloud filter-sor 0 \  -o /data/denoised.las --nb-points 12 --std-ratio 2.0 --add-to-project

Options: -o/--output TEXT (required), --nb-points INTEGER, --std-ratio FLOAT, --add-to-project

cloud noise-filter

Remove noisy points using the PCL noise filter (KNN or radius mode).

bash
# KNN mode (default)cli-anything-cloudcompare --project myproject.json cloud noise-filter 0 \  -o /data/clean.las --knn 8 --noisiness 1.0
# Radius modecli-anything-cloudcompare --project myproject.json cloud noise-filter 0 \  -o /data/clean.las --radius 0.1 --use-radius --add-to-project

Options: -o/--output TEXT (required), --knn INTEGER, --noisiness FLOAT, --radius FLOAT, --use-radius, --absolute, --add-to-project

cloud filter-csf

Ground filtering using the Cloth Simulation Filter (CSF) algorithm. Separates ground from off-ground points (buildings, vegetation).

bash
# Extract ground only — mixed terraincli-anything-cloudcompare --project myproject.json cloud filter-csf 0 \  --ground /data/ground.las --scene relief
# Split ground + off-ground — urban scenecli-anything-cloudcompare --project myproject.json cloud filter-csf 0 \  --ground /data/ground.las \  --offground /data/buildings.las \  --scene flat --cloth-resolution 0.5 --class-threshold 0.3
# Steep forested slope with slope post-processingcli-anything-cloudcompare --project myproject.json cloud filter-csf 0 \  --ground /data/terrain.las --scene slope --proc-slope --add-to-project

Options: -g/--ground TEXT (required), -u/--offground TEXT, --scene [slope|relief|flat], --cloth-resolution FLOAT, --class-threshold FLOAT, --max-iteration INTEGER, --proc-slope, --add-to-project

cloud filter-sf

Filter a cloud by scalar field value range (keep points where SF ∈ [min, max]).

bash
# Keep points with SF value between 10 and 50cli-anything-cloudcompare --project myproject.json cloud filter-sf 0 \  -o /data/filtered.las --min 10.0 --max 50.0
# Filter using a specific SF indexcli-anything-cloudcompare --project myproject.json cloud filter-sf 0 \  -o /data/filtered.las --min 0.0 --max 1.5 --sf-index 2 --add-to-project

Options: -o/--output TEXT (required), --min FLOAT (required), --max FLOAT (required), --sf-index INTEGER, --add-to-project

cloud sf-from-coord

Convert a coordinate axis (X/Y/Z) to a scalar field. Commonly used to create a height (Z) scalar field.

bash
# Create Z scalar field (height)cli-anything-cloudcompare --project myproject.json cloud sf-from-coord 0 \  -o /data/with_z_sf.las --dim z --add-to-project
# Create X scalar field with a specific active indexcli-anything-cloudcompare --project myproject.json cloud sf-from-coord 0 \  -o /data/with_x_sf.las --dim x --sf-index 0

Options: -o/--output TEXT (required), --dim [x|y|z] (default: z), --sf-index INTEGER, --add-to-project

cloud sf-filter-z

Convenience command: convert Z → scalar field and filter by height range in one step.

bash
# Extract points between z=1.0 m and z=2.5 mcli-anything-cloudcompare --project myproject.json cloud sf-filter-z 0 \  -o /data/slice.las --min 1.0 --max 2.5 --add-to-project
# Only apply upper boundcli-anything-cloudcompare --project myproject.json cloud sf-filter-z 0 \  -o /data/below_5m.las --max 5.0

Options: -o/--output TEXT (required), --min FLOAT, --max FLOAT, --add-to-project

cloud sf-to-rgb

Convert the active scalar field to RGB colours.

bash
cli-anything-cloudcompare --project myproject.json cloud sf-to-rgb 0 \  -o /data/coloured.ply --add-to-project

Options: -o/--output TEXT (required), --add-to-project

cloud rgb-to-sf

Convert RGB colours to a scalar field (luminance value).

bash
cli-anything-cloudcompare --project myproject.json cloud rgb-to-sf 0 \  -o /data/luminance.las --add-to-project

Options: -o/--output TEXT (required), --add-to-project

cloud curvature

Compute curvature scalar field (MEAN or GAUSS).

bash
# Mean curvature with radius 0.5 mcli-anything-cloudcompare --project myproject.json cloud curvature 0 \  -o /data/curvature.las --type mean --radius 0.5
# Gaussian curvaturecli-anything-cloudcompare --project myproject.json cloud curvature 0 \  -o /data/curvature.las --type gauss --radius 0.5 --add-to-project

Options: -o/--output TEXT (required), --type [mean|gauss], -r/--radius FLOAT, --add-to-project

cloud roughness

Compute roughness scalar field (deviation from local best-fit plane).

bash
cli-anything-cloudcompare --project myproject.json cloud roughness 0 \  -o /data/roughness.las --radius 0.2 --add-to-project

Options: -o/--output TEXT (required), -r/--radius FLOAT, --add-to-project

cloud density

Compute point density scalar field.

bash
# KNN densitycli-anything-cloudcompare --project myproject.json cloud density 0 \  -o /data/density.las --type knn --radius 0.5
# Surface densitycli-anything-cloudcompare --project myproject.json cloud density 0 \  -o /data/density.las --type surface --radius 1.0 --add-to-project

Options: -o/--output TEXT (required), -r/--radius FLOAT, --type [knn|surface|volume], --add-to-project

cloud segment-cc

Segment cloud into connected components (clusters). Each component is saved as a separate file.

bash
# Segment with octree level 8, minimum 100 points per componentcli-anything-cloudcompare --project myproject.json cloud segment-cc 0 \  -o /data/components/ --octree-level 8 --min-points 100
# Save components as PLY filescli-anything-cloudcompare --project myproject.json cloud segment-cc 0 \  -o /data/components/ --octree-level 6 --min-points 50 --fmt ply

Options: -o/--output-dir TEXT (required), --octree-level INTEGER, --min-points INTEGER, --fmt TEXT

cloud merge

Merge all clouds in the project into a single cloud.

bash
cli-anything-cloudcompare --project myproject.json cloud merge \  -o /data/merged.las --add-to-project

Options: -o/--output TEXT (required), --add-to-project

cloud mesh-delaunay

Build a 2.5-D Delaunay triangulation mesh from a cloud.

bash
# Basic Delaunay meshcli-anything-cloudcompare --project myproject.json cloud mesh-delaunay 0 \  -o /data/surface.obj
# Best-fit plane with max edge length limitcli-anything-cloudcompare --project myproject.json cloud mesh-delaunay 0 \  -o /data/surface.ply --best-fit --max-edge-length 2.0 --add-to-project

Options: -o/--output TEXT (required), --best-fit, --max-edge-length FLOAT, --add-to-project


4. mesh — Mesh Operations (3 commands)

mesh add

Add a mesh file to the project.

bash
cli-anything-cloudcompare --project myproject.json mesh add /data/model.obj
# Add with labelcli-anything-cloudcompare --project myproject.json mesh add /data/model.ply -l "building model"

Options: -l/--label TEXT

mesh list

List all meshes in the project.

bash
cli-anything-cloudcompare --project myproject.json mesh list
# JSON outputcli-anything-cloudcompare --project myproject.json --json mesh list
mesh sample

Sample a point cloud from a mesh surface.

bash
# Sample 50 000 points from mesh at index 0cli-anything-cloudcompare --project myproject.json mesh sample 0 \  -o /data/sampled.las -n 50000
# Add sampled cloud back to projectcli-anything-cloudcompare --project myproject.json mesh sample 0 \  -o /data/sampled.las -n 100000 --add-to-project

Options: -o/--output TEXT (required), -n/--count INTEGER, --add-to-project


5. distance — Distance Computation (2 commands)

distance c2c

Compute cloud-to-cloud distances. Adds a distance scalar field to the compared cloud.

bash
# Compare cloud 1 to reference cloud 0cli-anything-cloudcompare --project myproject.json distance c2c \  --compare 1 --reference 0 -o /data/distances.las
# Split into X/Y/Z components at octree level 8cli-anything-cloudcompare --project myproject.json distance c2c \  --compare 1 --reference 0 -o /data/distances.las \  --split-xyz --octree-level 8 --add-to-project

Options: --compare TEXT (required), --reference TEXT (required), -o/--output TEXT (required), --split-xyz, --octree-level INTEGER, --add-to-project

distance c2m

Compute cloud-to-mesh distances. Adds a distance scalar field to the cloud.

bash
# Basic cloud-to-mesh distancecli-anything-cloudcompare --project myproject.json distance c2m \  --cloud 0 --mesh 0 -o /data/c2m_dist.las
# With flipped normals and unsigned distancescli-anything-cloudcompare --project myproject.json distance c2m \  --cloud 0 --mesh 0 -o /data/c2m_dist.las \  --flip-normals --unsigned --add-to-project

Options: --cloud INTEGER (required), --mesh INTEGER (required), -o/--output TEXT (required), --flip-normals, --unsigned, --add-to-project


6. transform — Transformations and Registration (2 commands)

transform apply

Apply a 4×4 rigid-body transformation matrix to a cloud.

bash
# Apply a transformation matrix from filecli-anything-cloudcompare --project myproject.json transform apply 0 \  -o /data/transformed.las -m /data/matrix.txt
# Apply the inverse transformationcli-anything-cloudcompare --project myproject.json transform apply 0 \  -o /data/transformed.las -m /data/matrix.txt --inverse --add-to-project

The matrix file must contain 4 rows of 4 space-separated values:

1 0 0 00 1 0 00 0 1 00 0 0 1

Options: -o/--output TEXT (required), -m/--matrix TEXT (required), --inverse, --add-to-project

transform icp

Run ICP (Iterative Closest Point) registration to align one cloud to another.

bash
# Basic ICP alignmentcli-anything-cloudcompare --project myproject.json transform icp \  --aligned 1 --reference 0 -o /data/aligned.las
# ICP with overlap and iteration controlcli-anything-cloudcompare --project myproject.json transform icp \  --aligned 1 --reference 0 -o /data/aligned.las \  --max-iter 50 --overlap 80 --min-error-diff 1e-6 --add-to-project

Options: --aligned INTEGER (required), --reference INTEGER (required), -o/--output TEXT (required), --max-iter INTEGER, --min-error-diff FLOAT, --overlap FLOAT, --add-to-project


7. export — Export Clouds and Meshes (4 commands)

export formats

List all available export format presets.

bash
cli-anything-cloudcompare export formats
# JSON outputcli-anything-cloudcompare --json export formats
export cloud

Export a cloud to a target format.

bash
# Export cloud at index 0 as LAScli-anything-cloudcompare --project myproject.json export cloud 0 /data/output.las
# Export as PLY using presetcli-anything-cloudcompare --project myproject.json export cloud 0 /data/output.ply -f ply
# Overwrite if file existscli-anything-cloudcompare --project myproject.json export cloud 0 /data/output.las -f las --overwrite

Supported presets: las, laz, ply, pcd, xyz, asc, csv, bin, e57

Options: -f/--preset TEXT, --overwrite

export mesh

Export a mesh to a target format.

bash
# Export mesh at index 0 as OBJcli-anything-cloudcompare --project myproject.json export mesh 0 /data/model.obj
# Export as STLcli-anything-cloudcompare --project myproject.json export mesh 0 /data/model.stl -f stl --overwrite

Supported presets: obj, stl, ply, bin

Options: -f/--preset TEXT, --overwrite

export batch

Batch export all project clouds to a directory.

bash
# Export all clouds as LAScli-anything-cloudcompare --project myproject.json export batch \  -d /data/exports/ -f las
# Overwrite existing filescli-anything-cloudcompare --project myproject.json export batch \  -d /data/exports/ -f ply --overwrite

Options: -d/--output-dir TEXT (required), -f/--preset TEXT, --overwrite


8. info — Installation Info (1 command)

Show CloudCompare installation path and version.

bash
cli-anything-cloudcompare info
# JSON outputcli-anything-cloudcompare --json info

9. repl — Interactive REPL (1 command)

Start the interactive REPL session with history and undo support.

bash
# Start REPL without a projectcli-anything-cloudcompare repl
# Start REPL with an existing projectcli-anything-cloudcompare repl -p myproject.json
# Equivalent: run without subcommandcli-anything-cloudcompare --project myproject.json

Options: -p/--project TEXT

Inside the REPL, type help to list available commands or session undo to revert the last operation.


Supported File Formats

FormatExtensionReadWriteNotes
LAS.las✓✓LiDAR standard, supports intensity/RGB
LAZ.laz✓✓Compressed LAS
PLY.ply✓✓ASCII or binary
PCD.pcd✓✓PCL format
XYZ.xyz✓✓Plain text XYZ
ASC.asc✓✓ASCII with header
CSV.csv✓✓Comma-separated
E57.e57✓✓ASTM scanner exchange
BIN.bin✓✓CloudCompare native binary
OBJ.obj✓✓Mesh (Wavefront)
STL.stl✓✓Mesh (3D printing)

Typical Workflows

Workflow 1: LiDAR Pre-processing Pipeline

bash
P=myproject.json
# 1. Create project and load scancli-anything-cloudcompare project new -o $Pcli-anything-cloudcompare --project $P cloud add /data/scan.lascli-anything-cloudcompare --project $P cloud list  # note index → 0
# 2. Denoisecli-anything-cloudcompare --project $P cloud filter-sor 0 \  -o /data/denoised.las --nb-points 6 --std-ratio 1.0 --add-to-project
# 3. Subsample to 5 cm gridcli-anything-cloudcompare --project $P cloud subsample 1 \  -o /data/subsampled.las -m spatial -n 0.05 --add-to-project
# 4. Extract ground plane (CSF)cli-anything-cloudcompare --project $P cloud filter-csf 2 \  --ground /data/ground.las --offground /data/objects.las \  --scene relief --add-to-project
# 5. Export resultcli-anything-cloudcompare --project $P export cloud 3 /data/ground_final.las -f las --overwrite

Workflow 2: Change Detection Between Two Scans

bash
P=compare.jsoncli-anything-cloudcompare project new -o $Pcli-anything-cloudcompare --project $P cloud add /data/scan_2023.las   # index 0cli-anything-cloudcompare --project $P cloud add /data/scan_2024.las   # index 1
# ICP alignment (align 2024 to 2023)cli-anything-cloudcompare --project $P transform icp \  --aligned 1 --reference 0 -o /data/aligned_2024.las \  --overlap 90 --add-to-project   # index 2
# Cloud-to-cloud distancecli-anything-cloudcompare --project $P distance c2c \  --compare 2 --reference 0 -o /data/change_map.las --add-to-project
# Export as LAS with distance scalar fieldcli-anything-cloudcompare --project $P export cloud 3 /data/change_map_final.las --overwrite

Workflow 3: Height Slice Extraction

bash
P=slice.jsoncli-anything-cloudcompare project new -o $Pcli-anything-cloudcompare --project $P cloud add /data/building.las
# Extract points at 2–3 m height (floor level)cli-anything-cloudcompare --project $P cloud sf-filter-z 0 \  -o /data/floor_slice.las --min 2.0 --max 3.0 --add-to-project
# Exportcli-anything-cloudcompare --project $P export cloud 1 /data/floor_slice_out.las --overwrite

Workflow 4: Surface Reconstruction

bash
P=mesh.jsoncli-anything-cloudcompare project new -o $Pcli-anything-cloudcompare --project $P cloud add /data/terrain.las
# Compute normalscli-anything-cloudcompare --project $P cloud normals 0 \  -o /data/with_normals.ply --level 6 --orientation plus_z --add-to-project
# Delaunay meshcli-anything-cloudcompare --project $P cloud mesh-delaunay 1 \  -o /data/terrain_mesh.obj --max-edge-length 1.0 --add-to-project
# Export meshcli-anything-cloudcompare --project $P export mesh 0 /data/terrain_mesh_final.obj --overwrite

Error Handling

Exit CodeMeaning
0Success
1General error (see stderr for details)
2Invalid arguments

Common errors:

bash
# CloudCompare not found# → Install CloudCompare; check `cli-anything-cloudcompare info`
# Index out of range# → Run `cloud list` or `mesh list` to confirm valid indices
# File already exists (no --overwrite)# → Add --overwrite flag to export commands
# fcntl not available (Windows)# → File locking is skipped automatically; project save still works

For AI Agents

  1. Always use --json flag for parseable output
  2. Check return codes — 0 for success, non-zero for errors
  3. Parse stderr for error messages on failure
  4. Use absolute paths for all file arguments
  5. Verify output files exist after export operations
  6. Chain with --add-to-project to build multi-step pipelines without re-loading files
  7. Use cloud list --json to discover valid cloud indices before each operation
  8. Use export formats --json to discover available format presets

Version

ComponentVersion
cli-anything-cloudcompare1.0.0
CloudCompare (tested)2.13.2
Python (minimum)3.10

Source and attribution

Source:hkuds/cli-anythinginskills/cli-anything-cloudcompareat commit34f5195

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal