IcZ SuiteTools · Overview
Revit 2022–2026 · pyRevit · IronPython Latest r212 · 2 Nov

A custom Revit automation
suite, built tool by tool

The IcZ SuiteTools turn slow, error-prone MEP coordination work into one-click operations — twenty-one modeless tools on one shared library, and an MCP bridge an agent can drive. Every tool scans before it writes, and every write is one undoable transaction.

Built and used in-house by @MrGezz, BIM coordinator and Revit API developer · the implementation stays in a private repository; this page documents capabilities and architecture · Get in touch on GitHub

Right now it can
0
SHIPPING TOOLS
0
RIBBON COMMANDS
0
ONE TRANSMITTAL RUN
0
REVIT 2022–26
The SuiteTools tab, as Revit shows it Section Box flyout showcase
ArchitectureStructureSystemsInsertAnnotateAnalyzeCollaborateViewManageAdd-InsSuiteToolsModify
Hover a button for a one-line summary, click it to jump to the tool. The two pulldowns open. The lit button follows you down the page.
routing field · runs 16 · clashes found 0 · markers placed 0 · your cursor is an obstacle

Every tool window further down is a live, clickable HTML mockup — hover, toggle and scroll inside the frames, or pop them out full size. Press ? for the keyboard.

New to Revit automation? The companion BIM & AI Guide is a free course from zero Dynamo and zero code to pyRevit, the Revit API and Navisworks coordination — with an AI assistant as the pair-programmer. Every deck reads in the browser; nothing to install. What is in it ↓

The twenty-one tools at a glance 33 commands

One row per tool, in the order a project meets them: set up and clean, coordinate, quantify and issue, then standards, families and scripts. The one-liner is the same one the ribbon shows. Hover a row to light its button above; click the name to read the section.
ToolPanelWhat it doesTouches the modelIn → outSince
Project Setup PSU IcZ Project-level housekeeping in one modeless workbench — twelve setup stations behind a read-only audit cover sheet, each scanning first and committing through the one footer button. audit first, then commit per station links, levels, templates, a register .xlsx, a BEP .docx → a set-up model and an eight-sheet compliance workbook new
QAQC Suite AA IcZ Modeless model-maintenance and QA/QC workbench for MEP models — a phased parameter pipeline with a pre-scan review grid, health scoring and colour mapping. scan → apply, stage by stage the MEP model → health score, colour overrides, tags, an HTML certificate and an .xlsx of findings new
Model Cleanup CD Tools Nine cleanup passes in one modeless workbench — ghosts, overkill lines, connections, the system layer, nested cases, orphans and duplicate families — armed individually, committed as one undoable act. a preview rolls back; a run is one undoable group a production model → a cleaned model, an .xlsx receipt and a run console new
Ungroup UNG Tools Take the groups of a model apart, by type, in one undo step. Scan lists every group type with its instances, nested groups, members, pinned and borrowed instances; tick the types to open, filter them by name, and choose the scope. It asks first, writes one transaction, and Ctrl+Z undoes it. Scan reads only; Ungroup is one transaction that asks first the model, a selection or the active view → the groups opened, their elements released, emptied group types deleted on request new 21 Oct
MEP Workbench FIT IcZ Modeless workbench for MEP cleanup, routing and parameter maintenance — thirteen pages on a grouped rail: Diagnose, Fabricate, Document. Its element-level edits are also on this pulldown as single buttons, so each can take a keyboard shortcut. preview, then one named transaction per action a selection or the model → fittings, flex, routes, parameters; findings to .xlsx new
Framing Fix SFX Structural Structural Framing Fix — disallows framing joins while preserving the as-joined physical length; regrowth is compensated into Start/End Extension so faces stay put. scan → apply → reverse a framing selection → disallowed joins with lengths preserved, an .xlsx report r116
Interference Check ICX Report Find interferences between two sets of categories — and, unlike Revit's own Interference Check, against linked Revit models and linked Navisworks coordination models as well. Read-only: it opens no transaction. read-only — no transaction is ever opened two category sets, links and NWD / NWC / NWF → results, .xlsx, a batch for the Clash Importer new
Clash Importer CIT Report Import a clash report — Navisworks XML or HTML, CSV, Excel, BCF — and place a marker family at every clash point on a verified coordinate basis. Each marker remembers its clash, so a re-import reconciles instead of duplicating. refuses an unverified mapping; one undoable placement Navisworks XML / HTML, CSV, XLSX, BCF → placed markers, .xlsx, BCF write-back new
MEP Opening Tool WOT Report MEP penetration and opening tool across host and linked files: find every crossing, place and mark the openings, audit the ones already there, and see what changed since the last run. scan, place, audit — each undoable host and linked models → opening families, a live schedule, .xlsx / .xls new
Section Box SB Tools Subject-aware section boxes for 3D views: the Create window, or the one-click Quick Box, Quick Section Box, Grow, Shrink and Toggle — each an individual pushbutton you can bind to a keyboard shortcut. writes the view, never the model a selection, rooms or levels → a 3D section box; five one-click commands r116
BOQ Lookup RO1 Parameter Bill-of-Quantities population for MEP and construction models: size → nominal width → BOQ designation and description, then a unit-aware bill and a native Revit schedule. one undoable transaction a catalogue JSON and model sizes → SPEC parameters, a native schedule, a bill in .xlsx new
Pressure Loss PLR Report Pressure loss through a pipe or duct network from the pipework alone. No mechanical equipment has to be set up. Pick the start, give the pressure, the flow and the fluid, then Calculate. Read-only: it opens no transaction. read-only, no transaction is opened a start element, a pressure, a flow and a fluid → the critical path, the pressure at every outlet, a PDF, HTML or Excel report new r169
Piping Isometric ISO Report A piping isometric of one run, drawn from the model the way a shop isometric is: pick where the run starts and, optionally, where it ends. Cut-length dimensions, elevation callouts, flow arrows, P&ID symbols, elbow angles, joint tags and spool numbers, a key plan, and the notes, line data, bill of material and joint list under it. Create the sheets in the project's own title block or print them to PDF through Revit. one undoable transaction for the sheets; the PDF writes a file a start element and an optional end element → sheet previews, a bill of material, a joint list, a PDF or the sheets with their drafting views new r170 · shop iso r187
Schematic SCH Report A single-line flow schematic of one run, drawn from the model the way a flow diagram reads: the pipework laid out left to right, every pipe one step long, valves and accessories as P&ID symbols on the line, branches dropping to rows of their own, the machines at the ends as boxes with their tags and nozzles, a lettered bill of material and notes under it. Draw reads only; Create View is one transaction that asks first a start element and an optional end element → a sheet preview, a bill of material, a drafting view on a sheet or a PDF new 22 Oct
Room Book RBK Report Which MEP sits in which room, counted and measured — a room book from the model, with the rooms taken from wherever they are: this model, its MEP spaces, or the linked architectural model. One row per room with a column per count and the metres of each kind of run. Read-only: it opens no transaction. read-only — no transaction is opened; selecting is a UI change rooms from any loaded source and MEP from this model and its links → a room book, a PDF with a plan per room, an HTML page, an Excel workbook new r194 · 22 Oct
Sheet AutoDoc DOC Tools Data-driven sheet generation on the Universal Layout Engine: one detail sheet per staged element — plan, sections, 3D, tags, an optional schedule — docked to anchors defined in a profile, not in code. one transaction per element, or one for the set staged elements or rooms and a layout profile → sheets, views, tags, schedules new
Text Search TS Tools Find text notes by what they say, in the whole model, the active view or any one view, and zoom to them. Type part of a note, such as a damper code, and the list follows the keyboard. Replace asks first. searching reads only; Replace is one transaction that asks first search text, a scope and a match mode → a result list grouped by view, the note opened and selected, new text after Replace new r150–r168
Transmit EXP Tools One transmittal, every format. DWG, PDF, Navisworks, IFC, images and Excel in a single run, with crisp embedded logos, clean schedule tables, consistent naming and a ready-to-send sheet index. writes files, never the model sheets, views, models, schedules → DWG, PDF, NWC, IFC, images, XLSX and a sheet index new
Guideline GUIDE QualityCheck The project standards library inside Revit: browse, preview, annotate and edit reference documents — PDF, Excel, Word, Markdown, images — without leaving the model. edits documents, never the model PDF, Excel, Word, Markdown, images → previews, notes, edits r116
Family QC FQC QualityCheck Family-definition health check — seventeen checks on the family open in the editor, or eight across a whole folder of .rfa files without opening one. A health percentage, an A–F grade, and every finding. read-only scan; rename writes on request an open .rfa or a folder of them → a grade, an HTML report, .xlsx; renamed files new
Script Reader SR IcZ Script library browser, editor and interactive IronPython console. Runs .py scripts from configurable library folders inside a valid Revit API context, modeless and external-event dispatched. runs your scripts inside the API context .py library folders → console output, saved logs r116

"Touches the model" is the tool's own rule from its readme: a scan never writes; a commit is one named, undoable Revit transaction; the five read-only tools cannot change a model at all.


Suite Architecture hybrid core

Twenty-one tools across six ribbon panels, all resting on one shared icz library of 122 modules. Hover a tool to trace the modules it consumes.
IronPython 3 engine Modeless WPF / XAML ExternalEvent-safe Light / Dark themed
SuiteTools ribbon · 21 tools
QAQC Suite AA MEP Workbench FIT Project Setup PSU Model Cleanup CD Transmit EXP AutoDoc DOC BOQ Lookup RO1 Guideline GUIDE MEP Opening WOT Clash Importer CIT Interference Check ICX Pressure Loss PLR Piping Isometric ISO Text Search TS Family QC FQC Script Reader SR Section Box SB Framing Fix SFX Room Book RBK Schematic SCH Ungroup UNG
icz shared library · 122 modules in six domains
Core & host seam
availability bcf cpyworker design_options diaglog dllguard fmt host licensing mcpdynamo mcpmodel mcpui mcpwrite mhealth pycompat reporthtml revit_compat scan scripting selection settingsform units vfilters
UI & shell
checkcombo codetok confirm dashboard dialogs modeless pdfview piechart portlist preview3d radar reader review_grid revit_utils shell theme tristate validation
MEP & geometry
flex framing_join geom isodraw isofab isosymbols mep mepdoctor mepnet modify naming nodecluster nwd openings orphans overkill riser route routing spacesync tag_leader tags viewbox wallmath
Data, clash & quality
bimstd clashgrid clashhandoff clashhtml clashreport clashstate clashtable clashxml colorize configstore depends doccopy famedit famlib famqa famqa_atom famqa_catalogue famqa_config famqa_logic famqa_params famqa_rename icx_delta libmodel libplace libsource mcheck namerules paramreg params presets revitwarnings scorecard serdes sysguard toolstate vg_transfer wot_delta xmlwalk
Worksharing
ownership worksets
Export & IO
doclayout drafting exportcfg failures isopdf lastused layout_native loiexport pdflite perftracker report_export sheet_overlap sheetannot sheetkit sheetpreview xlsxlite xlsxread
 Autodesk Revit API 2022 · 2023 · 2024 · 2025 · 2026  — version differences absorbed by revit_compat

Hover any tool to wire it to the modules it consumes · hover a module to see which tools rely on it · click to pin · the tour walks all twenty-one.


An agent can drive it revit-launch navisworks-launch

The suite's fourth pillar: a local MCP bridge that attaches to the Revit — or Navisworks — session you already have open, so an AI agent can read the model, drive the suite's own windows and see what it rendered, without ever taking the wheel. Dry run by default, one undoable transaction when it commits, and it never saves your Revit file.
How it is used — orient, read, dry run, then commit
Orient

One read-only call answers whether Revit is up, whether the routes server is responding and on which port, and which bridge instances are live — each fact separating what the config says from what is on disk, because they fail independently.

Read

Routes reads behind an allowlist, element and parameter queries, a view census that flags which views can be exported at all, and the same declarative element filter the suite's own tools scan with.

Dry Run

Parameter writes, deletes, selection and view changes all execute and roll back, returning what actually happened rather than a prediction of it.

Commit

Commit plus confirm for anything destructive; the result is one named, undoable transaction in the model's history.

Self-Smoke

Open a suite tool from the ribbon, click its pages by name, capture every rendered page, and review them against the approved design mockup through a parity manifest — or run a named smoke scenario end to end.

Choose A Profile

A session sees core (8 tools, the minimal attach surface), standard (33 with every gate: adds write, capture, ui and knowledge) or full (143 by default, 164 with every gate); a meta-tool lists and enables further groups at run time without a restart.

Try the contract — pick a call and watch the exchange
revit-launch · stdio · JSON-RPC 2.0

              
Illustrative payloads in the shape the servers speak — the element ids and counts are made up, the contract is not: dry run by default, commit needs confirm on anything destructive, no route ever saves, and every refusal happens before anything spawns.

The full surface — 143 tools by channel, the three gates, the two transports, the Navisworks half and the harness numbers — is in the MCP layer reference, which also lists the other servers.


What’s new since mid-October r176 → r212

Nineteen things a user notices, from the previous sync of this page to this one. Each stop links to the section it explains. The dots sit on the calendar. Scroll the track, click a dot, or let it play.
14 Oct2 Nov
r176.2Oct 15 new

MEP Workbench places typical connections from the piping library

A Typicals page reads any library on hand: one open in this Revit, a folder copy, the local cache, Autodesk Docs or a pack. A typical lands at a point or onto an open end and is connected, one undo step each.

r178.5Oct 16 new

QAQC Suite scores LOI the way the Model Checker does

The evaluator was ported line by line from Autodesk’s engine and matched it on every check result. Findings are listed by type, one click selects the parts, and the report exports as HTML, Excel, SVG or XAML.

r181Oct 16 new

Five features mined from the Dynamo collection

QAQC Suite isolates the elements of a warning, Transmit adds or removes a revision on ticked sheets, the MEP Workbench gains a Number page and a Supports page, and Family QC makes standard parameters shared.

r176.5Oct 18 new

Project Setup snapshots a template’s standards

The Standards station writes a snapshot from the open template, units, object styles, line and fill patterns and view filters, and audits another model against it by name and by rule body.

r187Oct 18 new

Pipe Iso becomes Piping Isometric, a shop isometric

Joints and weld types, spool numbers, elbow angles with offset triangles, a key plan on the sheet, and five strips under the drawing: general notes, line data, abbreviations, bill of material and joint list.

r184 / r189Oct 18 new

The Revit bridge reads any open document and prints sheets to PDF

A view census or a capture names the document, so a second open model is read without activating it. A capture takes a sheet number, a set of sheets or an element id, and writes PNG or PDF.

r190Oct 18 new

Model Cleanup shows its findings on a plan of the model

Draw a region to clean only part of the model. PREVIEW runs the cleanup, measures it and rolls it back, and the forecast counts the MEP systems a delete leaves empty.

r192Oct 20 new

navisworks-launch writes Clash Detective’s own reports

One tool writes Navisworks’ report per clash test, as XML, HTML, tabular HTML or text, into a folder you name, with the document unchanged.

r193Oct 21 new

Project Setup loads and unloads links for one user

Link Paths lists every link type with its loaded state, cloud links included, and loads or unloads the checked rows for you alone or for everyone, each outcome measured after the write.

new toolOct 21 new

Ungroup takes the groups of a model apart, by type

Scan lists every group type with what its instances hold. Tick the types, pick a scope, and one transaction opens them; pinned and borrowed groups are skipped and named, and Ctrl+Z undoes it all.

r194Oct 22 new

Room Book counts and measures the MEP in every room

Rooms come from this model, its spaces or the linked architecture. One row per room with a column per count and the metres of each run; a PDF with a plan per room, an HTML book, an Excel workbook.

new toolOct 22 new

Schematic draws a single-line flow diagram of a run

The sister of the Piping Isometric: the same picks, laid out left to right with P&ID symbols on the line, branches on rows of their own and the machines at the ends as boxes.

r195 / r203Oct 22 – 25 new

Project Setup sets link display and discipline worksets

Link Paths drives Revit’s own Visibility/Graphics dialog to put checked links on Custom in the ticked views, which no API reaches. Link Worksets routes each link to its discipline’s workset from the folder tree.

r199Oct 25 new

AutoCAD, Plant 3D and Fusion join the agent servers

acad-launch loads a bridge into a running AutoCAD and reads the Plant 3D data manager; fusion-launch runs code on Fusion’s main thread through an installed add-in. Both carry an API corpus read from the installed build.

r202Oct 25 new

A crash class removed suite-wide

IronPython 3.4 on Revit 2025 and later leaks stack on a jump out of an except handler. Every such jump in the suite, 356 in 85 files, was rewritten, and a census gate keeps them out.

r204Oct 25 new

MEP Workbench insulates several parallel runs with one jacket

The Insulate page bundles parallel pipes or ducts and builds one round or box jacket around each bundle, by thickness or by a fixed outer size, with the runs cut out and the volume checked.

r200.4Oct 28 new

Piping Isometric draws by the fabricator’s conventions

Symbols corrected against a Plant 3D library, tag leaders square to the pipe, an elevation on every level leg, a set that starts at a given sheet number, the welding type read from the pipe type. Interference Check confirms a hit against a link by intersect volume.

r206.1Oct 28 new

The Revit bridge targets a second Revit

Every route tool takes an instance by port or pid, busy and hold are kept per Revit, and desktop focus is verified by process before a key is sent.

r210Nov 1 new

The drafting standard becomes a gate

A library module measures a sheet or a view on the paper in millimetres: overlaps, leader angles and shoulders, text sizes, titles and viewports. The bridge exposes it as a lint, and a skill pack carries the rules.

