Monday, March 16, 2026

Maximum Buildable Area with Revit Design Options

Revit BIM Workflow Design Options Site Analysis

Maximum Buildable Area
with Revit Design Options

Study zoning envelopes & generate design alternatives — all in one model

Learn how to use Revit's Design Options tool to model the maximum allowable building envelope under zoning constraints, then branch into multiple design alternatives — BCR limits, height caps, setback rules — without ever duplicating your project file.

March 2026 10 min read Revit 2024 · AIA / Korean Building Code context

Before any schematic design begins, the most important question is simply: how much building is the site legally allowed to hold? Revit's Design Options panel gives you a structured, non-destructive way to answer that question — and to keep exploring alternatives right up to the moment you commit.

Most architects reach for Design Options only when a client wants "two versions of the lobby." But the tool is far more powerful than that. Used early in the process, it becomes a zoning envelope engine — letting you model the maximum buildable mass under BCR, FAR, height, and setback rules as one option, then layer design proposals on top as alternatives, all within a single Revit file.

This post covers the complete workflow: setting up the option structure, building the regulatory envelope, creating alternatives, managing visibility, and presenting the comparison to a client or review board.


01 What are Design Options

Revit's Design Options (Manage tab → Design Options panel) lets you store multiple versions of a portion of your building within a single project file. Each Option Set represents a decision point; each Option within that set is one possible resolution of that decision.

Core concept

Every element in Revit belongs to either the Main Model (always visible, shared across all options) or a specific Option (visible only when that option is active or shown). The main model is the right place for the site, terrain, shared levels, and the regulatory envelope mass. Design options are the right place for competing design proposals.

Why this works for zoning analysis

Zoning analysis requires you to understand the maximum permitted envelope first, then propose designs that fit within it. Design Options maps perfectly onto this sequence:

📐
Regulatory
envelope
(main model)
🅐
Option A
Max density
proposal
🅑
Option B
Mid-rise
proposal
🅒
Option C
Low-rise
proposal
Accept
primary &
archive
Key advantage

One file. One set of shared levels, grids, and site data. No copy-pasting between duplicated project files. When the site boundary changes, you fix it once in the main model and every option instantly reflects the update.


02 Setting up the Design Option structure

Manage tab → Design Options → Design Options dialog
Build your option tree before modeling anything

Step-by-step: create the option set

  1. Open Manage tab → Design Options panel → click Design Options button to open the dialog.
  2. Click New under Option Set. Name it something descriptive: Building Mass Strategy
  3. Revit auto-creates Option 1 (primary). Rename it to Mass A — Max Envelope (your zoning-limit study mass).
  4. Click New under Option to add more alternatives. Name them: Mass B — Tower Podium, Mass C — Courtyard Low-rise, etc.
  5. Close the dialog. The current primary option is now active for editing.
💡
Naming convention

Prefix option names with a letter (A, B, C…) and a short descriptor. Revit sorts options alphabetically in the dropdown — good names make view templates and schedules self-documenting later.

Recommended option set structure for zoning studies

Option SetOptions insidePurpose
Building Mass Strategy A — Max envelope
B — Tower podium
C — Courtyard block
Primary massing comparison
Parking Configuration P1 — Underground
P2 — Podium
Structural/programme impact
Roof Form R1 — Flat
R2 — Sloped
Height limit sensitivity
Important

Keep option sets focused on one decision at a time. A single option set with ten options is hard to manage. Three sets with three options each gives you 27 combinable outcomes while staying legible.


03 Modeling the maximum buildable envelope

📐
Build the regulatory mass in the Main Model
BCR · FAR · height limit · setbacks · daylight angle — all in one mass

The maximum buildable envelope lives in the Main Model, not inside any option. This way it is always visible as a reference silhouette regardless of which design option is active — a constant reminder of what the regulations allow.

Inputs you need before opening Revit

