cli-anything-acloudviewer 3.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. cli_anything_acloudviewer-3.2.0/MANIFEST.in +4 -0
  2. cli_anything_acloudviewer-3.2.0/PKG-INFO +663 -0
  3. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/README.md +616 -0
  4. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/__init__.py +1 -0
  5. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/__main__.py +5 -0
  6. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/acloudviewer_cli.py +4354 -0
  7. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/core/__init__.py +1 -0
  8. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/core/ai_registry.py +61 -0
  9. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/core/scene.py +49 -0
  10. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/core/session.py +42 -0
  11. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/mcp_server.py +3319 -0
  12. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/skills/SKILL.md +548 -0
  13. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/tests/__init__.py +1 -0
  14. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/tests/test_backend.py +407 -0
  15. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/tests/test_cli.py +228 -0
  16. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/tests/test_cli_comprehensive.py +1674 -0
  17. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/tests/test_core.py +762 -0
  18. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/tests/test_e2e.py +129 -0
  19. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/tests/test_installer.py +1116 -0
  20. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/tests/test_mcp.py +1835 -0
  21. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/tests/test_utils.py +1424 -0
  22. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/utils/__init__.py +1 -0
  23. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/utils/acloudviewer_backend.py +3164 -0
  24. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/utils/colmap_backend.py +716 -0
  25. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/utils/installer.py +1327 -0
  26. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/utils/repl_skin.py +455 -0
  27. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/utils/rpc_client.py +490 -0
  28. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/utils/source_builder.py +376 -0
  29. cli_anything_acloudviewer-3.2.0/cli_anything/acloudviewer/utils/spirula_backend.py +151 -0
  30. cli_anything_acloudviewer-3.2.0/cli_anything_acloudviewer.egg-info/PKG-INFO +663 -0
  31. cli_anything_acloudviewer-3.2.0/cli_anything_acloudviewer.egg-info/SOURCES.txt +37 -0
  32. cli_anything_acloudviewer-3.2.0/cli_anything_acloudviewer.egg-info/dependency_links.txt +1 -0
  33. cli_anything_acloudviewer-3.2.0/cli_anything_acloudviewer.egg-info/entry_points.txt +3 -0
  34. cli_anything_acloudviewer-3.2.0/cli_anything_acloudviewer.egg-info/not-zip-safe +1 -0
  35. cli_anything_acloudviewer-3.2.0/cli_anything_acloudviewer.egg-info/requires.txt +9 -0
  36. cli_anything_acloudviewer-3.2.0/cli_anything_acloudviewer.egg-info/top_level.txt +1 -0
  37. cli_anything_acloudviewer-3.2.0/pyproject.toml +7 -0
  38. cli_anything_acloudviewer-3.2.0/setup.cfg +4 -0
  39. cli_anything_acloudviewer-3.2.0/setup.py +98 -0
