BIMScript

BIMScript: Material-Aware Structured
Scene Programs for BIM Ingestion

1AI:Xpertise Lab, Aalborg University  ·  2Visual Analysis and Perception Laboratory, Aalborg University  ·  3Pioneer Centre for Artificial Intelligence
arXiv Paper Video Code — coming soon Revit add-in — coming soon
Input point cloud
Egocentric keyframe 1 Egocentric keyframe 2 Egocentric keyframe 3
Point cloud + egocentric keyframes
BIMScript
BIMScript
Predicted BIM
A program — every element with material and condition
wood paneling wallpaper painted plaster door window
Scene 28395 — four materials recovered
Scene 84289 — every element recovered

Decoded Programs

What

Every wall, door and window carries a material and a condition token, supervised by a VLM-distilled material passport over 1.9M elements.

Fast

Decoding is bound by overhead, not compute. An output-exact CUDA-graph decoder cuts 6.40→1.91 ms/step (3.4×), plus grammar-parallel draft-and-verify.

Exactly where

A bounded sub-bin offset head escapes the 5 cm token grid, doubling F1@2 cm and locating where the residual error really lives.

Abstract

Structured-language models such as SceneScript reconstruct a scene as a short program of parametric commands, an editable and semantically explicit representation. We ask three questions that stand between such models and automated ingestion of existing buildings into BIM tools, studied here on synthetic scans: what is the scene made of, how fast can it be produced, and exactly where is each element. BIMScript answers all three within one grammar. First, we extend the layout language with per-element material and condition attributes, supervised by a vision-language-model material-passport corpus we build over 100k synthetic scenes (1.9M pseudo-labeled elements), and route image appearance to the material tokens through a lifted-feature encoder. Second, we show that autoregressive decoding of these programs is dominated not by compute but by kernel-launch and host-synchronization overhead, and remove it with an output-exact CUDA-graph decoder (3.4×) plus a grammar-parallel, tolerance-verified draft-and-verify scheme that exploits the deterministic entity schema. Third, we address the model's 5 cm token-grid granularity with training-free geometric snapping and a hybrid discrete–continuous decoder head that regresses a sub-bin offset. Because each command maps one-to-one onto a native Revit object, we validate direct ingestion end to end with a working add-in and its IFC4 export, and the program's language form supports LLM-driven, sustainability-aware reasoning over the built asset.

Video

Scan2BIM

Drag the handle. Left is the input point cloud; right is the program BIMScript decodes from it, with walls colored by predicted material and openings by role. Uncurated validation scenes.

Predicted BIM
Input scan
Scan
BIMScript
wood paneling wallpaper painted plaster tile door window
Qualitative layout results
Layout on the first three validation scenes (uncurated): ground truth, prediction, and a zoomed corner inset. Doors are drawn as swing arcs, windows as blue sill glyphs.

The output is a program, not a mesh

Real decoder output. Every line is an object with parameters — readable, diffable, editable, and one-to-one with a native BIM element.

make_wall,   id=0, a_x=-5.922, a_y=8.741, a_z=-0.002, b_x=-1.907, b_y=8.757, b_z=-0.002,
             height=2.700, thickness=0.0, material=wood_paneling, condition=good
make_wall,   id=1, a_x=-1.907, a_y=8.757, a_z=-0.002, b_x=-1.875, b_y=1.616, b_z=-0.002,
             height=2.700, thickness=0.0, material=wallpaper,     condition=good
make_door,   id=1000, wall0_id=1, position_x=-1.891, position_y=5.186, position_z=1.012,
             width=0.920, height=2.024, material=composite,       condition=new
make_window, id=2000, wall0_id=0, position_x=-3.914, position_y=8.749, position_z=1.520,
             width=1.480, height=1.200, material=aluminum,        condition=good

Method

A lifted-feature encoder routes image appearance into the sparse point encoder, so the decoder conditions each material and condition token on the element's own geometry tokens through self-attention. Three mechanisms then make decoding fast and precise:

Point Cloud RGB Keyframes Lifted Sparse-Convolution Encoder TransformerDecoder Revit / IFCobject model make_wall …material=, condition= what: material tokens fast: GraphStep + SchemaDraft where: SubBin
BIMScript overview. A lifted-feature encoder routes image appearance into the point encoder, so the decoder can condition each material and condition token on the element's own geometry tokens. Decoding is accelerated by GraphStep and SchemaDraft and refined below the token grid by SubBin, and every emitted command maps one-to-one onto a native Revit/IFC object.
GraphStep

The whole decode step captured in one CUDA graph — zero Python, zero host sync. 6.40→1.91 ms/step, output-exact, no retraining.

SchemaDraft

A command token fixes the types of all remaining slots, so we draft them in one pass with an [INFILL] embedding and verify. 51% accepted, 1.36× wall clock.

