Using pardesline: where everything is¶
Using pardesline¶
pardesline (import as pl) is one Python package for point clouds, meshes,
medical volumes and label maps. Everything under pl.load / pl.run executes
on the machine that runs Python; nothing leaves it. The cloud client is
optional and separate (pardesline.cloud).
Install (tell the user exactly this)¶
pip install "pardesline[all]" # Open3D + PyVista + SimpleITK + huggingface_hub
pip install "pardesline[local]" # point clouds, meshes, SDF, LiDAR (Open3D, PyVista)
pip install "pardesline[medical]" # volumes, DICOM, registration, segmentation (SimpleITK + PyVista)
pip install "pardesline[hf]" # pl.load("hf://...")
pip install pardesline # catalog + object model + cloud client only, no native libs
Python 3.10 to 3.12 for [local] (Open3D 0.19 has no 3.13 wheels). A missing
library raises pl.MissingDependency whose message names the extra to install.
The three entry points¶
import pardesline as pl
obj = pl.load("scan.ply") # Object (PointCloud / Mesh / Volume / LabelMap ...)
out = obj.run("point_cloud_processing.voxel_downsample", voxel_size=0.02) # new Object
res = pl.run("point_cloud_processing", "voxel_downsample", "scan.ply", voxel_size=0.02) # RunResult
ds = pl.load("rire_brain") # Dataset: samples with typed roles, fetched on access
| You want to | Use | Skill |
|---|---|---|
| run one of the 73 algorithms, see its parameters | pl.run, pl.describe("module.method"), CLI pardesline run |
catalog-and-run |
| chain operations on a file, keep frame/licence/provenance | pl.load(file) then .downsample() .poisson() .decimate() ... |
object-model |
| segment a volume, turn a label into a surface, register two scans | Volume.segment(), LabelMap.to_mesh(label), Volume.align(moving) |
object-model, medical-volumes |
| load a public dataset, a Hugging Face repo, a bucket, a TCIA collection or your own folder | pl.load("msd_task02_heart"), pl.load("hf://org/name/sub"), pl.load("tcia://Pancreas-CT"), pl.load("s3://openneuro.org/ds000001"), pl.load("/data/study") |
datasets-and-manifests, scanning-private-folders |
read a raw .npy / .bin array, standardise a dataset |
pl.load("sweep.bin", layout={...}), ds.export(folder), pardesline export |
object-model, datasets-and-manifests |
| write a manifest, answer the scan's questions | pl.scan(folder), pl.load(folder, license=..., units=..., labels=...) |
scanning-private-folders |
| share a result, run on the hosted GPU, open a browser viewer | pl.login(), pl.upload, pl.share, pardesline.cloud |
cloud-client |
| give an AI agent (Claude, Gemini, Cursor, Codex) the datasets and algorithms through MCP | pardesline mcp, .mcp.json, tools load_sample, scan_dataset, run_method |
mcp-server |
| choose a 3D representation, convert between them | conversion matrix, memory, pitfalls | 3d-representations |
| align two clouds or an atlas and judge the result | RANSAC + FPFH + ICP parameters, metrics, CPD | point-cloud-registration, atlas-label-transfer |
| register CT with MRI (or PET, CBCT) | Mattes MI, initialiser, pyramid, TRE | multimodal-rigid-registration |
| train or use a segmentation model on volumes or points | nnU-Net export, TotalSegmentator, PointNet data contract | medical-segmentation-models, pointnet-segmentation |
| use foundation-model features, pretrain without labels, detect anomalies | frozen DINOv3 heads, JEPA, VAE residual maps | dinov3-dense-features, jepa-pretraining, vae-anomaly-detection |
| write or read Gaussian splats | points -> 3DGS, PLY layout, training | gaussian-splatting |
| report a result honestly | Dice / HD95 / NSD / chamfer / TRE / AUROC, per-case statistics | evaluation-metrics-3d |
| add an algorithm or a manifest to the package | src/pardesline/ops/<module>/, catalog/data/<module>.json, data/manifests/ |
contributing-algorithms |
Rules the package enforces (do not fight them, explain them)¶
- Never guess silently. A format that carries no unit or axis convention
(PLY, STL, OBJ, PCD, VTK grids) gives
obj.units is None. Declare withobj.with_frame("Z-up", "mm")or a manifest. Volumes read LPS/mm from their header; glTF is Y-up/m by specification. - Parameters are validated before anything runs against the catalog (type, range, choices, unknown names with a "did you mean"). Read the error: it lists what is accepted.
- Two-input methods need
moving=(registration). Without it the call raises instead of self-aligning a synthetic copy. - A folder needs a confirmed manifest.
pl.load(folder)raisesNeedsConfirmationlisting licence / units / labels questions; answer them in the call, in the saved draft, interactively, or passassume=True. - Licences travel with the data.
ds.license.describe(); bundled public datasets whose terms are not established sayTO CONFIRM.
Errors (all derive from pl.PardesLineError, each has .code)¶
ParameterError (bad or unknown parameter), CatalogError (unknown
module/method), RunError (script failed: .returncode, .log, .command),
MissingDependency (install an extra), ManifestError, FetchError
(download or checksum), NeedsConfirmation (.questions, .draft_path).
FileNotFoundError for missing inputs.
Quick facts¶
19 modules, 73 methods, 371 parameters (pl.catalog()), 43 bundled datasets
(pl.datasets(): 35 medical - DICOM, NIfTI, MetaImage, npz, STL, splats -
over https, Hugging Face, remote archives by HTTP Range, S3, TCIA and URL
indexes), outputs default to pl.output_dir() (system temp,
change with pl.set_output_dir), downloads cache in ~/.cache/pardesline
(PARDESLINE_CACHE). pl.o3d, pl.pv, pl.sitk, pl.np are the real
libraries when installed, the cloud-executed mirrors otherwise.
Source: skills/using-pardesline/SKILL.md, one of the twenty skills served by pardesline mcp; published on 2026-10-14.