Regulatory parameterExample valueSource
Zoning district Type-2 General Residential Eum portal / zoning map
BCR (Building Coverage Ratio) 60% Seoul City Ordinance Art. 54
FAR (Floor Area Ratio) 200% Seoul City Ordinance Art. 55
Absolute height limit 18 m Building Act Art. 60
North daylight setback ≥ 1.5 m; H/2 above 9 m Building Act Art. 61 / Decree Art. 86
Road setback (building line) Per road width class Building Act Art. 46
Parcel area 173.25 m² Land-use confirmation cert.

Workflow: massing the regulatory envelope

  1. Set the active option to Main Model. Status bar dropdown (bottom of screen) → select Main Model. Any element placed now belongs to the main model.
  2. Create a Conceptual Mass family or In-Place Mass. Massing & Site tab → In-Place Mass. Name it Regulatory Envelope.
  3. Sketch the footprint. Draw the parcel boundary first, then offset inward by the required setbacks (road setback, side setbacks). The resulting polygon is your maximum footprint. Verify: footprint area ÷ parcel area ≤ BCR limit (60%).
  4. Extrude to the height limit. Extrude the footprint to the absolute height limit (18 m). This is the base regulatory prism.
  5. Apply the north daylight setback. For the north face: add a void cut that rakes the massing back from the north boundary using the daylight angle formula (1.5 m base + H/2 above 9 m). Use a Reference Plane with the angle locked to a parameter for easy adjustment.
  6. Check FAR. Use a Revit schedule on the mass floors to sum the gross floor area at each level. Total GFA ÷ parcel area must be ≤ FAR limit (200% = 346.5 m²). Trim the massing vertically if FAR is exceeded before BCR is reached.
  7. Apply a semi-transparent material. Assign a transparent amber or blue material to the envelope mass so design options placed inside it read clearly against it in 3D.
Parametric tip

Drive the envelope with Shared Parameters: BCR_limit, FAR_limit, Height_limit, North_setback. Link them to the mass via a formula. When the planning officer changes a number, update one parameter and the entire envelope regenerates.

/* Revit mass parameter formulas — add to Family Types dialog */ Max_Footprint_Area = Parcel_Area * BCR_limit /* e.g. 173.25 m² × 0.60 = 103.95 m² */ Max_GFA = Parcel_Area * FAR_limit /* e.g. 173.25 m² × 2.00 = 346.50 m² */ North_Setback_Base = 1500 mm /* below 9 m height */ North_Setback_Upper = Building_Height / 2 /* applies above 9 m — use void extrusion with rake angle */

04 Creating & populating design alternatives

🏗
Build each design proposal inside its own option
Options A, B, C live inside the regulatory envelope

Switching to an option for editing

  1. Status bar dropdown → select the option you want to edit (e.g. Mass A — Max Envelope). The active option name appears in the status bar; a blue border frames the viewport.
  2. All elements you place now belong to that option only. The main-model regulatory envelope remains visible as a reference ghost.
  3. To switch to a different option, use the dropdown again. Elements from other options are shown in halftone (you can toggle this in Visibility/Graphics).

Typical alternatives for a zoning study

Primary
Option A — Max density
Fills the regulatory envelope as completely as possible. Maximises BCR and FAR simultaneously. Used as the legal-maximum benchmark.
BCR 58% · FAR 196% · Height 17.8 m
Option B — Tower podium
Lower podium (3F) at full footprint, slender tower above. Preserves ground-level streetscape. Trades BCR efficiency for FAR.
BCR 55% · FAR 185% · Height 18 m
Option C — Courtyard block
U-shaped plan around a south-facing courtyard. Sacrifices some FAR for daylight and amenity. Popular with residential programmes.
BCR 48% · FAR 160% · Height 14 m

What to model inside each option

  • Mass geometry (floors, extrusions, voids) specific to that design proposal
  • Mass floors at each level — used by the schedule to calculate GFA per option
  • Generic floor/wall components sufficient to read the section and plan strategy
  • Do not duplicate shared elements: levels, grids, site topo, regulatory envelope mass
  • Structural grid variants can live in a separate option set if they differ between proposals
Shared families

If two options share identical floor plates at low levels but diverge higher up, model the shared floors in the Main Model and only the divergent upper floors inside the respective options. This avoids double-counting in area schedules.


05 Views, visibility & schedules per option

