Skip to main content

Troubleshooting a Flow

Learn how to fix errors with your flows

Written by Holly Conrad Smith

Flows are extremely powerful. With great power comes great responsibility. Sometimes flows can cause errors in your projects.

Learn how to find and fix flow errors for optimal project performance.

How do I know something isn't working?

Flow Error

If there is a flow error, the affected geometry will appear neon magenta / bright pink on the map.

Engine Failure

Sometimes the flow might break the rendering for some or all of the geometries in your project. You will see an engine status error in the bottom left corner of your Giraffe tab.

Try pausing and re-starting the engine (click the pause button to the left of the error text).

If pause and restart doesn't work, try removing the flow from geometries in the project.

Crash

Sometimes, a flow error will completely crash your Giraffe tab. (Usually this happens when you have self-referencing nodes or a bad loop).

Try refreshing the tab. If you are unable to get back in, reach out to support for assistance retrieving the file.

Troubleshooting steps

The glasses button

Turn on the glasses button (View evaluated flow for selected feature) from the top bar. This displays the state of all nodes in the Flow.

Review Warnings and Errors

Any nodes with an error will appear in red. Red nodes mean the entire flow is failing due to the error.

Any nodes with a warning will appear in orange. Orange nodes mean that the flow is still able to complete. Some information may be missing.

Read the Status

If a node has an error or a warning, you may want to use the Reader node to review the status.

Add the Reader node to the Status (S) output of the node with the error/warning to see the message.

Pause Nodes

Try pausing a specific node to see if it is causing the issue. Right click on the node title -> Disable.

Pause Engine

Pause the entire Giraffe engine to stop all geometry generation.

Click the pause button in the bottom bar.

Recompute

If processing seems stuck, try clicking recompute. This stops the flow process and restarts it.

Refresh Tab

If all else fails, try refreshing your browser tab.

Problems with flows

A flow draws as a polygon when it should be a line

When you pick a flow from the flow tool in the drawing toolbar, the flow starts drawing with the first geometry type in its Allowed geometries. A flow with no allowed geometries set accepts every type and starts with a rectangle. Roads, paths, and other linear flows need Line set as their geometry type to start as a line.

  1. Open the flow's properties.

  2. Under Allowed geometries, turn on Line.

  3. Turn off Point and Polygon if the flow only works on lines.

When a flow allows more than one geometry type, a bar appears while you draw with a button for each shape. Click Line in that bar to draw a line. If Remember shape is on, the flow starts with the last shape you picked.

If you draw a shape the flow doesn't allow, Giraffe draws the geometry without the flow.

A flow doesn't apply its usage

When you draw with a flow from the flow tool in the drawing toolbar, the flow applies a usage to the new geometry only when the usage is set in the flow's defaults. For example, a carpark flow needs a carpark usage in its defaults to apply it.

  1. Open the flow's properties.

  2. Open the Defaults tab.

  3. Turn on Usage and choose a usage.

Turning on Usage without choosing a usage saves nothing. The default usage applies to geometries you draw with the flow after you set it. To change the usage on a geometry you already drew, select it and change the usage in the Property palette.

Changing a property doesn't change the flow's result

Change a flow's settings for one geometry in Flow Controls. A flow reads its settings from Flow Controls, so a property with the same name in the Property palette, like a road width, doesn't change what the flow draws.

  1. Select the geometry.

  2. Find Flow Controls. It shows the flow's name and its settings.

  3. Change the setting. Click Revert to default next to a setting to go back to the flow's value.

A setting changed in Flow Controls changes only the selected geometries. To change a setting for every geometry that uses the flow, edit the flow itself. Learn which flow values win over others.

A parking flow draws no parking spaces

A parking flow draws no spaces when the site is too small to fit a drive aisle with bays on either side. The Parking Lots node shows the warning No parking lots could be generated with the given inputs and parameters.

Make room for the layout in one of these ways:

  • Make the site larger.

  • Lower Road Width, Bay Length, or Boundary Road Width.

  • Turn on Single Loaded to put bays on one side of the aisle.

  • Turn off Center Islands, or lower Center Islands Size.