@@ -0,0 +1,4 @@
1
+ # Long-description source: python -m build builds the wheel from the sdist,
2
+ # so the README must ship inside the sdist or the wheel METADATA body ends
3
+ # up empty (twine check: "long_description missing").
4
+ include cli_anything/acloudviewer/README.md
@@ -0,0 +1,663 @@
1
+ Metadata-Version: 2.4
2
+ Name: cli-anything-acloudviewer
3
+ Version: 3.2.0
4
+ Summary: CLI harness for ACloudViewer — 3D point cloud and mesh processing via binary CLI and JSON-RPC, with Colmap reconstruction and SIBR pipelines
5
+ Home-page: https://github.com/Asher-1/CLI-Anything
6
+ Author: ACloudViewer Contributors
7
+ Author-email: admin@cloudViewer.org
8
+ License: MIT
9
+ Project-URL: Source, https://github.com/Asher-1/CLI-Anything
10
+ Project-URL: Tracker, https://github.com/Asher-1/CLI-Anything/issues
11
+ Project-URL: ACloudViewer, https://asher-1.github.io/ACloudViewer/
12
+ Keywords: cli,acloudviewer,point-cloud,mesh,3d,colmap,reconstruction,automation
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: Topic :: Scientific/Engineering :: Visualization
17
+ Classifier: Topic :: Scientific/Engineering :: GIS
18
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
+ Classifier: License :: OSI Approved :: MIT License
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Requires-Python: >=3.10
25
+ Description-Content-Type: text/markdown
26
+ Requires-Dist: click>=8.1
27
+ Requires-Dist: websockets>=11.0
28
+ Requires-Dist: prompt-toolkit>=3.0
29
+ Requires-Dist: mcp<2.0,>=1.0
30
+ Provides-Extra: dev
31
+ Requires-Dist: pytest>=7; extra == "dev"
32
+ Requires-Dist: pytest-cov>=4; extra == "dev"
33
+ Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
34
+ Dynamic: author
35
+ Dynamic: author-email
36
+ Dynamic: classifier
37
+ Dynamic: description
38
+ Dynamic: description-content-type
39
+ Dynamic: home-page
40
+ Dynamic: keywords
41
+ Dynamic: license
42
+ Dynamic: project-url
43
+ Dynamic: provides-extra
44
+ Dynamic: requires-dist
45
+ Dynamic: requires-python
46
+ Dynamic: summary
47
+
48
+ # cli-anything-acloudviewer v3.1.0
49
+
50
+ CLI harness for **ACloudViewer** — 3D point cloud and mesh processing via
51
+ the ACloudViewer binary CLI (`-SILENT` mode) and JSON-RPC WebSocket.
52
+
53
+ Part of the [CLI-Anything](https://github.com/Asher-1/CLI-Anything) project.
54
+
55
+ **Supported Platforms:** Linux, macOS, Windows.
56
+
57
+ ## Installation
58
+
59
+ ```bash
60
+ cd acloudviewer/agent-harness
61
+ pip install -e .
62
+ ```
63
+
64
+ One-line script (Linux / macOS): installs the harness, runs `check`, and
65
+ registers the MCP server with detected AI clients
66
+ (`ACV_SKIP_CLIENTS=1` to skip registration):
67
+
68
+ ```bash
69
+ curl -LsSf https://raw.githubusercontent.com/Asher-1/CLI-Anything/main/acloudviewer/agent-harness/install.sh | sh
70
+ ```
71
+
72
+ The ACloudViewer binary must be on `PATH`, or set the `ACV_BINARY`
73
+ environment variable to its absolute path. `cli-anything-acloudviewer
74
+ install auto` downloads it from GitHub Releases automatically, and
75
+ `cli-anything-acloudviewer install clients --all` merges the MCP server entry
76
+ (`cli-anything-acloudviewer-mcp`) into the configs of detected clients
77
+ (Claude Code, Claude Desktop, Codex, Cursor) with `.bak` backups.
78
+
79
+ ## Command modes
80
+
81
+ ### Runtime behavior (auto-detect)
82
+
83
+ | Mode | How it Works | Requirement |
84
+ |------|-------------|-------------|
85
+ | **Headless** | Subprocess: `ACloudViewer -SILENT -O ... -SS ...` | ACloudViewer binary |
86
+ | **GUI** | JSON-RPC WebSocket to running ACloudViewer | ACloudViewer with JSON-RPC plugin |
87
+
88
+ The CLI auto-detects: if a running ACloudViewer instance responds on
89
+ `ws://127.0.0.1:6001`, GUI mode is used; otherwise headless.
90
+
91
+ ### Commands by category (what each command needs)
92
+
93
+ **General** (no ACloudViewer backend required):
94
+
95
+ `info`, `check`, `install`, `formats`, `session`, `repl`
96
+
97
+ **Headless** (binary `-SILENT` mode; no GUI):
98
+
99
+ - `convert`, `batch-convert`
100
+ - `ai`: `list`, `schema`, `run` (all registered AICore plugin batch tasks)
101
+ - `plugin`: `run` (ordinary/third-party native command passthrough)
102
+ - `process`: `subsample`, `normals`, `icp`, `sor`, `c2c-dist`, `c2m-dist`, `crop`, `density`, `curvature`, `roughness`, `delaunay`, `sample-mesh`, `color-banding`, `volume-25d`, `crop-2d`, `rasterize`, `cross-section`, `stat-test`, `approx-density`, `feature`, `best-fit-plane`, `extract-cc`, `set-active-sf`, `remove-sf`, `remove-all-sfs`, `rename-sf`, `filter-sf`, `coord-to-sf`, `sf-arithmetic`, `sf-op`, `octree-normals`, `orient-normals`, `invert-normals`, `clear-normals`, `normals-to-dip`, `normals-to-sfs`, `remove-rgb`, `merge-clouds`, `extract-vertices`, `flip-triangles`, `mesh-volume`, `merge-meshes`, `match-centers`, `drop-global-shift`, `closest-point-set`, `remove-scan-grids`, `pcv`, `compass-export`, `compass-import-fol`, `compass-import-lin`, `compass-refit`, `compass-p21`, `sra`
103
+ - `reconstruct`: `mesh`, `auto`, `extract-features`, `match`, `sparse`, `undistort`, `dense-stereo`, `fuse`, `poisson`, `simplify-mesh`, `texture-mesh`, `convert-model`, `analyze-model`, `delaunay-mesh`
104
+ - `sibr`: `tool`, `prepare-colmap`, `texture-mesh`, `unwrap-mesh`, `tonemapper`, `align-meshes`, `camera-converter`, `nvm-to-sibr`, `crop-from-center`, `clipping-planes`, `distord-crop`
105
+
106
+ **GUI** (requires ACloudViewer running with the JSON-RPC plugin):
107
+
108
+ - `open`, `clear`
109
+ - `scene`: `list`, `info`, `remove`, `set-visible`
110
+ - `entity`: `rename`, `set-color`
111
+ - `view`: `screenshot`, `camera`, `orientation`, `zoom-fit`, `refresh`, `perspective`, `point-size`
112
+ - `cloud`: `compute-normals`, `subsample`, `crop`, `scalar-fields`, `paint-uniform`, `paint-by-height`, `set-active-sf`, `remove-sf`, `remove-all-sfs`, `rename-sf`, `filter-sf`, `coord-to-sf`, `remove-rgb`, `remove-normals`, `invert-normals`, `merge`
113
+ - `mesh`: `simplify`, `smooth`, `sample-points`, `extract-vertices`, `flip-triangles`, `volume`, `merge`
114
+ - `transform`: `apply`
115
+ - `export`
116
+ - `methods`: `list`
117
+ - `colmap`: `reconstruct`, `run` (generic subcommand executor)
118
+
119
+ ## Usage Examples
120
+
121
+ ### Basic operations — **General**
122
+
123
+ ```bash
124
+ # Enter interactive REPL
125
+ cli-anything-acloudviewer
126
+
127
+ # Show backend info
128
+ cli-anything-acloudviewer --json info
129
+
130
+ # Diagnostics: binary, wheel, install hints
131
+ cli-anything-acloudviewer check
132
+
133
+ # Install app, wheel, or auto (see --help)
134
+ cli-anything-acloudviewer install --help
135
+
136
+ # List supported file formats
137
+ cli-anything-acloudviewer --json formats
138
+ ```
139
+
140
+ ### AICore and plugin automation — **Headless or GUI RPC**
141
+
142
+ ```bash
143
+ # Registry identity is local; schemas come from the installed plugin
144
+ cli-anything-acloudviewer --json ai list
145
+ cli-anything-acloudviewer --json --mode headless ai schema lightglue
146
+
147
+ # External-data batch inference; repeat inputs and arbitrary typed options
148
+ cli-anything-acloudviewer --json --mode headless ai run ocr \
149
+ --image page-1.png --image page-2.png --out-dir ./ocr-out \
150
+ --option LANG=en --option LAYOUT=true
151
+
152
+ # Legacy ordinary plugin argv is preserved exactly
153
+ cli-anything-acloudviewer --mode headless plugin run ANIMATION \
154
+ --arg=-FPS --arg=24 --arg=-TOTAL_FRAMES --arg=10
155
+ ```
156
+
157
+ `ai run` returns the plugin's `acloudviewer.aicore.batch/1` manifest. In GUI
158
+ mode it calls JSON-RPC `aicore.batch`; in headless mode it invokes the same
159
+ native command directly. MCP exposes the same boundary as `list_ai_tasks`,
160
+ `get_ai_schema`, `run_ai_batch`, and `run_plugin_command`.
161
+
162
+ ### File conversion — **Headless**
163
+
164
+ ```bash
165
+ # Convert PLY to PCD
166
+ cli-anything-acloudviewer --mode headless convert input.ply output.pcd
167
+
168
+ # Convert mesh OBJ to STL
169
+ cli-anything-acloudviewer --mode headless convert model.obj model.stl
170
+
171
+ # Batch convert all PLY files to PCD
172
+ cli-anything-acloudviewer --mode headless batch-convert ./scans/ ./output/ -f .pcd
173
+ ```
174
+
175
+ ### Point cloud processing — **Headless**
176
+
177
+ ```bash
178
+ # Voxel subsample
179
+ cli-anything-acloudviewer --mode headless process subsample input.ply -o sub.ply --voxel-size 0.05
180
+
181
+ # Compute normals (standard k-NN method)
182
+ cli-anything-acloudviewer --mode headless process normals input.ply -o normals.ply
183
+
184
+ # Compute normals with octree (faster for large clouds)
185
+ cli-anything-acloudviewer --mode headless normals octree input.ply -o normals.ply --radius AUTO
186
+
187
+ # Orient normals consistently (MST algorithm)
188
+ cli-anything-acloudviewer --mode headless normals orient-mst input.ply -o oriented.ply --knn 6
189
+
190
+ # Invert all normal directions
191
+ cli-anything-acloudviewer --mode headless normals invert input.ply -o inverted.ply
192
+
193
+ # Convert normals to scalar fields (Nx, Ny, Nz)
194
+ cli-anything-acloudviewer --mode headless normals to-sfs input.ply -o normals_sf.ply
195
+
196
+ # ICP registration (align source to target)
197
+ cli-anything-acloudviewer --mode headless process icp source.ply target.ply -o aligned.ply
198
+
199
+ # Statistical outlier removal
200
+ cli-anything-acloudviewer --mode headless process sor input.ply -o clean.ply --knn 6 --sigma 1.0
201
+
202
+ # Cloud-to-cloud distance
203
+ cli-anything-acloudviewer --mode headless process c2c-dist compared.ply reference.ply -o dist.ply
204
+
205
+ # Cloud-to-mesh distance
206
+ cli-anything-acloudviewer --mode headless process c2m-dist cloud.ply mesh.obj -o dist.ply
207
+
208
+ # Point density
209
+ cli-anything-acloudviewer --mode headless process density input.ply -o density.ply --radius 0.05
210
+
211
+ # Curvature estimation
212
+ cli-anything-acloudviewer --mode headless process curvature input.ply -o curv.ply --type MEAN --radius 0.05
213
+
214
+ # Surface roughness
215
+ cli-anything-acloudviewer --mode headless process roughness input.ply -o rough.ply --radius 0.1
216
+
217
+ # Geometric features (surface variation, etc.)
218
+ cli-anything-acloudviewer --mode headless process feature input.ply -o features.ply --type SURFACE_VARIATION --kernel-size 0.1
219
+
220
+ # Extract connected components
221
+ cli-anything-acloudviewer --mode headless process extract-cc input.ply -o components.ply --min-points 100
222
+
223
+ # Delaunay triangulation
224
+ cli-anything-acloudviewer --mode headless process delaunay input.ply -o mesh.ply
225
+
226
+ # Sample mesh to point cloud
227
+ cli-anything-acloudviewer --mode headless process sample-mesh mesh.obj -o cloud.ply --density 100
228
+
229
+ # Color banding (height-based coloring)
230
+ cli-anything-acloudviewer --mode headless process color-banding input.ply -o colored.ply --axis Z --frequency 10.0
231
+
232
+ # Extract cross-section along polyline
233
+ cli-anything-acloudviewer --mode headless process cross-section input.ply -o section.ply --polyline path.ply
234
+
235
+ # Compute 2.5D volume between two clouds
236
+ cli-anything-acloudviewer --mode headless process volume-25d ground.ply surface.ply -o volume_mesh.ply --grid-step 0.5
237
+
238
+ # Crop by 2D polygon (orthogonal to Z axis)
239
+ cli-anything-acloudviewer --mode headless process crop-2d input.ply -o cropped.ply --dim Z --polygon "0,0;10,0;10,10;0,10"
240
+ ```
241
+
242
+ ### Plugin processing — **Headless**
243
+
244
+ ```bash
245
+ # PCV ambient occlusion (ShadeVis)
246
+ cli-anything-acloudviewer --mode headless process pcv input.ply -o ao.ply --n-rays 256 --resolution 1024
247
+ cli-anything-acloudviewer --mode headless process pcv input.ply -o ao.ply --mode-180 --is-closed
248
+
249
+ # Compass — export measurements to CSV or XML
250
+ cli-anything-acloudviewer --mode headless process compass-export project.bin -o data --format csv
251
+ cli-anything-acloudviewer --mode headless process compass-export project.bin -o data.xml --format xml
252
+
253
+ # Compass — import foliations / lineations from scalar fields
254
+ cli-anything-acloudviewer --mode headless process compass-import-fol input.ply --dip-sf Dip --dipdir-sf DipDir
255
+ cli-anything-acloudviewer --mode headless process compass-import-lin input.ply --trend-sf Trend --plunge-sf Plunge
256
+
257
+ # Compass — refit planes & P21 intensity
258
+ cli-anything-acloudviewer --mode headless process compass-refit project.bin
259
+ cli-anything-acloudviewer --mode headless process compass-p21 input.ply --radius 10.0 --subsample 25 -o p21.ply
260
+
261
+ # SRA radial distance from surface of revolution
262
+ cli-anything-acloudviewer --mode headless process sra input.ply -o output.ply --profile profile.txt --axis Z
263
+ ```
264
+
265
+ ### Scalar field operations — **Headless**
266
+
267
+ ```bash
268
+ # Create scalar field from coordinate (X, Y, or Z)
269
+ cli-anything-acloudviewer --mode headless sf coord-to-sf input.ply -o height.ply --dimension Z
270
+
271
+ # Apply arithmetic operation (SQRT, ABS, EXP, LOG, etc.)
272
+ cli-anything-acloudviewer --mode headless sf arithmetic input.ply -o sqrt.ply --sf-index 0 --operation SQRT
273
+
274
+ # Apply operation with constant (ADD, SUB, MULTIPLY, DIVIDE)
275
+ cli-anything-acloudviewer --mode headless sf operation input.ply -o scaled.ply --sf-index 0 --operation MULTIPLY --value 2.0
276
+
277
+ # Compute scalar field gradient
278
+ cli-anything-acloudviewer --mode headless sf gradient input.ply -o gradient.ply
279
+
280
+ # Filter points by scalar field value
281
+ cli-anything-acloudviewer --mode headless sf filter input.ply -o filtered.ply --min 0.0 --max 10.0
282
+
283
+ # Convert active scalar field to RGB colors
284
+ cli-anything-acloudviewer --mode headless sf convert-to-rgb input.ply -o colored.ply
285
+
286
+ # Set active scalar field
287
+ cli-anything-acloudviewer --mode headless sf set-active input.ply -o active.ply --sf-index 0
288
+
289
+ # Rename scalar field
290
+ cli-anything-acloudviewer --mode headless sf rename input.ply -o renamed.ply --sf-index 0 --name "Elevation"
291
+
292
+ # Remove scalar field
293
+ cli-anything-acloudviewer --mode headless sf remove input.ply -o removed.ply --sf-index 0
294
+
295
+ # Remove all scalar fields
296
+ cli-anything-acloudviewer --mode headless sf remove-all input.ply -o clean.ply
297
+ ```
298
+
299
+ ### 3D reconstruction (Colmap) — **Headless**
300
+
301
+ ```bash
302
+ # Automatic end-to-end reconstruction from images
303
+ cli-anything-acloudviewer --json reconstruct auto ./images/ -w ./workspace/ --quality high
304
+
305
+ # Step-by-step reconstruction pipeline:
306
+
307
+ # 1. Extract features from images
308
+ cli-anything-acloudviewer reconstruct extract-features ./images/ -d ./database.db
309
+
310
+ # 2. Match features between images
311
+ cli-anything-acloudviewer reconstruct match ./database.db --method exhaustive
312
+
313
+ # 3. Sparse reconstruction (Structure-from-Motion)
314
+ cli-anything-acloudviewer reconstruct sparse -d ./database.db --image-path ./images/ -o ./sparse/
315
+
316
+ # Reproducible sparse reconstruction with raw COLMAP mapper options
317
+ cli-anything-acloudviewer reconstruct sparse -d ./database.db --image-path ./images/ -o ./sparse/ \
318
+ --random-seed 17 --mapper-option Mapper.min_num_matches=32
319
+
320
+ # 4. Undistort images for dense reconstruction
321
+ cli-anything-acloudviewer reconstruct undistort --image-path ./images/ -i ./sparse/0 -o ./dense/
322
+
323
+ # 5. Dense stereo (PatchMatch MVS)
324
+ cli-anything-acloudviewer reconstruct dense-stereo ./dense/
325
+
326
+ # 6. Fuse depth maps into dense point cloud
327
+ cli-anything-acloudviewer reconstruct fuse ./dense/ -o ./dense/fused.ply
328
+
329
+ # 7. Poisson surface reconstruction
330
+ cli-anything-acloudviewer reconstruct poisson ./dense/fused.ply -o ./mesh.ply
331
+
332
+ # 8. Delaunay meshing with visibility constraints
333
+ cli-anything-acloudviewer reconstruct delaunay-mesh ./dense/fused.ply -o ./mesh_delaunay.ply
334
+
335
+ # 9. Texture the mesh (uses Colmap image_texturer)
336
+ cli-anything-acloudviewer reconstruct texture-mesh ./dense/ -o ./textured/ --mesh ./mesh_delaunay.ply
337
+
338
+ # Utility: convert model format
339
+ cli-anything-acloudviewer reconstruct convert-model ./sparse/0 -o ./model.ply --output-type PLY
340
+
341
+ # Utility: analyze reconstruction quality
342
+ cli-anything-acloudviewer reconstruct analyze-model ./sparse/0
343
+
344
+ # Mesh reconstruction from point cloud (via ACloudViewer Delaunay)
345
+ cli-anything-acloudviewer reconstruct mesh input.ply -o mesh.ply
346
+ ```
347
+
348
+ ### SIBR dataset tools — **Headless**
349
+
350
+ Requires ACloudViewer built with the SIBR plugin (`-DPLUGIN_STANDARD_QSIBR=ON`).
351
+
352
+ ```bash
353
+ # Prepare Colmap output for SIBR rendering
354
+ cli-anything-acloudviewer sibr prepare-colmap ./colmap_workspace/
355
+
356
+ # Prepare with metadata fix
357
+ cli-anything-acloudviewer sibr prepare-colmap ./colmap_workspace/ --fix-metadata
358
+
359
+ # Generate textured mesh from dataset
360
+ cli-anything-acloudviewer sibr texture-mesh ./dataset/
361
+
362
+ # UV-unwrap a mesh for texturing
363
+ cli-anything-acloudviewer sibr unwrap-mesh ./dataset/
364
+
365
+ # Apply tonemapping to HDR images
366
+ cli-anything-acloudviewer sibr tonemapper ./dataset/
367
+
368
+ # Align meshes in the dataset
369
+ cli-anything-acloudviewer sibr align-meshes ./dataset/
370
+
371
+ # Convert camera formats for SIBR
372
+ cli-anything-acloudviewer sibr camera-converter ./dataset/
373
+
374
+ # Convert NVM format to SIBR dataset layout
375
+ cli-anything-acloudviewer sibr nvm-to-sibr ./dataset/
376
+
377
+ # Crop dataset from center
378
+ cli-anything-acloudviewer sibr crop-from-center ./dataset/
379
+
380
+ # Compute clipping planes
381
+ cli-anything-acloudviewer sibr clipping-planes ./dataset/
382
+
383
+ # Distortion-aware image cropping
384
+ cli-anything-acloudviewer sibr distord-crop ./dataset/
385
+
386
+ # Run any SIBR tool by name with passthrough args
387
+ cli-anything-acloudviewer sibr tool prepareColmap4Sibr -path ./dataset/ -fix_metadata
388
+
389
+ # Launch SIBR viewers for novel view synthesis visualization
390
+ cli-anything-acloudviewer sibr viewer gaussian --model-path ./output/ --path ./dataset/
391
+ cli-anything-acloudviewer sibr viewer ulr --path ./dataset/
392
+ cli-anything-acloudviewer sibr viewer texturedmesh --mesh ./model.obj --path ./dataset/
393
+ cli-anything-acloudviewer sibr viewer remoteGaussian --ip 127.0.0.1 --port 6009
394
+ ```
395
+
396
+ **Available SIBR viewer types**:
397
+ - `gaussian`: Gaussian Splatting viewer (requires `--model-path` and `--path`)
398
+ - `ulr` / `ulrv2`: Unstructured Lumigraph Rendering viewers
399
+ - `texturedmesh`: Textured mesh viewer (requires `--mesh` and `--path`)
400
+ - `pointbased`: Point-based rendering viewer
401
+ - `remoteGaussian`: Remote Gaussian viewer for network rendering
402
+
403
+ ### Full reconstruction pipeline (Colmap + SIBR) — **Headless**
404
+
405
+ End-to-end example: images to SIBR-ready dataset:
406
+
407
+ ```bash
408
+ # 1. Automatic Colmap reconstruction
409
+ cli-anything-acloudviewer reconstruct auto ./images/ -w ./workspace/ --quality high
410
+
411
+ # 2. Prepare the reconstruction for SIBR viewing
412
+ cli-anything-acloudviewer sibr prepare-colmap ./workspace/
413
+
414
+ # 3. Generate textured mesh
415
+ cli-anything-acloudviewer sibr texture-mesh ./workspace/
416
+
417
+ # 4. UV-unwrap the mesh
418
+ cli-anything-acloudviewer sibr unwrap-mesh ./workspace/
419
+ ```
420
+
421
+ ### Scene, entity, view & open — **GUI**
422
+
423
+ Requires a running ACloudViewer with the JSON-RPC plugin (`--mode gui` or auto-detect when `ws://127.0.0.1:6001` is available).
424
+
425
+ ```bash
426
+ # Open a file in the viewer
427
+ cli-anything-acloudviewer --mode gui open /path/to/model.ply
428
+
429
+ # List all entities in the scene
430
+ cli-anything-acloudviewer --json --mode gui scene list
431
+
432
+ # Get entity details
433
+ cli-anything-acloudviewer --json --mode gui scene info --id 1
434
+
435
+ # Remove an entity from the scene
436
+ cli-anything-acloudviewer --mode gui scene remove --id 1
437
+
438
+ # Rename an entity
439
+ cli-anything-acloudviewer --mode gui entity rename --id 1 --name "MyCloud"
440
+
441
+ # Set entity color
442
+ cli-anything-acloudviewer --mode gui entity set-color --id 1 --r 255 --g 0 --b 0
443
+
444
+ # Take a screenshot
445
+ cli-anything-acloudviewer --mode gui view screenshot -o screenshot.png --width 1920 --height 1080
446
+
447
+ # Get camera parameters
448
+ cli-anything-acloudviewer --json --mode gui view camera
449
+
450
+ # Set view orientation
451
+ cli-anything-acloudviewer --mode gui view orientation --orient top
452
+
453
+ # Clear the scene
454
+ cli-anything-acloudviewer --mode gui clear
455
+
456
+ # List available RPC methods
457
+ cli-anything-acloudviewer --json --mode gui methods list
458
+ ```
459
+
460
+ ### Cloud operations — **GUI**
461
+
462
+ ```bash
463
+ # Compute normals on a loaded cloud
464
+ cli-anything-acloudviewer --json --mode gui cloud compute-normals --id 1 --radius 0.05
465
+
466
+ # Subsample a cloud
467
+ cli-anything-acloudviewer --json --mode gui cloud subsample --id 1 --method SPATIAL --param 0.1
468
+
469
+ # Get scalar field list
470
+ cli-anything-acloudviewer --json --mode gui cloud scalar-fields --id 1
471
+
472
+ # Set active scalar field
473
+ cli-anything-acloudviewer --json --mode gui cloud set-active-sf --id 1 --index 0
474
+
475
+ # Remove a scalar field
476
+ cli-anything-acloudviewer --json --mode gui cloud remove-sf --id 1 --index 0
477
+
478
+ # Coordinate to scalar field
479
+ cli-anything-acloudviewer --json --mode gui cloud coord-to-sf --id 1 --axis z
480
+
481
+ # Remove RGB colors
482
+ cli-anything-acloudviewer --mode gui cloud remove-rgb --id 1
483
+
484
+ # Remove/Invert normals
485
+ cli-anything-acloudviewer --mode gui cloud remove-normals --id 1
486
+ cli-anything-acloudviewer --mode gui cloud invert-normals --id 1
487
+
488
+ # Merge multiple clouds
489
+ cli-anything-acloudviewer --json --mode gui cloud merge --ids 1 2 3
490
+ ```
491
+
492
+ ### Mesh operations — **GUI**
493
+
494
+ ```bash
495
+ # Simplify mesh
496
+ cli-anything-acloudviewer --json --mode gui mesh simplify --id 1 --target-count 10000
497
+
498
+ # Smooth mesh (Laplacian)
499
+ cli-anything-acloudviewer --json --mode gui mesh smooth --id 1 --iterations 3
500
+
501
+ # Extract vertices as point cloud
502
+ cli-anything-acloudviewer --json --mode gui mesh extract-vertices --id 1
503
+
504
+ # Compute mesh volume
505
+ cli-anything-acloudviewer --json --mode gui mesh volume --id 1
506
+
507
+ # Flip triangle normals
508
+ cli-anything-acloudviewer --mode gui mesh flip-triangles --id 1
509
+
510
+ # Merge meshes
511
+ cli-anything-acloudviewer --json --mode gui mesh merge --ids 1 2
512
+ ```
513
+
514
+ ### COLMAP via RPC — **GUI**
515
+
516
+ ```bash
517
+ # Run automatic reconstruction via RPC (live Colmap progress in GUI console)
518
+ cli-anything-acloudviewer --json --mode gui colmap reconstruct --image-path ./images/ -w ./workspace/
519
+
520
+ # Run any Colmap subcommand via RPC
521
+ cli-anything-acloudviewer --json --mode gui colmap run --subcommand feature_extractor --args "--image_path ./images/"
522
+ ```
523
+
524
+ ### Session management — **General**
525
+
526
+ ```bash
527
+ # Show session status
528
+ cli-anything-acloudviewer --json session status
529
+
530
+ # Undo last operation
531
+ cli-anything-acloudviewer session undo
532
+
533
+ # Redo last undone operation
534
+ cli-anything-acloudviewer session redo
535
+ ```
536
+
537
+ ### JSON output (for agent/script consumption)
538
+
539
+ All commands support `--json` flag for structured output. Use **`--mode headless`** or **`--mode gui`** when the command belongs to that category; General commands do not require a backend mode.
540
+
541
+ ```bash
542
+ cli-anything-acloudviewer --json info
543
+ cli-anything-acloudviewer --json formats
544
+ cli-anything-acloudviewer --json --mode headless process subsample input.ply -o sub.ply --voxel-size 0.05
545
+ ```
546
+
547
+ ## Command Reference
548
+
549
+ | Mode | Group | Subcommands | Description |
550
+ |------|-------|------------|-------------|
551
+ | **General** | `check` | — | Installation diagnostics and fix hints |
552
+ | **General** | `install` | `app`, `wheel`, `auto` | Download / install binary or Python wheel |
553
+ | **General** | `formats` | — | List supported file formats |
554
+ | **General** | `info` | — | Show backend info and supported formats |
555
+ | **General** | `session` | `status`, `undo`, `redo` | Session management |
556
+ | **General** | `repl` | — | Interactive REPL session |
557
+ | **Headless** | `convert` | — | Convert between 30+ 3D file formats |
558
+ | **Headless** | `batch-convert` | — | Batch convert all files in a directory |
559
+ | **Headless** | `process` | `subsample`, `normals`, `icp`, `sor`, `c2c-dist`, `c2m-dist`, `crop`, `density`, `curvature`, `roughness`, `delaunay`, `sample-mesh`, `color-banding`, `set-active-sf`, `remove-sf`, `remove-all-sfs`, `rename-sf`, `filter-sf`, `coord-to-sf`, `remove-rgb`, `remove-normals`, `invert-normals`, `merge-clouds`, `extract-vertices`, `flip-triangles`, `mesh-volume`, `merge-meshes`, `volume-25d`, `crop-2d`, `rasterize`, `cross-section`, `stat-test`, … | Point cloud and mesh processing (35+ operations) |
560
+ | **Headless** | `reconstruct` | `mesh`, `auto`, `extract-features`, `match`, `sparse`, `undistort`, `dense-stereo`, `fuse`, `poisson`, `simplify-mesh`, `texture-mesh`, `convert-model`, `analyze-model`, `delaunay-mesh` | 3D reconstruction (Colmap SfM/MVS) |
561
+ | **Headless** | `sibr` | `tool`, `prepare-colmap`, `texture-mesh`, `unwrap-mesh`, `tonemapper`, `align-meshes`, `camera-converter`, `nvm-to-sibr`, `crop-from-center`, `clipping-planes`, `distord-crop` | SIBR dataset preprocessing (11 tools) |
562
+ | **GUI** | `open` | — | Open a file in the running ACloudViewer |
563
+ | **GUI** | `clear` | — | Clear all entities from the scene |
564
+ | **GUI** | `scene` | `list`, `info`, `remove`, `set-visible`, `select`, `clear` | Scene tree operations |
565
+ | **GUI** | `entity` | `rename`, `set-color` | Entity property management |
566
+ | **GUI** | `view` | `screenshot`, `camera`, `orientation`, `zoom-fit`, `refresh`, `perspective`, `point-size` | Viewport control (7 operations) |
567
+ | **GUI** | `cloud` | `compute-normals`, `subsample`, `crop`, `scalar-fields`, `paint-uniform`, `paint-by-height`, `set-active-sf`, `remove-sf`, `remove-all-sfs`, `rename-sf`, `filter-sf`, `coord-to-sf`, `remove-rgb`, `remove-normals`, `invert-normals`, `merge` | Point cloud operations (16 operations) |
568
+ | **GUI** | `mesh` | `simplify`, `smooth`, `sample-points`, `extract-vertices`, `flip-triangles`, `volume`, `merge` | Mesh operations (7 operations) |
569
+ | **GUI** | `transform` | `apply` | Apply transformations to entities |
570
+ | **GUI** | `export` | — | Export entities to file |
571
+ | **GUI** | `methods` | `list` | List available RPC methods (dynamic discovery) |
572
+ | **GUI** | `colmap` | `reconstruct`, `run` | COLMAP reconstruction via RPC |
573
+
574
+ ## JSON-RPC API (72 Methods)
575
+
576
+ When running in GUI mode, the harness communicates via JSON-RPC 2.0 over WebSocket. The method registry is dynamic — use `methods.list` to discover all available methods at runtime.
577
+
578
+ Key method groups:
579
+
580
+ | Category | Methods |
581
+ |----------|---------|
582
+ | **Lifecycle** | `ping`, `methods.list` |
583
+ | **File I/O** | `open`, `export`, `file.convert`, `clear` |
584
+ | **Scene** | `scene.list`, `scene.info`, `scene.remove`, `scene.setVisible` |
585
+ | **Entity** | `entity.rename`, `entity.setColor` |
586
+ | **View** | `view.screenshot`, `view.setOrientation`, `view.zoomFit`, `view.refresh`, `view.setPerspective`, `view.setPointSize`, `view.getCamera` |
587
+ | **Cloud** | `cloud.computeNormals`, `cloud.subsample`, `cloud.crop`, `cloud.getScalarFields`, `cloud.paintUniform`, `cloud.paintByHeight`, `cloud.paintByScalarField`, `cloud.setActiveSf`, `cloud.removeSf`, `cloud.removeAllSfs`, `cloud.renameSf`, `cloud.filterSf`, `cloud.coordToSF`, `cloud.removeRgb`, `cloud.removeNormals`, `cloud.invertNormals`, `cloud.merge`, `cloud.density`, `cloud.curvature`, `cloud.roughness`, `cloud.geometricFeature`, `cloud.approxDensity`, `cloud.colorBanding`, `cloud.sorFilter`, `cloud.sfArithmetic`, `cloud.sfOperation`, `cloud.sfGradient`, `cloud.sfConvertToRGB`, `cloud.octreeNormals`, `cloud.orientNormalsMST`, `cloud.clearNormals`, `cloud.normalsToSFs`, `cloud.normalsToDip`, `cloud.extractConnectedComponents`, `cloud.bestFitPlane`, `cloud.delaunay` |
588
+ | **Mesh** | `mesh.simplify`, `mesh.smooth`, `mesh.samplePoints`, `mesh.extractVertices`, `mesh.flipTriangles`, `mesh.volume`, `mesh.merge` |
589
+ | **Transform** | `transform.apply` |
590
+ | **COLMAP** | `colmap.reconstruct`, `colmap.run` |
591
+
592
+ ## MCP Server (187 Tools)
593
+
594
+ An optional MCP server exposes 187 tools for integration with AI agents:
595
+
596
+ ```bash
597
+ pip install -e .
598
+ cli-anything-acloudviewer-mcp --mode auto
599
+ ```
600
+
601
+ MCP tool categories mirror the JSON-RPC methods above, plus additional CLI-only tools for headless processing, file conversion, batch operations, SIBR, plugin processing (PCV, Compass, SRA, CSF, RANSAC, etc.), and session management.
602
+
603
+ ## Supported File Formats
604
+
605
+ ### Point Cloud (Import/Export)
606
+
607
+ | Format | Extensions | Plugin Required |
608
+ |--------|-----------|----------------|
609
+ | PLY | `.ply` | — (built-in) |
610
+ | ASCII | `.asc`, `.xyz`, `.xyzn`, `.xyzrgb`, `.pts`, `.txt`, `.csv`, `.neu` | — (built-in) |
611
+ | BIN | `.bin` | — (built-in) |
612
+ | VTK | `.vtk` | — (built-in) |
613
+ | PCD | `.pcd` | qPCL |
614
+ | LAS/LAZ | `.las`, `.laz` | qLASIO or qPDALIO |
615
+ | E57 | `.e57` | qE57IO |
616
+ | DRC | `.drc` | qDracoIO |
617
+ | SBF | `.sbf` | qCoreIO |
618
+ | PTX (import only) | `.ptx` | — (built-in) |
619
+
620
+ ### Mesh (Import/Export)
621
+
622
+ | Format | Extensions | Plugin Required |
623
+ |--------|-----------|----------------|
624
+ | OBJ | `.obj` | — (built-in) |
625
+ | STL | `.stl` | — (built-in) |
626
+ | OFF | `.off` | — (built-in) |
627
+ | FBX | `.fbx` | qFBXIO |
628
+ | DXF | `.dxf` | — (requires CV_DXF_SUPPORT) |
629
+ | glTF (import only) | `.gltf`, `.glb` | qMeshIO |
630
+ | DAE (import only) | `.dae` | qMeshIO |
631
+ | 3DS (import only) | `.3ds` | qMeshIO |
632
+
633
+ ## Platform Notes
634
+
635
+ | Platform | Binary Name | Auto-Discovery |
636
+ |----------|------------|----------------|
637
+ | Linux | `ACloudViewer.sh`, `ACloudViewer` | PATH, `/usr/local/bin`, `/opt/ACloudViewer`, `~/.local/share/ACloudViewer` |
638
+ | macOS | `ACloudViewer` | PATH, `/Applications/ACloudViewer.app`, `~/Applications/ACloudViewer.app` |
639
+ | Windows | `ACloudViewer.bat`, `ACloudViewer.exe` | PATH, `%PROGRAMFILES%\ACloudViewer`, `%LOCALAPPDATA%\ACloudViewer` |
640
+
641
+ On all platforms, set `ACV_BINARY` environment variable to override auto-discovery.
642
+
643
+ ### Platform-specific format availability
644
+
645
+ - **LAS FWF** (full waveform): Windows only (`qLASFWF` plugin)
646
+ - **STEP/STP** import: Requires OpenCASCADE (varies by build)
647
+ - **GDAL rasters** (`.tif`, `.tiff`): Requires `CV_GDAL_SUPPORT` build flag
648
+ - **SHP**: Requires `CV_SHP_SUPPORT` build flag
649
+ - **SIBR tools**: Not available on macOS
650
+
651
+ ## Running Tests
652
+
653
+ ```bash
654
+ pip install -e ".[dev]"
655
+ python -m pytest cli_anything/acloudviewer/tests/ -v
656
+ ```
657
+
658
+ Test suite covering CLI structure, format maps, backend logic, RPC client wrappers (20 new cloud analysis/SF/normals wrappers), MCP tool registration (187 tools), and session management.
659
+
660
+ ## Methodology
661
+
662
+ Built following the
663
+ [CLI-Anything HARNESS methodology](https://github.com/Asher-1/CLI-Anything/blob/main/cli-anything-plugin/HARNESS.md).