👁
Control what each view shows
Visibility/Graphics · View Templates · Design Option selector

Assigning a specific option to a view

  1. Open the view (floor plan, section, 3D view) you want to dedicate to one option.
  2. Open Visibility/Graphics Overrides (VG or VV) → Design Options tab.
  3. For each Option Set, choose which option to display in this view: Automatic (shows primary) or a specific named option.
  4. Duplicate the view for each option, assign the corresponding option, then rename: 3D — Option A Max Density, 3D — Option B Tower Podium, etc.

Dedicated view set for client presentations

View nameTypeOption shownPurpose
Site — Regulatory Envelope 3D Main model only Show legal maximum before any design
3D — Option A 3D Mass A Max density proposal
3D — Option B 3D Mass B Tower podium proposal
L1 Plan — Option A Floor plan Mass A Ground-floor footprint comparison
Section N-S — All options Section Automatic (primary) Height envelope check
Area Schedule — All options Schedule Filters per option BCR / FAR comparison table

Area schedule with option filter

To compare BCR and FAR across all options in a single schedule:

  1. View tab → Schedules → Schedule/Quantities. Category: Mass. Name: Massing Area Comparison.
  2. Add fields: Mass Name, Design Option, Gross Floor Area, Number of Floors.
  3. Add a calculated field: FAR = Gross Floor Area ÷ Parcel Area. Add another: BCR = Footprint Area ÷ Parcel Area.
  4. Group rows by Design Option. Now each option appears as a sub-group with its own total GFA, FAR, and BCR — all in one schedule.
📊
Schedule tip

Place this schedule on a dedicated sheet next to three side-by-side 3D views (one per option). It becomes your entire early-stage design comparison document — no PowerPoint needed for the first client review.


06 Presenting alternatives & accepting the primary option

Present, decide, and merge into the main model
Accept primary → non-primary options are archived or deleted

Sheet set for client design review

  • Sheet 1 — Regulatory envelope: site plan + 3D of max buildable prism with BCR/FAR/height labels
  • Sheet 2 — Option A: plan, section, 3D + area schedule row for Option A
  • Sheet 3 — Option B: same layout, Option B views
  • Sheet 4 — Option C: same layout, Option C views
  • Sheet 5 — Comparison: three 3D views side by side + full area comparison schedule

Accepting the chosen option

  1. Client or design team selects Option B (for example) as the direction to develop.
  2. Go to Manage → Design Options → Design Options dialog.
  3. Select Mass B — Tower Podium and click Make Primary.
  4. Click Accept Primary. Revit merges Option B's elements into the Main Model and removes the option set.
  5. Archive the other options first if you need a record: duplicate the views dedicated to Options A and C into a separate browser folder labeled _Archive — Rejected Options before accepting.
Warning — this is irreversible

Accepting a primary option permanently deletes all non-primary options and their elements from the file. Save a backup copy of the project file before clicking Accept Primary. Store it as ProjectName_DesignOptions_Archive_YYYYMMDD.rvt.

Post-acceptance: clean-up checklist

  • Delete or repurpose views that were dedicated to rejected options
  • Update the regulatory envelope mass if the chosen design triggers a different BCR/FAR calculation basis
  • Rename the accepted mass from Mass B — Tower Podium to Building Mass
  • Run Revit Purge Unused to remove any family types used only in deleted options
  • Update the project area schedule to reflect the now-merged single design

Quick reference

TaskWhere in RevitKey action
Create option set Manage → Design Options → New (Option Set) Name: Building Mass Strategy
Add an option Design Options dialog → New (Option) Name with letter prefix: A — Max Density
Switch active option Status bar dropdown (bottom of screen) Select option name or Main Model
Control view per option VG → Design Options tab Set each option set to desired option
Build regulatory envelope Massing & Site → In-Place Mass (Main Model active) Extrude footprint to height limit, apply setback voids
Area comparison schedule View → Schedules → Category: Mass Add Design Option field; group by option
Make option primary Design Options dialog → Make Primary Do this before Accept Primary
Accept & merge Design Options dialog → Accept Primary Save backup first — irreversible
Bottom line