Road Width is the width of the drive aisle between rows of bays. Boundary Road Width is the width of the road around the site's edge, and Giraffe uses whichever of the two is larger there.

I want to delete part of a flow's result

A flow redraws its result every time it runs, so you can't delete one piece of it directly. Choose one of these:

  • Bake the geometry. Right-click it and choose Bake. Giraffe replaces the flow's result with plain geometries you can edit and delete. The geometry no longer uses the flow after you bake it.

  • Change the flow. Edit the flow to remove the part you don't want. Editing a flow changes every geometry that uses it. To change only some geometries, duplicate the flow and edit the copy.

Bake works on up to 249 geometries at a time. Press Cmd/Ctrl+Z right after baking to undo it.

Flow error messages

When a node fails, its status reads <Node name> error: <message>. For example, Offset line error: (intermediate value) is not iterable comes from the Offset Line node. Find the part after "error:" in the table below.

Some messages come straight from the browser, like is not iterable or Cannot read properties of undefined. They read like code, and they still mean the node got input it can't use. The node name before "error:" tells you where to look.

When a flow fails on a geometry, all of its node errors are listed together under Errors evaluating flow "<flow name>".

Error

What it means

How to fix

(intermediate value) is not iterable

The node expected a list of points and got nothing at that position. This usually means a line with only one point. For Offset Line, any line or line part with a single vertex causes it.

Make sure every line feeding the node has at least two distinct points. Remove points and single-point lines upstream, for example after Cull Duplicate Points, Explode, or Sub Curve.

Cannot read properties of undefined

Missing inputs, or a geometry with no coordinates. With Offset Line, a polygon with no ring shows Cannot read properties of undefined (reading 'length').

Add the correct input data by connecting another node, and check the geometry is not empty

... is not a function (for example x.map is not a function)

The node expected a list and got a single value, or the reverse

Check whether the upstream node outputs a list or a single item, and match what the input expects

Cannot offset a point

Offset Line received a point

Feed lines or polygons only. Filter out points before the node

Error getting inputs for node "<name>": ...

Giraffe couldn't collect the node's inputs. The rest of the message says why, such as Graph contains a cycle or Node <id> of type <type> does not have a list input.

Fix the wiring into the named node. Remove loops and connect lists only to list inputs

Missing required inputs: <name> (orange warning)

A required input has nothing connected and no default value. The flow can still run. Output may be incomplete.

Connect an edge to the named input, or set a default value on the node

Feature is required

A Scale, Orient, or Get Segments node has nothing connected to its feature input

Connect a geometry to the node

Center is required / Center must be a vector

The Circle node has no center, or the center is not a vector

Connect a vector to the center input

Node type not found / Unknown node type: "<type>"

The node's type no longer exists in Giraffe. This is usually a retired node kept from an older flow, or an unsupported node from an import

Right-click the node to see if an upgrade is offered; otherwise delete it and rebuild with a current node

unknown can not be executed

The node is a placeholder for a node type Giraffe can't load

Delete the node and rebuild that step with a current node

evaluate javascript is not supported

The flow uses the Evaluate JavaScript node, which doesn't run

Replace it with standard nodes

Division by zero (warning)

A Divide (or similar math) node got 0 as its denominator. The node still returns a result, often Infinity

Check the upstream value feeding the denominator and guard against zero

Input must be a polygon / Feature must be a polyline (and similar "must be a ___" messages, including Feature must be a polygon or multipolygon, Line must be a LineString, and Origin must be a Point)

The node received the wrong geometry type, for example a line where a polygon was expected

Trace the input back to where the geometry type changed and add a conversion or filter node

Invalid geometry type / Unsupported geometry type / <type> is not supported / Unsupported geometry type for fillet corners / Unsupported geometry type for frame on polyline

The node can't work with this kind of geometry

Convert or filter the input so the node only gets the geometry types it supports

Polygon has no edges / Centroid could not be computed for this geometry / Could not fit a rectangle inside the polygon / Could not fit a circle inside the polygon / Polygon must have at least one ring / MultiPolygon has no polygons / MultiPolygon must have at least one polygon

