Dynamo visual programming turns a Revit task into a visible chain of inputs, rules, and outputs. The useful part is not drawing a complicated node graph. It is taking one repeatable BIM job, proving it on a small test set, and making the result clear enough that another person can run it safely.
This guide walks through five practical workflows: previewing geometry changes, placing adaptive components, packaging repeated logic as a custom node, moving structured data between Excel and Revit, and preparing a graph for Dynamo Player. Each tutorial includes a goal, a node sequence, an expected result, and the failure point to check first.
- What Dynamo visual programming does in Revit
- Before you build: record the Revit and Dynamo versions
- Tutorial 1: preview and move Revit geometry safely
- Tutorial 2: place adaptive components from ordered points
- Tutorial 3: turn repeated logic into a custom node
- Tutorial 4: update Revit parameters from Excel data
- Tutorial 5: prepare a graph for Dynamo Player
- Dynamo troubleshooting: check data before nodes
- Checklist for sharing a Revit automation graph
- Related architecture software workflows
- Build one dependable graph before building five clever ones
What Dynamo visual programming does in Revit
Dynamo lets you collect Revit elements or external data, transform that information with nodes, and return a result to the model or to a report. Use it for repetitive, rule-based work: renaming sheets, checking parameters, placing repeated components, building geometry studies, or preparing data for review. Keep creative design judgment in the hands of the designer; use the graph for the repeatable operations around it.
| Workflow | Input | Expected output | Test first |
|---|---|---|---|
| Geometry preview | Selected Revit elements | Translated preview geometry | One simple element |
| Adaptive component placement | Ordered point lists | Placed component instances | One valid point set |
| Reusable custom node | Lists or parameters | Clean, named output | Known sample values |
| Excel data round trip | Rows with stable identifiers | Updated parameters and audit table | Two copied elements |
| Dynamo Player graph | Exposed user inputs | Repeatable task with visible result | Detached or test model |
Before you build: record the Revit and Dynamo versions
Open Dynamo from Revit and record the Revit build, Dynamo build, Python engine, and every third-party package used by the graph. Node names and package compatibility can change between releases. The in-product Dynamo Documentation Browser is the quickest place to confirm a node’s current inputs, outputs, defaults, and example graph.
- Work in Manual run mode while building or diagnosing a graph.
- Use a detached file, local copy, or a clearly controlled test model.
- Place Watch nodes after each major group so you can inspect list depth and data types.
- Save a clean model state before any node writes parameters or creates elements.



Tutorial 1: preview and move Revit geometry safely
Goal: select a small group of Revit elements, extract their geometry, and preview a controlled translation without changing the source elements. This is a good first graph because the result is obvious and reversible.
- Add
Select Model Elementsand choose one or two simple elements in a test view. - Connect the selection to
Element.Geometry. Add a Watch node and confirm that Dynamo returns geometry rather than null values. - Create X, Y, and Z offset values with Number nodes or sliders. Feed the geometry and offsets into the current Translate node shown by your Documentation Browser.
- Run the graph and compare the background preview with the original Revit elements.
Expected output: Dynamo displays moved preview geometry while the original Revit elements remain in place. If you receive null values, check whether the selected Revit object exposes usable geometry in the active context. If only part of the selection moves, inspect list depth before changing lacing. Do not add a Revit creation node until the preview result is correct.
Once the node version works, a Python node can replace a repeated transformation group when there is a clear reason to do so. Keep inputs and outputs narrow, label the expected types, and test the script against an empty list as well as a valid list. The Dynamo developer primer explains where Python nodes, DesignScript, custom nodes, and compiled nodes fit.


Tutorial 2: place adaptive components from ordered points
Goal: place a loaded adaptive family on a repeatable series of point sets. The critical design decision is point order. A four-point family needs four points in the same sequence for every instance; changing that order can twist or flip the component.
- Load and test the adaptive family manually in Revit before opening Dynamo.
- Create or collect points, then group them into one nested list per future component instance.
- Add a Family Types input and select the exact adaptive family type.
- Connect the nested point lists and family type to the adaptive-component placement node available in your Revit/Dynamo build.
- Run one point set first. Only then expand the input to the full list.
Expected output: one component appears for every valid point group. If a component rotates unexpectedly, label the point indices and compare the order across groups. If nothing is placed, verify that the family is adaptive, loaded, and expecting the same number of points supplied by the graph. A preview surface can look correct even when the placement data has the wrong nesting, so inspect both geometry and lists.