Design Options turns your Revit model into a genuine decision-making environment — not just a drawing tool. Used from day one of a project, it keeps the regulatory envelope and every design alternative live, comparable, and in the same file. When the client decides, one click promotes the winner and archives the rest. No file duplication. No copy-paste chaos. No "which version is this?" emails.

Try the workflow on your next project

Start with a single Option Set named "Building Mass Strategy," build the regulatory envelope in the Main Model, and add three options. You'll have a client-ready massing comparison before the end of your first modelling session.

Labels
revit design-options bim-workflow massing zoning-analysis buildable-area bcr-far site-analysis architecture-practice revit-tips

Automate Your Building Code Reviews with AI

 


Architecture AI Automation Building Codes Workflow

Stop Doing Building Code
Reviews by Hand

A repeatable 4-step AI workflow — parcel lookup, zoning data collection, statutory analysis, and auto-generated reports — that turns a 2-hour code review into a 30-minute task.

March 2026 8 min read Seoul · Type-2 Residential Zone example

Before a single wall gets drawn, architects run the same checklist on every new project: look up the zoning, check the floor-area-ratio cap, find the height limit, verify parking requirements, and read through the local ordinance for anything unusual. It's necessary work — and it's tedious every single time.

This post walks through a four-step automation workflow that chains public land-use APIs, AI-assisted statutory analysis, and a document template to produce a complete building code review report. The running example is a 173.25 m² parcel in Seoul's Type-2 General Residential Zone, using the DDFL educational report format as the output.

Scope note
All examples use Seoul ordinances (BCR 60%, FAR 200%). The four-step structure works for any Korean municipality — substitute the relevant local ordinance at Step 3. The same logic applies internationally wherever public parcel APIs exist.

Workflow overview

01
Address
verify
02
Eum portal
data pull
03
Code
review
04
Report
output

Steps 1 and 2 are API calls that complete in seconds. Step 3 is where AI earns its keep — mapping raw regulatory text to the specific parcel. Step 4 assembles everything into a clean, submission-ready document.


1 Address verification & parcel code lookup

📍
Standardize the address input
Street address or lot number → 17-digit PNU parcel code

Why this step matters

The land-use APIs in Step 2 don't accept free-text addresses — they require the PNU (Parcel Number Unit) code, a 17-digit identifier unique to every cadastral parcel in Korea. Everything downstream depends on getting this right first.

How to do it

  • Road Address API (MOIS, juso.go.kr): converts any Korean address → canonical lot address + legal-dong code
  • Vworld Geocoding API (vworld.kr): lot address → WGS-84 coordinates + PNU code in one call
  • Ask Claude: "Write Python code to call the Vworld API and return the PNU code for this address." It writes the full request and JSON parser instantly.
  • Result: a standardised lot-address string + 17-digit PNU, ready for Step 2
Pro tip
Clients often supply outdated lot numbers from old deeds. Always run addresses through the MOIS API to resolve the current legal-dong code before calling any other service. Historical parcel changes can be traced at luris.molit.go.kr.

2 Land-use data collection — Eum portal API

🗺
Pull the land-use confirmation sheet
Zoning · use-district · area controls · BCR / FAR · permitted uses

Key fields to extract

FieldExample valueUsed for
Zoning districtType-2 General ResidentialSets BCR / FAR baseline
Use-district overlayMaximum height districtAdditional height cap check
Use-zone designationDevelopment-restricted zoneAct-restriction flag
Parcel area173.25 m²Absolute BCR / FAR limits
Road frontage6 m collector roadAccess, setback, corner cut

Automating the pull

  • Use the Eum OpenAPI (available at data.go.kr): POST the PNU code → JSON land-use plan response
  • Python + requests + openpyxl: API call → parse → write to Excel in ~20 lines
  • Paste the JSON into Claude: "Summarise the planning constraints on this parcel in a table."
  • Output: zoning class, BCR %, FAR %, permitted-use list — structured and ready for Step 3
Watch out
The Eum OpenAPI can lag behind gazette amendments. For permit-stage submissions, always cross-check against a freshly issued 토지이용계획확인서 (land-use confirmation certificate) directly from the Eum website.