The input geometry is empty, degenerate, or invalid (e.g. zero area)

Check the source geometry is valid and non-empty before this node

Line must have at least two points / At least 3 points are required

The line or point list is too short for the node. Bezier and Catmull-Rom curves need at least 3 points.

Add points, or remove short lines upstream

Count must be greater than 0 / Length must be greater than 0 / Factor must be greater than 0 / Resolution must be greater than 1 / segments must be a finite number

A numeric parameter is out of range, empty, or not a number

Fix the parameter value, or check the upstream node/slider feeding it

Cannot find frame for a point / Failed to evaluate polyline at given distance / Failed to split polyline

Frame on Polyline or Sub Curve got a point, or a distance or split value that falls outside the line

Feed a line, and keep the distance between 0 and the line's length

Bezier corners are not supported yet

Fillet Corners has its blend set to bezier

Choose round or chamfer

No lines to join

The join node received an empty list

Connect at least one line, and check upstream filters aren't removing all of them

Failed to parse geometry: <detail> / Failed to deserialize Cartesian: <detail>

The node received data that isn't valid geometry

Check the data source or import step feeding this node

Flow with id <id> not found / No flow id provided

A Function (sub-flow) node points to a flow that's been deleted, or has none selected

Open the node's settings and select a valid flow

Recursion is not supported

A flow calls itself, directly or through another flow

Remove the circular reference between flows

Block definition not found for blockId: <id>

A block node points to a block that was deleted

Select a block that exists, or remove the node

incorrect number of edges

An Exit node is wired with the wrong number of connections

Connect exactly one edge into the Exit node

Usage <name> not found / No grid found in project boundary

A Usage or Project node references a usage or grid that no longer exists in this project

Re-select a valid usage/grid on the node

Output <key> is not a number / Input list must contain either all numbers or all vectors

A math node received mixed or non-numeric data

Check the upstream data type; make sure list items are consistently numbers or all vectors

Vector2 not supported

A node that needs 3D vectors received a 2D vector

Pass a 3D vector, adding a z value of 0 if needed

unsupported operator "<operator>". Use one of: ...

A "modify property" node was given an operator it doesn't recognize

Pick one of the operators listed in the error message

value is undefined, property "<name>" will be set to undefined (warning)

A set property node got no value for the named property

Connect a value to the node

no property provided, object/feature left unchanged (warning)

A set property node has no property name

Enter the property name on the node

Graph contains a cycle

Two or more nodes are wired into a loop that isn't a supported iteration structure

Remove the circular connection, or rebuild the loop with a Map/Reduce/Iterate node

No input provided to <node> (warning)

A generative node received an empty input

Connect geometry to the node, and check upstream filters aren't returning nothing

empty site or no patterns / empty pattern provided

A pattern node has no site geometry or no pattern to place

Connect a site and at least one pattern

No features were generated. Please check the parameters. (warning)

The generative logic ran. The input geometry/parameters left no room for a valid result

Loosen the parameters, or check the input geometry is large/valid enough

No parking lots could be generated (warning)

The parking layout logic ran, and the site or parameters left no room for parking

Use a larger site, or loosen the parking parameters

