Superficie abstracta con tonos naranja quemado y gris oscuro, textura geométrica sutil Composición minimalista en blanco y gris carbón con líneas diagonales Mancha de color naranja terracota sobre fondo blanco roto Textura de trama en gris medio con acentos violeta apagado Degradado sutil de blanco a gris humo con motas naranja Franja horizontal en rojo ladrillo con tipografía insinuada en gris Collage abstracto con bloques naranja, blanco y carbón Patrón de datos visuales en gris oscuro con destellos lima
BIM BARCELONA

Metodología BIM, software de construcción, sostenibilidad y gestión de instalaciones para profesionales de la arquitectura e ingeniería.

Entorno de trabajo BIM con planos digitales en tonos grises y naranjas

BIM no es arquitectura, es gestión de datos. Descubra cómo la metodología BIM transforma el ciclo de vida del edificio. Leer más

PyRevit: crea tus propios scripts para automatizar Revit

PyRevit se ha convertido en una de las herramientas de referencia para quienes buscan ampliar las posibilidades de Autodesk Revit sin depender exclusivamente del lenguaje C# ni de los complementos oficiales. Se trata de un marco de código abierto, desarrollado originalmente por Ehsan Iran-Nejad, que permite ejecutar código Python directamente dentro del entorno de Revit y exponerlo como botones en la cinta de opciones. Su popularidad ha crecido de forma sostenida porque reduce la barrera de entrada para perfiles técnicos que ya conocen Python pero no la API nativa de Revit.

Para un estudio de arquitectura, una oficina de ingeniería MEP o un equipo de coordinación BIM, las ventajas son claras: tareas repetitivas como renombrar vistas, numerar placas, generar hojas automáticas, auditar familias o extraer parámetros a Excel pueden programarse en minutos y reutilizarse en cada proyecto. La comunidad de usuarios ha publicado cientos de bundles listos para descargar, lo que convierte a PyRevit en un ecosistema vivo donde compartir herramientas resulta tan habitual como hacerlo en GitHub.

Antes de crear tu primer script conviene entender la lógica que sigue esta herramienta. En las próximas secciones se repasa qué es PyRevit, cómo preparar el entorno, la estructura de un bundle, un ejemplo funcional paso a paso y las prácticas recomendadas para depurar y distribuir el código con tu equipo.

Qué es PyRevit y por qué suma frente a otras opciones

PyRevit es, en esencia, una capa de integración entre Python y la RevitAPI que aporta también una interfaz de usuario personalizable. Internamente utiliza IronPython o CPython para ejecutar los archivos .py que el usuario deposita en una carpeta concreta, y los muestra automáticamente en una pestaña o panel de la cinta. Al estar escrito en Python, hereda la legibilidad y la enorme cantidad de librerías disponibles para ese lenguaje, lo que lo hace especialmente atractivo para tareas de procesamiento de datos, lectura de archivos externos o conexión con servicios web.

Existen otras vías para extender Revit, como el plugin oficial de Dynamo con su lenguaje visual, o el desarrollo de add-ins en C# mediante Visual Studio y el Revit SDK. La diferencia clave es el equilibrio entre potencia y curva de aprendizaje. Dynamo permite encadenar nodos sin escribir código, lo cual resulta adecuado para prototipos rápidos pero se vuelve difícil de mantener cuando el flujo crece. El add-in en C# ofrece el máximo rendimiento y control sobre la API, a cambio de un ciclo de compilación, firma y despliegue más lento. PyRevit ocupa un punto intermedio: código Python editable al vuelo, recarga instantánea del bundle y acceso completo a la RevitAPI.

En la práctica, muchos estudios combinan varias de estas herramientas. Un equipo puede usar Dynamo para procesos exploratorios, PyRevit para utilidades del día a día y C# para herramientas críticas de rendimiento. Lo importante es saber cuándo conviene cada uno y no casarse con una única tecnología, ya que la rigidez suele traducirse en flujos frágiles cuando cambia la versión de Revit o las normas del estudio.

Preparar el entorno de trabajo

El primer paso consiste en descargar el instalador desde el repositorio oficial de GitHub de PyRevit y ejecutarlo. El asistente detecta la versión instalada de Revit y registra el módulo en su carpeta de AppData, a la vez que incorpora una nueva pestaña llamada pyRevit a la cinta. Conviene activar también el panel de configuración, desde donde se gestionan los bundles activos, los lenguajes de scripting habilitados y las rutas de carga adicional.

Una decisión relevante es el motor de Python que se utilizará. IronPython 2.7 fue durante años la opción por defecto y sigue siendo válida para scripts sencillos que no requieren librerías modernas. CPython 3.x aporta compatibilidad con paquetes como requests, pandas o numpy, lo que abre la puerta a integraciones avanzadas con bases de datos, hojas de cálculo o servicios en la nube. PyRevit permite cambiar el motor desde su panel de configuración y descargar automáticamente la distribución de Python que se vaya a utilizar, sin necesidad de instalarla por separado ni modificar variables de entorno.

Para escribir el código se recomienda un editor externo. Visual Studio Code es una opción ligera con extensiones para Python y autocompletado de la RevitAPI, mientras que PyCharm ofrece un depurador más robusto y refactorización avanzada. En cualquier caso, el flujo consiste en escribir el script en el editor, guardarlo dentro del bundle correspondiente y recargar la cinta en Revit para que el botón actualizado aparezca sin reiniciar el programa, gracias al mecanismo de hot-reload que distingue a PyRevit.