SubBin

A bounded within-bin offset head lifts coordinates off the 5 cm grid. F1@2 cm 0.034→0.071.

A material passport at corpus scale

Synthetic scenes give exact geometry but no material labels. For every element we gather the RGB observations that project onto it and prompt a vision-language model on the resulting crops. Two further cues are computed independently and stored beside the label — not to supply it, but to measure how far it can be trusted.

Material passport extraction pipeline
Surface points are associated to elements, observing keyframes are projected to cut per-element crops, and the fused label is written back as a material- and condition-annotated floor plan.
99,990scenes
1,900,908elements
14materials
5conditions
0join failures

Straight into Revit and IFC

A BIMScript program is already an object model. Our pyRevit add-in creates native Revit walls with one wall type per predicted material, hosted door and window instances, and the material, condition and source id as shared parameters on every element. The same document exports to IFC4.

Decoded program ingested into Revit
A decoded program after ingestion — native Revit walls of the auto-created type BIMScript - concrete, each carrying its predicted attributes.

BIMScript-to-BIM Mapping

BIMScriptRevit API targetIFC entity / property set
make_wallWall.Create (curve, level, height)IfcWall
make_doorhosted FamilyInstance on host wallIfcDoor + IfcRelFillsElement
make_windowhosted FamilyInstance on host wallIfcWindow + IfcRelFillsElement
material=…wall/family-type material parameterIfcMaterial / IfcMaterialLayerSet
condition=…shared parameter (custom)custom Pset (e.g. Pset_Condition)

Results

1,000-scene held-out test split, one greedy decode per scene. Layout is scored over all ground-truth elements; attributes only over elements matched within 10 cm, so coverage should be read alongside them. Latency is batch 1 with GraphStep on one L40S.

ModelF1@5cmAvgF1Cov. Mat. acc.Cond. acc.Paramss/scene
SceneScript public ckpt0.5810.66725.9M1.47
BIMScript (40k)0.5770.6760.7010.6290.84258.4M1.14
BIMScript+ (60k)0.5760.6690.6990.6390.84058.5M1.12

Adding material and condition costs nothing in geometry: the material-aware model matches the layout-only baseline on the same splits. BIMScript+ folds the speed and precision fine-tunes into a single checkpoint that serves plain decoding, draft-and-verify, and sub-bin refinement at once.

Applications

Because a BIMScript program is an object model rather than a mesh, it drops into the tools the AEC industry already runs on — and because it is language, it is equally readable by a large language model.

Scan2BIM

Turn a captured point cloud into an object-level building model automatically, replacing the manual hand-tracing step of conventional scan-to-BIM.

Native Revit & IFC

Programs ingest directly into Revit as native walls and hosted openings carrying material and condition, and export to the open IFC4 standard for exchange.

LLM-driven AEC

A compact, machine-readable inventory an LLM can reason over: embodied-carbon and life-cycle assessment, material passports and circularity, maintenance triage, adaptive reuse.

XRAI4AEC pipeline linking BIM, digital twins and AEC workflows
Proposed integrative XRAI4AEC pipeline linking BIM, DTs and multiple AEC workflows. The pipeline begins with image and pointcloud acquisition from camera and LiDAR sensors, followed by advanced radiance field reconstruction to generate high-LoD 3D building models. A BIM-Script representation is then used to create semantically rich integrated BIM and DT models. Finally, a BIM-LLM trained on BIM-Script data enables reasoning over sustainability-aware tasks including real-estate valuation, lifecycle assessment (LCA), adaptive reuse and disassembly planning, circular-economy-driven waste reduction strategies, and more. See our XR/AI for AEC survey for the broader context.

Limitations

  • Supervision is synthetic, and its material labels are VLM-distilled pseudo-labels — real-scan generalization and label denoising are open.
  • Condition is predicted at the level of “is this the default state or not”: the macro average is carried almost entirely by good, and worn is not recovered.
  • Reproduction is audited against public artifacts, not a verified replication of SceneScript's published system.
  • GraphStep is batch-1 and argmax by construction; SchemaDraft at τ=2 is tolerance-verified rather than output-exact.
  • The Revit and IFC path is validated on programs decoded from synthetic scenes, not yet against professional as-built modeling on real scans.

Code & data

BIMScript

Training, evaluation and decoding code.

coming soon
Material passport

Extraction pipeline and the corpus.

coming soon
BIMScript2Revit

pyRevit add-in and IFC4 export.

coming soon

Citation

@article{naikade2026bimscript,
  title   = {BIMScript: Material-Aware Structured Scene Programs for BIM Ingestion},
  author  = {Naikade, Prakash Kondibhau and Moeslund, Thomas B. and M{\o}gelmose, Andreas},
  journal = {arXiv preprint arXiv:ARXIV_ID},
  year    = {2026}
}