# Family Reports
**Panel:** Families | **Menu:** Reports
Reporting tools for auditing family libraries and project family data.
## XML part atom exports come first
Three of these tools do **not** read `.rfa` files. They read **XML part atom exports** —
metadata files Revit can produce for a family without opening it. Run
**Create XML Files Of Families** over a library before running:
- Report Library Families
- Compare Library vs Library Families
- Compare Project vs Library Families
Without the XML files those tools find nothing to report.
---
##
Create XML Files Of Families
Generates XML part atom exports for the family files in a library directory. These are the
input for the report and compare tools above.
An optional `xml_path_mapper.NETWORK_PATH_MAPPER` module, if importable from the extension's
lib folder, is used to map network paths — useful where the library is reached by different
paths from different machines.
---
##
Delete orphaned XML files
Deletes XML part atom exports in a library location that no longer have a matching family
file. Run it after families have been renamed or removed from the library so the reports do
not carry stale entries.
---
##
Report Library Families
Reports on the families in one or more library directories, from their XML exports.
- You select the library directories to process — **multiple directories** can be chosen.
- Results are printed as a table in the output window, then a save dialog writes a CSV.
- If more than 10,000 rows are produced, the tool warns that saving may take a while.
**Report data includes:** family name, type names, category, and type parameter names and
values.
**Optional filtering:** if a module named `settings_xml_library_writer` exposing a
`filter_data(data)` function is importable, it is applied to the rows before they are
reported. Use it to trim large libraries down to what you care about.
**Use when:** You need an inventory of a library for documentation or QA.
---
##
Compare Project vs Library Families
Compares the families loaded in the current project against a library, reporting **only the
differences**.
- Output includes family names, type names, categories and the specific parameters that
differ.
- Results are printed as a table, then a save dialog writes a CSV.
**Use when:** Identifying which project families have fallen behind the library.
---
##
Compare Library vs Library Families
Compares families across two or more libraries.
- One column per library, showing each parameter's value in that library.
- Where a family, type or parameter is absent from a library, the value is shown as `N/A`.
- Results are printed as a table, then a save dialog writes a CSV.
**Use when:** Maintaining several versions of a library and needing to see what has diverged.
---
##
Report Placed Families
Reports on the families placed in the current project, including instance counts by type.
> **Configure before first use.** This report only covers the parameters listed in
> `FAMILY_PARAMETERS_TO_REPORT` in
> `Extensions/duHast-2025.extension/duHast.tab/lib/families/report.py`. That list currently
> holds placeholders — `"Sample Parameter One"`, `"Sample Parameter Two"`,
> `"Sample Parameter Three"` — so as shipped the report returns no useful parameter columns.
> Replace them with your project's parameter names.
Results are printed as a table, then a save dialog writes a CSV.
---
##
Report Loaded Families
Reports on the families loaded in the current project via XML part atom export of the
project's families — a different mechanism to **Report Placed Families**, which reads the
families directly.
**Report data includes:** family name, type name, category, and type parameters and values.
Results are printed as a table, then a save dialog writes a CSV.
---
## Notes
- Neither project report writes to a fixed location; both ask where to save.
- Large libraries take several minutes; progress is shown in a cancellable progress bar.
- The two optional hook modules (`settings_xml_library_writer`, `xml_path_mapper`) are looked
up on import and ignored if absent — no error is raised if you do not use them.