Deploy punkst results to CartoScope¶
punkst deploy-cartoscope packages completed punkst workflow output into a CartoScope deployment directory.
Run it after the standard punkst workflow has finished and one or more factor models have been fitted.
Scope¶
deploy-cartoscope starts from the output of a completed punkst analysis workflow. It takes tiled transcripts, fitted models, pixel decode results, and optional cell projection/boundary data, then writes the PMTiles and metadata files CartoScope needs.
Deployment currently covers transcript density as the default basemap; pixel/molecule, hexagon, and cell level factor inferences results; and limited support for including morphology images. It is meant to be a lightweight alternative to cartloader for fast exploration.
Quickstart¶
If you have run a workflow generated by the template Makefile in punkst/examples/basic/, you can prepare the CartoScope deployment directory directly by providing the same input config file to deploy-cartoscope, which will locate output files based on the naming convention in the template Makefile.
punkst deploy-cartoscope --pmtiles-format MVT \
--config /path/to/punkst/output/config.json \
--id sample-id --title "Sample title" \
--out-dir /path/for/carto --threads 4
--pmtiles-format is required and must be either MLT or MVT. Currently CartoScope prefers MVT.
Existing output files are reused by default. Add --overwrite to regenerate and overwrite files that are already present. If --overwrite is not set, files with the intended output names that exist in the output directory are reused, except for sidecars that deployment can identify as incompatible.
Serve the data from a local machine¶
Open a terminal and serve the deployment directory (which contains catalog.yaml generated by deploy-cartoscope)
http://127.0.0.1:8080/catalog.yaml (the actual port may differ) on CartoScope.
Input Modes¶
Standard Workflow Config¶
Use --config for output produced by the standard workflow template (see Quickstart and punkst/examples/basic/).
For each model prefix, the workflow output should contain files like:
<model-prefix>.results.tsv
<model-prefix>.model.tsv
<model-prefix>.color.rgb.tsv
<model-prefix>.pixel.bin
<model-prefix>.pixel.index
<model-prefix>.pixel.pseudobulk.tsv
<model-prefix>.pixel.de_bulk.tsv
The standard template writes model prefixes as h<H>.k<K>, for example h12.k24 for hexagon grid size 12 and K=24 factors.
If workflow.pixel_decode_mode is set, deployment uses the matching pixel-output suffix:
pixel -> <model-prefix>.pixel.*
feature_pixel -> <model-prefix>.sf_pixel.*
single_molecule -> <model-prefix>.sgl_mol.*
Default deployment model IDs use names such as h12-k24, h12-k24-sf-pixel, and h12-k24-sgl-mol.
Deploy only selected models with --model-prefix <model-prefix>, e.g. --model-prefix h12.k24. The normalized model ID is also accepted; normalization replaces _, ., /, and \ with -, so h12.k24 becomes h12-k24.
Explicit Input JSON¶
Use --input-json when your data was not produced by (a single run of) the standard workflow template.
punkst deploy-cartoscope --pmtiles-format MVT \
--input-json /path/to/deploy_inputs.json \
--id sample-id --title "Sample title" \
--out-dir /path/for/carto --threads 4
Example with the standard pipeline¶
{
"transcripts": {
"tiled_prefix": "/path/to/transcripts.tiled",
"feature_count_tsv": "/path/to/transcripts.tiled.features.tsv",
"icol_x": 0,
"icol_y": 1,
"icol_feature": 2,
"icol_count": 3,
"null_str": "NA"
},
"models": [
{
"id": "<model-id>",
"hex_grid_dist": 12,
"results_tsv": "/path/to/<model-prefix>.results.tsv",
"model_tsv": "/path/to/<model-prefix>.model.tsv",
"color_rgb_tsv": "/path/to/<model-prefix>.color.rgb.tsv",
"pixel_decode_mode": "pixel",
"pixel_prefix": "/path/to/<model-prefix>.pixel",
"de_tsv": "/path/to/<model-prefix>.pixel.de_bulk.tsv",
"pseudobulk_tsv": "/path/to/<model-prefix>.pixel.pseudobulk.tsv"
}
]
}
You can add more than one model entry, each with a different id.
pixel_decode_mode is optional; when omitted, deployment infers the mode based on files provided through pixel_prefix. Depending on the decoding mode, your pixel_prefix (if you used the template workflow) may have a different suffix such as .sf_pixel or .sgl_mol instead of .pixel.
When pseudobulk_tsv is omitted, it is assumed to be <pixel_prefix>.pseudobulk.tsv.
Set skip_hex_pmtiles: true on a default model to package only pixel raster and raw-pixel assets for that model. In this mode results_tsv and hex_grid_dist may be omitted, and the generated catalog will not include a pmtiles.hex entry for the model.
If the same fitted model is decoded in multiple pixel modes, list those outputs as separate model entries with different id values. The entries can reuse the same results_tsv, model_tsv, and color_rgb_tsv while pointing to different pixel prefixes, pseudobulk tables, and DE tables.
For results_tsv with nonstandard header:
Outputs produced by punkst normally use numeric column names 0,...,K-1 for factor probabilities, or use columns names matching that in the pseudobulk matrix (pseudobulk_tsv). If your results_tsv has a different header pattern, you can specify the 0-based inclusive column index range by adding factor_col_begin and factor_col_end to the model entry. The columns in the specified range should be ordered in the same way as those in the pseudobulk matrix.
Add cell-level results and cell boundaries¶
Cell-level PMTiles from the same model as the pixel level results can be added to that model entry.
There are two ways to provide cell-level data (the data up to "pseudobulk_tsv" are the same as the above standard pixel-only example):
- Use existing PMTiles, which can be generated by
cells2pmtiles, undercell_pmtiles:
{
"id": "<model-id>",
"hex_grid_dist": 12,
"results_tsv": "/path/to/<model-prefix>.results.tsv",
"model_tsv": "/path/to/<model-prefix>.model.tsv",
"color_rgb_tsv": "/path/to/<model-prefix>.color.rgb.tsv",
"pixel_prefix": "/path/to/<model-prefix>.pixel",
"de_tsv": "/path/to/<model-prefix>.pixel.de_bulk.tsv",
"pseudobulk_tsv": "/path/to/<model-prefix>.pixel.pseudobulk.tsv",
"cell_pmtiles": {
"cells": "/path/to/<model-id>-cells.pmtiles",
"boundaries": "/path/to/<model-id>-boundaries.pmtiles"
}
}
- Provide source files that deployment will pass through
cells2pmtiles:
{
"id": "<model-id>",
"hex_grid_dist": 12,
"results_tsv": "/path/to/<model-prefix>.results.tsv",
"model_tsv": "/path/to/<model-prefix>.model.tsv",
"color_rgb_tsv": "/path/to/<model-prefix>.color.rgb.tsv",
"pixel_prefix": "/path/to/<model-prefix>.pixel",
"de_tsv": "/path/to/<model-prefix>.pixel.de_bulk.tsv",
"pseudobulk_tsv": "/path/to/<model-prefix>.pixel.pseudobulk.tsv",
"cell_results_tsv": "/path/to/cells.results.tsv",
"cell_result_id_col": "cell_id",
"cell_boundaries": "/path/to/cell_boundaries.tsv",
"cell_boundary_format": "table",
"cell_b_icol_id": 0,
"cell_b_icol_x": 1,
"cell_b_icol_y": 2
}
File paths can be absolute or relative to the directory of the input JSON file. For prebuilt PMTiles, if the source path is already the target file inside the deployment directory, deployment leaves it in place.
For source cell boundaries, cell_boundary_format can be omitted in the common case. cells2pmtiles infers .json/.geojson as GeoJSON and .tsv/.csv/.txt as flat tables, including .gz variants. Boundary and center tables can be comma- or tab-delimited, may include # comment lines, and may be either headered or headerless when the relevant ID/X/Y columns are provided as 0-based indexes. The cell projection/result TSV uses a named ID column via cell_result_id_col.
The cell center table is optional. If cell_centers_tsv is omitted, cells2pmtiles computes centers from the boundary polygons. If a center table is provided, use cell_c_icol_id, cell_c_icol_x, and cell_c_icol_y to specify its 0-based cell ID and coordinate columns.
Boundaries provided as flat tables should contain one vertex per row. All rows for a cell must be consecutive, but the cell order can be arbitrary. In the file cell_boundaries.tsv from the unpacked example dataset, the cell ID, x coordinate, and y coordinate are in columns 0, 1, and 2, respectively, so the matching JSON fields are cell_b_icol_id: 0, cell_b_icol_x: 1, and cell_b_icol_y: 2.
#cell_index vertex_x vertex_y
0 7266.073738 6771.112935
0 7267.797005 6774.856543
0 7269.785159 6777.095995
The equivalent GeoJSON example in the unpacked dataset is cell_boundaries.geojson. It is a standard FeatureCollection; each feature has a Polygon or MultiPolygon geometry, and the cell ID is stored in properties.cell_id.
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"id": "0",
"properties": {"cell_id": "0"},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[7266.073738, 6771.112935],
[7267.797005, 6774.856543],
[7269.785159, 6777.095995],
[7266.073738, 6771.112935]
]
]
}
}
]
}
To use such a GeoJSON file for cell boundaries, replace the table-boundary fields in the previous JSON example with:
cell_boundary_id_prop is only necessary if the cell ID property has a name other than cell_id.
Cell-only model entry¶
To deploy a separate set of cell-only factor results, add a model entry with "type": "cell_only" alongside at least one default model with pixel-level data.
This mode assumes the cell-level data has its own model, thus requiring pseudobulk_tsv, rgb_tsv or color_rgb_tsv. de_tsv is optional, and if it is not provided de-chisq is run using the pseudobulk matrix.
{
"id": "<cell-model-id>",
"type": "cell_only",
"results_tsv": "/path/to/cells.results.tsv",
"result_id_col": "cell_id",
"rgb_tsv": "/path/to/cells-rgb.tsv",
"pseudobulk_tsv": "/path/to/cells.pseudobulk.tsv",
"boundaries": "/path/to/cell_boundaries.geojson"
}
You can also replace "boundaries" with prebuilt PMTiles directly through
"cell_pmtiles": {
"cells": "/path/to/<model-id>-cells.pmtiles",
"boundaries": "/path/to/<model-id>-boundaries.pmtiles"
}
Add background image PMTiles¶
Background images can be added as CartoScope basemaps in explicit input JSON mode. Images are not aligned or registered by punkst. Provide the alignment through pixel size plus offset, a full 3x3 transform, or two image grid reference points that map to the same micron coordinate system used by the transcript data.
Supported image inputs are PNG and narrowly defined TIFF: tiled TIFF with uncompressed or Deflate/zlib-compressed tiles, using 8-bit RGB/RGBA, 8-bit grayscale, or 16-bit grayscale pixels. Unsupported OME-TIFF, JPEG/JPEG-2000/LZW-compressed TIFF, and other fancier formats should be converted first.
convert OME-TIFF¶
Use ext/py/convert_tiff_for_image2pmtiles.py to convert OME-TIFF or generic TIFF files into the supported tiled TIFF subset. The helper writes uint8 output by default, using percentile scaling for non-uint8 inputs (--uint8-percentiles 1 99 by default); use --preserve-depth only when you intentionally want to keep supported 16-bit grayscale TIFF data for native punkst scaling. The script uses Python numpy and tifffile. For TIFF compression codecs that tifffile delegates to optional decoders, install the matching Python package as well; in practice, JPEG/JPEG2000-compressed OME-TIFFs commonly require imagecodecs.
Example OME/generic compressed TIFF conversion:
python ext/py/convert_tiff_for_image2pmtiles.py \
--input spatial/tissue_hires_image.ome.tif \
--output carto/HnE.supported.tif \
--id HnE
The conversion helper writes <output>.image2pmtiles.json that can be passed on to deploy-cartoscope with --image-json directly, which runs image2pmtiles internally to produce CartoScope-compatible PMTiles.
When OME physical pixel metadata is available, the JSON records a pixel-to-micron transform for the selected --series, --level, and --page based on the metadata, which is then used during PMTiles construction.
For generic TIFFs without OME metadata, pass either --microns-per-pixel with optional offsets --offset-x-um --offset-y-um, a full 3x3 matrix with --transform (row-wise flatten to 9 comma/space-separated values), or --pix-zero x1 y1 --pix-max x2 y2; otherwise the JSON is marked requires_transform.
Supply (converted) TIFF to deploy-cartoscope¶
If your image files are converted by with above python helper ext/py/convert_tiff_for_image2pmtiles.py, pass its output <output>.image2pmtiles.json to deploy-cartoscope directly with --image-json.
Otherwise, include supported source image information as additional sections in the input JSON file for deploy-cartoscope:
Example with two images:
{
"images": [
{
"id": "HnE",
"src": "spatial/tissue_hires_image.tif",
"microns_per_pixel": 0.5,
"offset_x_um": 0,
"offset_y_um": 0
},
{
"id": "DAPI",
"src": "dapi.supported.tif",
"transform": [
[0.5, 0.0, 10.0],
[0.0, 0.5, 20.0],
[0.0, 0.0, 1.0]
]
},
{
"id": "IF",
"src": "if.supported.tif",
"pix_zero": [10.0, 20.0],
"pix_max": [510.0, 420.0]
}
]
}
"deploy_cartoscope" from image2pmtiles.json)
deploy-cartoscope Options¶
punkst deploy-cartoscope accepts the following command-line options:
| Option | Default | Description |
|---|---|---|
--config |
none | Standard workflow config JSON. Provide exactly one of --config or --input-json. |
--input-json |
none | Explicit deployment input JSON. Provide exactly one of --config or --input-json. |
--image-json |
none | Additional image fragment JSON, typically <output>.image2pmtiles.json from convert_tiff_for_image2pmtiles.py. May be repeated; requires --input-json. |
--out-dir |
required | Output deployment directory. |
--id |
required | Dataset ID written to the deployment metadata. |
--title |
empty | Dataset title. |
--desc |
empty | Dataset description. |
--pmtiles-format |
required | Tile encoding format: MLT or MVT. |
--model-prefix |
all models | Optional model prefixes or normalized model IDs to deploy. Can be repeated or given multiple values, depending on shell usage. |
--point-min-zoom |
10 |
Minimum zoom for transcript PMTiles pyramids. |
--point-max-zoom |
18 |
Maximum zoom for transcript PMTiles export. |
--polygon-min-zoom |
10 |
Minimum zoom for hex and cell PMTiles pyramids. |
--polygon-max-zoom |
18 |
Maximum zoom for hex and cell PMTiles export. |
--n-gene-bins |
50 |
Maximum number of gene bins for transcript PMTiles in adaptive mode. |
--gene-bin-mode |
adaptive |
Gene-bin packing mode: adaptive or fixed. Use fixed for legacy contiguous count buckets. |
--gene-bin-target-molecules |
1000000 |
Target molecules per adaptive gene bin. |
--gene-bin-singleton-ratio |
1.0 |
Put genes with counts at least this multiple of the target into singleton bins when capacity allows. |
--threads |
4 |
Number of threads. |
--max-point-tile-bytes |
5000000 |
Maximum compressed bytes per point tile. |
--max-point-tile-features |
50000 |
Maximum features per point tile. |
--max-polygon-tile-bytes |
500000 |
Maximum compressed bytes per polygon tile. |
--max-polygon-tile-features |
5000 |
Maximum features per polygon tile. |
--basemap-min-zoom |
7 |
Minimum zoom for SGE mono basemap PMTiles. |
--basemap-max-zoom |
--point-max-zoom |
Maximum zoom for SGE mono basemap PMTiles. |
--mono-max-zoom-from-raw |
--basemap-max-zoom |
Parse raw data for SGE mono basemap zoom levels greater than or equal to this value; derive lower zooms from parent layers. |
--basemap-adjust-quantile |
0.99 |
Quantile for SGE mono basemap density auto-adjustment. |
--basemap-display-transform |
linear |
Display transform for SGE mono basemap intensity: linear or log1p. |
--scale-factor-compression |
10.0 |
Pyramid compression aggressiveness estimate. |
--hex-prob-thres |
0.001 |
Minimum hex factor probability retained. |
--null-str |
none | Replace empty string query properties with this placeholder in transcript PMTiles packaging. If omitted, empty strings are preserved. |
--use-png |
false | Use pre-rendered pixel PNGs for raster PMTiles in --config mode. |
--skip-basemap |
false | Skip SGE mono basemap PMTiles generation. |
--overwrite |
false | Overwrite existing deployment output files. |
Output¶
catalog.yaml in the deployment directory registers each factor with the available PMTiles. Serve that file to CartoScope to visualize the data.
A typical catalog.yaml looks like this:
assets:
sge:
all: genes_all.pmtiles
bins:
- genes_bin1.pmtiles
counts: genes_bin_counts.json
overview: sge-mono-dark.pmtiles
factors:
- id: h12-k24
model_id: h12-k24
decode_id: h12-k24-pixel
raw_pixel_col: h12-k24-pixel
de: h12-k24-bulk-de.tsv
info: h12-k24-info.tsv
rgb: h12-k24-rgb.tsv
pmtiles:
hex: h12-k24.pmtiles
raster: h12-k24-pixel-raster.pmtiles
raw_pixel: genes_all.pmtiles
cells: h12-k24-cells.pmtiles
boundaries: h12-k24-boundaries.pmtiles
basemap:
sge:
default: dark
dark: sge-mono-dark.pmtiles
For models with non-numeric factor names, the factor entry also includes alias: <model-id>-alias.tsv.
PMTiles and Zooms¶
(See more about PMTiles utilities in Modules)
Transcript PMTiles are written at --point-max-zoom, then pyramid levels are built down to --point-min-zoom.
When existing transcript PMTiles are reused, they must already cover the requested --point-max-zoom. Deployment can add missing lower zoom pyramid levels in place, but it cannot synthesize higher zoom tiles from an existing lower-max-zoom archive; rerun with --overwrite after increasing --point-max-zoom.
Hexagon PMTiles are written at --polygon-max-zoom, then pyramid levels are built down to --polygon-min-zoom.
Cell PMTiles generated from source inputs are also written at --polygon-max-zoom, then pyramids are built down to --polygon-min-zoom. This applies to both cell-center points and cell-boundary polygons.
The mono SGE basemap is written as PNG raster PMTiles (disable with --skip-basemap). Its zoom range and density scaling are controlled separately from vector PMTiles:
--basemap-min-zoom 7
--basemap-max-zoom 18
--mono-max-zoom-from-raw 18
--basemap-adjust-quantile 0.99
--basemap-display-transform linear
--basemap-max-zoom is omitted, it defaults to --point-max-zoom.
By default, the basemap (transcript density) parses raw transcript counts only at --basemap-max-zoom and derives lower zooms by summing parent layers. The lazy lower-zoom path preserves full accumulated counts until final PNG encoding. Use --mono-max-zoom-from-raw to parse raw data for zooms greater than or equal to that value, and use --basemap-display-transform log1p to compress high-density regions while preserving visible heterogeneity.
Write cell-level PMTiles separately¶
punkst cells2pmtiles packages cell-level factor assignments, cell centers, and cell boundary geometry into CartoScope-ready PMTiles. It writes geometry PMTiles only; CartoScope sidecars such as DE, pseudobulk, factor info, RGB tables, ficture_assets.json, and catalog.yaml are produced by punkst deploy-cartoscope.
Typical use:
punkst lda-transform \
--in-model model.tsv \
--in-dge-dir cell_feature_matrix/ \
--out-prefix cells \
--topk-only 3
punkst cells2pmtiles \
--in-results cells.results.tsv \
--id-col cell_id \
--in-boundaries cell_boundaries.geojson \
--out-prefix carto/cells \
--format MVT --min-zoom 10 --max-zoom 18
Input
The result table can contain dense factor columns named 0..K-1, compact top-k columns from lda-transform --topk-only, or topK/topP columns:
Use --id-col to select the cell ID column in the result table by name. For dense factor columns, --top-k controls how many top factors are retained (default: 3).
Boundary input may be GeoJSON Feature records with Polygon or MultiPolygon geometry, or a flat TSV/CSV table with consecutive vertices per cell. For table boundaries, use --b-icol-id, --b-icol-x, and --b-icol-y to specify the 0-based column indexes for cell ID and coordinates.
When --boundary-format is left as auto, cells2pmtiles infers JSON/GeoJSON vs table input from the file extension (.json, .geojson, .tsv, .csv, .txt, including .gz variants). Flat boundary and center tables may be comma- or tab-delimited. Lines beginning with # are skipped, and the first non-comment line is treated as a header only when the configured coordinate columns do not parse as numeric values.
Output
cells2pmtiles Options¶
punkst cells2pmtiles accepts the following command-line options:
| Option | Default | Description |
|---|---|---|
--in-results |
required | Cell projection result TSV. |
--in-boundaries |
required | Cell boundary GeoJSON/JSON or flat TSV/CSV table. |
--in-centers |
none | Optional cell center TSV/CSV. If omitted, centers are computed from boundary geometry. |
--out-prefix |
required | Output prefix. Writes <prefix>-cells.pmtiles and <prefix>-boundaries.pmtiles. |
--format |
MVT |
Tile encoding format: MLT or MVT. |
--boundary-format |
auto |
Boundary input format: auto, geojson, json, table, tsv, or csv. |
--id-col |
cell_id |
Cell ID column name in projection results. |
--top-k |
3 |
Number of top factors to keep from dense factor columns. |
--b-icol-id |
0 |
0-based cell ID column in table boundaries. |
--b-icol-x |
1 |
0-based x column in table boundaries. |
--b-icol-y |
2 |
0-based y column in table boundaries. |
--c-icol-id |
0 |
0-based cell ID column in --in-centers. |
--c-icol-x |
1 |
0-based center x column in --in-centers. |
--c-icol-y |
2 |
0-based center y column in --in-centers. |
--boundary-id-prop |
cell_id |
Cell ID property in boundary GeoJSON features. |
--min-zoom |
10 |
Minimum zoom for pyramids. |
--max-zoom |
18 |
Maximum zoom for initial export. |
--max-point-tile-bytes |
5000000 |
Maximum compressed bytes per point tile. |
--max-point-tile-features |
50000 |
Maximum point features per tile. |
--max-polygon-tile-bytes |
500000 |
Maximum compressed bytes per polygon tile. |
--max-polygon-tile-features |
5000 |
Maximum polygon features per tile. |
--coord-scale |
1.0 |
Scale applied to input coordinates before tiling. |
--prob-thres |
0.0001 |
Minimum probability retained for nullable K/P fields. |
--scale-factor-compression |
10.0 |
Pyramid compression aggressiveness estimate. |
--tile-buffer-px |
5.0 |
Polygon tile buffer in screen pixels. |
--clip-scale |
1024 |
Integer scale used for polygon clipping. |
--extent |
4096 |
Vector tile extent. |
--threads |
1 |
Number of threads. |
--overwrite |
false | Overwrite PMTiles outputs. |
Convert PNG/TIFF to PMTiles¶
You can also run punkst image2pmtiles separately for supported/converted images to produce PMTiles, then pass its output to deploy-cartoscope.
punkst image2pmtiles \
--in-image tissue_hires_image.tif \
--out-prefix carto/HnE \
--id HnE \
--microns-per-pixel 0.5 \
--offset-x-um 0 \
--offset-y-um 0 \
--min-zoom 10 \
--max-zoom 18
This writes:
Include the asset JSON in deployment input:
image2pmtiles Options¶
punkst image2pmtiles accepts the following command-line options:
| Option | Default | Description |
|---|---|---|
--in-image |
required | Input PNG or supported tiled TIFF. |
--out-prefix |
required | Output prefix. Writes <prefix>.pmtiles and <prefix>_assets.json unless --asset-json overrides the asset JSON path. |
--asset-json |
<out-prefix>_assets.json |
Output asset JSON path for later use through deploy-cartoscope image_assets. |
--id |
required | Image/basemap ID written to the asset JSON and CartoScope catalog. |
--min-zoom |
7 |
Minimum PMTiles zoom. |
--max-zoom |
18 |
Maximum PMTiles zoom. |
--microns-per-pixel |
none | Pixel size in punkst coordinate units for scale-only alignment. Mutually exclusive with other alignment modes. |
--offset-x-um |
0 |
X offset used with --microns-per-pixel. |
--offset-y-um |
0 |
Y offset used with --microns-per-pixel. |
--transform |
none | Full 3x3 pixel-to-micron transform as 9 comma/space-separated values (row-major). Mutually exclusive with other alignment modes. |
--pix-zero |
none | Two micron coordinates for image grid point (0,0). Must be used with --pix-max; mutually exclusive with --transform, --microns-per-pixel, and offsets. |
--pix-max |
none | Two micron coordinates for image grid point (W,H) for image width W and height H. Must be used with --pix-zero. |
--gray-percentiles |
1 99 |
Low/high percentile bounds for mapping 16-bit grayscale TIFF data to 8-bit PNG tiles. |
--gray-sample-fraction |
0.05 |
Fraction of TIFF tiles sampled for 16-bit grayscale percentile estimation. |
--gray-sample-tiles |
10 |
Minimum number of TIFF tiles sampled for percentile estimation; use 0 to scan all tiles. |
--gray-sample-seed |
1 |
Random seed for TIFF tile sampling. |
--tile-cache-mb |
0 |
Optional decoded TIFF tile cache guard in MB; 0 disables the absolute memory guard. |
--tiff-source-level |
auto |
TIFF source level to read: auto, base, or a numeric IFD/SubIFD level. |
--overwrite |
false | Overwrite existing PMTiles and asset JSON outputs. |