> ## Documentation Index
> Fetch the complete documentation index at: https://docs.speckle.systems/llms.txt
> Use this file to discover all available pages before exploring further.

# Loading blocks as families in Revit

> Load blocks and instances from Rhino, SketchUp, AutoCAD, and other applications as Revit families.

When you load a Speckle model that contains blocks or instances from another application, the Revit connector can convert
them into Revit families instead of flat direct shapes. This preserves the block structure and lets you manage instances
and materials from within Revit. The blocks in the model come from whatever application was used to publish (for example
Rhino blocks, SketchUp components, or AutoCAD blocks). See the FAQ below for which applications are supported and how
blocks get into Speckle.

## Enabling blocks to families

This feature is a load setting and is **off by default**.

To enable it:

1. In the Revit connector, open the model you want to load.
2. Expand the **Settings** section at the bottom of the load dialog.
3. Toggle **Receive Blocks as Families** on.

<Warning>
  Expect longer load times. Revit must create and load a separate family
  document for each unique block definition, which is far slower than a standard
  direct shape load.
</Warning>

<Frame>
  <img src="https://mintcdn.com/speckle/bQLHv9Gs00Xg8thr/images/connectors/revit_blocks_to_families_setting.png?fit=max&auto=format&n=bQLHv9Gs00Xg8thr&q=85&s=e15a4947e0cfde3bf0f33cbba25ab767" alt="Blocks to families load setting" width="1620" height="1080" data-path="images/connectors/revit_blocks_to_families_setting.png" />
</Frame>

<Note>
  Enabling this setting only affects the current load operation. Toggle it
  before each load if you want consistent results.
</Note>

## How blocks are converted

Each block definition from the source model becomes a Revit family. Block instances in the scene become instances of
that family placed in your project.

### Geometry support

The following geometry types are supported. Each is converted to the most capable Revit representation available:

| Source geometry | Revit element    |
| --------------- | ---------------- |
| Solids          | Freeform element |
| Meshes          | Freeform element |
| Surfaces        | Freeform element |
| SubDs           | DirectShape      |
| Curves          | DirectShape      |
| Points          | DirectShape      |

If creating a freeform element fails, the connector falls back to DirectShape.

### Layers become subcategories

Layers assigned to geometries inside a block definition are created as subcategories within the family. This lets you
control visibility per layer from Revit's Visibility/Graphics settings.

<Frame>
  <img src="https://mintcdn.com/speckle/bQLHv9Gs00Xg8thr/images/connectors/revit_layers%20to%20subcategories.png?fit=max&auto=format&n=bQLHv9Gs00Xg8thr&q=85&s=8a81435cafdb68513097769afbb88859" alt="Layers to subcategories in Revit" width="1620" height="1080" data-path="images/connectors/revit_layers to subcategories.png" />
</Frame>

### Materials

Materials from the source model are applied to the created geometry inside the family. A type parameter is also created
on the family so you can override the material directly from the project without editing the family definition.

<Frame>
  <img src="https://mintcdn.com/speckle/bQLHv9Gs00Xg8thr/images/connectors/revit_materials%20type%20parameter.png?fit=max&auto=format&n=bQLHv9Gs00Xg8thr&q=85&s=4298571e76ff717cbf63cedadba0e579" alt="Materials type parameter in Revit" width="1620" height="1080" data-path="images/connectors/revit_materials type parameter.png" />
</Frame>

### Nested blocks

Nested blocks are supported and are converted as nested families. Each level of nesting requires Revit to create an
additional family file, which is an expensive operation.

<Warning>
  Deeply nested block structures (common in SketchUp models) will significantly
  increase load time. As a rule of thumb, avoid receiving models with more than
  two or three levels of nesting.
</Warning>

<Frame>
  <img src="https://mintcdn.com/speckle/bQLHv9Gs00Xg8thr/images/connectors/revit_nested%20blocks%20to%20nested%20families.png?fit=max&auto=format&n=bQLHv9Gs00Xg8thr&q=85&s=8777f8dc2eb9d3908d1572b3800b3b62" alt="Nested blocks to nested families in Revit" width="1620" height="1080" data-path="images/connectors/revit_nested blocks to nested families.png" />
</Frame>

### Family categories

By default, all families created from blocks are assigned to the "Generic Models" category.
If you use the [Revit Categorization tool](/connectors/rhino/rhino-revit) to assign
Revit categories to your blocks, the connector will attempt to create the family
in the specified category. If the category is not supported, it will fall back to a default category.

<Frame>
  <img src="https://mintcdn.com/speckle/bQLHv9Gs00Xg8thr/images/connectors/revit_category%20mapper.png?fit=max&auto=format&n=bQLHv9Gs00Xg8thr&q=85&s=bbbb4f4b5cc86c807696e1e4f4f7e331" alt="Category assignment from Rhino into Revit" width="1620" height="1080" data-path="images/connectors/revit_category mapper.png" />
</Frame>

## FAQ

<AccordionGroup>
  <Accordion title="Which applications can create blocks that work with this feature?">
    Any application whose Speckle connector sends block or instance structure will
    work. That includes Rhino (blocks), SketchUp (components and groups), and
    AutoCAD (blocks). If you publish from one of these and your model contains
    block definitions with instances, the Revit connector can receive them as
    families. Other connectors that support blocks in the future will work the
    same way.
  </Accordion>

  <Accordion title="How do blocks get into my Speckle model?">
    Blocks come from the application you use to publish. Create blocks (or
    components, or groups, depending on the app) in that application, then publish
    the model to Speckle. Speckle stores each block definition once and each
    placement as an instance. When you load in Revit with **Receive Blocks as
    Families** on, those definitions become Revit families and the instances
    become family instances in the project.
  </Accordion>

  <Accordion title="Does this work with nested blocks?">
    Yes. Nested blocks are converted as nested families, preserving the original
    hierarchy. However, each nesting level adds to load time because Revit must
    create a separate family for each unique block definition. Deeply nested
    models (such as those from SketchUp) can be slow to process.
  </Accordion>

  <Accordion title="My blocks are scaled or skewed in the source model, but they look different in Revit. Why?">
    Revit's geometry engine only supports transformations that preserve angles —
    specifically, uniform scale, rotation, and reflection. Non-uniform scaling
    (where X, Y, and Z scale independently) and shearing (skewing) are not supported
    by the Revit API at the family instance level.

    When a block instance in your source model has been non-uniformly scaled or
    skewed, Speckle will place the family at the correct position and rotation,
    but the scaling or skew cannot be applied. The family will appear at its original undeformed proportions.

    To work around this, bake or explode the affected instances in the source
    application before publishing to Speckle, so the geometry is already deformed and no longer relies on a transform.
  </Accordion>
</AccordionGroup>
