HELIX Docs
CLI & AI toolsCommand reference

helix city

City pipelines: the neutral city source every importer writes and every generator reads

CLI version 0.1.27-helix3.551. Run helix city --help for the text your installed build prints.

helix city

City pipelines: the neutral city source every importer writes and every generator reads

helix city <command>

helix city source

The neutral city format helix.city-source/1 (docs/city-source.md): check a folder, read its numbers, draw its plan

helix city source <command>

helix city source validate

Check a city-source folder: files and hashes, then rings, road graph, extents, projection. Exits 1 on any error.

helix city source validate [options] <dir>
ArgumentRequiredDescription
diryesfolder holding city-source.json
OptionDescription
--jsonprint the report as JSON
--max-issues <n>issues listed per code (the rest are counted) (default "25")

helix city source inspect

Counts, lengths, areas and hashes of a city-source folder; with --preview, a PNG plan of roads, footprints, water and land use

helix city source inspect [options] <dir>
ArgumentRequiredDescription
diryesfolder holding city-source.json
OptionDescription
--jsonprint the numbers as JSON
--preview <png>also write a north-up plan image (at most 1000 px)
--size <px>longest edge of the preview, 200 to 1000 (default "1000")

helix city import

Import a real or generated city into a city source folder

helix city import <command>

helix city import osm

OpenStreetMap (Overpass for a small box, a .osm.pbf extract for a large one) plus a Copernicus GLO-30 DEM window, as a helix.city-source/1 folder

helix city import osm [options]
OptionDescription
--out <dir>folder to write the city source into (required)
--bbox <s,w,n,e>box in degrees south,west,north,east (Overpass; with --pbf, which part of the extract to read)
--pbf <file>an .osm.pbf extract (Geofabrik, BBBike, osmium) instead of Overpass; for areas beyond about 150 km2
--id <id>stable city id (default city.<out folder name>)
--origin <lon,lat>projection origin in degrees; default the box centre snapped to about 1 m
--keep-servicekeep parking aisles, driveways and private service roads
--keep-sidewalkskeep mapped sidewalk and crossing footways as edges (default: derived from the road sidewalk widths)
--no-demskip the Copernicus DEM: flat terrain, no elevations (works offline)
--dem-resolution <m>DEM sample spacing in metres (default 30, the dataset posting)
--cache-dir <dir>cache raw Overpass responses and DEM byte ranges here, so a re-run is offline and polite
--overpass <url...>Overpass endpoint(s), tried in order
--allow-large-overpassallow an Overpass box over 150 km2
--allow-wideallow a box reaching more than 8 km from its origin
--region <name>manifest defaults.region (drives class/width/facade tables)
--drive-side <side>left or right (default right)
--style <name>manifest defaults.style
--forceoverwrite an existing city source in --out
--no-previewskip preview.png and preview-terrain.png

helix city import cs2

A Cities: Skylines II source-v2 bundle (roads, buildings, land use, water, terrain, trees) as a helix.city-source/1 folder

helix city import cs2 [options] <bundleRoot>
ArgumentRequiredDescription
bundleRootyesfolder holding terrain/, roads/ (or roads-v3/), placements/, meshes-v2/, areas/, water/ and legacy/city/
OptionDescription
--out <dir>folder to write the city source into (required)
--id <id>stable city id (default city.cs2-<save name>)
--bounds <minX,minZ,maxX,maxZ>import only this window of the CS2 world, in scene metres (snapped out to the 256 m grid); default the whole map
--terrain <mode>dem (a raster inside the folder, default), reference (a pointer to the bundle terrain.json) or none (default "dem")
--no-treesskip the tree and bush points
--no-previewskip preview.png
--jsonprint the full result as JSON
--forceoverwrite an existing city source in --out

helix city buildings

Procedural buildings from a city-source folder (docs/city-buildings.md): masses, roofs, facade parameters, colliders and a whole-map far layer

helix city buildings <command>

helix city buildings build

Write content-addressed building cells (near, box, colliders, index) and the far layer from a helix.city-source/1 folder