Earlier: r116 → r176 20 stops
r1162026-08-23 new

Clash Importer reaches the page

The fourteenth tool: five report formats read by content, a coordinate mapping proved by a round trip, markers that remember their clash so a re-import reconciles instead of duplicating.

r143Sep 16 new

Interference Check lands

The fifteenth tool finds interferences against this model, linked Revit models and the Navisworks coordination models the Revit API returns empty geometry for — and says on every row whether the finding is solid-exact or box-level.

r143Sep 16 new

Family QC scans a folder and renames

Eight of the seventeen checks now run across a whole folder of families without opening one, and a rename overlay previews every collision before a file or a loaded family is touched.

r145Sep 19 new

The Opening Tool remembers the last run

A run ledger per document: every penetration comes back New, Unchanged, Moved, Resized or Gone, and a Gone row navigates to the opening an update left behind.

r145.2Sep 20 new

Transmit checks its own output

Every expected file must exist, be non-empty and be written by this run, or the transmittal finishes with warnings; a saved IFC setup from Revit's own exporter dialog can drive the IFC export.

r145.2Sep 20 new

Three set-up stations, one cleanup station

Project Setup gains a drawing-register sheet diff, a grid audit against a linked model and a Visibility/Graphics transfer; Model Cleanup gains the Families station for duplicate loaded families.

r145.2Sep 20 new

QAQC tags what it finds

Tag Audit and Dim Coverage take a scope — the view, the sheets, or every view — and Tag selected places the missing tags; Model Health lists every warning type with a Select button.

r149Sep 24 new

The Clash Importer takes the Interference Check's rows

One click hands a result set over in the model's own feet; an importer open on the same document reloads in place, one on another document refuses, and rows without a status stop being dropped.

r154Sep 27 new

QAQC Suite Apply names every rolled-back element and retries once

When Revit rolls back an Apply, the window now lists the elements that failed. It retries once with those elements set aside.

r156Oct 3 new

A Blender server joins the local agent servers

blender-launch starts or attaches to a Blender, runs code in it, builds and sculpts a model and takes pictures of it.

r158Oct 4 new

BOQ Lookup picks the right exhaust-duct catalogue for each project

The new catalogue holds 855 positions from two workbooks. The manufacturer now decides the chapter of a flange.

r163Oct 6 new

Agents can read screens, listen to audio and search the web

icz-senses offers ten tools in three lanes: pictures with local text reading, audio transcription, and web search and fetch.

r169Oct 12 new

Pressure Loss: a new tool that needs no equipment set up

Pick a start, give a pressure, a flow and a fluid. The result names the critical path and the pressure left at every outlet.

r170Oct 12 new

Pipe Iso draws a fabrication isometric of one run

A run becomes an isometric with cut lengths, riser elevations, flow arrows, valve symbols and a bill of material. It exports as a PDF or a drafting view.

r172Oct 12 new

System Guard names new pipes and ducts that have no system type

A background watch names such runs the moment they are created. It can also give them a configured fallback type in one undo step.

r171/r173Oct 12 new

Two standalone servers join: icz-reverse and icz-learn

icz-reverse offers 36 reverse-engineering tools over three engines. icz-learn offers five tools that read Microsoft documentation.

r169.1Oct 13 new

Pressure Loss adds vacuum lines, turn angles and a Coefficients page

Each item reports the angle the flow turns through. Pipe Iso now splits a large network into numbered sections.

r174Oct 13 new

QAQC Suite tags insulation with the kind of element it wraps

Phase 5b writes the host kind into two comment parameters. Insulation is also sized and counted through its host.

r169.8Oct 13 new

Pressure Loss warns when a gas line is calculated as water

System type names tell a gas line from a water line. The window adds a Gas fluid and says how far off the result is.

r176Oct 14 new

MEP Workbench checks pipe types against the piping library

Library check reads a library model laid out on a board. Declare from library adds the proposed markers to the editor in one step.


Chapter 1

Set up and clean the model

A model is worth coordinating only once its links, levels, worksets and parameters are governed and its geometry is clean. These six run in that order: Project Setup audits and commits the set-up, QAQC Suite scores and repairs the MEP data, Model Cleanup removes what should not be there, Ungroup takes the groups apart so every element can be edited on its own, the MEP Workbench fixes what should, and Framing Fix settles the structural joins.

Project Setuptwelve stations behind one audit
QAQC Suitescore, then apply gate by gate
Model Cleanupnine stations, one undoable act
Ungroupgroups apart, one undo step
MEP Workbenchfittings, flex, routes, parameters
Framing Fixjoins disallowed, lengths kept

Project Setup Utility PSU IcZ.panel

Twelve setup stations — BEP brief, link worksets, link paths, project info, levels, view templates, shared parameters, standards sync, Space ⇄ Room QA, and now a drawing-register sheet diff, a grid audit against a linked model and a Visibility/Graphics transfer — behind one read-only audit cover sheet. Supersedes the standalone LNK / PRI / LVL pushbuttons.
DoesProject-level housekeeping in one modeless workbench — twelve setup stations behind a read-only audit cover sheet, each scanning first and committing through the one footer button.
Touches the modelaudit first, then commit per station
Project Setup PSU Full size
ProjectInfoLevel / WorksetTableJSON config
  • Cover-Sheet Audit: One read-only RUN AUDIT runs every audited station once and fills the KPI band, the readiness donut and a twelve-row register — station, governing standard, issue count, status — whose rows deep-link to their station. Nothing is written to the model, and Export compliance report writes an eight-sheet workbook beside the model. Queue pills stage the fixes; one click commits every queued domain in order.
  • Links: Worksets, Load State And Display new: Link Worksets routes every Revit, CAD and Navisworks link to its discipline’s workset, read from the folder tree, and creates only the worksets that are missing. Link Paths lists every link type with its loaded state, cloud links included, loads or unloads the checked rows for you alone or for everyone, and sets a link’s display to Custom in the ticked views by driving Revit’s own Visibility/Graphics dialog, which no API reaches. Every outcome is measured after the write, never assumed.
  • Guarded Project Info: Reads/writes only standard built-in ProjectInfo fields with an IFD requirement reminder. Protects document health while you edit.
  • Elevation-Safe Level Swap: Re-hosts elements to a new reference level while computing a delta offset so nothing physically moves. Re-level a model without breaking geometry.
How you use it — audit the cover sheet, commit by station11 pages
Link Worksets

Route every linked model — Revit, CAD and Navisworks — to its discipline’s workset, read from the folder tree, with configurable pattern rules; existing discipline worksets are kept and only the missing ones are created.

Project Info

Audit and synchronize project metadata against your IFD compliance requirements. Federated JSON Sync is available for firm-wide standards alignment.

Levels

Consolidate and rehost elements across levels with automated offset compensation. Optionally delete redundant levels — views are safely rehosted before removal.

Link Paths

Audit every link, separating broken links — repath proposed by filename search under configured roots — from stale links reloaded in place. Load or unload the checked links for you or for everyone, set their display to Custom in the ticked views, and acquire shared coordinates from a named survey link.

View Templates

Apply pattern-to-template rules with a check-list preview, transfer templates from other open documents, and report or enforce controlled parameters.

Shared Params & Standards

Audit bound shared parameters against the firm registry, batch-bind from a shared-parameter file, and apply only the unit / object-style mismatches you leave checked; line and fill patterns and view filters are audited too, a snapshot of the open template becomes the standard another model is audited against, and the station builds the standardised Navisworks coordination view with its appearance filters.

Space ⇄ Room QA

Pair MEP spaces against rooms from the architectural model, classify number and name drift, and dry-run one rolled-back sample write before committing the batch sync.

BEP Rule Import

Parse tables straight out of a BEP .docx, map columns, preview the rules, then import them into the link-routing config — or export them to JSON.

Sheets new

Diffs the xlsx drawing register against the model's sheets: MISSING rows create sheets with the chosen title block, RENAME rows update names, EXTRA sheets are reported and never deleted — one undoable transaction.

Grid Audit new

Pairs host grids with a chosen linked model by name and reports MATCH, MOVED, DIRECTION, MISSING (tick to create), EXTRA, RENAME CANDIDATE and ARC — so the setting-out disagreement is found before the walls are.

V/G Transfer new

Captures a view or template's complete Visibility/Graphics state — category overrides, filter list, per-filter overrides — to a portable JSON, then applies it to any set of views or templates in this or another project.

Rules are edited per station and persisted to psu_config.json; a bundled psu_profiles.json standards profile marks required stations and loads calibration presets in one click.


IcZ QAQC Suite AA IcZ.panel

A modeless model-maintenance and QA/QC workbench that runs a governed sequence of remediation stages over raw MEP geometry — Scan (dry-run review) then Apply on each, with click-to-zoom result grids and a live Model Health score. Redesigned from a prompt-driven macro into a canonical modeless UI, modernized for newer Revit APIs, with mapping tables edited in-window and persisted to JSON.
DoesModeless model-maintenance and QA/QC workbench for MEP models — a phased parameter pipeline with a pre-scan review grid, health scoring and colour mapping.
Touches the modelscan → apply, stage by stage
IcZ QAQC Suite AA Full size
FilteredElementCollectorSubTransactionJSON config
  • Six Governed Stages: Cleanup, CMMN, SPEC, Flags, Classification and Worksets run in sequence — sealing connectors, removing duplicate runs, writing standard parameters, classifying for IFC export, and routing worksets. Collapses a full day of manual coordination into one governed pass.
  • Geometry-Driven Parameters: Populates project custom parameters straight from model geometry and editable mapping tables (spec_mappings.json), edited in-window on the Settings page — no raw JSON. No typing, no transcription errors.
  • Scan → Apply, One Resolver: Each stage previews as a click-to-isolate grid before it writes; preview and run share one function so they can never disagree, and a live Model Health score summarizes the result. Nothing touches the model until you approve it.
  • Tag Audit With Auto-Tag, And A Warning Drill-Down new: Tag Audit and Dim Coverage take a scope — the active view, the views on sheets, or every graphical view — and aggregate per view, deduplicating the elements that need a tag. Below the indicator rows, tick the untagged categories and Tag selected places one tag per element per view as ordinary undoable transactions, skipping elements another user has checked out. Model Health now lists every Revit warning type with its count and a Select button that puts the affected elements into the selection. The audit names the gap, then closes it — without leaving the window.
Scan HealthOne-click triage sweep of every phase scanner — a full-fidelity read of what each gate would change.
PreviewElement-level dry run per gate — every proposed edit listed with isolate + zoom; the same resolver that previews is the one that runs.
Apply six stagesCleanup · CMMN · SPEC · Flags · Classification · Worksets, each stage isolated.
Issue CertificateStamps the inspection FIT FOR ISSUE or HOLD · n GATES (zero critical findings, LOI ≥ 90) and writes an HTML certificate plus an .xlsx findings workbook.
the commit convention — approve, then run
# Scan and Apply share one resolver — preview can never disagree with the run.
for stage in stages:                            # Cleanup · CMMN · SPEC · Flags · Classification · Worksets
    with revit.Transaction(stage.name, doc):    # each stage, one guarded tx
        stage.apply(doc, approved_elements)     # only what the review grid approved
health.score(results)                           # live Model Health — no TaskDialog

Illustrative — the workflow shape, not the internal phase logic.

From script to suite AA began as a single ~2,600-line RevitPythonShell macro.

The original macro ("BOM SPEC Extended Parameters Update") did the whole job, but as one monolith driven by a chain of blocking dialogs. Rebuilding it as a modeless tool kept the logic and made it safe, reviewable and reusable across projects.

Original macro
  • One ~2,600-line file, run from RevitPythonShell
  • Each phase gated by a blocking TaskDialog prompt
  • Classification & workset routing hardcoded inline
  • Console prints for feedback; single Revit version
IcZ QAQC Suite
  • Modeless WPF with a pre-scan review grid (isolate/zoom)
  • Six stages (Scan→Apply) commit only what you approve; live Model Health score
  • Mappings externalized to spec_mappings.json
  • Logic factored into icz modules; Revit 2022–26 safe
How you use it — Scan Health → Preview → Apply12 pages
QC phase pipeline
Cleanup · Phases 0–2