Sample collected result

Collected land-use data · Type-2 General Residential Zone
FieldValue
LocationSeoul, District 00, Lot 00-00
Zoning districtType-2 General Residential Zone
Parcel area173.25 m²
Legal BCR60% (max footprint 103.95 m²)
Legal FAR200% (max GFA 346.50 m²)
Parking requirement1 space per 134 m² facility area

3 Statutory code review — Building Act, Decrees & ordinances

Map the full regulatory hierarchy
National Act → Enforcement Decree → Rules → Seoul City Ordinance

Korean building law is layered: the national Building Act sets principles; the Enforcement Decree fills in detail; Enforcement Rules add technical specifics; and the local ordinance (서울특별시 도시계획조례) applies the final municipality-specific numbers. Each layer can only tighten — never relax — the one above it.

Regulatory sources to query

SourceKey itemsWhere to fetch
Building ActParcel access, building line, BCR/FAR principleslaw.go.kr
Enforcement DecreeNorth setback, height calc, corner cut, height relaxationlaw.go.kr
Enforcement RulesSmall-scale parking, accessibilitylaw.go.kr
Seoul City OrdinanceBCR/FAR precise limits, use-specific allowancesSeoul self-governance portal
Seoul Parking OrdinanceStrengthened on-site parking requirementsSeoul self-governance portal
NLUIA Decree Annex 5Permitted-use list for Type-2 Residentiallaw.go.kr

AI prompt pattern — copy and paste this

# Paste into Claude after completing Steps 1–2 Site: Seoul District 00, Lot 00-00 Area: 173.25 m² · Type-2 General Residential Zone Road: 6 m collector road (south frontage) Task: Review each item and return a table with columns [item | code reference | standard | note]: - Parcel access requirements (Building Act Art. 44) - Building line / road setback - North-facing daylight setback - Absolute height limit - BCR limit (Seoul ordinance) - FAR limit (Seoul ordinance) - Parking requirement - Corner-cut (가각전제) obligation - Permitted use: Class-1 neighbourhood commercial?
AI tip
For maximum accuracy, fetch the current statutory text from law.go.kr OpenAPI, paste the relevant articles into the same prompt, and ask Claude to cite exact article numbers. Computed items (north setback formula, absolute FAR in m²) are returned with the formula shown.

Auto-generated code reference table

Key standards · Type-2 General Residential Zone, Seoul
ItemCode referenceStandardNote
Road accessBuilding Act Art. 44≥ 2 m road frontageN/A
Building lineArt. 46 · Decree Art. 31≥ 4 m road → statutory lineN/A
North daylight setbackArt. 61 · Decree Art. 86≥ 1.5 m; > 9 m height → H/210 m revision pending
Max heightBuilding Act Art. 6018 mRelaxation possible
BCRSeoul Ordinance Art. 5460%
FARSeoul Ordinance Art. 55200%
ParkingSeoul Parking Ordinance1 space / 134 m²Small-scale possible
Permitted useNLUIA Decree Annex 5Class-1 neighbourhood facilityBuildable ✓

4 Auto-generate the DDFL building code report

📑
Assemble the report from structured data
Building overview + full code table → PDF · Excel · Word

With Steps 1–3 done you have all the numbers. This step populates the DDFL template — a Building Overview section (project particulars) and a Code Review Table (every checked item with its statutory citation).

Building overview — auto-filled example

Building overview (auto-generated from Steps 1–3)
FieldValue
LocationSeoul, District 00, Lot 00-00
ZoningType-2 General Residential Zone
Parcel area173.25 m²
Footprint (design)[populated after design input]
GFA[sum of floor areas — auto-calculated]
Legal BCR60% → 103.95 m² max
Legal FAR200% → 346.50 m² max
Parking (legal)1 space per 134 m² facility area

Implementation options

  • Python + openpyxl: write values into named-range Excel template; BCR/FAR formulas recalculate automatically when design area is entered
  • Python + python-docx: find/replace placeholder tokens in a Word template — one script, reusable for every project
  • n8n or Make: build a no-code pipeline that runs the full API → AI → document chain on demand
  • Claude prompt chain: feed Steps 1–3 outputs as context, request the DDFL table as Markdown, then convert to Word/PDF via Pandoc