helix city buildings build [options] <source-dir>
ArgumentRequiredDescription
source-diryesfolder holding city-source.json
OptionDescription
--out <dir>output folder (buildings.json plus chunks/) (required)
--cell <m>building cell size in metres (256, or 512 past about 5 km) (default "256")
--far-cell <m>far-layer cluster size in metres (a multiple of --cell) (default "1024")
--ground-filter <mode>auto | none | min3: bare-earth proxy applied to a surface-model DEM before seating buildings (default "auto")
--limit <n>only the first n buildings by id (smoke runs)
--dry-runcompute everything, write nothing
--jsonprint the manifest totals as JSON

helix city buildings check

Read a build back and hold it against its city source: every building present, no hollow or inverted mass, far layer complete. Exits 1 below 99% or on any problem.

helix city buildings check [options] <source-dir> <out-dir>
ArgumentRequiredDescription
source-diryesthe city-source folder the build was made from
out-diryesthe build output folder
OptionDescription
--min-pct <n>least share of buildings that must be present (default "99")
--jsonprint the report as JSON

Write the building gallery city source (rectilinear, L, courtyard, curved, tower, gable, hip, dome, raised part, ...)

helix city buildings gallery [options]
OptionDescription
--out <dir>folder to write the city source into (required)

helix city colliders

Complete the collision of a published city Scene: collider cells for elevated decks, ramps and rails, and a collider-only child Scene of building boxes

helix city colliders <command>

helix city colliders apply

Read a published city root from a data prefix (https origin or folder) and write the new objects (resealed root, deck-collider cells, building-box child Scene) to --out

helix city colliders apply [options]
OptionDescription
--source <prefix>data prefix holding scene/<root>/ (https origin or folder) (required)
--root <name>the root Scene folder under scene/ to complete (required)
--new-root <name>the folder name the completed root is written as (required)
--out <dir>output folder (mirrors the prefix layout) (required)
--road-cell <m>road render/collider cell size in metres (default "1024")
--no-decksskip the elevated-deck collider cells
--no-lipsskip the bevels on kerbs and deck edges (3-35 cm steps a wheel cannot roll up)
--no-buildingsskip the building-box child Scene
--stream-radius <m>physics radius of the building colliders in metres (default "120")
--per-block <n>buildings per collider set (default "60")
--inlinewrite the building collision sets into the root document instead of a mounted child Scene (a document within 32 MiB of its memory cap cannot afford the mount)
--jsonprint the report as JSON

helix city convert

One-shot conversion of a captured city into a publish-ready World (docs/city-convert-cs2.md)

helix city convert <command>

helix city convert cs2

A Cities: Skylines II source-v2 bundle to desktop and phone World roots with every shared optimization applied, collision completed, both tiers perf-gated, and a receipt that proves which ran

helix city convert cs2 [options] [bundle]
ArgumentRequiredDescription
bundlenothe CS2 source-v2 bundle folder (terrain/, roads-v3/, placements/, meshes-v2/, areas/, water/, legacy/city/)
OptionDescription
--name <slug>World slug and scene root name (lowercase letters, digits, dashes) (required)
--out <dir>folder to write everything into (default ./convert-<name>)
--title <title>the World title (default: the name, capitalised)
--description <text>the World description
--config <file>a helix.city-convert/1 file: spawn and the few knobs a map may need; every field has a default
--spawn <x,z>open the World here (metres); default: a clear street-level point beside the densest downtown
--yaw <deg>spawn heading in degrees (with --spawn); default along the street
--tiers <list>desktop, mobile or desktop,mobile (default both)
--bounds <minX,minZ,maxX,maxZ>convert only this window of the CS2 world, in scene metres
--massesdraw buildings as procedural masses even when the bundle has prefab meshes
--jobs <n>parallel prototype shards (default 4)
--from <stage>rerun this stage and everything after it
--stop-after <stage>stop after this stage
--forceignore the receipt and run every stage
--unlistedthe publish plan says unlisted (the default)
--publicthe publish plan says public
--privatethe publish plan says private
--list-stagesprint the stages and the optimizations each applies, then exit
--jsonprint the receipt as JSON