Reconnects open MEP connectors within 20 mm, removes coincident duplicate elements (structural only — MEP duplicates are Model Cleanup's Ghost Purge) and zero-length ducts, and snaps over-slope runs back to vertical — run first so the network is continuous for the SPEC phases.

CMMN Identity · Phase 3

Parses the model file name against your naming convention and writes the CMMN status, building and TOOL_ID parameters. Set the tokens in Settings, then Apply.

SPEC Parameters · Phases 4a–4f

Assigns SPEC_SYSTEM (with chemical-box and clamp inheritance), then SPEC_SIZE, SPEC_QUANTITY and the bilingual SPEC_ARTICLE classes — the procurement backbone, driven by editable prefix/route tables.

Flags · Phases 5–6

Sets IFX_INSULATION on insulated runs and IFX_POC_Element once POC tagging is final — the flags that drive insulation schedules and downstream filters.

IFC Classification · Phase 7

Writes the IFC entity/type parameters from the classification table so the model exports with correct IFC typing.

Workset Orchestration · Phase 8

Distributes every element to its target workset, derived from the SPEC_SYSTEM value written back in Phase 4a.

Standing audits
Tag Audit

Elements with no tag or more than one, per category, over the active view, the views on sheets or every graphical view — deduplicated across views. Tick the untagged categories and Tag selected places them as undoable transactions.

LOI Scorecard new

Scores the model against your Autodesk Model Checker LOI ruleset — read straight from the .xml, no add-in needed — with an evaluator ported from the engine itself, so it agrees with the Model Checker on every check result. Findings are listed by type, one click selects the parts, and the report exports as HTML, Excel, SVG or XAML.

Model Health

Counts hygiene indicators — warnings, unpinned links, imported DWGs, in-place families, unused templates — into a weighted 0–100 score. Every warning type is listed with a Select button, and the elements of a warning can be isolated in the view.

View Filters

Decodes every view filter's rules into plain data and flags the ones applied to no view or template.

Dim Coverage

Undimensioned elements per category over the same three scopes, summed per view — report-only, with click-to-zoom.

Colorize by Value

Colours the active view's elements by a parameter (e.g. SPEC_SYSTEM) with a legend and one-click reset — spatial QA the piecharts can't give.


Model Cleanup CD Tools.panel

Nine cleanup passes, read as a plan of the model. A scan puts every finding it can place on a plan of the model’s own grid, shaped by pass and coloured by what a run would do to it; the rest wait on a shelf below the plan. Draw a region to clean only part of the model, PREVIEW the run as a measured rollback, then commit it as one undoable group.
DoesNine cleanup passes in one modeless workbench — ghosts, overkill lines, connections, the system layer, nested cases, orphans and duplicate families — armed individually, committed as one undoable act.
Touches the modela preview rolls back; a run is one undoable group
Model Cleanup CD Full size
Measured previewRegion scopeSubTransactionSpatial grid O(n)Nested family resolution

The plan new

A scan draws its findings on a plan of the model: an 8 × 6 grid of cells over the model’s own grid lines, one mark for each finding it can place. A mark’s shape names the pass and its colour the consequence — a delete, a delete that takes a tag or a dimension with it, a repair, or held. The five busiest cells light up as hot zones.

Region & PREVIEW new

Drag a region on the plan, or click a hot zone, and a run touches only what lies inside it. The forecast gives the model after the run: the deletes, their own parts, the MEP systems they leave empty and the real dependents. PREVIEW runs every armed pass inside a transaction group, measures what changed, then rolls it back.

Ghost Purge

Detects overlapping duplicate elements (MEP + structural), keeps the connected copy and deletes the floating ghost — grouping by category/type first so it stays O(n) per group, not O(n²). Cleans massive models in seconds.

Connection Fix

Seals open MEP connector pairs within a 20 mm tolerance via spatial-grid bucketing, isolating each attempt in its own SubTransaction. Runs after Ghost Purge, on the already-reduced model.

Nested Fix

Finds hosts with intersecting same-type nested sub-components — a hidden duplicate Ghost Purge can't see because it lives inside one host. Where a per-family rule applies it clears the redundant one's visibility; with no rule it reports only, and any repair that doesn't clear the clash is rolled back.

Systems Group

Three stations repair the MEP system layer: empty systems (report-only where deleting would orphan a run), duplicate system names renamed free, and Undefined pipe/duct system types repaired from the connected healthy neighbour, with configurable fallback types.

Overkill Lines & Orphan Purge

Overkill Lines merges collinear detail/model/separation lines that overlap or touch onto one survivor and deletes the rest. Orphan Purge removes empty elevation markers and orphaned tags, with configurable extras — scope boxes, view filters, rooms/spaces, CAD imports.

Families

The ninth station finds loaded families that share a category and a normalised name — trailing digits, “– Copy”, case — proposes a survivor (most instances, then the un-suffixed name), re-points every matched instance to the survivor's type and deletes the now-empty loser. Losers with types the survivor lacks are held by default and shown with the reason.

Never acts on stale data. A scope change invalidates the caches it affects and asks for a new scan. An edit made outside the window marks the scan stale, and so does an undo of the run. A document-identity guard blocks a commit against a switched document. The forecast states every consequence first — its dependent count is computed, capped or marked as a bound, never a reassuring zero — PREVIEW then measures it exactly, and an .xlsx receipt, a run console holding every event and one-click Undo complete the workflow.
the safety pattern — isolate, verify, roll back
# Each repair is isolated; a rule that doesn't clear the clash is undone.
with SubTransaction(doc) as st:
    st.Start()
    apply_fix(candidate)
    doc.Regenerate()
    st.Commit() if clash_cleared(candidate) else st.RollBack()

Illustrative — the guard pattern shared across the repair stations.

How you use it — scan, read the plan, draw a region, preview, then run5 pages
Scan and read the plan

SCAN MODEL reads every pass in one read-only sweep (the same button cancels it). The Layers rail lists the passes with their counts; tick one to show it on the plan and arm it, pick one to read its rows in the catch below the plan. Findings and actions are counted apart, and a held row says why.

Region

Drag on the plan or click a hot zone to set a region: the scope switches to it and the region card names the cells. The off-plan passes have no position, so a region run leaves them out and their cards say so.

Forecast and PREVIEW

The run pane forecasts Will delete, Dependent cascade, Will change, Held · report only and Model after. PREVIEW runs the armed passes, fills the result card from what it measured and rolls everything back; a change to the scope, the arms or the ticks takes that card down.

Run, receipt, undo

RUN CLEANUP commits every armed pass as one undoable group. The catch becomes a run receipt, the footer names what changed — the MEP systems Revit removed with their last member included — and UNDO LAST CLEANUP or Ctrl+Z reverts the whole run.

Configuration

A drawer over the right of the window holds the overlap buckets, the connect tolerance, excluded categories, per-family nested rules, fallback system types and purge extras. Its Sieve plots the open connector gaps the scan found, so the tolerance can be set by eye. Saved to cd_config.json.


Ungroup UNG Tools.panel new

Takes the groups of a model apart, by type, in one undo step. Scan lists every group type with what its instances hold; tick the types to open, filter them by name, choose the scope, and one transaction opens them. Revit ungroups what is selected, one type at a time, and a plant-room model with 88 group types is 88 rounds of that.
DoesTake the groups of a model apart, by type, in one undo step. Scan lists every group type with its instances, nested groups, members, pinned and borrowed instances; tick the types to open, filter them by name, and choose the scope. It asks first, writes one transaction, and Ctrl+Z undoes it.
Touches the modelScan reads only; Ungroup is one transaction that asks first
Ungroup UNG Full size
Model and detail groups By typeNested level by levelWorksharing-awareOne undo step
  • Reads The Whole Model First: Scan lists every group type with its instances, the elements inside, nested and attached groups, pinned and borrowed instances and the text notes they hold. Badges say what the current options do to each type: how many open, stay whole, are skipped or belong to someone else.
  • Nested, Pinned And Borrowed, Each By Rule: A nested group opens level by level until nothing is left grouped, or comes out of its parent whole. A pinned group is skipped, and a group another user owns is always skipped and named. An attached detail group goes with its model group, whatever the Detail groups switch says.
  • Nothing Written Before You Confirm: The dialog says how many groups of how many types open, how many elements come out, what is skipped and why, and which types will be deleted. The commit is verified, and the empty shell Revit leaves behind after a group opens is removed, so the Project Browser stops counting it. Ctrl+Z undoes the whole thing in one step.
  • Measured On A Plant Room: On a cloud-workshared Revit 2025 model, 393 model groups of 59 types holding 89,275 elements opened in just under three minutes, with the 59 emptied types deleted and 849 detail groups untouched. About half of that time is the ownership check with the central.
Operations
Scan

Pick the scope — every group in the model, the selection, or the active view — and press SCAN or F5. Every group type is listed with its counts.

Tick And Filter

Narrow the list with part of a type name, then tick or untick types. All and None act on the types shown; only those can open.

Set The Switches

Model groups, detail groups, nested groups too, skip pinned groups, delete emptied group types, select the released elements.

Ungroup

The dialog shows the counts first. One transaction opens the groups in passes, top level first; afterwards the window reads the model again.

The window — one page, an options column and a list of group types1 page
Options column

The scope and the six switches. It collapses with the burger button.

Figures

Five tiles: Group types, Groups in scope, Will open, Elements released and Skipped, which shows the split on hover.

The list

One row per group type with its tick, name and kind, the counts and the badges. Click the text or the arrow to select the type’s instances in Revit.

Keys

F5, or Enter in the filter box, reads the model again and plans. Esc closes.

Since 21 Oct. SCAN only reads the model. UNGROUP is the tool’s one write: a single transaction named IcZ Ungroup that asks before it commits. It does not open groups inside linked models or a family document, and it never saves.

MEP Workbench FIT IcZ.panel

Thirteen MEP pages on a grouped rail — Diagnose, Fabricate, Document — in one modeless workbench: dashboard, fittings check, connectivity, flex, routes, prefab, supports, insulate, modify, typicals, coordinates, number, copy parameters. Five pages carry a gear that flips to a Settings & Info view with editable defaults persisted to JSON. The fittings check runs eight rules, A to H, including duplicate-family consolidation, a routing-preference sanction check and a system-to-material check against the piping library, and every writing page except Modify has a read-only Preview twin.
DoesModeless workbench for MEP cleanup, routing and parameter maintenance — thirteen pages on a grouped rail: Diagnose, Fabricate, Document. Its element-level edits are also on this pulldown as single buttons, so each can take a keyboard shortcut.
Touches the modelpreview, then one named transaction per action
MEP Workbench FIT Full size
FlexPipe / FlexDuctConnectorSpatial hashingPer-page JSON

Fittings & Accessories

Seven rules against editable configuration, each with its own Scan and a clickable findings grid: A routing-preference fittings, B accessory pairing, C placed fittings carrying the markers of the runs they actually join, D maintenance clearance, E headroom (with a write-to-parameter), F duplicate families grouped by how safely they merge, and G placed fittings no routing preference sanctions. An adaptor is treated as the edge of a material domain — the walk stops there rather than hanging the far side's materials on a part that never touches them. Rules live in fitting_config.json; its pairing editor answers from both ends — Coverage from model proposes the rule that would clear a finding, Dead rule keys reports rules that clear nothing — and Save takes effect on the next scan.

Write X / Y Coordinates

Stamps X/Y (optional Z) into shared parameters in three modes — Absolute, Grid-relative, Shared-site — after an editable offset, with an overwrite guard so existing values stay put. Missing firm-standard shared parameters are auto-bound to the selection's categories.

Pipe / Duct → Flex

Rebuilds rigid runs as flex — Replace (swap with reconnect) or Containment (lay alongside). Vertex count (2–9), sag, smoothing, diameter and workset overrides are tunable, with six operations: convert, audit, simplify, split, riser and parallel lanes — five of them on the compiled core.

Copy Params Between Systems

Copies IFLS / AKS / Prozessmedium from linked source fittings onto host targets, matched by MEP system name and gated by horizontal / vertical distance caps. Keyword and triple-map config in paramsync_config.json.

Replace & Consolidate

Re-type a fitting from a findings row, or the whole held set from the jaw, keeping instance parameters. Where Revit refuses because the new family would break the joint, the fitting is detached, re-typed and every joint rebuilt — the neighbouring run trimmed along its own axis to meet the new ports — and if any joint cannot be rebuilt the whole run rolls back. Consolidate re-points every instance of a duplicate victim type onto its keeper and deletes the victim; every re-type is verified by reading the type back before it is counted.

Coordination Models As Obstacles new

Route generation reads the NWD / NWC / NWF coordination models the document links and adds their geometry to the obstacle set — the Revit API returns empty geometry for them, so a route that avoided everything Revit could see used to go straight through a slab that existed only in the structural NWD. The compiled core's headless Navisworks reader supplies the boxes; each file's frame is measured from this model's own elements inside the routing envelope, never assumed.

Riser & Split new

Riser turns a flex that crosses the slab into a rigid riser of the size of the duct below its adaptor — one inclined leg between two 45° elbows into a clear corridor, never a 90/90 jog. Split cuts a flex on its centreline directly under the click, in whatever view you click in, and re-joins both halves to whatever the original touched.

Typicals From The Library new

Places a typical connection from a piping library into the project. The page lists every library on hand, best source first: one open in this Revit, a copy in the library folder (opened detached, so the central is never touched), the local cache, Autodesk Docs by cloud id, or a pack of its own. A typical lands at a picked point or onto an open end, facing it and connected when domain, shape and size agree, mirrored on request — one undoable transaction each, and Preview makes the same copy and rolls it back.

Supports Along Runs new

Places a support family along the held pipes and ducts: the first and last at an inset from each end, the rest spread so no gap exceeds the maximum spacing, risers left out. A hanger placed at a point lands on the centreline or the underside of the run, so one offset seats a trapeze on every size; a work-plane clamp is centred by its measured ring, given the type made for the run’s nominal size, and removed again when its ring cannot hold the run.

One Jacket Around Several Runs new

Insulate bundles parallel pipes or ducts that lie alongside each other within a gap and builds one insulation solid around each bundle, where Revit insulates one pipe at a time: round on the exact smallest enclosing circle, or a box on their rectangle, sized by thickness or by a fixed outer size. The runs are cut out, the volume as built is checked against the geometry, and Preview plans every jacket without building one.

Number Elements new

Writes a sequence into a text parameter on the held set: prefix, level, room or space number, then a zero-padded counter. Rooms are looked up in this model and every loaded link, zones sort in natural order, and inside a zone the order is reading order, clockwise from north, or along an axis. Preview shows the first and last value and names any value the plan would give twice; every value is read back after it is written.

config over hardcoding — the coordinates page
cfg  = load_json("fitting_config.json")  # offset + param names are DATA
x, y = world_xy(elem, cfg["offset_mm"])  # editable per project, not baked in
if is_empty(elem, cfg["param_x"]):       # overwrite guard: keep existing values
    write(elem, cfg["param_x"], meters(x))

Illustrative — every FIT page reads its defaults from JSON like this.

From two standalone scripts FIT unifies a WinForms flex converter and a coordinate-filler macro.

Two separate one-off scripts became two pages of one navigated workbench — sharing its shell, theme, MEP engine and JSON config instead of each carrying its own copy.

Original scripts
  • A WinForms "Pipe → Flex" picker (type / diameter / workset)
  • A separate selection-only X/Y writer with hardcoded offsets & param names
  • Console logging; no overwrite guard
MEP Workbench
  • One modeless WPF workbench — now thirteen pages on a grouped rail, shared chrome
  • Flex adds Replace / Containment modes with in-window tunables
  • Coordinates: editable offset/params + overwrite guard, scoped run
  • Reconnection consolidated into the shared icz.mep engine
  • Persistent selection vise + run ledger ("tape") — Verify reselects exactly what a run touched
How you use it — thirteen pages on the grouped rail; Preview measures what a run would touch before the primary button writes13 pages
Fittings & Accessories Audit

Validates pipe/duct fittings and accessories against editable compliance rules — seven rules, A to G; GENERATE AUDIT MATRIX runs A–D in one pass while headroom, duplicate-family consolidation and the sanction check stay separate actions — each a clickable review matrix with zoom and isolate.

Coordinate Stamping

Stamps plan position into shared parameters in Absolute, Grid-relative or Shared-site mode, with optional Z, after an editable offset. An overwrite guard skips already-filled elements; missing shared parameters are auto-bound.

Flex Conversion

Converts rigid runs to flex topology — Replace swaps and reconnects; Containment preserves the originals and draws alongside, with branch handling under Advanced.

Parameter Synchronization

Synchronizes IFLS / AKS / Prozessmedium from linked source fittings onto host targets, matched by MEP system name and gated by distance tolerances.

Prefabrication Auto-Slicer

Segments selected pipes or ducts into stock-length pieces and places couplings at each joint, aligning the model with prefabrication reality.

Spatial Routing Engine

Pick a start and a target element: a deterministic orthogonal trunk (default) or an A* search around walls, floors and services plans the run, then draws the pipes or ducts with fittings at every corner — accelerated by the compiled core, which also reads the linked coordination models so their steel and slabs are obstacles too.

Dashboard & Health Scan

Opens on a read-only element census — KPI tiles plus an element-mix bar — and a one-click scan runs five compliance rules through one shared cache feeding the donut, the review grids and the nav badges.

System Connectivity

Read-only connector-graph walk of the whole model: open End connectors, disconnected islands, orphan fittings and off-network elements — per-system bars, a donut, and every hit as a clickable review row.

Modify & Align

Element-level edits as named transactions — cap or connect open ends, join two, disconnect, split a joint, make parallel, rotate — each also a single pulldown button so it can take a keyboard shortcut.

Supports new

Place a support family along the held runs at a maximum spacing and an end inset, from the centreline or the underside, the type picked for each run’s nominal size, a clamp centred by its measured ring — one undo step.

Insulate new

One insulation jacket around two or more parallel runs, round or box, by thickness or by a fixed outer size, the runs cut out, the volume checked. Preview plans every jacket without building one.

Typicals new

Read a library — open here, a folder copy, the cache, Autodesk Docs or a pack — and place a typical at a point or onto an open end, connected and mirrored on request; Preview copies and rolls back.

Number new

Write a sequence into a text parameter: prefix, level, room or space, counter; restart per zone or per level; Preview names any duplicate the plan would give. Every value is read back after it is written.


Structural Framing Fix SFX Structural.panel

Disallows structural framing joins while preserving the as-joined physical length — regrowth is compensated into Start/End Extension parameters, so faces stay put and the location line is never touched. Scan (dry count) then Apply, with a click-to-zoom review grid, XLSX report and a Re-Allow reversal.
DoesStructural Framing Fix — disallows framing joins while preserving the as-joined physical length; regrowth is compensated into Start/End Extension so faces stay put.
Touches the modelscan → apply → reverse
Works withMEP Workbench
Structural Framing Fix SFX Full size
StructuralFramingUtilsExtension compensationXLSX report
  • Length-Preserving Disallow: Disallowing a join normally regrows the beam past its neighbour; SFX measures the regrowth and cancels it in the Start/End Extension parameters, so the physical faces never move and schedules keep the real lengths. Fabrication-true geometry, no manual retrimming.
  • Deterministic Node Resolution: Ex-miter residual nodes get a deterministic primary/butt re-resolution, optional cope stripping, and a one-way location realign that snaps the line onto the physical length with extensions zeroed — faces unmoved. The same input always yields the same joint scheme.
  • Scan → Review → Apply → Reverse: Dry-count scan first, a KPI band and a review grid with status pills and reason groups (drift, residual, skip) — pivotable by status, family or joint — XLSX export for the record, and a Re-Allow pass that reverses the whole operation under the extension-zeroing contract. Fully auditable; reversible except the one-way realign and the permanent cope strip.
How you use it — scope, Scan, review the pills, Apply4 pages
Pick Scope

Selection, active view or whole model — linear framing only, filtered through quick collectors.

Scan (dry count)

Counts joined ends, residual nodes, copes and drift candidates with no writes — no auto-scan on open.

Apply Fix

Disallow + compensate per element; one grid row per element, worst status wins, click any ID to zoom and load its end deltas into the End-Condition Inspector canvas.

Re-Allow

Reverses the operation — extensions zeroed, joins restored — with the same review-first workflow.


Chapter 2

Coordinate

Coordination is a loop: find the interferences, place them as markers everyone can see, open the holes the services need, re-run and see what changed. The Interference Check hands its results to the Clash Importer in one click, the Importer and the Opening Tool share one placement engine, and Section Box frames the spot you are looking at.

Interference Checkhost, links and coordination models
Clash Importerevery report format to placed markers
MEP Opening Toolfind, place, audit, re-run
Section Boxframe it in five one-click commands

Interference Check ICX Report.Panel new

Finds interferences between two sets of categories the way Revit's own Interference Check does — and then against the two parties Revit cannot see: linked Revit models and linked Navisworks coordination models. The Revit API returns empty geometry for an NWD or NWC, so Revit's own dialog reports a federated job as perfectly clean while the duct runs straight through the contractor's steel. Read-only: the whole run is a read, and no transaction is ever opened.
DoesFind interferences between two sets of categories — and, unlike Revit's own Interference Check, against linked Revit models and linked Navisworks coordination models as well. Read-only: it opens no transaction.
Touches the modelread-only — no transaction is ever opened
Interference Check ICX Full size
Navisworks API Host · links · NWD / NWC / NWFHard clash · clearanceSpatial indexRun-to-run deltaRead-only
  • Sees What Revit Cannot: Against this model the check is Revit's own ElementIntersectsElementFilter; against a Revit link, each element's solids go through the inverse link transform into the link — still Revit's own intersection, narrowed by a box taken from the tested solids and confirmed by intersect volume, after the filter alone had reported exact rows with no common volume. Against a coordination model the geometry is read through the Navisworks API out of process (the Navisworks API is .NET Framework 4.8 and cannot load inside Revit), bounded to the envelope of everything in scope plus the clearance, and cached per envelope — the first run of a file is slow, the next is not. A result the coordinator can reproduce in Revit's own dialog is worth more than a cleverer one they cannot.
  • Exact And Approximate, Said Out Loud: A hard clash against this model or a Revit link is proven with real solids. Against a coordination model it is your solid against the reader's box — and clearance is box-to-box on every source, because a true solid distance is a different computation and a box gap reported as a solid gap is a lie told in millimetres. Every row records which it was, and the export carries the column. A result set that mixes exact and approximate findings without saying so is worse than one that finds less.
  • An Empty Coordination Model Is Named, Never Clean: Three different absences give the same empty result — the document links no coordination model, the file is a Desktop Connector placeholder that was never downloaded, or Navisworks Manage / Simulate is not installed on this machine — so the tool names each one as a warning that opens the log. An NWC sits in whichever frame it was exported in, so each file's offset is measured from this model's own elements inside it; when the references disagree beyond tolerance nothing is shifted and the log says so. A clean run and a run that checked nothing never look the same.
  • New, Gone, Or Unchanged Since Last Time: From the second run with the same configuration — same scope, categories, mode, sources and coordination-file picks — every row carries a delta badge. Gone rows are kept at the bottom, dimmed because they have no live geometry, and click through to the A element if it still exists. Up to three previous run digests are kept per document and configuration, compact enough to be nothing more than ids, kind, source and centroid. The coordinator learns whether the backlog moved, not just how long it is.
How you use it — Scope → Run → Results → Hand off6 pages
Scope

Pick a preset or tick categories for Set A and Set B — each shows how many instances this model actually has, so a thin result is explained before it happens. Say where Set B lives: this model, linked Revit models, coordination models, or any combination.

Coordination Models

Every readable NWD / NWC / NWF is listed with its own checkbox; an unticked file is never opened. Models… narrows a published NWD to its discipline groups, or a multi-model file to the models inside it, with its own cache key.

Run Check

Hard clash or Clearance, a merge distance for the duplicate results one physical crossing produces (default 150 mm), and a live footer — NWD i/n · model j/m · items visited · hits · elapsed — with Stop always a click away.

Results

A KPI strip split by source and by how many are solid-exact; filter by This model / Revit links / Coordination / New / Gone; click a row to select and zoom; Export writes the filtered set to .xlsx with the exact-or-approximate column.

Place Markers (CIT)

Hand the rows to the Clash Importer as one batch — identity mapping, no coordinate step — and place a marker family at every clash point. Unavailable while the Gone filter is active, because those rows have no live element to mark.

Settings

Named presets, a result cap and a time budget, the size limit for uncached files and the frame-measurement switch. Last picks are remembered per user and per project; the git-tracked config holds only the shared defaults and presets, and no run ever writes it.

The results grid renders the first 600 rows and Export writes them all. A coordination-model row names the set of models that were read, not one item — the reader returns boxes without provenance, and attributing a box to an item would be invention; when a per-model filter is active the log states exactly which models were read.

Clash Importer CIT Report.Panel

Brings a clash report back into the model as placed markers. Reads Navisworks XML or HTML, CSV, Excel or BCF, maps every clash point into this model on a verified coordinate basis, collapses the duplicate results one physical crossing produces, and places one marker family instance per point through the same placement engine as the MEP Opening Tool. Every marker records the clash it came from, so re-importing the report reconciles against what is already there instead of placing a second set on top. It also takes the Interference Check's results directly — already in this model's own feet, so the mapping step is skipped and says so.
DoesImport a clash report — Navisworks XML or HTML, CSV, Excel, BCF — and place a marker family at every clash point on a verified coordinate basis. Each marker remembers its clash, so a re-import reconciles instead of duplicating.
Touches the modelrefuses an unverified mapping; one undoable placement
Clash Importer CIT Full size
Navisworks XML / HTMLCSV · Excel · BCF 2.x / 3.0Round-trip verified transformMarker ⇄ clash state
  • Measured, Not Calculated: The shared-coordinate mapping is derived from Revit itself — the internal origin and both horizontal axes are pushed through GetProjectPosition and the mapping is inverted from those three answers, so no assumption about the rotation's sign or order can be wrong. It is then proved: a probe point round-trips through the mapping and the tool refuses to place anything if it does not return where it started. A mapping that is slightly wrong puts markers inside the building in the wrong place, which reads exactly like success — refusing is the only honest answer.
  • Five Report Formats, Detected By Content: Navisworks XML and HTML, CSV / delimited text, Excel (the sheet chosen by content, so a cover sheet does not break it) and BCF 2.x / 3.0 — the format is read from the file's content, never its extension. Units are never guessed: a report that declares none refuses rather than assuming metres. The difference between metres and millimetres is a factor of a thousand.
  • Markers That Remember Their Clash: Each marker carries a short state token — in Comments by default, alongside whatever was already written there — naming the clash it came from and whether it is done. Stored on the element, it travels with the model and survives a workshared round trip. A re-import reconciles to New / Placed / Completed / Ignored / Not in report; for a BCF source the completed topics can be written back to a new archive. Import on Monday, fix sixty during the week, re-run on Friday and see only what is still outstanding.
  • From The Interference Check, In One Click new: Place markers (CIT) in the Interference Check writes its result set to a one-shot file and hands it over. A Clash Importer already open on the same document takes the file itself and reloads — one window, not a second beside it; one open on a different document refuses, because the points belong to the other model, and a fresh window opens instead. Rows arrive with no status and sit on a (none) chip that is ticked like the others, so nothing loaded is dropped on the way to the Place page. Interference on Monday, markers on Monday.
How you use it — Read → Filter → Place → Reconcile6 pages
Report & Coordinates

Browse to the report — the format is detected and named — set the units if it declares none, choose Shared / survey, Project internal or Manual offset, and the duplicate-collapse distance (default 150 mm). READ REPORT parses, establishes and verifies the mapping, and shows the base-point figures it used.

Clashes

A KPI strip — to place, mapped, collapsed, clash tests, with a size — filters by clash test and status, and one row per clash with its grid location, the two clashing items and the internal point it mapped to. Click a row to zoom there; Export writes the filtered set to .xlsx with both coordinate systems.

Place Markers

Pick the family and type — the page says up front whether it can be placed at all — optionally write a size, and place through the same icz.openings engine as the MEP Opening Tool: nearest-level placement, OneLevelBased families only, refused before any transaction opens. The suite ships its own marker family, loaded in one undoable click when the model lacks it, and the family you chose last is remembered per project. "Only clashes that have no marker yet" is on by default, so a re-imported report tops up rather than duplicates. Everything placed lands in a review grid grouped by clash test.

Status

The report joined to the markers already in the model. Tick rows and Mark completed, Reopen or Delete markers; export the whole reconciliation to .xlsx, or write completed topics back to a new BCF.

Settings

The Mark prefix (CLH-, kept apart from the Opening Tool's WOT-), the state parameter, the size-parameter name lists shared with the Opening Tool, and the report attribute keys sizes are read from — persisted to cit_config.json.

Activity Log

A run console carrying every warning, every skipped clash and every reason. It ships collapsed; routine progress never forces it open, but a warning, a refusal or a failed mapping does — the report's clash count and the tool's marker count are always reconcilable.


MEP Opening Tool WOT Report.Panel

Finds every place an MEP run pierces a wall, floor, roof or structural framing member — across host and linked files — reports it, places and marks the openings, then audits the openings already in the model — still occupied, free to close, or untestable. A re-run compares against the previous run's ledger and marks every penetration New, Unchanged, Moved, Resized or Gone. The suite runs on the IronPython 3 engine across Revit 2022–2026; WOT was the ipy3 pilot before the full rollout.
DoesMEP penetration and opening tool across host and linked files: find every crossing, place and mark the openings, audit the ones already there, and see what changed since the last run.
Touches the modelscan, place, audit — each undoable
MEP Opening Tool WOT Full size
Cross-link intersectionFamily placementReservation auditXLSX / XLS reportLive schedule
  • Cross-Link Clash Detection: Detects duct, flex duct, pipe, flex pipe, sprinkler, conduit and cable tray crossings — fittings and accessories optional — through walls (basic, stacked, curtain), floors, roofs and structural framing, including hosts in linked files. Catches openings the host model alone would miss.
  • Review Grid + Filters: Results land in a review grid with isolate/zoom, sizes in mm plus fractional inches, host fire rating, and filters for host type, workset, phase and scope (model / view / selection), exportable to XLSX or XLS. Triage every crossing before you act.
  • Auto-Placed Markers: Drops opening family instances at each crossing so openings can be coordinated and scheduled, writing each dimension only into a genuinely writable parameter and flagging names that don't resolve. A complete, schedulable opening set in one run — no silently-missed sizes.
  • Live Schedule & 3D Preview: A real Revit category schedule of the openings the tool placed — it updates itself when an opening moves, resizes or is deleted, which is the one thing a schedule offers over the spreadsheet export — and a preview toggle that draws the staged opening boxes in the active view before anything is placed. See the opening set in the model, then commit it.
How you use it — Configure → Run → Place → Audit6 pages
Configure & Run

Set host scope (walls — basic / stacked / curtain — plus floors, roofs and framing, incl. linked files), filters, buffer and the MEP element tree, then Run Analysis to detect every crossing.

Review Results

Triage the intersection grid — one row per host with an openings-count impact bar; click any row, linked-file hit or logged element ID to select and zoom.

Place Openings

Places your chosen opening family at every crossing, auto-rotated to the host with depth set to host thickness and sequential WOT-n marks, writing Width / Height / Diameter into the first writable parameter.

Reservation Audit

Pick what counts as a reservation, Run Audit, and read the verdict KPIs — reservations, occupied, free, ambiguous — with every opening as a click-to-zoom row and optional verdict colouring in the active view.

Parameter Settings

Set the fallback parameter names tried for Width / Height / Diameter — first writable match wins, and "Radius" is halved automatically.

Re-run & Delta new

Run again after the model moves on: status pills — NEW 3 / MOVED 1 / GONE 2 — filter every row family, the Status column joins the .xlsx export, and a ledger that could not be saved is flagged on the page rather than silently forgotten.


Section Box SB Tools.panel · pulldown

Subject-aware 3D section boxes from a ribbon pulldown — a full Create window plus five one-click commands (Quick Box, Quick Section Box, Grow, Shrink, Toggle), each an individual pushbutton you can bind to a keyboard shortcut. Rooms, MEP spaces and areas — including the architect's rooms picked inside a linked model — box from their own level definition, and Clamp Z to levels locks the top and bottom to two chosen levels with offsets for floor-by-floor coordination views.
DoesSubject-aware section boxes for 3D views: the Create window, or the one-click Quick Box, Quick Section Box, Grow, Shrink and Toggle — each an individual pushbutton you can bind to a keyboard shortcut.
Touches the modelwrites the view, never the model
Section Box SB Full size
View3D.SetSectionBoxBoundingBox mathQuick dialog
How you use it — one pulldown, six commands3 pages
Create Window

The main button opens a modeless window that fits a subject-aware box to the selection, interactive picks (host or linked model), or pasted element IDs — into the active or a named 3D view, sized by total cube or padding in millimetres, with an optional view template.

Quick Box · Quick Section Box

Quick Box wraps the current selection silently using the saved defaults — no window. Quick Section Box does the same through a small View / Size / Template dialog (see it live). Defaults — view name, pad, size, grow/shrink step — persist from the window's Settings page.

Grow · Shrink · Toggle

One-click siblings: grow or shrink the active view's box by a saved step, or toggle it off and on — Revit keeps the box while off, so toggling back restores the exact same extents. Each is its own pushbutton, bindable to a keyboard shortcut.


Chapter 3

Quantify, draw, issue

Once the model is right it has to leave the building. BOQ Lookup writes the designations a bill is built from. Pressure Loss checks a pipe or duct network from the pipework alone. The Piping Isometric draws a run as a shop isometric and the Schematic draws it as a flow diagram. Room Book counts and measures the MEP in every room. Sheet AutoDoc turns staged elements into sheets. Text Search finds text notes and corrects them in one transaction. Transmit issues everything in every format in one run that checks its own output.

BOQ Lookupparameters, schedule, bill
Pressure Losscritical path, every outlet
Piping Isometricshop iso from one pick
Schematicflow diagram of a run
Room BookMEP per room, counted and measured
Sheet AutoDocone profile, one sheet per element
Text Searchfind, zoom, replace notes
Transmitsix formats, one transmittal

BOQ Lookup RO1 Parameter.panel

Turns messy element sizes into accurate Bills of Quantities, automatically.
DoesBill-of-Quantities population for MEP and construction models: size → nominal width → BOQ designation and description, then a unit-aware bill and a native Revit schedule.
Touches the modelone undoable transaction
BOQ Lookup RO1 Full size
Size parsingLookup indexCatalogue v2 / v3
  • Automated BOQ Engine: Classifies elements through a three-stage pipeline — material, fitting type, size — against the project's BOQ catalogue and writes SPEC_DESIGNATION (atomic BOQ number) and SPEC_DESCRIPTION across 17 MEP categories. Eliminates hours of manual referencing and instantly produces accurate Bills of Quantities.
  • Smart Size Parsing: Reads messy inch strings and fractions (e.g. 1 1/2") and resolves them to metric Nominal Widths, with a fallback to Revit's native calculated size. Handles the real-world mess in supplier data.
  • Catalogue Versions, Not Code: The catalogue is a validated JSON edited in the window, with a .bak of the last good file. A Units table (v2) makes the bill unit-aware; a Rates table (v3) adds Rate, Total and a currency grand total; and each project remembers its own catalogue and BOM library. The standard lives in data the project owns, not in the tool.
  • Native Schedule, Rates & Write-Back new: Create / Update Schedule builds a multi-category BOQ – Bill ViewSchedule grouped by designation and filtered to classified elements — a second click updates it, appending fields the bill now carries and never removing yours. A catalogue that carries a Rates table adds Rate and Total columns and a cost grand total. On Reconcile, Apply Library Values writes the library's value back to ticked rows in one undoable transaction, and a write that Revit silently drops is reported as failed, never counted. The bill lands in Revit's own schedule, and the audit can fix what it finds.
How you use it — a 7-station stepper: Survey → Classify → Bill → Reconcile, plus Library, Data and Setup7 pages
Survey

Scan the model with no writes: will-classify / via-library / needs-mapping KPIs plus coverage per material system.

Classify

Per-element results grouped by reason, clickable IDs to select and zoom, per-row exclusion from the next run.

Run BOQ Lookup

Writes SPEC_DESIGNATION and SPEC_DESCRIPTION in one undoable transaction, binding the shared params if missing; authored values are preserved unless you opt into overwrite (optional DN100 duct fallback).

Bill

Unit-aware takeoff rolled up by BOQ code — m codes total length, St count pieces, m² total insulation area — with Revit-style Schedule Properties and XLSX export.

Reconcile

Audit of filled SPEC parameters against the project BOM library — divergences listed with clickable IDs; tick rows and Apply Library Values to correct them in one undoable transaction, with owned and type-bound parameters skipped and reported.

BOM Library & Catalogue Data

Browse the project's BOM library and search every catalogue mapping table by material, fitting name or BOQ number.

Setup

Swap the project catalogue or BOM library, edit mapping tables in-app with validation and crash-safe saves — remembered per project, no reload.


Pressure Loss PLR Report.Panel new

Pressure loss through a pipe, duct or vacuum network from the pipework alone, with no equipment set up. Pick the start, then give a pressure, a flow and a fluid. The result names the critical path and the pressure left at every outlet.
DoesPressure loss through a pipe or duct network from the pipework alone. No mechanical equipment has to be set up. Pick the start, give the pressure, the flow and the fluid, then Calculate. Read-only: it opens no transaction.
Touches the modelread-only, no transaction is opened
Pressure Loss PLR Full size
Darcy-Weisbach K method for fittingsCritical pathVacuum linesPDF / HTML / ExcelRead-only
  • Needs No Equipment: The standard Revit report needs mechanical equipment with flow and pressure values filled in. Without them it says Not Computed. This tool asks for four things: the start element, the pressure there, the flow and the fluid. The pipework alone is enough.
  • Reads The Network Itself: It reads the network through the connectors and splits the flow at every branch. Runs use Darcy-Weisbach. Fittings use a K coefficient from the family, from the Revit table, or from the tool’s own table.
  • Elbows And Height Are Counted: Elbows are charged by the bend radius they are drawn with. Height counts unless the user switches it off. The friction method is a choice of four: Colebrook-White, Haaland, Swamee-Jain or Altshul-Tsal.
  • Names The Critical Path: The result names the critical path, the turn along it and the pressure left at every outlet. Recommendations carry element ids.
Operations
Pick The Start

Pick in Revit, or use the current selection. Then tick the ports of the start that the flow leaves through.

Set Flow, Fluid And Pressure

Give the pressure at the start. Give the flow as a total, or as the same flow or velocity at every outlet. Fluids: From the model, Water, Air, Gas at the start pressure or Custom.

Calculate

The calculation walks every run, fitting and accessory downstream. A vacuum line is calculated by conductance instead of Darcy and K.

Export

A report exports as PDF, HTML or Excel, with a network sketch, a pressure profile and an isometric. A user guide opens from the question mark button.

The window — six pages on a left rail6 pages
Summary

Checks come first, then recommendations with element ids. The network is drawn as a tree with the critical path in the accent colour.

Outlets

Every end of the network, highest loss first, with bends and total turn. A click selects the outlet in Revit. A double-click opens its path.

Path

Every item on the way to one outlet, the turn at each, a running total and a pressure profile.

Sections

Stretches with one flow and one size, in the shape of Revit’s own report.

Fittings

Fittings and accessories grouped by kind, size and coefficient, with the source of each coefficient.

Coefficients

The coefficient table as a form, in six groups, from fittings by equivalent length to the gas-system name list. Buttons: Save, Revert and Built-in figures.

Since r169 · 12 Oct. Pressure Loss is read-only. It opens no transaction. A row click or Show in Revit changes the selection and the view only. Export writes files outside the model, and Save writes the shared coefficient file plr_config.json.

Piping Isometric ISO Report.Panel new

A shop isometric of one run, drawn from the model the way a fabricator draws it. Pick the start of the run and press Draw: the pipework is laid out not to scale with cut-length dimensions, elevation callouts, joint tags and spool numbers, a key plan, and the notes, line data, bill of material and joint list under it. It exports as PDF sheets or as Revit sheets with drafting views.
DoesA piping isometric of one run, drawn from the model the way a shop isometric is: pick where the run starts and, optionally, where it ends. Cut-length dimensions, elevation callouts, flow arrows, P&ID symbols, elbow angles, joint tags and spool numbers, a key plan, and the notes, line data, bill of material and joint list under it. Create the sheets in the project's own title block or print them to PDF through Revit.
Touches the modelone undoable transaction for the sheets; the PDF writes a file
Piping Isometric ISO Full size
Shop isometric Cut-length dimensionsJoints & spoolsAngle indicatorKey planFive stripsPDF / Revit sheets
  • True Lengths, Cut Lengths, Figures Where A Reader Expects Them: Pipes keep their true length along the model axes, risers are vertical, and every pipe carries its cut length as a dimension. A figure stands above its line as it is read, never across it, and every level leg carries an elevation callout.
  • Joints, Spools And Angles new: Every joint is tagged by its weld type — socket weld, field weld, flange, thread, groove — on the pipe side of the run, read from the pipe type. Spools are cut to a transport box, with field welds off the risers, and numbered. Elbow angles are written out, and an offset that is not square carries a hatched triangle.
  • Symbols After The Fabricator’s Legend: Fittings and valves are drawn as symbols after the P&ID legend and were corrected against a Plant 3D library: a flanged union is a flange pair, a weld dot sits only at a weld, a coupling is a stroke across the pipe with a joint at each end, and its three tags fan on one side without crossing leaders. Runs, joint tags and spool tags print in the colours the reference sheets use.
  • Laid Out In Your Title Block, With A Key Plan: The sheet is laid out inside the project’s own title block, keeping out of the areas its family already fills. A small 3D key plan shows where the sheet lies in the model, and five strips run under the drawing: general notes, line data, abbreviations, the bill of material of the sheet and the joint list. A set can start at any sheet number, and a large network is split into numbered sections.
Operations
Pick The Run

Pick the start element, and optionally the end element. Tick the ports of the start to follow once a start is picked.

Choose Sheet, Rotation And What To Draw

The sheet list shows the project’s title block types first, then A1 to A4. Four view rotations, the drawing switches, the spool box, the key plan view and the line data block.

Draw

Draw reads the model and shows the first sheet, the bill of material and the joint list. Clicking a symbol or a pipe shows it in Revit.

Create View Or Export PDF

Create View asks first, then adds the sheets and their drafting views in one undoable transaction. Export PDF prints the sheets through Revit.

The window — one page, no stepper1 page
Left rail

Start of the run, End of the run, Follow through, Sheet, the drawing switches, Spools, Key plan, Line data and Notes. Follow through appears once a start is picked.

Figures

Five tiles: Scale, Pipes, Length, Fittings / Accessories and Elements read.

Sheet preview

A drawing of the first sheet with its strips. Click a symbol or a pipe to show it in Revit.

Bill of material and joint list

Pipes by type and size, and parts by name, with the lettered boxes the sheet uses; every joint with its type, size, spool and location.

Footer

DRAW, CREATE VIEW and EXPORT PDF. Both open-after options are on by default.

Since r170 · 12 Oct; the shop isometric since r187 · 18 Oct. Drawing and the preview only read the model. Create View asks first, then adds drafting views, detail lines, text notes and sheets in one undoable transaction. Export PDF uses the sheets that were created, or makes a temporary set and rolls it back, so the model keeps nothing. The Schematic is its sister: the same picks and symbols, laid out as a flow diagram.

Schematic SCH Report.Panel new

A single-line flow schematic of one run, drawn from the model the way a flow diagram reads, as a drafting view on a sheet in the project’s own title block, a PDF printed through Revit, or a plain PDF page. The sister of the Piping Isometric: the same start and end picks, the same walk through the connectors, the same symbol legend, but a diagram rather than a projection.
DoesA single-line flow schematic of one run, drawn from the model the way a flow diagram reads: the pipework laid out left to right, every pipe one step long, valves and accessories as P&ID symbols on the line, branches dropping to rows of their own, the machines at the ends as boxes with their tags and nozzles, a lettered bill of material and notes under it.
Touches the modelDraw reads only; Create View is one transaction that asks first
Schematic SCH Full size
Flow diagram P&ID symbolsBranches on rowsEquipment boxesBill of materialTitle block / PDF
  • Reads Left To Right: Every pipe is a horizontal line one step long whatever its length in the model, with a flow arrow pointing away from the start. Sizes stand over the line once per row and wherever the size changes. Elbows, couplings and flanges are not drawn, because they change nothing in a flow diagram; the notes say how many were left out and the bill still lists them.
  • Branches Never Cross: At a junction the run goes straight on along the connector opposite the one it came in by, a tee’s run rather than its branch, and every other way out drops to a row of its own below everything drawn before it. Branches off a branch nest the same way.
  • The Machines At The Ends: The equipment, fixture or terminal a run starts from or ends at is a box with its tag, what it is, and the nozzle the run enters it by. The heading names the system and both ends; the strip under the drawing carries the lettered bill of material and your notes or the tool’s own.
  • Fits One Sheet: The layout is in paper millimetres at a nominal step. A short run is spread out to use the content area, and a run too large is scaled down as a whole with the text and symbols keeping their size; the sheet says so when that goes below a third. Pick an end, or leave the branches off, when it does.
Operations
Pick The Run

Pick in Revit, or use the selection, where the run starts: a pump, the first pipe, any fitting. Optionally pick where it ends, and untick the ports the walk should not follow.

Draw

The sheet appears in the preview as it will print and the bill of material fills on the right. Click a piece in the preview or a row of the bill to show it in Revit.

Sheet And Switches

The project’s own title blocks first, then plain papers; a sheet number prefix and a title. Seven switches decide arrows, sizes, symbols, part letters, branches, equipment boxes and the strip.

Export PDF Or Create View

Export PDF prints through Revit in the title block on a temporary sheet that is rolled back, or writes a plain page. Create View asks, then makes the drafting view and its sheet in one transaction.

The window — one page, the isometric’s own shape1 page
Left rail

Start of the run, End of the run, Follow through, Sheet, the seven switches, Notes, and the open-after options.

Figures

Five tiles: Elements read, Pipes, Length, Fittings / Accessories and Rows.

Sheet preview

The diagram as it will print, with the heading and the strip. Click a symbol or a pipe to show it in Revit.

Bill of material

Pipes by type and size in metres, fittings and accessories counted, each machine with its tag, lettered as the drawing refers to them; FROM, TO and SERVICE under it.

Footer

DRAW, CREATE VIEW and EXPORT PDF.

Since 22 Oct. Draw only reads the model. Create View is the tool’s one write, one transaction that it asks about first; Ctrl+Z in Revit takes it back. A ring main is drawn as a tree, because the walk stops where it meets a piece it has drawn; levels and elevations belong to the Piping Isometric.

Room Book RBK Report.Panel new

Which MEP sits in which room, counted and measured. One row per room: how many ducts, pipes, flex runs, fittings, accessories, terminals, sprinklers, trays, conduits and supports it holds, and the metres of each kind of run. The rooms come from wherever they are, this model, its MEP spaces or the linked architecture, and the MEP from this model and its links. Read-only: it opens no transaction.
DoesWhich MEP sits in which room, counted and measured — a room book from the model, with the rooms taken from wherever they are: this model, its MEP spaces, or the linked architectural model. Every duct, pipe, tray and conduit is placed by points along its centreline, every fitting, accessory, terminal and support by its insertion point, and the result is one row per room with a column per count and the metres of each kind of run. Read-only: it opens no transaction.
Touches the modelread-only — no transaction is opened; selecting is a UI change
Room Book RBK Full size
Rooms from links Centreline samplingSupports by nameA plan per roomPDF · HTML · XLSXRead-only
  • Rooms From Wherever They Are: In an MEP model the architecture is usually a link, often several, each a copy or a part of the building, and the MEP may be split between this model and MEP links. Both are check lists: the rooms of this model, its spaces and the rooms of every loaded link on one side, this model and every link on the other. A room that appears in two sources is one room, and every source is asked at a point, because one model’s copy of a room stops at the ceiling while another’s reaches the slab.
  • Placed By Points Along The Centreline: A run is sampled every half metre and placed by the room that holds most of it, or counted in every room it crosses with the length of each part. A fitting, terminal or support is placed by its insertion point; a support is found by its name in the categories supports are modelled in. What no room volume claims is placed by a kept room’s outline and height band, so a double-height plant room keeps the services over its mezzanine.
  • A Plan Per Room, Painted By System: The PDF opens with the whole book as a table, then one page per room with its plan to scale, north up: walls and structure as their footprints, every run as a band as wide as it is, every fitting as its footprint, each in the ink of its system, the room’s length and width dimensioned on the plan. Or Revit’s own picture of the room, with the building greyed, every service painted in the report’s colours, and the legend read off the picture’s pixels.
  • Three Outputs, One Scan: PDF REPORT writes the book; HTML writes one interactive page where a room opens on its plan and take-off and a line lights its elements up; XLSX writes three sheets of numbers that sum and sort. One file, or one file per storey. Click a room in the window and Revit selects what it holds, linked elements included. Export the book and read it; the model stays as it was.
Operations
Pick The Sources

Switch on where the rooms are and whose MEP is counted, the levels, the system key the take-off groups by, the scope, how a crossing run is counted and the columns.

Scan

SCAN or F5 reads the model. The footer says how many elements landed in how many rooms and how many no room holds; the ELEMENTS tile explains what was read and how long each stage took.

Click A Room

A room row selects its elements in Revit and zooms to them. The chevron opens the room’s take-off, one line per system, family and type and size, and a line selects its elements.

Export

PDF REPORT, HTML or XLSX, for every room or only the rooms switched on, with Revit’s own plans on request and one file per level on request.

The window — one page, an options column and the room list1 page
Options column

Rooms from, Phase, MEP from, Levels, System, Scope, Runs, Sample every, Count, Supports, Sizes and the list switches. Every two-state option is a pill switch.

Figures

Four tiles: Rooms, Elements, In a room and Outside any room.

Room list

Number, name, level, the biggest columns as chips, the total and a select glyph; the chevron opens the take-off. The rows of what no room holds come last, by the room they sit near.

Footer

The model chip, the status line, the sources, PDF REPORT, HTML, XLSX and SCAN.

Since r194 · 22 Oct. The tool opens no transaction and changes nothing in the model; the copies of plan views it makes for Revit’s own pictures live inside one transaction group that is rolled back. When the link has no rooms the picker says so and names the way out, and a scan still counts everything under Outside any room, per level.

Sheet AutoDoc DOC Tools.panel

Data-driven sheet generation on a Universal Layout Engine (icz.doclayout). Stage any number of elements — current selection or multi-pick — and generate one detail sheet per element: plan, longitudinal + cross sections, a 3D isometric with section box, auto tags and an optional BOQ schedule, all docked to anchor points defined in sheet_profiles.json so BIM standards live in a profile, not in code. A read-only pre-flight dry-runs the batch first — each sheet number checked against the live project register and remapped on collision, blockers grouped in a clickable review grid — then one Transaction per element: a bad element rolls back alone, the batch continues.
DoesData-driven sheet generation on the Universal Layout Engine: one detail sheet per staged element — plan, sections, 3D, tags, an optional schedule — docked to anchors defined in a profile, not in code.
Touches the modelone transaction per element, or one for the set
Sheet AutoDoc DOC Full size
View3D / ViewSectionViewport / SheetIndependentTagDynamic view range

Auto Views

Generates plans, longitudinal + cross sections and an isometric 3D per element, with the view range solved on a strict top ≥ cut ≥ bottom hierarchy so nothing gets clipped by a fixed height.

Dimensions & Tags

Places dimensions and element tags automatically on the generated views, with None-guards so a missing family or level never aborts the batch.

Sheet Tools new

Five cards for sheets that already exist: align viewports, duplicate sheets, crop from the sheet shape, a read-only schedule overlap check (schedule vs schedule, schedule outside the title block, schedule over a viewport) and pack leftovers — every view and schedule placed on no sheet, planned as a dry run and then laid onto numbered index sheets. Rooms and MEP spaces stage from a level-grouped list, and interior elevations come as all four faces from one spec.

Sheet Placement

Drops the finished views onto sheets as viewports, guarding against models with no generic level or no titleblock so it degrades gracefully.

Naming Conventions

Tokenized sheet number/name patterns from the profile (DT-{seq}, DETAIL - {cat}) name every view and sheet it creates — coordinated, predictable output without manual renaming.

Layout logic is factored into the transaction-free icz.doclayout engine and runs on the shared master theme (icz.theme via ShellWindow) with version-safe element Ids (icz.revit_compat), so it looks and behaves like the rest of the suite across Revit 2022–2026. Group mode (all staged elements scale-tiled onto one grouped shop-drawing sheet) and full profile CRUD — duplicate, rename, delete, atomic save with an unsaved-edits guard — now ship, with drag-to-position layout editing on a live sheet-preview canvas.
How you use it — pick a profile, stage elements, Generate6 pages
Generate Sheets

Pick a layout profile, stage the elements, and Generate — the engine builds every sheet with its views docked per the profile.

Layout Profiles

Data-driven profiles (sheet_profiles.json) define which views each sheet carries plus their anchor, margin, scale and template — edited in-UI.

Element Staging

One sheet per element (doors, equipment) or all staged on one grouped shop drawing (pipe/duct systems) — from the current selection or a pick.

Templates & Auto-Tag

Apply plan / section / 3D view templates and auto-tag where the profile allows.

Auto-Dimensioning

Optional per-view dimensioning: per-run segments, named family references, one running string, or grid/level datums.

Sheet Tools

Align viewports across sheets to a main sheet, batch-duplicate sheets with granular copy options, crop a view to a drawn polygon — and pack every unplaced view onto auto-numbered index sheets from a dry-run packing plan.


Text Search TS Tools.panel new

Find text notes by what they say, in the whole model or one view. Zoom straight to each one. Type part of a damper code and press F3. Revit then steps through every text note that holds it, view by view.
DoesFind text notes by what they say, in the whole model, the active view or any one view, and zoom to them. Type part of a note, such as a damper code, and the list follows the keyboard. Replace asks first.
Touches the modelsearching reads only; Replace is one transaction that asks first
Text Search TS Full size
Text notes Five match modesGrouped by viewF3 next matchOne-transaction Replace
  • Reads Once, Then Follows The Keyboard: The first keystroke reads every text note in the model. After that the list follows the keyboard with no further Revit call. Results are grouped by the view that holds each note, with the matched part highlighted.
  • Takes You To The Note: A click or the F3 key opens the note’s own view. The view zooms until the note sits in the middle, with drawing around it, and the note is selected. The space around the text is 30 mm by default, from 2 to 500. Next match is F3, previous is Shift+F3.
  • Five Match Modes: Contains, whole word, exact text, wildcards (* and ?) and regular expressions. Match case is off by default. At most 500 result rows are drawn, while the counts, F3 and Replace still cover every match.
  • Replace Asks First: Replace counts the changes first, asks, and then writes them in one transaction that Ctrl+Z undoes. Notes owned by another user, or changed since the read, are skipped and reported, never partly written.
Operations
Search

Type in the search box. The scope is All views, the active view, one view from the list, or a typed part of a view name.

Match

Choose Contains, Whole word, Exact text, Wildcards or Regular expression, and tick Match case if it matters.

Step

Click a result, or press F3 and Shift+F3. The note’s view opens, zooms in and selects the note.

Replace

Replace shows a row for the new text. Empty text deletes the matches. REPLACE ALL counts first, asks, then writes in one transaction.

The window — one page, an options rail and a result list1 page
Options rail

Four sections: Scope, Match, Zoom and Keys.

Figures

Four tiles: Matches, Views, Text notes read and Current.

Result list

Matches grouped by the view that holds them, with the matched part highlighted.

Replace row

Replace with, and REPLACE ALL. Enter in the replace box replaces all, after asking.

Keys

Enter reads the model again and searches. F3 and Shift+F3 step. Down and Up in the search box do the same. Esc closes.

Since a round between r150 and r168. The exact round is not recorded. Searching and zooming only read the model. Replace is the one write. It runs as one transaction named IcZ Text Search replace, after a confirmation that shows the counts and sample pairs.

IcZ Transmit EXP Tools.panel

One transmittal, every format. Batch-export the sheets, models and schedules you pick into structured transmittal packages — DWG, PDF, Navisworks, IFC, images and Excel in a single run — with embedded logos, clean schedule tables in the CAD files, a consistent filename builder and a ready-to-send sheet index.
DoesOne transmittal, every format. DWG, PDF, Navisworks, IFC, images and Excel in a single run, with crisp embedded logos, clean schedule tables, consistent naming and a ready-to-send sheet index.
Touches the modelwrites files, never the model
IcZ Transmit EXP Full size
Navisworks / IFCPure-Python XLSXOLE schedule embedProfiles v2 JSON
  • Six Formats, One Run: DWG, PDF, NWC, IFC, images and Excel from a single themeable shell with an in-window results log and a performance summary at the end. No more juggling separate export dialogs.
  • Excel Without Excel: Schedules write to formatted .xlsx in a clean banded table style — via Excel when it's installed, or a built-in pure-Python OOXML writer (no COM, no install) that produces the same styling. Runs on any machine and protects values like Ø, 100×200 and DN.
  • Clean CAD Deliverables: Embeds crisp logos and lays out schedule tables as clean OLE frames — an EMF picture or an editable embedded XLSX — in the exported CAD files, so titleblock artwork survives the DWG round-trip intact. CAD issues look like the Revit sheets.
  • A Run That Checks Its Own Output new: At the end of every run the tool confirms each expected file exists, is non-zero and was written during this run; anything missing, empty or stale is named in the Export Log and the run's history record. A saved IFC setup from Revit's own exporter dialog can drive the IFC export, and when it cannot be applied the run finishes with warnings rather than a green headline. Output paths that would pass Windows' 259-character limit are computed before the DWG export and flagged with the two ways out. A transmittal that says it finished successfully actually did.
IcZ Transmit is the evolution of the earlier ExportDocTools / IssueOne button — fully renamed under the rebrand, bundle and logic module included, with one-time migration of machine-local settings and picker memory — — rebuilt around profiles v2, a dependency-free spreadsheet writer, ICZOLE schedule/legend OLE embeds, and NWC preflight that runs with no open transaction. It leans on the shared exportcfg, xlsxlite, perftracker, failures and lastused modules.
How you use it — one transmittal, every format7 pages
Destination

Step one of the four-step pipeline (Destination → Contents → Formats → Issue): choose where the files go and tick the formats you need — Transmit Now stays one click away on every step, and every ticked format exports in one run.

Contents — Drawings

Choose the sheets/views to export, filter Sheets vs Views, search, and set a per-row output filename. Sheet sets fill the picks on Revit 2026 as before, and a revision can be added to or removed from the ticked sheets in one transaction.

Contents — 3D & Schedules

Select 3D views for NWC/IFC and schedules for styled Excel export — live count badges per sub-view, no Excel install needed (built-in writer).

Formats

DWG, PDF (combined or separate, with an optional issue stamp composited onto the run's PDFs), NWC, IFC, images (PNG/JPEG/TIFF/BMP/TARGA), schedules (XLSX) and a Drawing Register / Sheet Index — each with its own options.

Issue History

Every master export is logged (project, profile, formats, sheets, errors, elapsed); write any record out as a formatted transmittal sheet.

PDF Preview

Render the first ticked drawing to PDF inline before you issue.

Machine & Profile

Named export profiles stored machine-side and restored automatically per project, plus per-format subfolders and machine-local settings — per-format options and the token filename builder live under Formats.


Chapter 4

Standards, families, scripts

The three that keep an office honest: the standards library inside Revit, a health check for the families that feed every model, and a console for the scripts the suite does not yet cover.

Guidelinethe standards, inside Revit
Family QCgrade a family or a whole folder
Script Readerlibrary, editor, console

IcZ Guideline GUIDE QualityCheck.panel

The project standards library, inside Revit: browse, preview, annotate and edit reference documents without leaving the model. One governed set of library folders plus pinned files, a resizable list with live search, and inline preview for every common format — keeping modelers on the current standard instead of stale local copies.
DoesThe project standards library inside Revit: browse, preview, annotate and edit reference documents — PDF, Excel, Word, Markdown, images — without leaving the model.
Touches the modeledits documents, never the model
Works withProject Setup
IcZ Guideline GUIDE Full size
pyRevitIronPythonWPF / XAML IcZ.PdfView · PDFiumPDF · Excel · Word · MarkdownInline annotateNotes sidecar
  • Standards At Your Fingertips: Governed library folders plus pinned files, grouped by collection with live search and file-type facet chips — and a library-wide full-text search (Enter in the search box) that sweeps every document in the background: PDFs per page, plus Word, Excel, Markdown and text. A hit opens the document with every match highlighted; scanned PDFs with no text layer are flagged as not text-searched instead of silently skipped. Superseded local copies stop circulating.
  • Native PDF Viewer/Editor: PDFs open in the suite's own IcZ.PdfView (PDFium rendering, zero external dependencies): continuous scroll, full-document search, text selection, highlight / text-box / freehand markup, page rotate-reorder-insert-delete-extract-merge, print, and save with annotations burned in. No Acrobat, no locked-down-machine failures.
  • Preview & Edit In Place: Inline preview for Excel, Word (.docx rendered natively — tables, list numbering, images and hyperlinks intact; legacy .doc text-only), Markdown, code/text and images; Markdown and text files edit in place with crash-safe writes, and every file carries a plain-text Notes sidecar for redlines that never touches the original. Annotate the standard without altering it.
How you use it — browse, preview, annotate5 pages
Browse Standards

Search the standards scanned from your configured folders by name — or press Enter for a full-text sweep of every document, opening hits straight to the highlighted match.

Multi-Format Preview

Inline preview for PDF, Word, Excel, Markdown, text and images — PDFs open in a native annotate / rotate / reorder viewer.

Edit & Save

For Markdown, text and code, switch to the Edit tab and save straight back to the file (a crash-safe .bak is kept).

Notes / Redlines

Attach a plain-text notes sidecar next to any document — the original PDF / Word / image is never modified.

Folders & Settings

Configure the scanned folders, the file extensions to index, and one-off pinned files.


Family QC FQC QualityCheck.panel

A modeless health check that scores a family against a firm profile — seventeen checks on the family open in the editor, or eight XML-extractable checks across a whole folder of .rfa files without opening one — and reports a per-check pass/warn/fail breakdown, an A–F grade and an overall health number.
DoesFamily-definition health check — seventeen checks on the family open in the editor, or eight across a whole folder of .rfa files without opening one. A health percentage, an A–F grade, and every finding.
Touches the modelread-only scan; rename writes on request
Works withGuideline
Family QC FQC Full size
Family editorProfile scoringHTML report
  • Family Health Score: Runs the shared famqa scoring engine over the open family and draws a Health Radar & Report Card — a six-axis radar (Name, References, File, Plan View, Parameters, Structure) with clickable axis filters, an A–F grade badge, and a searchable findings list pivotable by group or severity. One glance tells you if the family is delivery-ready.
  • Firm-Profile Driven: Checks come from a JSON profile (bundled default + a per-user %APPDATA% overlay) edited through a schema-generated settings form — no raw JSON editing. Retarget the standard by picking a profile, not touching code.
  • Shareable Report: Exports a themed HTML scorecard via the shared reporthtml module for review outside Revit. Circulate the result without a Revit seat.
  • Rename Overlay new: Collects every family whose name fails the profile's pattern, proposes new names from find / replace / prefix / suffix rules, and previews collisions — on disk, loaded in the model, or within the plan — before anything moves. Apply renames the .rfa and its type catalogue on disk (batch mode, with an undo map written first and a rollback on failure) and the loaded family in the model, one checked transaction each. Nothing is renamed until the preview has been shown for exactly this plan.
How you use it — open a family, Scan, review, export6 pages
Scan Family

With a family open in the family editor, Scan runs the health check through an ExternalEvent against its definition.

Health Scorecard

Get an overall health % with an A–F grade (banded Perfect / Healthy / Needs attention / Failing), Pass / Warn / Fail counts, a weakest-dimension callout, and a top-offenders panel that jumps straight to each finding.

Export Report

Save a themed HTML scorecard through a file dialog (last directory remembered) — it auto-opens for review, ready to circulate outside Revit.

Profile Settings

Pick the firm profile and edit its checks in a schema-generated form (no raw JSON); saves to %APPDATA%, never the bundled default.

Scan Folder new

Pick a profile, click Scan folder, tick Recursive if the library nests; the footer counts through the files and Cancel keeps what has been collected. One collapsible card per family in the findings.

XLSX new

One row per family × check — name, profile, grade, score, group, severity and details on every row, plus Category and Type Count in batch mode — built to filter and pivot across a whole library.

Standard parameters as shared new

The fix for the Standard Parameters check: binds the profile’s parameters as shared parameters on the open family or across a folder of families, converting an ordinary family parameter in place with its values and formulas kept, with a backup first and a version guard.


Script Reader SR IcZ.panel

Script library browser, editor and interactive IronPython console in one modeless window. Runs .py scripts from configurable library folders inside a valid Revit API context — every execution and completion external-event dispatched, with the engine mined from RevitPythonShell (MIT).
DoesScript library browser, editor and interactive IronPython console. Runs .py scripts from configurable library folders inside a valid Revit API context, modeless and external-event dispatched.
Touches the modelruns your scripts inside the API context
Script Reader SR Full size
RevitPythonShell engine (MIT)Persistent scopeCode completion
  • Library, Not Loose Files: Scripts index from configurable shared folders with live search — the team's utility scripts one click from the ribbon, edited with Python syntax highlighting and saved in place. No more hunting network drives for the right macro.
  • A Real Console In Revit: One persistent session scope with command history and code completion (Ctrl+Space or a typed dot); script runs share it by default so variables stay inspectable after a run, or opt into a fresh scope per run. doc/uidoc are re-injected at every execution — never stale. Debug against the live model interactively.
  • ExternalEvent-Safe Execution: All script and REPL execution dispatches through icz.modeless.ExternalCall — never from a raw UI event — matching the suite's modeless contract. Console convenience without threading crashes.
How you use it — pick a script, Run, inspect in the console4 pages
Browse & Edit

Filter the indexed library folders, open scripts as editor tabs — per-tab dirty state, a + for a fresh buffer, Ctrl+O for any .py on disk — and save with an unsaved-edit guard.

Run (F5)

Execute in the shared session scope with doc/uidoc/selection() pre-loaded; output streams to the console.

Interactive REPL

Type Python directly — Ctrl+Space or a dot pops completions, ↑/↓ walks history, and results print inline, all inside a valid API context.

Settings

Library folders, fresh-scope flag, init script, extra search paths and font size — persisted to scriptreader_config.json.


Where next companion site new

A free course for people who have never opened Dynamo and have zero coding experience — a path from zero to expert in Revit automation using Dynamo, scripting and an AI assistant as the pair-programmer, then the coordination half: a dozen models from a dozen offices, federated, clashed and triaged. The suite on this page is the “real in-house extension” its automation deck describes; the guide is where the ideas behind it are taught. Five interactive pages sit beside the decks. They are the chain library with 107 live chains, the prompt library, the exercises, Revit fundamentals and the clash report anatomy.
reveal.js decks5 interactive pagesRevit 2027Dynamo 4pyRevit · RPSNavisworks Nothing to installArrow keys · S for speaker notesGenerated from scripts

Open the guide — bim-with-ai

Revit — Zero to Expert

The prerequisite in seven parts: datums, shell, components, rooms, drawings — with six exercises the software marks for you and real Revit 2027 screenshots taken while each one was carried out.

Practical AI Automation in BIM

Why: scripts vs graphs, what AI changes, the honest limits, a real in-house extension, and the four-week plan.

Dynamo — the field guide, the thesaurus, the course

One node per slide with its Code Block twin; 107 node chains drawn complete and indexed like a book; every shipping node — 1,836 of them — as an index volume; then the six-part course from first graph to leaving Dynamo for C#.

Beyond Dynamo — pyRevit & RPS

A graph you run vs a button the whole team gets, kept as a separate deck on purpose, plus the DesignScript reference as Code Block → Watch pairs.

Revit & Navisworks Coordination

Federating models, the Clash Detective, and automating the clash loop from a text file — five parts, the first two with no code at all. The clash-report XML tag by tag, five recipes and five exercises on a report that ships with it.

Do it

Seven exercises on a real MEP hook-up model with expected answers and an “if it does not look like that” block for each. A library of 29 prompts to paste into any AI: 21 for Dynamo and Python, 8 for coordination.

Every page is generated from the same scripts that build the PowerPoint decks, so a slide cannot drift from its web page. The site is handed out by link rather than found by search — this page is one of the places the link lives.


Shared Library icz/

Battle-tested utilities for pyRevit & Revit API add-ins. Write it once, reuse it everywhere — 122 modules, zero external dependencies.
Revit APIIronPython 3WPF / XAML Dependency-FreeRevit 2022–26 SafeSingle source of truth

Every pyRevit tool in the suite once re-solved the same problems: the Revit 2024 ElementId breaking change, modeless-window threading, theme duplication, worksharing guards, MEP connector hashing, and batch-export plumbing. The icz package pulls all of it into one dependency-free library, so each tool imports instead of reimplementing.

Core

revit_compat

The ElementId 32-bit ⇄ 64-bit shim for Revit 2024+. The one change every other module is built to survive.

All tools
Core

units

Feet ⇄ millimetre conversion factor and the shared MEP tolerance constant — the bare essentials, deliberately kept small.

AAFITCDRO1WOTCITICXTSSBSFX
Core

pycompat

The IronPython 2.7 ⇄ 3 seam — import to_text, text_type, iteritems and friends here instead of touching removed builtins (unicode, xrange, basestring). The prerequisite that unblocked the ipy3 flip.

suite-wide
Core

licensing

Thin IronPython caller over the compiled core's LicenseGate — machine fingerprint, signed entitlement activation and per-feature checks, so protected engines stay gated inside the DLL and the UI degrades gracefully.

compiled core
Core

host

The host-application seam — one place the suite reaches the active document, transactions and bundle files, delegating to pyRevit when present and falling back to the native handle when not. The single step toward dropping the pyRevit dependency later. Also the canonical IcZ.Core.dll path resolver.

suite-wide
Core

availability

Launch-time document guards — a tool clicked with no project open aborts with a clear notice instead of a NoneType crash. Wired into every document-dependent tool (Family QC is intentionally exempt — it runs open-first in the family editor).

AAFITPSUCDUNGEXPDOCRO1WOTCITICXPLRISOSCHRBKTSSB
UI / Shell

theme

A single Light/Dark palette pushed into WPF {DynamicResource} keys — one source of truth for every tool's colors.

all UI tools
UI / Shell

shell

The ShellWindow base: traffic-light dots, collapsible nav-rail, title-bar drag and a deferred theme apply that dodges a WindowChrome re-entrancy crash.

every workbench
UI / Shell

modeless

Wraps IExternalEventHandler into a reusable ExternalCall so WPF clicks mutate the model inside a valid API context — never off-thread.

every workbench
UI / Shell

pdfview

Shared loader for IcZ.PdfView.dll — the suite's native WPF PDF viewer/editor (PDFium render, PdfSharpCore edit): scroll, search, ink/text/highlight markup, page rotate-reorder-insert-delete-extract-merge, and annotation burn-in.

EXP
UI / Shell

dialogs

One hybrid-safe file/folder picker wrapping the .NET dialogs directly, so pickers work under IronPython 2.7 / 3 and CPython-in-Revit with no pyRevit forms dependency.

AAFITPSUEXPRO1GUIDEWOTCITICXPLRISOSCHRBKFQCSRSFX
UI / Shell

review_grid

Builds the shared review rows (check · ID · Family & Type · badge) with click-to-isolate hooks, so every pre-scan review looks and behaves the same.

AAFITPSUCDDOCRO1WOTCITICXSFX
UI / Shell

validation

Reusable WPF ValidationRule subclasses for settings pages — inline red-outline feedback on empty or non-numeric input, wired straight from XAML.

FITEXPWOT
UI / Shell

tristate

A hierarchical tri-state selection tree (bool? parent semantics): a parent node toggles all its leaves and reads back as indeterminate when only some are checked — "everything except one" in a couple of clicks. First consumer: WOT's MEP element scope.

WOT
MEP

mep

The suite's MEP connector engine: unused-connector detection, string-domain matching, an O(n) spatial-grid pair finder, and safe auto-connecting.

AAFITCD
MEP

geom

True-geometry (solid-level) intersection primitives — catches the cases axis-aligned bbox tests miss: rotated elbows, L-shaped fittings and insulation shells whose boxes overlap while the solids never touch.

FITCDWOTICX
MEP

route

Generative A* routing behind one call — IcZ.Core.dll's fast voxel pathfinder when the binary is present, an identical-semantics pure-IronPython fallback (lower node cap) when it isn't. One netstandard2.0 binary serves Revit 2022–2026.

FIT
MEP

tags

Generic tag-audit engine — one pass parameterized by (element category, tag category) finds untagged (missing) and over-tagged (duplicate) elements per view, replacing seven single-purpose buttons.

sharedAA
MEP

naming

Safe family / type name resolution — the first non-empty type label across a list, handling the FamilyInstance ambiguities that trip up naïve lookups.

AAFITPSUCDUNGEXPISORBKTSSFX
Data

params

Parameter read/write primitives with one shared fill-empty / overwrite policy and one instance-then-type lookup chain across the whole suite. Its describe() returns per-parameter metadata (storage type, read-only, modifiable) so a UI can validate at edit-time — first used by WOT to write opening dimensions only into a genuinely writable parameter.

AAFITPSURO1WOT
Data

configstore

One hardened JSON config store the whole suite delegates to — load, deep-merge and atomic write behind export profiles, guideline folders, AA mapping tables and the param registry. No more per-tool copies of the same dance.

suite-wide
Data

paramreg

Managed-parameter registry — reads param_registry.json so AA's SPEC/CMMN handling comes off hardcoded name literals; retarget a firm by swapping the JSON, no code change.

AAPSURO1
Data

scorecard

A generic scored test-table framework — named tests each returning a 0..1 score + comment, aggregated per group and overall with score→label banding. Scores anything, not just families.

library-internal
Data

mcheck

Turns the firm's Autodesk Model Checker ruleset (the ~709-rule LOI parameters check) into a report-only score AA runs against the open model — no external Model Checker install, no separate run.

AA
Data

famqa

Profile-driven family health-check engine — a firm-agnostic test/scoring core reading famqa_profiles, generalized from a single-vendor content standard into a reusable QA pass. Surfaced by the Family QC tool.

library-internal
Data

colorize

Colour a view's elements by a parameter's value — bucket by value, assign each bucket a distinct colour (deterministic HSV or ordered gradient), paint via reversible view overrides, and reset. The spatial QA mode the report-side piecharts can't give: colour by SPEC_SYSTEM to see system coverage. Surfaced by AA's Colorize by Value audit page.

AAPSUWOT
Data

serdes

JSON-safe deep-clone and the single atomic .tmp→.bak→rename writer. Now adopted suite-wide (diff-harnessed): with configstore it is the one canonical JSON persistence path — every tool's config load/save routes through the pair, and configstore.read_json covers the bundled-seed read side (best-effort or fail-loud).

suite-wide
Worksharing

worksets

Read an element's workset, test whether its partition is writable, move it to a target, and find-or-create a workset by name — the pieces AA Phase 8 and PSU both need.

AAFITPSUWOT
Worksharing

ownership

Worksharing checkout / editability guards, so every write tool skips elements owned by other users and reports the owner identically.

AAFITPSUCDUNGRO1WOTTSFQC
Export / IO

exportcfg

The shared profiles.json handler (schema v2) for the export tools — reusable export profiles read and written through one contract.

EXP
Export / IO

doclayout

The AutoDoc Universal Layout Engine — a JSON profile says which views a sheet carries and where they dock (anchor + margin); this does the matrix math, view creation, place-and-shift viewport docking, schedule placement and tagging. Transaction-free.

AAEXPDOCWOTISO
Export / IO

xlsxlite

A minimal pure-Python .xlsx writer — real OOXML (zip + XML), no COM and no third-party packages — the Excel-free fallback for schedule and register exports — and, since the cyan preset became the default, the one writer behind every tool's .xlsx.

AAPSUEXPRO1GUIDEWOTCITICXPLRRBKSFX
Export / IO

perftracker

A lightweight per-format performance tracker that gives users an actionable count / elapsed / warn / error summary at the end of a batch run.

EXP
Export / IO

failures

Shared warning/failure suppression via IFailuresPreprocessor, so batch operations dismiss Revit's mid-run popups instead of stalling on them — and, where an operation would only succeed by deleting elements, refuse instead.

AAFITPSUUNGEXPDOCRO1WOTCITISOTSFQC
Export / IO

lastused

Persistent per-purpose folder/file memory with slots (profile, template, output…), so each picker seeds from the right place instead of the last path used anywhere.

EXP
Data

doccopy

Copies elements from one document into another without a dialog. Revit asks what to do about a type name the copy brings along; the handler here keeps the destination’s own definition for every name it already has, so the copy completes and the project’s definitions win.

PSU
Data

libplace

Places one typical from a library board into the project: its middle on the picked point turned by the angle, or one of its open ends onto a picked pipe end and connected, its height kept above the chosen level, mirrored on request — one undo step.

FIT
Data

libsource

Where a library comes from when it is not open: a folder copy opened detached so the central is never bound, the local Revit cache, Autodesk Docs by cloud id, or a pack of its own — opened in the background, never activated, saved or synchronised.

FIT
Data

namerules

Rules that pick a row by words in a name. A word stands in a name as whole parts of it, and the first rule whose word stands wins — the one matcher behind Pressure Loss’s fluids and the MEP Workbench’s system map.

FITPLR
Data

famqa_params

Puts a profile’s standard parameters into families as shared parameters, in the open family or across a folder: a missing name is added from the shared parameter file, an ordinary family parameter of that name is converted in place with its values kept, and a name the file does not define is reported, never invented.

FQC
MEP

isofab

What turns a piping isometric into a fabrication sheet: joints and their weld types, spools cut to a transport box, the line data block, the abbreviations a sheet uses and its general notes. Plain data in and out, no Revit and no drawing.

ISOSCH
Export / IO

loiexport

The LOI Scorecard report in every format the page saves: an HTML report, a workbook, a one-page SVG summary and a WPF FlowDocument — all four written from one payload, so they agree with each other and with the page.

AA
Export / IO

sheetannot

The annotate-and-gate helpers of Sheet AutoDoc: each takes a live document and a sheet and returns what it did, skipped and could not do, with ids and short strings only. Transaction-free; the caller owns the transaction.

DOC
Export / IO

sheetkit

Sheet composition helpers collected from shop-drawing work: tagging, viewport title placement, grid and level dimensions, crop manipulation, section and isometric geometry, spot elevations, notes legends. Transaction-free and pyRevit-free, consumed by the library’s own sheet modules.

library-internal
Export / IO

drafting

The drafting-standard gate: measures a view or a sheet on the paper in millimetres — annotation on annotation, leaders crossing or through text or at an odd angle, text sizes off the project list, titles on their view, viewports overlapping or outside the title block. Imports nothing from Revit, so the same code runs inside Revit through the bridge’s lint tool and under CPython in its harness.

Revit bridge
UI / Shell

revit_utils

Selection / isolation UI helpers and dynamic shared-parameter binding routines — the small conveniences several tools reach for.

AAFITCDRO1PLRISOSCHRBK
MEP

openings

Point placement of opening / sleeve / marker families: nearest-level creation with the level-relative-Z correction, the batched offset take-up and its post-regeneration verification, the OneLevelBased refusal and the dimension-write gate. Promoted from the Opening Tool when the Clash Importer became its second consumer.

FITWOTCIT
Data

clashreport

One door onto every clash-report format — detects by content and normalises the result so nothing above it branches per format. Behind it sit five dependency-free readers (clashxml, clashhtml, clashtable, bcf) over the namespace-tolerant xmlwalk helpers; none of them touch the Revit API, so all are harness-tested offline against synthetic fixtures and real exports.

CIT
Data

clashstate

The clash ⇄ marker link: encodes a short state token into a text parameter on the marker, scans the model for stamped markers, and reconciles a re-imported report into New / Placed / Completed / Ignored / Not in report. The pure half is harness-tested.

CIT
Data

famlib

The family-library authority: joins the firm's on-disk family library with its content-catalogue export — complementary sources, neither complete alone — so a tool asks the library what a family is called instead of inferring it from a name suffix.

FIT
Data

famedit

Edits inside a family document — re-typing nested components one document further in than the project — and reads the TransactionStatus every commit returns, so a refused write reports as refused instead of as success.

FITCIT
Data

depends

Deletion-dependency safety: a read-only dependent preview without a transaction, a rolled-back dry delete for the exact cascade set, type consolidation, and a verified re-type that reads the type back before counting a change. Promoted on its third consumer.

FITCD
MEP

mepdoctor

System-layer doctor working on MEPSystem objects rather than elements: empty systems, duplicate system names and Undefined system types — scan and apply, in a fixed order. The three Systems stations of Model Cleanup.

CD
MEP

flex

Revit-bound shim over the compiled flex toolkit: flex point read/write, collection, diameter, audit, simplify, split, create, plus offset / lane-packing / sweep / spine geometry. Geometry calls fail loudly without the core; the plain Revit-bound helpers still work.

FIT
MEP

framing_join

Disallow structural framing joins while preserving the as-joined physical length through the start/end extension parameters; node grouping, butt-scheme resolution, opt-in location realignment and rejoin. Node clustering runs in the compiled core.

SFX
MEP

viewbox

Subject-aware section-box and 3D-view primitives: subject bounding boxes, box apply / remove / restore / toggle, grow, isolate, zoom, and the section-box config store — the one engine behind all six Section Box commands.

TSSB
MEP

wallmath

The wall-opening intersection pre-filter math — rotation, spatial-hash cells, AABB overlap, transformed AABB — as a drop-in over IcZ.Core. Fails loudly when the assembly is absent; there is no Python fallback.

WOT
UI / Shell

preview3d

Draws staged opening boxes into the active view before anything is placed — the in-model half of the Opening Tool's preview, toggled from the Configure page.

WOT
UI / Shell

dashboard

The suite's one data-viz vocabulary: KPI stat tiles, status donut, legend, labelled stat bars and separators — so a KPI strip in one tool reads exactly like the next tool's.

AAFITPSURO1CITSFX
UI / Shell

confirm

Themed modal ask_yes_no / ask_choice / notice — the sanctioned replacements for an untheme dialog, so the one genuine Yes/No a tool needs matches the window it came from.

suite-wide
UI / Shell

reader

Loader for the native IcZ.Reader assembly — the multi-format routing host and the PDF pane, plus stamping, signing, certificate listing, OCR, image cleanup and text extraction. pdfview is now a back-compat shim over it.

EXPGUIDE
Core

scripting

The IronPython script-execution engine behind Script Reader: scope construction, completions, syntax check, run, auto-indent, and script file listing / read / write.

SR
Core

diaglog

The suite logger: one shared, size-rotated log under %APPDATA%, flushed on every write, with levelled output, tables, key/value blocks, timers, and runtime probes for x:Name and resource-key contracts. Armed automatically for every ShellWindow, so all twenty-one tools reach it through the shell. FIT also calls it directly.

suite-wide
Export / IO

xlsxread

The read side of the spreadsheet pair — a dependency-free .xlsx / .xlsm reader (zip + regex) used by the reader pane, the guideline preview and the Excel clash-report reader.

PSUGUIDE
MEP

nwd

The coordination-model obstacle source: resolves which NWD / NWC / NWF files a document links, enumerates the models inside one, and runs the headless Navisworks reader out of process to return leaf bounding boxes — cached per envelope. The Revit API returns nothing for these files; this is how the suite sees them.

FITICX
Data

clashgrid

A pure-data uniform spatial index over axis-aligned obstacle boxes: register once, then each query touches only the cells the probe covers. Turns hundreds of millions of box tests into a handful of cell visits before any solid is intersected.

CITICX
Data

clashhandoff

The Interference Check → Clash Importer seam: serialises result rows to a one-shot file in the user state directory and reads them back as importer rows already in the document's internal feet. Revit-free and harness-tested.

CITICX
Data

icx_delta

Run-to-run delta for the Interference Check: classifies each result as NEW, UNCHANGED or not comparable, keyed by a run signature so only like-for-like runs are compared, over a bounded history of compact digests.

ICX
Data

wot_delta

Penetration-delta classification for the MEP Opening Tool: compares the current run against the stored ledger and returns NEW, UNCHANGED, MOVED (with distance), RESIZED (old → new) or GONE, on a key quantised to a half-foot grid so it survives a save and a link re-export.

WOT
MEP

riser

The flex-duct riser design engine behind the Riser operation: from one flex that crosses the slab, computes the complete rigid riser — 45° jog legs, elbow take-offs, rigid stop height above slab top — as plain geometry the page then draws.

FIT
Core

scan

The one declarative element scan the suite shares: builds and runs a FilteredElementCollector from a spec — categories, class, family name, bounding box — and answers a bounding-box-scoped nearest-curve query. The same spec the agent bridge's element filter answers.

FIT
Core

selection

FilterProfile — a named, JSON-serialisable scope + category + parameter filter, so every “gather the elements matching X” loop shares one shape and one serialisation.

AA
Data

presets

A named-preset store inside a tool's existing config file: built-in and user presets under one sub-key, so a page can save the current picks under a name without inventing its own file.

ICX
Data

toolstate

A tool's LAST-USED picks, per user and per project, kept out of the git-tracked bundle config: one state file per tool under the user state directory, bounded to the most recent projects.

FITPSUCITICXPLRISOSCH
Export / IO

report_export

The shared findings-row workbook writer: rows and headers in, a dated .xlsx beside the document out, with one output-path resolver — so every tool's Export button writes the same shape of workbook.

FITPSUCDDOCRO1FQC
Export / IO

sheet_overlap

Sheet schedule overlap pre-flight — exactly three checks: schedule vs schedule, schedule outside the title-block boundary, schedule over a viewport — in paper-space feet with a small inward margin so adjacent schedules do not trigger it.

DOC
MEP

tag_leader

Tag leader geometry for Sheet AutoDoc: computes the tag head position from view-space bounds and an offset, and the orthogonal elbow so a leader drops vertically then crosses horizontally — conventional MEP drafting. Reached through the layout engine rather than imported by the tool.

library-internal
Data

vg_transfer

Visibility/Graphics capture and apply between views or projects: serialises a view's category overrides, filter list and per-filter overrides to portable JSON and applies that state to any set of views or templates.

PSU
MEP

spacesync

Cross-document Space ⇄ Room pairing and parameter transfer between the MEP model and the linked architectural model — the engine behind Project Setup's Space ⇄ Room QA station.

PSU
Core

design_options

Design-option and phase awareness helpers, API-confirmed identical from Revit 2022 to 2027: which option set and option an element belongs to, and whether that option is primary — so a cleanup never deletes the primary's twin.

CDRBK
Data

famqa_atom

Batch family health-check from the Part Atom XML export — eight of the seventeen checks, run against a whole folder of .rfa files without opening any of them.

FQC
Data

famqa_rename

Family rename planner and executor: derives proposed names from find / replace / prefix / suffix rules, checks collisions on disk, in the model and within the plan, and applies the disk and model halves with an undo map written first.

FQC
UI / Shell

radar

Canvas-based multi-axis radar visual, theme-brush driven — the health radar in Family QC and the scorecards in the QA/QC workbenches, drawn from a scored test table.

AAFQC
UI / Shell

piechart

The pure geometry core for pie and donut slices, formatted twice — WPF Path data and SVG path — plus the promoted rounded-rectangle canvas helper the opening-shape and pack-plan previews draw with.

AADOCWOT
UI / Shell

checkcombo

A themed combo-shaped multi-select: a summary box that opens a popup of checkboxes, for flat “pick many” filters — worksets, phases, host types.

WOT
UI / Shell

codetok

A rendering-agnostic source-code tokenizer: one line in, (kind, text) spans out, with no state — the syntax colouring behind Script Reader's editor and the Guideline's code previews.

GUIDESR
Data

clashxml

The dependency-free reader for Navisworks Clash Detective XML — clash points, statuses, grid locations, per-side objects — and the one name for a clash that carries no status, shared by the filter chip and the rows so nothing is dropped between them.

CIT
Data

bimstd

Promoted BIM-standard reference data — colour codes, the LOD/LOI matrix, the shared-parameter registry, naming masks and classification — read from data rather than baked into any tool.

AAFITPSUDOCPLR
Core

cpyworker

Client for the persistent out-of-process CPython worker used by the compiled Native tier: one worker per session, reused, so a per-element lookup costs a pipe round-trip rather than a process launch.

RO1
Core

fmt

The shared prettify seam for every display channel: thousands grouping, zero-guarded percentages, lengths and counts formatted the same way in a KPI tile, a grid row and a log line.

All tools
Export / IO

sheetpreview

Title-block paper extents from the family symbol, and title-block PNG rendering — what the Sheet AutoDoc layout preview is drawn on.

DOCISO
MEP

isodraw

Builds a piping isometric from a network dict: projection, dimensions, arrows, elevations, bill of material and render primitives. It needs no Revit.

PLRISOSCH
Export / IO

isopdf

Writes the isometric as plain PDF pages through pdflite, for a model with no title block or for plain paper.

PLRISOSCH
MEP

isosymbols

Chooses the symbol for a fitting, accessory or equipment piece on the isometric. It returns plain line, polygon, circle and text primitives.

ISOSCH
Data

libmodel

Reads a library model laid out on a board, with its frames, labels and placed content, as plain data. A tool can then ask the library what belongs together.

FIT
MEP

mepnet

Reads a pipe or duct network out of Revit as plain data in SI units. It walks the connector graph from a start element and is read-only.

PLRISOSCH
Export / IO

pdflite

A dependency-free PDF 1.4 writer: text, lines, polygons, headings and tables that break across pages. It runs under IronPython and CPython.

PLRSCHRBK
UI / Shell

portlist

Builds the tick-list of the ports of a start element, headed “flow leaves through”. The Pressure Loss, Piping Isometric and Schematic windows share it.

PLRISOSCH
Data

sysguard

The background watch on new pipes and ducts that have no system type. It can notify or repair, it survives a reload, and startup.py attaches it.

startup.py
No modules match your filter.
the public surface — import and go
from icz import theme
from icz.shell import ShellWindow      # shared window chrome
from icz.modeless import ExternalCall  # ExternalEvent-safe model writes
from icz.revit_compat import eid       # Revit 2024+ ElementId shim

class ToolWindow(ShellWindow):         # inherit dots, nav-rail, theme
    ...

commit = ExternalCall(handler)         # call .raise_with(fn) from any click
key    = eid(element.Id)               # int, on any Revit version

 Only the public call surface is shown here — internal logic stays in the private repository.


Around the suite 5 repositories 1 guide site

The suite is one repository of several. These are the others: a build tool, a workflow policy, three standalone servers and the guide site.
IcZ Obfuscator

The distribution builder. It makes a source-protected copy of a pyRevit extension that still runs. The suite can then go to a colleague without plain Python source. It works in four tiers.

  • Source: strips comments, compresses each .py file and masks it behind a small loader.
  • Sealed: the default. It encrypts each body with AES-256-CBC and an HMAC. It unlocks by embedded key, machine lock, key file or passphrase.
  • Native: compiles chosen pure-logic modules of CPython-routed tools to .pyd files.
  • Assembly: runs ConfuserEx over every first-party .dll and .exe.

The pyRevit directives and tooltips stay in clear text. A failed tier fails the build with a named reason, and a leak audit checks the output.

MIT licenceno public link
IcZ Subagent

The model-workflow policy, packaged so that one command installs the same setup on any desktop. Worker agents run on pinned tiers: mechanical, drafting and review.

An omitted tier or a bare alias is refused. A gate hook checks every worker launch, and each worker definition forbids fanning out further.

The repository holds eight pinned agents, six skills, the gate hook, a managed instruction block and one installer with self-tests. The skills are a prose humanizer, a mod-stability method, an agent forge, a construction-data method, the worker playbook every worker follows and a method for finishing a session that stopped.

8 agents6 skillsprivate repository
excel-knowledge

A standalone server with 66 tools in five sets. A knowledge API serves course workbooks, a Power Query, Power Pivot and DAX guidebook, and researched Microsoft documentation.

Formula tools explain a formula or measure argument by argument, catch classic mistakes and audit whole workbook files with no Excel needed. Control tools drive Excel through COM, or edit the file directly and calculate with LibreOffice.

Power BI tools open a project, describe its model, refresh it and run DAX queries. Primavera P6 tools read the P6 EPPM API reference, offline or online, and drive P6 Professional: projects, activities, a schedule check, Excel in and out.

private repositoryIn the MCP layer
icz-learn

A standalone server with 5 tools. They are status, documentation search, code-sample search, page fetch and a direct call of any tool of Microsoft’s public documentation endpoint.

Text comes back as a JSON header line, a separator line and the text. A cache serves stale pages when the endpoint is down. The project installs nothing and ships a skill pack.

zero dependencyprivate repositoryIn the MCP layer
icz-reverse

A standalone server with 36 tools that start with re_. They sit over three engines. The source of each engine is kept and built in the repository. Ghidra handles native code, ILSpy handles .NET and de4dot handles obfuscated .NET.

The Node front reads file headers and routes a file to the native lane, the managed lane or both. One tool names the native DLLs that a managed assembly calls. Scripting and dynamic cleaning stay off unless a gate variable is set.

zero dependencyprivate repositoryIn the MCP layer
BIM & AI Guide

The companion site: free decks and five interactive pages on Dynamo, Revit, Navisworks coordination and working with an AI assistant. The suite on this page is the real in-house extension that the guide describes.

Open the guide see also: Where next

A repository marked private has no link here on purpose. Each card says what the project does, so the page stays honest about code a visitor cannot open.


The MCP layer revit-launch navisworks-launch _mcp/

18 local servers, grouped by what they do. Below the roster is the reference for the two bridges: gates, profiles, transports and the tool surfaces. The Navisworks side has exactly one save, confirm-gated, to a path you name.
Model Context ProtocolJSON-RPC 2.0pyRevit routesNamed pipe No npm install for the bridges18 servers · 506 tools143 tools by default · 164 with every gateDry-run defaultRevit 2022–26Navisworks 2022+
The roster — every server, by lane

18 servers · 506 tools

The total is the count at default gates, and it is 544 with every gate on. The comfy-mcp catalogue is third-party, so it is not in the total. Every server speaks JSON-RPC 2.0 over stdio. Every count comes from one live tool listing of all 18 servers with every gate on, taken on 2026-11-03; the default-gate figure of a server subtracts the tools its own readme names as gated. Zero dependency means no npm or Python packages to install.

Knowledge 3 servers · 16 toolsLook up an API or a reference. No application needs to run.

revit-knowledge5 tools

Looks up the Revit API. It finds a member, compares Revit years and says which years have it.

Needs: Node. An offline API corpus, or the bundled documentation copy. Revit is not needed.
zero dependency
pyrevit-knowledge5 tools

Answers what the pyRevit library accepts and does, from a corpus mined once from the published reference.

Needs: Node and the mined corpus folder in the repository. Revit is not needed.
zero dependency
ironpython-knowledge6 tools

Serves three stores: the hosted IronPython API, engine semantics with provenance, and the engine assembly signatures.

Needs: Node. Each of the three stores is optional on a given machine.
zero dependency

Live sessions 2 servers · 167 toolsAttach to an application that is already open, and act in it.

revit-launch143 tools164 with every gate

Attaches to a running Revit, or to a second one by port or pid. It reads the model, dry-runs and commits writes, drives the ribbon, captures windows and prints sheets to PDF.

Needs: A running Revit. The 27 session commands need the routes API. The 64 pipe commands need the IcZ.Bridge add-in. Capture needs Windows PowerShell.
zero dependency
navisworks-launch24 tools31 with every gate

Drives Navisworks Manage or Simulate the way revit-launch drives Revit: documents, clash tests and their own Clash Detective reports, C# execution, captures and dialogs.

Needs: Node 20 or later. Navisworks 2022 or later and a bridge build for its year. The .NET SDK once, to build it.
zero dependency

Memory and documents 3 servers · 49 toolsRemember notes, search local documents and serve skill packs.

icz-memory42 tools

The in-house memory engine. Notes are the truth and the SQLite index can be rebuilt. Episode, code-graph and session tools sit beside it.

Needs: Node 24 with node:sqlite and one npm package, the in-process embedder. A local embedding endpoint is optional.
icz-docs3 tools

Retrieval over local documents. It indexes Word, PowerPoint, Excel, PDF, Markdown and XML and returns ranked passages with locators.

Needs: Node and the embedder of icz-memory, which is one npm package.
icz-skills4 tools

Serves agent skill packs to a language model and never runs them.

Needs: Node. The skills folder and the extra roots listed in roots.json.
zero dependency

Senses 2 servers · 26 toolsPictures of screens, audio, and the web.

icz-senses10 tools

Gives a language model pictures of screens, windows and document pages. It adds local text reading, audio transcription and web search.

Needs: A Windows virtual environment with Python 3.12 and the listed packages. The vision, audio and search lanes are optional.
new since September
scrapling16 tools

Fronts a web-fetching package. It offers HTTP and browser sessions, page extraction, browser actions and network capture.

Needs: A virtual environment with Python 3.12 and the package folder installed. Browser binaries for the dynamic fetch tools.
new since Septemberprivate use

Beyond Revit 5 servers · 141 toolsServers for other applications that the same workspace uses.

blender-launch28 tools32 with every gate

Starts or attaches to a Blender and runs code in it. It builds and sculpts models, uses add-ons and takes pictures.

Needs: Node and Blender. A local ComfyUI is optional for generation. Online sources work only when the online gate is on.
new since Septemberzero dependency
mod-organizer46 tools

Reads a Mod Organizer 2 mod list. Behind dry-run and confirm gates it also changes the list. A live lane drives a plugin inside the application.

Needs: Node 20 or later. A Mod Organizer 2 instance that has run once. 7-Zip for installs. A plugin for the live tools.
new since Septemberzero dependency
acad-launch36 tools39 with every gate

Drives AutoCAD and its Plant 3D toolset. A bridge add-in is loaded into a running AutoCAD at run time; it draws, modifies, runs C# and command lines, and reads the Plant 3D data manager.

Needs: Node. AutoCAD 2025 or later with a bridge build for its year, and the .NET SDK once to build it and to compile snippets. The API corpus is mined from the installed assemblies.
new since Octoberzero dependency
fusion-launch31 tools34 with every gate

Drives Autodesk Fusion through an add-in installed into the user’s add-ins folder. It runs Python on Fusion’s main thread, reads parameters, bodies and the timeline, exports and captures.

Needs: Node and Fusion. The API corpus is Autodesk’s help book fetched to disk, beside the installed build’s own stubs; the live page is read on request.
new since Octoberzero dependency
comfy-mcp8 toolslean proxy; not in the total

A third-party ComfyUI server. An optional lean proxy in this workspace narrows its catalogue to eight tools.

Needs: A local ComfyUI and the third-party package in a virtual environment. The proxy needs Node.

Standalone projects 3 servers · 107 toolsSeparate repositories, each described in Around the suite.

excel-knowledge66 tools

Excel knowledge, formula and workbook audit, Excel control with or without Excel, Power BI Desktop control, and the Primavera P6 API reference with P6 Professional control.

Needs: Python 3.12 or later with mcp, openpyxl and pillow, plus pywin32 on Windows. Excel, LibreOffice and Power BI Desktop are optional engines.
new since Septemberprivate repository
icz-learn5 tools

Official Microsoft documentation and code samples, through the public documentation endpoint. A cache serves stale pages during an outage.

Needs: Node 22 or later and a network connection to the documentation endpoint. Nothing is installed.
new since Septemberzero dependencyprivate repository
icz-reverse36 tools

A reverse-engineering workbench over three engines: Ghidra for native code, ILSpy for .NET and de4dot for obfuscated .NET.

Needs: Windows x64 and Node 22 or later. A JDK, the .NET SDK 10 and build tools. The engines are built from the repository.
new since Septemberzero dependencyprivate repository
  • Attaches By Default; Three Gates You Own: Out of the box the bridge attaches to a session you already opened. Three independent gates answer three different questions — may it drive the Revit process (off), may it model in the session (on), may it drive Dynamo live (off) — and a gated tool is absent from the tool list and refuses in-band if called from a stale cache, so it never spawns or reaches a wire. It can launch, and getting that wrong once cost real time: passing the model on the command line races add-in initialisation and takes the host down, so the launcher starts Revit bare, waits for the routes server to actually answer, and only then opens the document. Session lifetime is a switch you own, defaulted to off — not a capability the tool quietly assumes.
  • Dry Run Is The Default — And It's Measured, Not Predicted: Without an explicit commit the work really executes inside a transaction that is then rolled back, so the outcome you read was measured against a model that never changed. On a delete, Revit reports every element it would remove including the dependents it takes with them. Navisworks cannot roll a transaction back, so there the dry run commits under its own label, undoes it only if the next undo record is its own, verifies the stacks, and reports undo.reverted as a measured true or false. The full cascade is visible before anything is destroyed.
  • One Undoable Transaction, And Nothing Is Ever Saved: A committed write is a single named Transaction, so Ctrl+Z reverses it; destructive operations need an explicit confirmation on top of the commit flag. No route calls Save, Save As or Synchronize, and the code channel refuses a payload that does — the scan strips comments and requires an actual call, so a docstring mentioning it never false-refuses. The worst case a mistake reaches is an unsaved, undoable in-session change — what lands on disk stays your decision.
  • Two Transports, One Prefix: The 90 modelling commands run over two transports behind one revit_cmd_* name — 64 execute in the first-party IcZ.Bridge add-in over a named pipe per process, which needs no pyRevit at all and serves several Revits at once; 26 run inside the pyRevit session over the discovered routes port. The two sets are disjoint and the harness asserts it in both directions, so the shared prefix can never let one channel silently shadow the other. Liveness is the pipe, never the pid — Windows recycles pids, and a bridge that had exited two days earlier once read alive because Office had been handed its number. A capability is advertised exactly where it works, and nowhere else.
  • It Can See What It Did: A ribbon census, tool windows opened and closed with the proof being a measured window delta, a pyRevit reload proven by a changed session id, a live WPF visual-tree probe that reports rendered brushes and geometry, PNG captures of a view or a rendered window written to disk for the agent to read back — and revit_smoke, which turns the sequences a human used to click through into named, repeatable scenarios with their side effects declared up front. "Does it actually look right" stops being a screenshot request and becomes a check the agent runs itself.
The surface — revit-launch, 143 tools in the default configuration, by channel
Read3Read-only orientation and routes reads. Nothing here can change the model.
revit_statusrevit_routes_getrevit_file_info
Write & code channel6Executes, then rolls back — unless you pass commit. IronPython inside Revit, on the API thread; a long run answers with a job id and is read back later.
revit_write_paramsrevit_write_selectionrevit_write_viewrevit_write_deleterevit_execrevit_clash
Modelling command set9591 revit_cmd_* over two transports — 64 in the IcZ.Bridge add-in, 27 in the pyRevit session, the drafting lint among them — plus 4 revit_data_* for the local project store. Each one dry-runnable.
revit_cmd_get_current_view_elementsrevit_cmd_ai_element_filterrevit_cmd_analyze_model_statisticsrevit_cmd_create_point_based_elementrevit_cmd_create_levelrevit_cmd_create_gridrevit_cmd_create_dimensionsrevit_cmd_tag_all_roomsrevit_cmd_drafting_lintrevit_cmd_operate_elementrevit_cmd_delete_element… 80 morerevit_data_queryrevit_data_store_projectrevit_data_store_rooms
Session, UI & visual parity13Drives the ribbon, clicks named controls, runs smoke scenarios, reads back pixels, prints sheets, lists or enables tool groups at run time, and clears a hold after Revit stopped answering.
revit_ribbonrevit_tool_openrevit_tool_closerevit_pyrevit_reloadrevit_dialog_watchrevit_smokerevit_view_listrevit_capture_viewrevit_capture_windowrevit_capture_pagesrevit_ui_invokerevit_toolsrevit_hold
Desktop & any window4A screen capture, pointer and keyboard, and the controls of any window — the pieces the smoke scenarios are built from.
revit_screenrevit_computerrevit_ui_controlsrevit_ui_control
Knowledge & Dynamo14Read a corpus on disk, need no Revit, and are therefore never gated — an under-advertised capability is a disabled one.
revit_dynamo_* knowledge ×7revit_dynamo_graph_readrevit_dynamo_graph_editrevit_knowledge_* ×5
First-party add-in & 2D → 3D8The IcZ.Bridge pipe (always on, answers from breadcrumbs when no instance is live) and the D23D channel that calls the installed ACC Sync product — never a bundled copy.
revit_iczbridge_statusrevit_iczbridge_callrevit_d23d_* ×5revit_parity_review
Gated off by default21Absent from the list and refusing in-band unless the gate is set in the server's config: the 7 process-lifecycle tools and the 14 live Dynamo tools.
revit_launchrevit_restartrevit_force_restartrevit_dismiss_unsavedrevit_clear_dialogsrevit_licensing_statusrevit_job_statusrevit_dynamo_* live ×14

Counts are the ones the server's own harness asserts exactly — a vanished tool is a failure, not a shrug — re-read on 2026-11-03 by a live tool listing with every gate on, less the 21 the readme names as gated. The channel split above is by role; the harness counts by gate.

The Navisworks half — navisworks-launch, 24 tools by default and 31 with the lifecycle gate
Look11Read-only: the document, its tree, items, search sets, viewpoints, clash tests and their results — and Clash Detective’s own report per test, written to a folder you name with the document unchanged.
navis_statusnavis_doc_infonavis_treenavis_itemnavis_searchnavis_selectionnavis_setsnavis_viewpointsnavis_clash_testsnavis_clash_resultsnavis_clash_report
Act & see10Attach, open, run clash tests, run C# inside Navisworks, capture the view and the window, answer dialogs by name. Writes are dry runs with a measured revert.
navis_attachnavis_opennavis_savenavis_clearnavis_clash_runnavis_execnavis_pluginsnavis_capture_viewnavis_capture_windownavis_dialogs
Lifecycle, jobs & Sync-ACC10Process tools behind their own gate; the Batch Utility accepted only when every expected output was written by this run; five optional tools that drive Sync-ACC's own binaries and refuse, naming the paths probed, when it is absent.
navis_launchnavis_closenavis_restartnavis_job_statusnavis_batchnavis_syncacc_statusnavis_syncacc_comparenavis_syncacc_buildnavis_syncacc_runnavis_syncacc_cli

Nothing is installed into Navisworks: the bridge add-in is injected at run time through the Automation API from a shadow copy, so the build stays rebuildable while a session is open. Only one session can be bridged, a startup dialog is reported and never answered, and a close is proven from a process handle opened first — with crashed:true and the status code when Navisworks fell over on the way out.

How the bridge got here — ten stops since August
  • r122 · 28 Aug A Dynamo graph really runs against a real model through the bridge; NodeModels are de-packaged and a route-level confirm gate lands.
  • r136 · 6 Sep Three profiles — core, standard, full — and a meta-tool that loads groups at run time; the dry-run contract is sent once per session instead of on every tool.
  • r138 · 12 Sep The offline API corpora, Navisworks included, are served by the knowledge servers from outside every repository.
  • r141 · 13 Sep The project memory is rebuilt in-house: notes are the truth, the index is rebuildable.
  • r144.1 · 17 Sep Skill packs are served as read-only instructions — a pack is a prompt, not a program.
  • r145 – r146 · 19 – 23 Sep Liveness is read from the named pipe, never the pid; navisworks-launch drives Navisworks the way revit-launch drives Revit.
  • r156 · 3 Oct blender-launch starts or attaches to a Blender and runs code in it, with the same dry-run habits.
  • r199 · 25 Oct acad-launch and fusion-launch bring AutoCAD, Plant 3D and Fusion into the same pattern, each with an API corpus read from the installed build.
  • r206.1 · 28 Oct Every route tool takes an instance by port or pid, so a second Revit can be driven beside the first; busy and hold are kept per Revit.
  • r210 · 1 Nov The drafting lint joins the modelling commands: a sheet or a view is measured on the paper, and zero errors is the bar before a sheet is called done.
Both servers are covered by their own harnesses over real stdio JSON-RPC with every outside party stubbed, so nothing touches a live Revit or Navisworks: 808 checks for revit-launch (on Windows with real PowerShell stubs and on Linux with Node stubs; measured 2026-11-01) and 122 checks for navisworks-launch (measured 2026-10-25). A mutant run on a scratch copy of revit-launch caught 77 of 77 deliberately planted defects, each run in its own section (measured 2026-10-29). The guard suites assert that every destructive refusal happens before anything spawns and that refused calls never reach the wire at all. Key assertions are proven red against deliberately broken inputs before their green is trusted.

IcZScripts.extension · SuiteTools for Autodesk Revit 2022–2026 · built on pyRevit 6.4 · IronPython 3 engine

@MrGezz  ·  BIM & AI Guide  ·  synced to workspace r212 · 2026-11-03

© 2026 IcZ