Output formats

📄
PDF report Print-ready for permit submission
📊
Excel workbook Live BCR / FAR / parking formulas
📝
Word template Editable for client revisions

! Before you rely on this in production

Critical checks
  • Statutes are amended frequently — verify every article against current text on law.go.kr before any submission
  • Eum API data may lag gazette changes — issue a fresh confirmation certificate for permit-stage work
  • AI-generated code analysis is a research aid, not a legal opinion — a licensed architect must review and sign off
  • Ordinances vary by municipality — replace Seoul-specific sources for projects outside Seoul
  • The proposed 10 m north-setback threshold revision is not yet in force — confirm before relying on it
What you actually gain
  • First-pass review time cut by roughly 70% — hours become minutes
  • Fewer omissions: the checklist-driven approach flags items human reviewers miss under time pressure
  • Great onboarding tool: junior staff absorb the code hierarchy as each step produces structured output
  • Multi-site screening: compare five candidate parcels side-by-side in the time a manual review covers one
Labels: building-code site-analysis ai-automation architecture-practice korean-building-law ddfl bcr-far eum-portal building-permit workflow

Friday, March 13, 2026

Dynamo Nodes in Revit: The Complete Visual Coding Reference

 


Revit + Dynamo — Visual programming guide

Dynamo Nodes in Revit: The Complete
Visual Coding Reference

A comprehensive SEO-optimized guide to every Dynamo node type — from basic inputs to Python scripting — written for BIM professionals using Autodesk Revit.

March 202515 min readDynamo · Revit · BIM · Visual Programming · Computational Design
Table of contents
  1. What is visual coding in Revit with Dynamo?
  2. Anatomy of a Dynamo node
  3. The 7 core node types explained
  4. Building a real-world node workflow
  5. Python Script nodes: beyond built-ins
  6. Custom nodes and community packages
  7. Pro tips for clean, fast graphs
  8. FAQ
01 — Introduction

What is visual coding in Revit with Dynamo?

Autodesk Dynamo is a visual programming environment that plugs directly into Revit, Civil 3D, and other Autodesk products. Instead of writing lines of code in a text editor, you drag and drop nodes onto a canvas and connect them with wires. Data flows from left to right, transforming at each step, until it drives a change in your Revit model.

This approach — called visual coding or visual scripting — lowers the barrier to automation dramatically. An architect or BIM manager with zero programming experience can build scripts that rename thousands of elements in seconds, place families along a parametric curve, or export room data to Excel automatically.

Key fact: Dynamo is open-source and ships bundled with Revit 2014 and later. No separate license is required. The standalone Dynamo Sandbox runs without Revit at all.

The fundamental unit of every Dynamo program is the node. Understanding what nodes are, how they receive and emit data, and which category to reach for in a given situation is the single most important skill in Dynamo development.


02 — Core concept

Anatomy of a Dynamo node

Every node in Dynamo has the same basic anatomy: one or more input ports on the left, an internal function, and one or more output ports on the right. You connect nodes by drawing wires from an output port to an input port.

A few key rules govern every node:

  • If an input port is not connected, the node uses its default value (or remains null).
  • Nodes execute automatically whenever any upstream input changes — there is no "run" button per node.
  • Every output can feed multiple downstream nodes simultaneously.
  • Ports with a double-chevron icon (>>) accept lists as well as single values.
Lacing: When two list inputs of different lengths meet at a node, Dynamo uses a lacing rule to pair them up. Right-click any port to switch between Shortest, Longest, and Cross Product lacing. Getting this wrong is the most common source of unexpected output in beginner graphs.

03 — Node taxonomy

The 7 core node types explained

Dynamo's library contains over 500 built-in nodes organized into seven broad categories. Each category maps to a distinct role in your graph.

Input nodes

Feed raw values into the graph. Number Slider, Integer Slider, String, Boolean, File Path, Select Model Element.

Geometry nodes