Tutorial 3: turn repeated logic into a custom node
Goal: package one proven data-cleaning routine so it can be reused without copying a tangle of nodes. Build and test the routine in the main graph first. A custom node hides complexity; it does not fix uncertain logic.
- Choose a small routine, such as removing nulls, trimming text, standardizing case, and returning a clean list for a Revit parameter.
- Test the group with normal values, blanks, nulls, and one deliberately malformed value.
- Select only the reusable logic and create a custom node from the selection.
- Name each input and output by purpose, not by temporary node name. Add defaults only when running with a default is safe.
- Save the
.dyffile in a controlled location and reopen a fresh graph to test that it loads correctly.
Expected output: one clearly named node returns the same cleaned list as the original group. The official custom-node primer shows how Input and Output nodes define the ports and how the container can be reused. If another workstation opens the graph with an unresolved node, confirm the custom-node path and package dependencies before changing the graph itself.



Tutorial 4: update Revit parameters from Excel data
Goal: import a small worksheet, match each row to a Revit element through a stable identifier, and update one non-critical text parameter. Do not match by row number alone; spreadsheet sorting can silently send data to the wrong element.
- Create a sheet with a header row, a stable key such as Element ID or a controlled asset code, and one value column.
- Use the current Excel import node in your Dynamo build. Older screenshots may show retired node names, so confirm the replacement in the Documentation Browser.
- Inspect the imported list, remove the header row, and transpose rows or columns only if the Watch output proves it is necessary.
- Collect the intended Revit elements, extract the same key, and compare it with the spreadsheet keys.
- Write one copied element first with
Element.SetParameterByName, then export or display an audit list containing key, old value, new value, and success state.
Expected output: only matched elements receive the new value, and every spreadsheet key has a visible success or failure result. If values shift to the wrong elements, stop and inspect the key mapping; do not correct the spreadsheet by rearranging rows until the graph appears to work. If a parameter is read-only or type-based, the write node will not behave like an instance text parameter.


Tutorial 5: prepare a graph for Dynamo Player
Goal: let a Revit user run a tested graph without editing the canvas. Dynamo Player is the handoff layer, so the author must expose only the inputs that are safe to change and make the result visible.
- Switch the finished graph to Manual mode and confirm it runs without stale preview data.
- Right-click each user-controlled node and mark it
Is Input. Rename it with a short instruction such as “Select rooms” or “Choose output folder.” - Mark the final Watch or result node
Is Outputso the Player reports what happened. - Save the graph in a controlled folder and add a description, author, and documentation link.
- Open Revit’s Manage tab, launch Dynamo Player, supply the inputs, and run the graph on a test model.
Expected output: the Player shows required inputs before Run becomes available, then reports a clear output when the task finishes. Autodesk’s Dynamo Player input and output guide documents the Is Input and Is Output workflow. The Revit 2026 Dynamo Player overview also lists typical automation and model-check tasks.


Dynamo troubleshooting: check data before nodes
| Symptom | Likely cause | First check |
|---|---|---|
| Null values after selection | Unsupported element or missing geometry | Test one simple element and inspect Element.Geometry |
| Only some items are processed | List levels or lacing do not match | Add Watch nodes before the failing group |
| Adaptive component twists | Point order changes between sets | Label and compare point indices |
| Excel values land on wrong elements | Rows are matched by position | Match with a stable key instead |
| Graph works only on one computer | Missing package, custom node, or file path | Review graph dependencies and shared paths |
| Dynamo Player cannot run | Missing or unsupported required input | Open the graph and check exposed inputs |
| Large model becomes slow | Graph collects too many elements too early | Filter by category, view, or parameter before geometry conversion |
My rule for graph debugging is simple: inspect the value immediately before the first wrong result. Do not replace several nodes at once. Confirm the data type, list depth, item count, and one known value, then move one group downstream. This usually finds the break faster than rebuilding the graph from a screenshot.
Checklist for sharing a Revit automation graph
- Record Revit, Dynamo, Python engine, and package versions.
- Use relative or controlled paths for files and custom nodes.
- Label node groups by task: collect, filter, transform, write, report.
- Expose only safe inputs and provide a default only when it cannot cause an unintended write.
- Return a visible count or audit list instead of a vague “complete” message.
- Test empty input, one item, several items, and one deliberately invalid item.
- Keep a clean model backup and state whether the graph creates, deletes, or edits Revit elements.
Related architecture software workflows
- Start with the broader 3D modeling workflow guide.
- Compare Dynamo with Vectorworks tutorials for architects.
- Move from BIM output to presentation with Photoshop workflows for architectural renderings.
- Learn a direct modeling path through the SketchUp tutorials for architects.
- Prepare physical study models with 3D printing in architecture.
- See where automation fits inside AI-assisted architecture workflows.
- Review how procedural decisions begin with geometry in architecture.
- Finish the visual pipeline with these architectural rendering techniques.
Build one dependable graph before building five clever ones
The best first Dynamo graph is not the most complex. It is the one that takes a real Revit task, uses a controlled input, returns an output you can verify, and explains its dependencies. Start with two copied elements and a visible audit result. Once that graph survives a second model and a second user, package it for Dynamo Player or reuse the logic in a custom node.
- 8.4Kshares
- Facebook0
- Pinterest8.4K
- Twitter0
- Reddit0