Archive

Tutorials

  • Connect Claude to Revit Using PyRevit’s MCP Server

    Model Context Protocol (MCP) is a standard way to give an AI assistant access to applications. In the context of Revit, I can have an LLM talk to Revit directly rather than building a Revit addin or macro. In this post, I’ll show you how to create a pipeline with three pieces: Claude → MCP…

    Connect Claude to Revit Using PyRevit’s MCP Server
  • Revit Macro First, Revit Addin Later

    Add-ins are undeniably the gold standard for deploying scalable tools in Revit (yes, even better than Dynamo Player in most cases). But if your goal is rapid automation and getting things done ASAP, going straight to Add-in development can slow you down. Here’s how to start with a macro.

    Revit Macro First, Revit Addin Later
  • PSA: You Can’t move the origin of a generic annotation symbol.

    Did you know that you can’t actually change the origin point of a Generic Annotation family? For example, if you wanted to change the origin reference plane of a Generic Annotation nested into a parent family so that you can constrain it at the end instead of the center of the symbol.

    PSA: You Can’t move the origin of a generic annotation symbol.
  • How to Push to Multiple Git Repositories Simultaneously

    Keeping two distinct Git repositories in sync—like a public GitHub repository and a private internal Git server—can be a tedious chore if you are manually pushing to them one by one. If one push succeeds and the other is forgotten, your codebases immediately drift out of sync. The most elegant solution is configuring a “dual-push”…

    How to Push to Multiple Git Repositories Simultaneously
  • How I Develop Apps On My Phone While Sitting in Manila Traffic

    Dev tools have officially gotten to the point where a mobile phone is now a legitimate place to ship code from. Not “read the code.” Not “approve a PR.” Actually implement a feature and have it live on your server two minutes later.

    How I Develop Apps On My Phone While Sitting in Manila Traffic
  • The Struggle is Real: Migrating from Unifi to Content Catalog

    It’s no secret that the landscape of Revit content management is shifting. Since Autodesk acquired Unifi in 2023, the roadmap has become clear: Unifi is close to being deprecated in favor of Autodesk Content Catalog. Sounds simple, right? Not quite. We all know where we are going, but getting your BIM content from Point A…

    The Struggle is Real: Migrating from Unifi to Content Catalog
  • How I Used AI to Downgrade a Revit Family From 2024 to 2022

    What if Revit families were backwards compatible? Could we use AI and a little C# coding to force Revit 2024 to talk to Revit 2022?

    How I Used AI to Downgrade a Revit Family From 2024 to 2022
  • Taming the Wild West of Asset Naming: How AI & The Ephany API Brought Order to Our Asset Catalog

    Most organizations treat naming conventions as a manual chore, which is why their catalogs eventually become a mess of “2-Sided” vs “Two-Sided” inconsistencies. I decided to stop fighting that battle by hand and used AI to build a logic-based “wrangler” script, then used the Ephany API to push those standards across our entire catalog in…

    Taming the Wild West of Asset Naming: How AI & The Ephany API Brought Order to Our Asset Catalog
  • Sample Ephany API Calls in Python

    This post contains a collection of code snippets and examples that demonstrate how to use the Ephany Framework API. As the project evolves, I’ll continue adding practical, copy-and-paste samples that show how to connect to your asset data, query your catalogs, integrate with your applications, and build on top of the framework. Whether you’re a…

    Sample Ephany API Calls in Python
  • Error Opening an IFC Model in Revit

    When attempting to open an IFC model in Revit, I received the following warning which caused the model to not open properly. I noticed the Revit warning provided a link to a log file saved to the same location as the IFC. I went ahead and opened the log file in a plain text editor…