Skip to content
BIMpedia

Visual programming and scripting (Dynamo, Grasshopper, pyRevit)

The tools BIM people use to automate their own work, from drag-and-connect graphs to Python scripts, and how to choose between them.
Updated 6 November 2026

Visual programming and scripting let BIM people automate their own repetitive work without being full-time developers. Visual tools such as Dynamo and Grasshopper connect blocks (nodes) into a graph; scripting tools such as pyRevit run short Python scripts inside the authoring software. Both use the software's API underneath.

At a glance

ToolRuns inStyleTypical uses
DynamoRevit (and Civil 3D, FormIt)Visual graph, with Python nodes when neededBulk parameter changes, numbering, placing elements by rules, data exchange with Excel
GrasshopperRhino, and Revit via Rhino.InsideVisual graphParametric and computational design, complex geometry, analysis
pyRevitRevitPython scripts as toolbar buttonsTeam tools: checks, exports, view and sheet management
Python with IfcOpenShellStandalone, or Blender/BonsaiCodeVendor-neutral checks and extraction on IFC files
Archicad add-ons and PythonArchicadCode and scriptsProperty updates, exports, checks

Visual or text?

Visual programmingText scripting
Easy to start; you see the data flowA steeper start, but faster once you know it
Graphs get messy past 50–100 nodesScales better; easier to version and review
Good for one person's tasks and explorationGood for team tools that many people run
Python nodes let you mix the twoLibraries let you do things graphs can't

Many people start visual and move to Python for the jobs that become tools.

A first automation, in plain steps

Task: number all rooms on each level from left to right, starting at 001.

  1. Get all rooms on the level.
  2. Sort them by the X coordinate of their location point.
  3. Build the number: level code + three-digit sequence (03-001, 03-002…).
  4. Write it to the Number parameter.
  5. Run on a copy, check a few rooms, then run on the real model.

The same five steps work in Dynamo (five or six nodes) or in a 20-line Python script.

Worked example

An MEP team checks that every duct has a system classification before each issue. By hand, it takes an hour of filtering. A pyRevit button lists ducts with no system, grouped by level, and selects them in the view. It takes ten seconds, so the team actually runs it before every issue, and the receiving coordinator stops finding untagged ducts.

Common mistakes

  • Automating a process before agreeing what the right result is.
  • Scripts with hard-coded names ("Level 1") that break on the next project.
  • No test on a copy before running on a live, shared model.
  • One person's graph that nobody else understands: add notes and a short readme.

Where to read more

The Dynamo, Grasshopper (McNeel) and pyRevit communities run forums with examples and packages. Vendors' API documentation explains what scripts can access. The IfcOpenShell documentation covers Python on IFC.