Estructura de un bundle y anatomía de un script

Todo lo que PyRevit muestra al usuario se organiza dentro de un bundle, que no es más que una carpeta con una estructura concreta. En la ruta Documents\pyRevit\extensions se sitúa el archivo .extension, un YAML ligero con los metadatos del paquete: nombre, autor, versión y dependencias. Dentro de esa carpeta principal se crean subcarpetas llamadas bundles, cada una correspondiente a un módulo funcional con su propio nombre, icono y descripción.

Dentro de cada bundle aparecen los paneles, que organizan los botones visualmente, y las carpetas de scripts o paneles compuestos. Un script individual es simplemente un archivo .py que contiene una función llamada entry_script() o, en su forma más simple, un comando hereda de la clase PushButton de pyrevit.framework. La librería pyRevit incluye también helpers como script.get_output() para mostrar texto en el panel de salida, output.print_md() para formatear Markdown y forms para crear ventanas básicas sin recurrir a WPF, lo que abarata el desarrollo de interfaces ligeras.

Un buen hábito desde el inicio es respetar una convención de nombres para los bundles, usar prefijos que identifiquen al estudio y mantener una carpeta común versionada. Esto facilita compartir las herramientas entre proyectos y recuperarlas tras un formateo del equipo. También conviene separar los scripts puramente utilitarios de aquellos que dependen de plantillas o normas específicas del estudio, ya que los primeros suelen sobrevivir más allá de un único cliente y se convierten en una biblioteca estable.

Tu primer script funcional

Supongamos que se necesita renombrar todas las vistas de un proyecto siguiendo un patrón como "NIVEL XX - NOMBRE". Un script en PyRevit puede iterar por las vistas del documento activo, leer sus parámetros y renombrarlas en bloque. Para ello se importa el módulo Autodesk.Revit.DB, se obtiene el Document a través de revit.ActiveUIDocument.Document y se construye un FilteredElementCollector filtrado por la categoría OST_Views.

A partir de ahí, el código Python apenas se diferencia de un script en C#: se obtiene el Name del elemento, se construye la cadena definitiva y se aplica el renombrado mediante una transacción. Es importante envolver cualquier modificación del modelo dentro de un bloque using Transaction, ya que la RevitAPI exige transacciones explícitas para escribir en el documento. Tras ejecutar el script, el botón aparecerá en la cinta y mostrará un resumen del número de vistas renombradas en el panel de salida de pyRevit, lo que permite auditar de un vistazo el resultado de la operación.

Este patrón sirve como base para utilidades más ambiciosas. Empresas que trabajan en sectores concretos, desde instalaciones industriales hasta el diseño de terrazas exteriores, recurren a PyRevit para generar automáticamente familias paramétricas, documentar componentes repetitivos o validar que los modelos cumplen normativas internas antes de cada entrega. La inversión inicial de tiempo en aprender la API se amortiza rápidamente cuando los scripts se reutilizan proyecto tras proyecto y se combinan en flujos mayores de control de proyecto.

Depuración, distribución y mantenimiento a largo plazo

La depuración de scripts en PyRevit se apoya en varias técnicas. La más directa es el uso de print() o output.print_md() para volcar valores intermedios en el panel de salida. Para errores más sutiles conviene habilitar el modo de depuración desde la configuración, que muestra el traceback completo cuando un script falla. Cuando se trabaja con CPython se puede además conectar un depurador externo como el de VS Code al proceso de Revit, lo que permite poner puntos de interrupción paso a paso y examinar el estado de los objetos de la API.

La distribución al resto del equipo se resuelve de varias formas. La más sencilla consiste en compartir la carpeta de extensiones por red, copiando los bundles actualizados en la ruta Documents\pyRevit\extensions de cada usuario. Para equipos distribuidos resulta más cómodo alojar el código en un repositorio de Git y usar un script de clonado o una tubería de CI que genere un instalador .exe mediante la utilidad CLI de PyRevit. De esta forma cualquier miembro del equipo puede actualizar todas las herramientas con un único comando, manteniendo la coherencia entre proyectos y reduciendo los errores por versiones divergentes.

El mantenimiento a largo plazo pasa por documentar cada bundle con un README, mantener dependencias declaradas en el archivo .extension y revisar periódicamente la compatibilidad con cada nueva versión de Revit. La API introduce cambios menores cada año y algunas propiedades se deprecan, por lo que conviene reservar tiempo en cada sprint para actualizar los scripts. Con el tiempo, una buena colección de bundles acaba siendo un activo del estudio tan valioso como las propias plantillas de proyecto, y un diferenciador frente a competidores que siguen resolviendo manualmente tareas que podrían automatizarse.

Aspecto PyRevit Dynamo Add-in C#
Lenguaje Python Visual / DesignScript C#
Curva de aprendizaje Media Baja Alta
Velocidad de iteración Alta, con recarga inmediata Alta Media
Acceso a la RevitAPI Completo Parcial mediante nodos Completo
Distribución al equipo Carpeta o instalador .exe Carpeta de paquetes Instalador firmado MSI
Mejor uso Utilidades de productividad Flujos exploratorios Herramientas críticas de rendimiento