Create and transform 3D objects: points, lines, curves, surfaces, solids, meshes. Based on ProtoGeometry.

List nodes

Sort, filter, flatten, transpose, combine, and index into lists of any data type.

Math nodes

Arithmetic, trigonometry, rounding, range mapping, random numbers, and formula evaluation.

String nodes

Concatenate, split, replace, regex-match, and format text. Essential for parameter naming.

Revit nodes

Query and modify Revit elements, parameters, families, views, sheets, worksets, and model categories.

Python / custom

Embed Python 3 scripts or package a sub-graph into a reusable Custom Node (.dyf file).

Input nodes — where every graph begins

The most powerful input node for production scripts is Number.Slider combined with a defined Min / Max / Step range. This gives end users a safe, bounded control they can operate without opening the graph editor. Use Select Model Element or Select Elements by Category when the script needs to act on specific Revit objects chosen by the user at runtime.

Geometry nodes — the spatial powerhouse

Dynamo's geometry library mirrors the ProtoGeometry .NET API. The most commonly used nodes in real BIM workflows are:

  • Point.ByCoordinates — create a 3D point from X, Y, Z values
  • Line.ByStartPointEndPoint — draw a line between two points
  • NurbsCurve.ByPoints — fit a smooth curve through a list of points
  • Surface.ByLoft — loft a surface through multiple curves
  • Solid.ByUnion / ByIntersection — boolean solid operations
  • Geometry.Translate / Rotate / Scale — transform any geometry object

List nodes — the secret weapon

Most real-world Dynamo scripts operate on hundreds or thousands of elements at once. The List category is what makes that practical. Critical nodes to master:

  • List.Flatten — collapse nested lists into a single-level list
  • List.FilterByBoolMask — split a list based on a list of true/false values
  • List.Transpose — swap rows and columns in a 2D list
  • List.GroupByKey — group elements by a shared attribute
  • List.Chop — split a flat list into sub-lists of a fixed length

Revit nodes — the bridge to BIM data

Revit-specific nodes divide into two halves: query nodes that read data from the model, and action nodes that write back to it. The most important distinction is between Element.GetParameterValueByName (read) and Element.SetParameterByName (write). Never use write nodes inside a frozen branch — they will not execute and will fail silently.


04 — Hands-on example

Building a real-world node workflow

Let's walk through placing Revit family instances along a parametric grid — one of the most common Dynamo tasks in façade and structural workflows.

Workflow — parametric grid to Revit family placement
Number.Slider
Point.ByCoordinates
List.Flatten
FamilyInstance.ByPoint
Element.SetParameterByName

Step 1 — Two Number.Slider nodes control row count and column count. Adjusting either slider instantly regenerates the entire downstream result.

Step 2 — Point.ByCoordinates with Cross Product lacing generates every X/Y combination automatically, producing a 2D grid of points as a nested list.

Step 3 — List.Flatten collapses the nested list to a single level so the placement node receives a flat sequence of points.

Step 4 — FamilyInstance.ByPoint stamps one instance of a selected Revit family type at every point in the list. This single node replaces what would be hundreds of manual placements.

Step 5 — Element.SetParameterByName immediately assigns a mark number or type comment to each new instance using a formatted string from a String.Concat or Code Block node.


05 — Advanced

Python Script nodes: beyond built-ins

When no built-in node covers your use case, drop a Python Script node into the canvas. In Dynamo 2.13 and later, the default engine is CPython 3, giving you the full Python standard library plus any pip-installable package.

Inputs arrive as IN[0]IN[1], etc. Your output must be assigned to OUT. Any modification to the Revit document must be wrapped in a Transaction.

Python Script node — batch rename elements by mark
# IN[0] — list of Revit elements
# IN[1] — string prefix, e.g. "FAC-"
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import Transaction, BuiltInParameter

elements = IN[0]
prefix   = IN[1]
doc      = elements[0].Document
results  = []

with Transaction(doc, "Batch Rename") as t:
    t.Start()
    for i, el in enumerate(elements):
        new_mark = f"{prefix}{i+1:03d}"
        el.get_Parameter(
            BuiltInParameter.ELEM_MARK_PARAM
        ).Set(new_mark)
        results.append(new_mark)
    t.Commit()

