Parameter guide
Fine-tune every map generation job via JSON.
When you trigger a map generation job, you pass a JSON config that controls how the algorithm finds and grades routes. Every parameter has a sensible default — only set the ones you want to override. The full reference for each mode is below.
When does my map appear?
Generated maps are private by default until you publish them. Processing can take a while, so don't worry if your map isn't visible immediately — once it finishes, you can review every generated route before deciding to share it.
Route Game
Focuses on finding the shortest legal path between two points, with optional alternatives.
Discovery
| Parameter | Default | Description |
|---|---|---|
| num_random_points | 3000 | Grid-sampled candidate start points (500–10 000). Higher values surface more route variety at the cost of compute time. |
| candidate_min_dist | 200 | Minimum allowable straight-line distance between the start and finish controls (in pixels). Legs shorter than this are discarded. |
| candidate_max_dist | 2500 | Maximum allowable straight-line distance between the start and finish controls (in pixels). Caps the maximum leg length. |
| max_candidate_pairs | 20000 | Maximum number of candidate control pairs scored before random downsampling. Increase this if your pool is exhausted before reaching the desired number of output routes. |
| num_output_routes | 20 | Target number of successful route legs to generate and upload per job. |
| min_score | 15.0 | Minimum hardness score (0–100). Higher values ensure only complex, difficult route choices are kept, filtering out trivial legs. |
Pathfinding
| Parameter | Default | Description |
|---|---|---|
| m_alts | 1 | Number of alternative routes to generate per leg. Capped at 3 (so up to 4 routes total). Each alternative requires an additional pathfinding pass. |
| max_pairwise_overlap | 0.70 | Maximum proximity overlap between two routes (0–1). If a new alternative overlaps an existing route more than this, it is discarded. Enforced for all non-first alternatives (i.e. Route 2+). |
| min_separation_px | 0 | Minimum geographic separation between routes in pixels. 0 disables. At 1:4000/508 DPI, ~50 px ≈ 10 m. |
| min_divergence_fraction | 0.25 | Fraction of each route that must be at least min_separation_px apart. E.g. 0.25 means 25% of the route must genuinely diverge. This prevents routes sharing the same entry/exit corridors from passing with only a tiny detour. |
| min_length_diff | 0.0 | Minimum relative length difference. Ensures an alternative isn't nearly identical in length to the optimal route (e.g. 0.05 requires a 5% longer route). |
| max_length_diff | 0.0 | Maximum relative length difference. Discards alternatives that are uncompetitively long compared to the optimal route (e.g. 0.4 discards routes > 40% longer). |
| inflate_obstacles | 1 | Erodes the passable area by this many pixels before pathfinding. This creates a buffer zone around impassable terrain so routes don't unrealistically shave tight corners. |
| penalty_factor | 8.0 | Cost multiplier for the 'penalty band'. When finding alternatives, pixels along previously accepted routes become more expensive. This forces A* to find genuinely different paths. |
| penalty_radius | 20 | Radius of the penalty band (px) around accepted paths where penalty_factor is applied. |
| penalty_trim | 0.35 | Fraction of each path excluded from the penalty band at each end, allowing routes to naturally converge at controls. |
| attractor_radius | 50 | Cost discount corridor. Discovery graph routes are first LOS-smoothed to match passable terrain, then receive a 20% cost discount within this radius, biasing pathfinding to stay topologically grounded. |
| default_cost | 1.0 | The default traversal cost assigned to pixels whose color doesn't match any explicit mapping rules. 1.0 is standard open terrain. |
Rendering
| Parameter | Default | Description |
|---|---|---|
| line_alpha | 0.65 | Transparency of the rendered route overlay lines (0-1). 0.65 provides good visibility while letting the underlying map show through. |
| route_colors | — | List of hex strings (e.g. ["#FF0000", "#0000FF"]). Defines the colors of the main route and alternatives, applied from left to right on the final export. |
| control_radius_mm | 3.0 | ISOM specification for the control circle radius in millimeters. Used alongside map scale and DPI to calculate pixel dimensions. |
| zoom_margin | 400 | Padding (in pixels) added around the bounding box of the route to provide visual context in the exported image. |
| zoom_level | 18 | Base zoom level used internally for pixel-to-millimeter scale calculations. |
Scale
| Parameter | Default | Description |
|---|---|---|
| dpi | 600 | Map DPI (Dots Per Inch). Critical for calculating metric distances and ISOM line widths. Must match the exact DPI used during OCAD export. |
| map_scale | 4000 | Map scale denominator (e.g. 4000 for 1:4000). Used to convert pixel distances into real-world meters. |
{
"num_random_points": 3000,
"dpi": 600,
"map_scale": 4000,
"m_alts": 1,
"max_pairwise_overlap": 0.70,
"min_separation_px": 0,
"min_length_diff": 0.0,
"max_length_diff": 0.0,
"inflate_obstacles": 1,
"penalty_factor": 8.0,
"penalty_radius": 20,
"penalty_trim": 0.35,
"line_alpha": 0.65,
"control_radius_mm": 3.0,
"zoom_margin": 400
}Route Finder
Generates difficulty-graded route challenges from a map.
Discovery
| Parameter | Default | Description |
|---|---|---|
| num_random_points | 1500 | Grid-sampled candidate start points. Higher values increase the pool of possible challenges but take longer to process. |
| candidate_min_dist | 500 | Minimum allowable straight-line distance (in pixels) between start and finish points. |
| candidate_max_dist | 2500 | Maximum allowable straight-line distance (in pixels) between start and finish points. |
| max_candidate_pairs | 15000 | Maximum pairs evaluated before downsampling. Limits compute time on large maps. |
| min_hardness | 25.0 | Minimum navigation hardness score (0–100). Filters out trivial legs based on obstacles and route choices. |
| min_separation | 150 | Minimum geographic distance between any two selected challenge starts (px). Ensures spatial diversity. |
Challenges
| Parameter | Default | Description |
|---|---|---|
| num_challenges | 15 | Target number of final rendered challenges to generate and upload. |
| min_route_length | 500 | Minimum length of the actual traversed path (in pixels), not just straight-line distance. |
| max_route_length | 2500 | Maximum length of the actual traversed path (in pixels). |
Rendering
| Parameter | Default | Description |
|---|---|---|
| route_padding | 800 | Padding (in pixels) added around the bounding box of the route to ensure sufficient map context is visible. |
| marker_radius | 71 | Pixel radius of the start and finish control circles. |
| marker_padding | 200 | Minimum padding (in pixels) required between a control circle and the edge of the exported image. |
| line_width | 8 | Thickness of the rendered route line (in pixels). |
| inflate_obstacles | 1 | Erodes the passable area by this many pixels. Creates a buffer around impassable objects so the generated route stays realistic. |
Scale
| Parameter | Default | Description |
|---|---|---|
| dpi | 508 | Map DPI. Critical for metric conversion and scale (modal defaults to 508, local GUI defaults to 600). |
| map_scale | 4000 | Map scale denominator (e.g. 4000 for 1:4000). |
Route Navigator
Focuses on complex navigation and deceptive branches ("wrong turns"). All output coordinates are in the source image's pixel space with no per-challenge crops. Branch paths are driven by the passable skeleton graph and are LOS-smoothed, rather than using full A* pathfinding.
Discovery
| Parameter | Default | Description |
|---|---|---|
| num_random_points | 1500 | Grid-sampled candidate start points. Higher values increase the pool of possible challenges but take longer to process. |
| candidate_min_dist | 200 | Minimum allowable straight-line distance (in pixels) between start and finish points. |
| candidate_max_dist | 2500 | Maximum allowable straight-line distance (in pixels) between start and finish points. |
| max_candidate_pairs | 15000 | Maximum pairs evaluated before downsampling. Limits compute time on large maps. |
| min_hardness | 15.0 | Minimum navigation hardness score (0–100). |
| min_separation | 150 | Minimum geographic distance between any two selected challenge starts (px). Ensures spatial diversity. |
Macro graph extraction
| Parameter | Default | Description |
|---|---|---|
| cluster_eps_px | 100 | Line-of-sight aware DBSCAN radius. Merges nearby junction clusters into one 'macro-node', but only if they have clear line-of-sight. This prevents incorrectly grouping junctions separated by impassable walls. |
| min_deadend_px | 40 | Branches shorter than this length (in pixels) are considered insignificant noise and are ignored. |
| path_subsample | 5 | Optimization parameter that keeps only every Nth pixel in branch paths before the Theta* rewrite phase. |
| max_snap_px | 150 | Maximum allowed distance (in pixels) to snap a grid-sampled discovery point to the nearest valid macro-node. |
Challenges
| Parameter | Default | Description |
|---|---|---|
| num_challenges | 15 | Target number of final rendered challenges to generate and upload. |
| min_route_length | 600 | Minimum length of the actual traversed path (in pixels). |
| max_route_length | 2500 | Maximum length of the actual traversed path (in pixels). |
| min_wrong_turns | 1 | Guarantees deception by requiring the correct path to pass through at least this many interior macro-nodes that branch off into an incorrect path (a 'wrong turn'). |
Rendering
| Parameter | Default | Description |
|---|---|---|
| route_padding | 500 | Padding (in pixels) added around the bounding box of the route to ensure sufficient map context is visible. |
| control_radius_mm | 3.0 | ISOM specification for the control circle radius in millimeters. |
Scale
| Parameter | Default | Description |
|---|---|---|
| dpi | 508 | Map DPI. Critical for metric conversion and scale (modal defaults to 508, local GUI defaults to 600). |
| map_scale | 4000 | Map scale denominator (e.g. 4000 for 1:4000). |
Iterate carefully
Defaults are tuned for typical orienteering maps. Change one parameter at a time so you can tell which change caused which difference once processing finishes.