helix city roads

Procedural roads from a city source: junctions, kerbs, markings, colliders, terrain cut/fill (docs/city-roads.md)

helix city roads <command>

helix city roads build

Build the 1 km road cells of a helix.city-source/1 folder: one meshopt GLB per cell (asphalt, kerb and sidewalk, markings), a collider, and the conformed terrain

helix city roads build [options] <dir>
ArgumentRequiredDescription
diryesfolder holding city-source.json
OptionDescription
--out <dir>output folder (chunks/road, chunks/road-collider, terrain/, roads-manifest.json) (required)
--no-terrainskip the terrain cut/fill and splat roles
--terrain-spacing <m>conformed terrain sample spacing in metres (default "2")
--no-markingsleave the lane markings out
--report <file>also write the build report (with timings) as JSON

helix city roads restyle-cs2

Rewrite baked CS2 road cells onto the engine city materials: procedural asphalt, kerb and sidewalk, the game's paint ribbons, cells clipped at 1,024 m, colliders welded to 60k triangles

helix city roads restyle-cs2 [options] <roadsDir>
ArgumentRequiredDescription
roadsDiryesbaked road folder holding mesh-cells.json (Scene roads/)
OptionDescription
--out <dir>folder to write: roads/ (render, collider, markings-a, mesh-cells.json) and, with --scene, the patched document (required)
--scene <file>a sealed Scene v2 document whose roads.* elements are replaced by the restyled cells (and the city material library added)
--terrain <dir>terrain source folder to carve under the roads at every stride the engine draws it at (default: the folder beside --scene when it holds terrain.json); written to <out>/terrain
--no-carveleave the terrain as it is
--placements <dir>placements bake (placements.json + objects/) to re-seat on the carved terrain (default: placements/ beside --scene); written to <out>/placements
--no-snap-placementsleave the placements at the heights they were baked at (trees at the cut rims will float or sink)
--engine-asphaltkeep the engine's own asphalt textures (calibrated to the engine goldens' lighting) instead of the CS2 calibration for the Granit shell's lighting
--library <dir>city material library pack (default: the CLI's own assets/city-materials/v1)
--collider-max-triangles <n>collider triangle budget per cell (default "60000")
--no-farskip the far road layer (roads-lod/: simplified driving surface merged into 2,048 m cells, eager, so roads read from altitude)
--far-error <metres>far layer simplifier tolerance (default "0.3")
--jsonprint the full report as JSON
--forceoverwrite an existing roads/ in --out

helix city props

Street-furniture props: the Vault kit and its search

helix city props <command>

helix city props kit

The street-props kit (benches, lamps, signals, bins, hydrants, bus stops, mailboxes, bollards, signs, planters, bike racks, bridge pillars)

helix city props kit <command>
helix city props kit build

Convert the kit recipes from a CS2 source-v2 bundle: one folder per prop with lod0-2.glb (meshopt + KTX2) and prop.json

helix city props kit build [options] <bundleRoot>
ArgumentRequiredDescription
bundleRootyesa source-v2 bundle (meshes-v2/, materials-v2/, placements/)
OptionDescription
--out <dir>folder to write the kit into (required)
--only <ids>comma-separated prop ids
helix city props kit describe

Write a Continuum publication descriptor (and the GLBs beside it) per prop: public asset Package, LOD variants, a public Vault Listing with the search tags

helix city props kit describe [options] <kitDir>
ArgumentRequiredDescription
kitDiryesa folder written by kit build
OptionDescription
--out <dir>folder to write the descriptors into (required)
--only <ids>comma-separated prop ids
helix city props kit pillars

Granit's bridge pillars as placements of a kit bridge-pillar Package (the capture's prefab origin corrected for the kit pivot)

helix city props kit pillars [options] <bundleRoot>
ArgumentRequiredDescription
bundleRootyesa source-v2 bundle
OptionDescription
--kit <dir>a folder written by kit build (required)
--out <file>placements JSON to write (required)
--item <id>kit prop id (default "bridge-pillar-vertical")

On this page