Flows
How to create and use parametric generative algorithms
By Holly and 1 other2 authors261 articles
Flow Interface
Learn the basics for the Flow visual coding interface
- The Flow ManagerThe library of Flows in your current project
- The Flow BuilderThe Flow Builder is a visual programming application within Giraffe.
- NodesA node is a discrete set of instructions in Flow
- Connectors & WiresConnects nodes together to create detailed instructions in Flow
- The Flow CanvasHow to navigate the flow canvas
Getting Started with Flow
How to build and use your first flow
- Create a New FlowStart a new flow from a template or blank canvas.
- Anatomy of a FlowHow flows process geometry and data
- Search for & Add Flow NodesAdd more nodes to your flow canvas
- Using Input Nodes in FlowEstablish editable properties that control your Flow's outputs
- Transform Nodes & Exposing InputsUsing the Transform Inputs with Generative Nodes
- Edit a FlowUpdate a saved flow
- Duplicate a FlowCopy an existing flow
- Delete a FlowDelete a flow from a geometry or from the project entirely.
Using Flows
Now That you've created a flow, how do you use it in your projects?
Debugging Flows
How to inspect flows to ensure expected results
Flow Concepts
Important coding concepts that help you to build flows
- Objects & FeaturesLearn how to work with object oriented programming in Flow
- JSON SyntaxSome syntax basics to help you out with Flows
- Data Types (Primitives)The basic types of data Flows work with
- Cartesian vs ProjectedWorking with Projected versus Unprojected Geometries
- Vectors & TranslationHow vectors drive cartesian geometries
- CollectionsHow to work with multiple items as a data structure
- Lists vs Sets vs DictionariesWhat is a set vs a list vs a dictionary?
- Loops (Data Flow)Process the same nodes over multiple items
Flow Nodes
How to use each flow node
- absGet the absolute value of a number
- acosGet the arccosine of a number
- addadd two numbers
- along pointUse along point to distribute a set number of points along a line
- andCheck if two values are both true
- ApartmentUse the apartment transform to create an apartment building based on a single line.
- apply usageApply a usage to a feature
- areaGet the area of a shape
- arrayUse array to evenly space points along a polygon outline or line.
- asinGet the arcsine of a number
- atanGet the arctangent of a number
- AverageAverage a list of numbers
- BezierCreate a bezier curve from a set of points
- Blend ColorsBlend two colors using blend modes
- BooleanA boolean (true/false)
- boolean differenceReturns the difference of two geometries
- Boolean IntersectionGet the intersection of two geometries.
- boolean unionReturns the union of multiple geometries
- Bounding BoxReturns the bounding box of a geometry
- Bounding Box PropertiesReturns the properties of a bounding box
- Catmull-RomCreate an interpolated curve from a set of points
- ceilRound a number up to the nearest integer
- Vector CentroidThe Centroid finds the center point of a polygon and outputs it as a vector point
- centroid (dendrogram)Returns the centroid (visual center point) of a geometry
- circleCreate a circle from a center point
- ClampClamp a number between two values
- Closest PointGet the closest point on a geometry to a point
- ColorA node that passes a color through
- construct cartesianConstruct a cartesian from a geometry
- construct colorConstruct an rgb color from 3 number inputs
- construct key-value pairConstruct a key-value pair
- construct objectConstruct a JSON object
- construct vectorConstruct a vector from x, y, and z coordinates
- Control PointsGet the end points of a geometry
- cosGet the cosine of an angle
- Cull Duplicate PointsRemove duplicate points from a geometry
- deconstruct cartesianDeconstruct a cartesian feature into its components
- deconstruct frameDeconstruct a frame into its components
- deconstruct vectorDeconstruct a vector to get its coordinates
- degrees to radiansConvert degrees to radians
- Delete propertyDelete a single property from an object
- deserializeDeserialize raw geometry
- distanceGet the distance between two points
- divideDivide two numbers
- Divide DistanceDivide a line into equal distance points
- Divide LineDivide a line into a specified number of segments
- encapsulate in listPlace an object in a list
- enclosed polygoncreate an enclosed polygon from intersecting lines
- End PointsGet the end points of a polyline
- EnvelopeGenerate your allowable envelope, or the extents of your buildable area, with this transform.
- equalsCheck if two values are equal
- ExplodeExplode turns any multi-edge shape into lines and points (corners).
- Get SegmentsExplode a geometry into segments
- Fillet CornersCurve the corners of a polygon or polyline
- FilterChecks if each item in a list matches a boolean condition. Outputs 2 lists: matching and not matching
- Filter nullRemove NULL or undefined values from a list
- Find and Replace StringFind and replace a string
- First ItemGet the first item in a list
- Flat MapMap a function over a list and flatten the result
- Flatten ListFlatten a list of lists
- Flip PolylineFlip a polyline
- floorRound a number down to the nearest integer
- Forward ProjectForward project a feature into a Cartesian
- frame on polylineGet a horizontal frame along a polyline at a given distance
- get feature property nameGet the name of a giraffe property, formatted as a string
- get flow idGet the id of a flow
- get flow namesGet a map of flow names to ids
- Get GltfGet a GLTF file that exists in the current project
- Get Point LocationGet the Latitude and Longitude of a point
- get project idGet the id of the project
- get project unitsGet the units (meters, feet) of a project
- get raw featuresGet all raw features in the project
- get site boundaryget the project boundary as a polygon
- get static layer idGet the ID of a static layer
- get static layer namesGet a map of static layer names to ids
- get usageGet a usage from a dropdown
- Get Usage DataGet the data from a usage
- get usage namesGet the names of all of the usages in the project
- greater thanCheck if a value is greater than another value
- greater than or equalCheck if a value is greater than or equal to another value
- grid fillUse the grid fill transform to fill a polygon with evenly-spaced points on a grid.
- group byGroup items in a list by a key
- includesCheck if a list includes a value
- Index OfFinds an item and its index index in a list
- Input ParameterCreate an end-user parametric input for your flow
- InsertInsert an item to a list
- instanced group (legacy)Use flows to automate reusing multiple Groups
- intersect linesGet the intersection of multiple lines
- Join StringsJoin a list of strings (concatenate)
- key byCreate an object from a list by a key
- Last ItemGet the last item from a list
- lengthGet the length of a polyline
- less thanCheck if a value is less than another value
- less than or equalCheck if a value is less than or equal to another value
- linecreate a line from 2 points
- Line SDLConstruct a line from a start point, direction and length
- line shorten (legacy)Shorten a polyline by an amount
- Line String From PointsConstruct a linestring from points
- list itemGet an item from a list
- list lengthGet the length of a list
- Map (node)Performs a set of instructions on each item in a list
- maxGet the maximum of two numbers
- MetaballConstruct a meta ball from points and charges.
- midpointGet the midpoint of a line or polyline
- minGet the minimum of two numbers
- moduloCalculate the remainder of the division of two numbers
- multiplyMultiply two numbers
- negateNegate a number
- notNegate a boolean value
- not equalsCheck if two values are not equal
- numberA number
- object entriesGet the entries of an object as a list
- object keysGet the keys of an object as a list
- object valuesGet the values of an object as a list
- offset lineMove the outline of a line or polygon a specified distance with offset line.
- offset polygonShrink or grow a polygon inside or outside the initiating shape with offset poly.
- orCheck if at least one of two values is true
- panelA panel that can hold text strings, code blocks, or numbers
- Parking LotsGenerate parking bays on a geometry
- parseParse a string into an object
- PickPick entries from an object by a key
- point in polygonCheck if a point is inside a polygon
- Points In PolygonCheck if points are inside a polygon
- Pole of InaccessibilityGet the pole of inaccessibility of an object
- Polygon from Bounding BoxConstruct a polygon rom a bounding box.
- Polygon From PointsConstruct a polygon from points
- PopPop (remove) an item from a list
- PowerRaise a number to the power of another number
- PushPush an item to a list (append an item to the end of a list)
- query rtreeQuery an rtree based on a feature
- radians to degreesConvert radians to degrees
- randomGenerate a random number between 0 and 1
- random colorGenerate a random color
- random fillRandomly fill the polygon with a specified number of points.
- Random IntegerGenerate a random integer between min and max
- Random List ItemGet a random item from a list
- random reduceRandomly remove a number of elements from a list
- read featureReads the feature the flow is attached to
- Read Feature LayerRead a feature's layer
- read feature propertyRead a property value from a feature
- read propertyRead a property from an object
- read static layerRead a static layer from the project
- ReaderShows the JSON resulting from the node output it connects to
- Rebuild GeometryRebuild (simplify) a geometry given a factor
- rectanglecreate a rectangle from a center point
- rectangular arrayConstruct a rectangular array
- remapRemap a number from one range to another
- repeatRepeat a value multiple times
- reverse listReverse a list
- Rotate ListRotate a list by a number of items
- rotate verticalRotates a geometry around the vertical axis using a flow
- roundRound a number to the nearest integer
- round cornersRound or chamfer the corners of a polygon or line.
- Saturate ColorSaturate a color.
- ScaleScales a geometry about a center
- seriesGenerate a series of numbers
- Shatter PolylineShatter a polyline given a list of parameters
- ShiftRemoves the first item from a list
- sinGet the sine of an angle
- site fillUse Site Fill to fill an area with courtyard style buildings allowing for open space requirements.
- sort numbersSort a list of numbers from smallest to largest.
- Split StringSplit a string into a list of strings
- spreadSpread values into an object or list
- Spread feature propertiesSpread properties into a feature
- sqrtGet the square root of a number
- stringA node that contains a string.
- String ContainsCheck if a string contains another string.
- stringifyTurn an object’s code into plain text
- StripSeparate the first, middle, and last items of a list
- stroke dashUse stroke dash to divide a line into segments of varying widths.
- Sub CurveGet a sub curve of a polyline
- subdivide lotsUse subdivide lots to divide a larger polygon into smaller parcels or lots by specifying the target frontage or area.
- subtractSubtract two numbers
- SumSum a list of numbers
- tanGet the tangent of an angle
- ternary ifApplies a value based on a true/false condition
- To cubic feetConvert meters to feet - to be used in a flow where the units are not explicitly defined
- To Cubic MetersConvert feet to meters- to be used in a flow where the units are not explicitly defined
- To feetConvert meters to feet - to be used in a flow where the units are not explicitly defined
- To MetersConvert feet to meters- to be used in a flow where the units are not explicitly defined
- To square feetConvert meters to feet - to be used in a flow where the units are not explicitly defined
- To Square MetersConvert feet to meters- to be used in a flow where the units are not explicitly defined
- translateTranslates a geometry along a vector
- unit xUnit vector in the x direction
- unit yUnit vector in the y direction
- unit zUnit vector in the z direction
- unitizeUnitize a vector
- UnprojectInverse project a feature (turn a cartesian into a projected feature)
- VectorA vector (primitive)
- vector angleGet the angle between two vectors
- Vector angle from NorthGet the angle between a vector and the north direction (in degrees, clockwise from north).
- vector crossGet the cross product of two vectors
- vector dotGet the dot product of two vectors
- Vector from LineGet a vector from the start to the end of a line
- vector lengthGet the length of a vector
- vertical arrayThe vertical array transform copies geometry vertically in a stack.
- WeaveCombine two lists into a single list, alternating items from each list.
- write feature propertyWrite a property to a feature
- write featuresWrite the geometric feature to the canvas
- write propertyWrite a property to an object.
- zero vector[0, 0, 0]
- EThe mathematical constant E (Euler's number), an irrational number approximately equal to 2.718282
- InfinityThe mathematical constant infinity (∞)
- PiThe mathematical constant Pi (π)
- Straight SkeletonGet the straight skeleton of a polygon.
- Skeleton EditorCreate building massing with customizable offsets, coverage settings, and corridor options. generates edge segments, enclosures, and endcaps
- Subdivide RectanglesSubdivides rectangular polygons into a grid of dwellings with configurable spacing and dimensions
- Extend PolylineExtend a polyline at both ends by a given length
- Shuffle ListShuffles a list randomly
- Mix ColorsInterpolate between two colors.
- Evaluate BlockEvaluate a block to its features.
- Insert BlockInsert a block using a flow
- Get Block DefinitionsGet all block definitions from a project
- Get Block IDGet the ID of a block
- Get Point in GridGet a point in the project grid given u and v coordinates.
- Group by RangesGroup items in a list by ranges of a key. lower bound is inclusive, upper bound is exclusive.
- Write Feature ColorChoose a color for a feature
- In RangeCheck if a value is within a specified range (inclusive).
- EveryCheck if every item in a list satisfies a condition.
- SomeCheck if some items in a list satisfy a condition
- Roads (flow node)Use the Roads node to change the color and settings of roads
- Get Block IDSelect a block by name from a list and get its ID
Flow Use Cases
Step-by-step instructions for how to build flows for common workflows
- Build your First FlowCreate a flow from scratch
- How to Draw Curves with FlowHow to curve lines and corners
- Customize corner roundingUse a flow to make different corners rounded different amounts
- Create a Carpark that automatically solves around buildings with FlowCreate a parking solver that generates parking bays around overlapping buildings
- Video: Flows & GeometriesHow Geometries relate to flows
- Video: Build a Light Rail Station with FlowUsing Flow to build a parametric light rail station
- Video: Flow Activity Centre
- Video: Create a Flow with Blocks
- Video: Smart Facades
- Video: Optimize Solid-Glazing Ratio with Flow
- Video: Create a Multi-Family Wrap with Flow
- Create Stairs from a LineMake stairs from a line, taking advantage of the Index parameters within the map node to iterate stair heights.