Skip to main content

Overview

Proxification is a data organization technique that enables objects to be referenced by multiple overlapping hierarchical systems simultaneously - groups, layers, levels, blocks, instances, materials - without duplicating the objects themselves. This allows rich organizational metadata while keeping payloads efficient. Instead of forcing a single parent-child hierarchy, proxification lets a single wall be:
  • On “Level 1” (level hierarchy)
  • In “Exterior Walls” group (functional grouping)
  • On “A-WALL” layer (layer organization)
  • Using “Concrete” material (material assignment)
All without duplicating the wall object or creating conflicting nested structures.
For SDK Consumers: Proxification is primarily important when consuming data from Speckle (e.g., from connectors like Revit, Rhino, ArchiCAD). When publishing custom data with specklepy, you typically don’t need to use proxification yourself - the SDK handles it automatically where needed.

Why Proxification Exists (Beyond Detachment)

Detachment Alone Isn’t Enough

Detachment solves the problem of large individual objects (like meshes with millions of vertices). The SDK automatically detaches these and stores them separately. But detachment doesn’t solve the problem of multiple overlapping organizational hierarchies.

The Problem: Single Hierarchy Limitations

Imagine a building model where you need to organize objects by:
  • Building Level - Level 1, Level 2, Roof
  • Functional Group - Exterior Walls, Interior Partitions, Structure
  • Drawing Layer - A-WALL, A-DOOR, S-COLS
  • Material - Concrete, Steel, Glass
  • Instance Type - Standard Door, Window Type A
A single wall might belong to:
  • Level: “Level 1”
  • Group: “Exterior Walls”
  • Layer: “A-WALL”
  • Material: “Concrete”
Without proxification - you must choose ONE hierarchy:
Problems:
  • Can only have ONE primary hierarchy (level OR group OR layer)
  • Querying “exterior walls on Level 1” requires complex traversal
  • Can’t represent that objects belong to multiple organizational systems
  • Organizational metadata is either lost or duplicated

The Solution With Proxification

With proxification - MULTIPLE overlapping hierarchies:
Benefits:
  • Objects stored once, referenced by multiple organizational systems
  • Can query “exterior walls on Level 1” efficiently (intersection of two proxy lists)
  • Supports overlapping hierarchies (groups + layers + levels + materials)
  • Models real-world CAD/BIM organization (blocks, layers, groups all coexist)
  • Organizational structure explicit and queryable at root level

Detachment vs Proxification: What’s the Difference?

Both optimize data transfer, but solve different problems: Detachment: “This single object is too big, store it separately”
Proxification: “This object belongs to multiple organizational systems simultaneously”
Together they provide: Efficient storage + multiple organizational views + fast queries

Types of Proxification

1. Organizational Proxies

Create overlapping organizational hierarchies - objects can belong to multiple groups, layers, and levels simultaneously.

LevelProxy

Organizes objects by building level/storey (architectural hierarchy):

GroupProxy

Organizes objects by functional or user-defined groups (can overlap with other hierarchies):

ColorProxy

Organizes objects by color/layer (CAD hierarchy, can overlap with levels and groups):

2. Material Proxies

Assign render materials to multiple objects without duplication.

RenderMaterialProxy

3. Geometry Proxies

Reference geometry stored elsewhere in the graph.

DisplayValue Proxies

Some objects store display geometry as references rather than nested objects:
Display Value Proxies: When displayValue contains strings (applicationIds) instead of Mesh objects, you must resolve these references by finding the corresponding objects in the elements hierarchy. This is less common than direct displayValue lists but can occur in large models.

4. Instance Proxies

Optimize repeated geometry through instancing:

The Resolution Process

Proxification requires a two-step resolution process:

Step 1: Build an applicationId Index

Create a mapping from applicationId to actual objects:

Step 2: Resolve Proxy References

Use the index to resolve applicationId strings to actual objects:

General Proxy Resolution Pattern

This pattern works for all proxy types:

Querying Multiple Hierarchies: Intersection Queries

The real power of proxification is querying across multiple organizational systems:

Reverse Lookup: Finding an Object’s Proxy

To find which proxy collection an object belongs to:

DisplayValue Proxy Resolution

Display geometry can also be proxified in large models:

When Proxification Matters

As a Data Consumer (Reading from Connectors)

You WILL encounter proxification when:
  • Reading BIM/CAD data from Revit, Rhino, ArchiCAD, AutoCAD connectors
  • Working with organized models (levels, layers, groups, blocks)
  • Need to query by multiple criteria (e.g., “exterior walls on Level 1”)
  • Analyzing material assignments across objects
  • Understanding instance/definition relationships
Resolution is required for:
  • Finding objects by level, group, layer, or material
  • Querying intersections (“walls that are both exterior AND on Level 1”)
  • Understanding which organizational systems an object belongs to
  • Accessing objects that use specific instances or materials

As a Data Producer (Publishing with specklepy)

You typically DON’T need to create proxies when:
  • Publishing custom data with specklepy
  • Creating simple models
  • Working with small datasets
The SDK handles proxification automatically when:
  • Sending large objects via operations.send()
  • Detachable properties are detected
  • Objects exceed chunking thresholds
Recommendation: Focus on understanding proxy resolution as a consumer. Let the SDK handle proxification automatically when publishing data.

Reference Implementation: speckle-blender

The Blender connector (bpy_speckle) implements proxy resolution helpers you can reference:
See Also:
  • speckle-blender repository for working implementations
  • Connector source code for practical proxy handling patterns

Best Practices

1. Build Index Once

2. Cache Resolved Proxies

3. Handle Missing References Gracefully

4. Use Sets for Fast Lookup

Summary

Key Concepts:
  • Proxification = Storing objects separately and referencing by ID
  • Proxy collections live at root level with @ prefix
  • Resolution requires two steps: build index, then resolve references
  • All proxy types follow the same resolution pattern
When to worry about proxification:
  • ✅ Reading BIM data from connectors (common)
  • ✅ Analyzing model organization (levels, groups, materials)
  • ✅ Working with large models
  • ❌ Publishing simple custom data (SDK handles it)
The Resolution Pattern:
  1. Build applicationId index
  2. Get proxy collections from root
  3. Resolve applicationId strings to objects
  4. Use resolved objects for analysis

Next Steps

BIM Data Patterns

See proxification in action with Pattern 7

Data Traversal

Learn to navigate object graphs effectively

Objects & Base

Understand applicationId and object identity

Operations

How send() and receive() handle proxification
Last modified on July 18, 2026