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
| Tool | Runs in | Style | Typical uses |
|---|---|---|---|
| Dynamo | Revit (and Civil 3D, FormIt) | Visual graph, with Python nodes when needed | Bulk parameter changes, numbering, placing elements by rules, data exchange with Excel |
| Grasshopper | Rhino, and Revit via Rhino.Inside | Visual graph | Parametric and computational design, complex geometry, analysis |
| pyRevit | Revit | Python scripts as toolbar buttons | Team tools: checks, exports, view and sheet management |
| Python with IfcOpenShell | Standalone, or Blender/Bonsai | Code | Vendor-neutral checks and extraction on IFC files |
| Archicad add-ons and Python | Archicad | Code and scripts | Property updates, exports, checks |
Visual or text?
| Visual programming | Text scripting |
|---|---|
| Easy to start; you see the data flow | A steeper start, but faster once you know it |
| Graphs get messy past 50–100 nodes | Scales better; easier to version and review |
| Good for one person's tasks and exploration | Good for team tools that many people run |
| Python nodes let you mix the two | Libraries 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.
- Get all rooms on the level.
- Sort them by the X coordinate of their location point.
- Build the number: level code + three-digit sequence (
03-001,03-002…). - Write it to the Number parameter.
- 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.