# duHast pyRevit Extension
A pyRevit toolbar extension for Revit, providing automation tools for BIM workflows across
family management, export, view management, model maintenance, and more.
---
## Toolbar Panels
Panels and button groups are listed in **ribbon order**, matching the extension's bundle
layouts. Names are the labels shown in Revit.
### About
Reference links. Neither button touches the model.
| | Button Group | Description |
|:-:|---|---|
|
| [About](about.md) | Open the extension licence on GitHub, or the Icons8 site the icons come from |
---
### Cloud
Tools for working with cloud-hosted Revit models.
| | Button Group | Description |
|:-:|---|---|
|
| [GUIDS](cloud_guids.md) | Retrieve cloud project and model GUIDs for the model and all its links, for Revit Batch Processor task files |
---
### Grids And Levels
Tools for controlling grid bubble and level header visibility, and 2D/3D extent behaviour, in
the active view.
| | Button Group | Description |
|:-:|---|---|
|
| [Grids](grids.md) | Show or toggle grid bubbles at either end, switch grids to 2D, extend grids to the view crop, propagate grid setup to other plan views |
|
| [Levels](levels.md) | Show or toggle level headers at either end, switch levels to 2D |
---
### View Templates
Tools for propagating and transferring view template settings, filters and colour schemes.
| | Button Group | Description |
|:-:|---|---|
|
| [Modify](view_templates_modify.md) | Propagate filter and category overrides from a source view template to many others; delete filters from templates |
|
| [Import Export](view_templates_import_export.md) | Export and import view template overrides and view filters as JSON, and colour fill scheme values as CSV |
---
### Views
Tools for managing Revit schedules on sheets and in views.
| | Button Group | Description |
|:-:|---|---|
|
| [Schedules](views_schedules.md) | Manage column widths; report and fix schedule segment overlaps on sheets; export, extract and import Room: Number filter values |
---
### Purge Unused
Tools to remove unused elements from the model. Every tool asks what to remove before
deleting anything.
| | Button Group | Description |
|:-:|---|---|
|
| [Purge](purge_unused.md) | Purge unused line styles, fill patterns, line patterns, shared parameters, filters, legends, schedules, view templates and unplaced views |
---
### Warnings
Tools for resolving and locating common Revit warnings on rooms, areas and annotation.
| | Button Group | Description |
|:-:|---|---|
|
| [Solve Warnings](warnings_solve.md) | Fix room tags outside rooms, duplicate marks, and overlapping area or room separation lines |
|
| [Highlight Warnings](warnings_highlight.md) | Report area and room separation lines carrying warnings, and colour-highlight them in the active view |
---
### Families
Tools for loading, saving, renaming, swapping and reporting on Revit families and type
catalogue files.
| | Button Group | Description |
|:-:|---|---|
|
| [Reload](families_reload.md) | Reload families from a library folder, with match-status filtering |
|
| [Rename](families_rename.md) | Rename loaded families and types, or rename `.rfa` files in a library folder, from a CSV |
|
| [IO](families_io.md) | Load families from a folder into the project, or save loaded families out to a folder |
|
| [CatalogueFiles](families_catalogue_files.md) | Export and clean type catalogue files; strip a family back to a single catalogue placeholder type |
|
| [Force Update](families_force_update.md) | Force Revit to detect a family as changed when source files have been overwritten |
|
| [Change Category](families_change_category.md) | Reassign the open family to a different Revit category, preserving subcategories |
|
| [Reports](families_reports.md) | Report on and compare family libraries and projects, via XML part atom exports |
|
| [SwapFamilies](families_swap.md) | Replace family instances with a different type, by CSV directive folder, selection or picking |
|
| [At The Library](families_at_the_library.md) | Open the AtTheLibrary tool for managing shared type catalogue parameters |
---
### Ceilings
| | Button Group | Description |
|:-:|---|---|
|
| [Ceilings By Room](ceilings_by_rooms.md) | Create a ceiling matching the boundary of each selected room |
---
### Walls
Tools that relate walls and facade openings back to the rooms they bound.
| | Button Group | Description |
|:-:|---|---|
|
| [Walls By Room](walls_by_rooms.md) | Write the room number onto the walls bounding each selected room |
|
| [Facade Opening To Room](walls_facade_opening.md) | Report external wall and window opening areas per room to CSV |
---
### PushIt
Tools for managing mock rooms — room-like families that carry room data — and the data pushed
into them.
| | Button Group | Description |
|:-:|---|---|
|
| [Push It!](pushit_main.md) | Open the PushIt application for loading room data and pushing it into mock rooms |
|
| [Get A Room!](pushit_get_a_room.md) | Build mock room families from filled regions; set the family output directory |
|
| [Swap Width And Depth](pushit_swap_dimensions.md) | Swap the width and depth values on picked mock rooms and rotate them 90 degrees |
|
| [Stats](pushit_stats.md) | Report mock room counts by family, creator and owner; flag IDs duplicated across design sets |
|
| [Place Revit Rooms](pushit_place_revit_rooms.md) | Create native Revit rooms at the locations of mock rooms, read from this model or a link |
|
| [Verify Push It Area](pushit_area_by_room.md) | Measure mock rooms with temporary Revit rooms and write the area back onto them |
---
### Export
Tools for exporting sheets, checking exports, and syncing document data.
| | Button Group | Description |
|:-:|---|---|
|
| [PDF and DWG](export_pdf_dwg.md) | Export sheets to PDF and/or DWG with configurable naming rules and print sets |
|
| [Compare](export_compare.md) | Check the sheets in a Revit schedule against the PDF files in a folder |
|
| [docManager](export_docmanager.md) | Sync sheets and revisions from the model to a Document Manager database; configure document numbering |
---
### Data
Scripts for exporting model data to file for reporting and audit purposes.
| | Button Group | Description |
|:-:|---|---|
|
| [Collectors](data_collectors.md) | Export rooms, spaces, sheets, ceilings, floors, doors, levels and placed items to JSON — from the active model and its Revit links |
---
### RoomMate
Integration with a local RoomMate server.
| | Button Group | Description |
|:-:|---|---|
|
| [Export](roommate.md) | Push room and door data from the model and its links to a local RoomMate server |
---
## Getting Started
1. Install [pyRevit](https://github.com/pyrevitlabs/pyRevit) if not already installed.
2. Copy the extension folder to your pyRevit extensions directory, or add it via pyRevit
settings.
3. Restart Revit — the **duHast** tab will appear in the ribbon.
4. Refer to the individual docs linked above for prerequisites and configuration before first
use.
## Before you run a tool
Three things decide whether a button will work at all. Each doc repeats the ones that apply
to it, but they are worth knowing up front.
**Some tools only run on a family open in the Family Editor.** They exit with "This is not a
family document." if run from a project: [Change Category](families_change_category.md),
[Force Update](families_force_update.md) and all three
[Catalogue Files](families_catalogue_files.md) tools.
**Some tools store their settings in the Revit model** and refuse to start until a Settings
button has been run on that model: [PDF/DWG Export](export_pdf_dwg.md),
[docManager](export_docmanager.md) and [Get A Room!](pushit_get_a_room.md). Settings are held
in an extensible schema, so they travel with the file but do not travel between files.
**Some tools open a .NET window** loaded from the extension's `bin` folder at run time. If
that folder is missing or incomplete the button fails immediately with a message about the
bin directory. This applies to [Push It!](pushit_main.md),
[At The Library](families_at_the_library.md), [Reload](families_reload.md),
[PDF/DWG Export](export_pdf_dwg.md) and [docManager](export_docmanager.md).
A few tools are also driven by constants edited in the extension's `lib` folder rather than by
a dialog — see [Facade Opening To Room](walls_facade_opening.md),
[Ceilings By Room](ceilings_by_rooms.md) and [Reports](families_reports.md).
## Requirements
- **Revit 2025 or later** — the extension declares `min_revit_ver: 2025`, with engines
configured for 2025 and 2026.
- pyRevit (latest stable version recommended).
- duHast Python library — bundled in the extension under `lib/duHast`.
- The extension's `bin` folder, for the tools that open a .NET window.