OUT = results
Always use a Transaction. Built-in Revit nodes manage transactions internally. Python Script nodes do not — any .Set() call outside a transaction will throw a Revit API exception and crash the run.

06 — Ecosystem

Custom nodes and community packages

Once you have a useful sub-graph, select all relevant nodes, right-click, and choose Create Custom Node. This collapses your logic into a single .dyf file that appears in your library and can be shared across projects. For team-wide distribution, publish it to the Dynamo Package Manager.

Clockwork
800+ additional nodes filling gaps in the standard library, especially strong for Revit element queries and parameter handling.
springs nodes
Hundreds of utility nodes for list management, UI controls, string formatting, and model data export.
Data-Shapes
Build custom UI dialogs — dropdowns, checkboxes, multi-select lists — without writing a single line of Python.
MEPover
Specialised nodes for MEP workflows: duct routing, cable tray sizing, connector management, and system analysis.
Rhythm
A broad utility package with nodes for Revit, Rhino interop, and everyday list/math operations that are missing from core.
BimorphNodes
High-performance nodes for large-scale element selection, parameter batch operations, and schedule manipulation.

07 — Best practices

Pro tips for clean, fast graphs

01
Group and color-code everything

Select related nodes and press Ctrl+G to group them. Assign consistent colors: yellow for inputs, green for Revit actions, blue for geometry, red for outputs. Anyone reading your graph understands it in seconds.

02
Prefer list operations over Python loops

Dynamo processes lists natively via replication. A single Element.SetParameterByName handles 10,000 elements without a loop. Use Python only for logic that genuinely needs imperative control flow.

03
Freeze slow branches

Right-click any node and select Freeze to prevent it re-running on every change. Freeze expensive Revit document queries that only need to run once, then unfreeze only when you need a fresh result.

04
Use Code Block nodes for compact math

Instead of chaining five Math nodes, a single Code Block expresses the same thing in one line: width / 2 + offset * Math.Sin(angle);. Code Blocks support DesignScript and are far more readable for expressions.

05
Always test on a copy of the model

Dynamo write operations are undoable inside a single Revit session, but they cannot be rolled back after saving. Always run destructive scripts on a detached copy until you are confident in the output.


08 — FAQ

Frequently asked questions

What version of Python does Dynamo use?
Dynamo 2.13 and later defaults to CPython 3.9+, giving you access to the full standard library. Older versions use IronPython 2.7. You can switch engines per Python Script node in its settings panel.
Can I run Dynamo without a Revit license?
Yes. Dynamo Sandbox runs completely standalone, giving you access to all geometry, math, list, and string nodes. Revit-specific nodes require an active Revit connection and are disabled in Sandbox mode.
What is lacing and why does it matter?
Lacing controls how Dynamo pairs list items when two lists of different lengths enter the same node. Shortest stops at the shorter list; Longest repeats the final item; Cross Product generates every possible combination. Wrong lacing is the number-one cause of unexpected output in Dynamo graphs.
How do I share a Dynamo script with my team?
Share the .dyn file (the main graph). If the graph depends on Custom Nodes, also share the .dyf files or instruct teammates to install the same packages from the Package Manager. Document the Dynamo version and package versions the script was built with.
Is Dynamo free?
Yes. Dynamo is fully open-source (GitHub: DynamoDS/Dynamo) and ships bundled with Revit. The standalone Dynamo Sandbox is also free. There is no separate subscription or seat license for Dynamo itself.
What is the difference between a node and a Code Block?
A node is a pre-built function with a fixed number of input and output ports. A Code Block is a free-form DesignScript editor that lets you write multi-line logic, define variables, and call node functions by name — all inside a single canvas element. Code Blocks are ideal for compact math and string formatting.
#Dynamo#DynamoNodes#Revit#BIM#VisualProgramming#ParametricDesign#AutodeskDynamo#ComputationalDesign#DynamoBIM#VisualCoding#RevitAutomation

Ready to start building in Dynamo?

Download Dynamo Sandbox for free and start wiring nodes today — no Revit license needed.