null (shown as a node's output value, not a labeled error)

The node's output is JavaScript's null, usually because an upstream calculation had nothing valid to return

Check the input data type and/or logic to ensure the node can process a result

"Node with id [id] not found" (toast)

You tried to duplicate a flow node that no longer exists.

Refresh and try again.

Typical Problems

Flows need a project

Flows only work inside a project. If you're working in a Space, open or create a project to use flows.

You don't need a project boundary to use flows. A flow runs on any geometry in the project, whether or not the project has a boundary.

I edited a flow on my geometry, and it changed all of them

A flow definition is shared by every geometry that uses it, so editing its flow graph updates all of those geometries at once. To change only some geometries, give them their own copy of the flow.

  1. Open the flow and duplicate it.

  2. Edit the copy.

  3. Select the geometries you want to change, and apply the copy to them from the flow dropdown in Flow Controls.

Learn how to duplicate a flow.

Missing an Input value

If a required input has nothing connected to it, the node shows an orange warning reading Missing required inputs: <name>. The flow can often still run. The output may be missing data. Connect an edge to the named input, or set a default value on the node itself.

Data type mismatch

Nodes expect specific data types: a polygon, a number, a list of vectors, and so on. Feeding in the wrong type produces errors like Input must be a polygon, Feature must be a polyline, or Output is not a number. Trace the connection back to where the type changed and add a conversion or filter node, or check the source data.

Providing a List when Single Object is expected

Some nodes expect a single geometry or value, not a list. Passing a list in usually shows up as Cannot read properties of undefined, because the node tries to read a property that only exists on a single object. Add a node like First or Get Item before the input, or check whether the upstream node is unexpectedly outputting a list.

A length, area, or volume comes out the wrong size

Lengths, areas, and volumes in a flow's JSON are always in meters, square meters, and cubic meters. Transform nodes like the Envelope Transform show their settings in your project units, and they store them in meters, square meters, and cubic meters. When you write one of these values into a transform setting with Write Property, or read one with the Reader, the value is in meters, square meters, and cubic meters. A length written in feet comes out about 3.3 times too large, and an area in square feet about 10.8 times too large. Convert before writing, for example 40 ft is 12.192 m and 1,000 sq ft is 92.903 sq m.

Use the Reader node to check the value the transform actually receives.

A property the flow writes doesn't show in the Property palette

A property your flow writes is on the geometry, even when you can't see it in the Property palette. Giraffe saves it in the geometry's JSON as an evaluated value. Analytics and Urban read that value like any other property. The Property palette only shows editable properties, so an evaluated value doesn't appear there as an input.

To check that the flow wrote the property, select the geometry and open its JSON. In Giraffe 6, open the JSON Editor app. In Giraffe 4, switch the Property palette to its JSON view. Look for the property name and value you wrote. If they're there, the flow is working.

To edit the value from the Property palette, do one or both of these:

  • Add the property as a flow default. Open the flow's properties and add it on the Defaults tab.

  • Add the property to the geometry in the Property palette with Add Property.

If a Fix Doesn't Seem to Work

Before switching to a different node or a different approach, confirm the change you already made is actually reaching the geometry you're looking at.

  1. Turn on the glasses button (View evaluated flow for selected feature) and check that the node you just added or edited shows a result, not an error or warning.

  2. If your flow branches, confirm which branch actually feeds the write features node connected to the geometry you see on the map. A change on the wrong branch won't show up, even if the node itself is set up correctly.

  3. Use the Reader node on the output you just changed to confirm the value is what you expect, before assuming the whole approach is wrong.

If a change genuinely isn't working after checking the above, say what you checked and why before trying something different. Switching to an unrelated node without explaining the change makes a flow harder to debug, for you and for anyone helping you with it.

Other flow messages

These toasts confirm that something worked, or ask you to fix a small thing before you continue.

Message

What triggers it

What to do

"Added a new flow "[flow name]""

You created a new flow from the flow picker.

None

"Copied to clipboard"

You copied flow nodes.

None

"No features using this flow."

You clicked the select button on the flow toolbar. No geometries use the open flow.

Apply the flow to some geometries first.

"Saved input defaults for "[flow name]""

You saved input defaults for a flow.

None

"Select a shape with a flow first"

You tried to show flow handles with no flow geometry selected.

Select a geometry that has a flow.

"Selected [N] features using this flow."

You clicked the select button on the flow toolbar and the geometries using the flow got selected.

None

"The input defaults of "[flow name]" are already up to date"

You saved input defaults for a flow. None of them changed.

None

"The selected shape has no editable flow handles"

The selected geometry has no flow handles to show.

Select a different geometry.

"There is no active flow to edit"

You tried to save input defaults for a flow that no longer exists.

Open a flow first.

"There is no active flow to save"

You changed a flow. There was no flow open to save it to.

Open a flow first.

Did this answer your question?