BUI lleva la interfaz de Blender a Rust, Python, JS, C y C++

BUI lleva la interfaz de Blender a Rust, Python, JS, C y C++

@programacion

Lo esencial

  • BUI desacopla el motor de interfaz de Blender en una librería en C con bindings multilenguaje.
  • El proyecto de ppmpreetham está en GitHub, con documentación completa en bui.preetham.top.
  • Soporta Rust, Python, JavaScript, C, C++ y Dear ImGui real como backends de interfaz.
  • Renderiza en CPU o GPU y reutiliza el código widget de Blender, interface_widgets.cc.
  • Se posiciona frente a Electron (sin navegador ni webview) y frente a GPUI, de Zed.

Qué es BUI y de dónde sale

El proyecto BUI toma el motor de interfaz de Blender, construido durante más de dos décadas, y lo convierte en una librería independiente para usar en cualquier lenguaje. Según su repositorio en GitHub, el código corre en Rust, Python, JavaScript, C y C++, sin necesidad de instalar Blender ni conocerlo.

La librería no es una reinvención: el dibujo de los widgets es un port directo de interface_widgets.cc, el archivo que dibuja cada botón y slider de Blender desde hace años. BUI tampoco es un navegador; los bindings de Rust y JavaScript usan HTML y CSS solo como lenguaje para describir la interfaz, sin motor web ni proceso aparte.

Qué es una UI acelerada por GPU

Una interfaz acelerada por GPU dibuja cada botón, texto y panel como geometría que la tarjeta gráfica renderiza directamente, en lugar de pedirle al sistema operativo que pinte cada widget uno por uno. Así, mover un slider, abrir un menú o redimensionar una ventana no dispara miles de llamadas a la API de dibujo del sistema, sino que la GPU actualiza solo lo que cambió en pantalla.

Blender adoptó ese modelo porque sus paneles responden a cientos de interacciones por segundo: arrastrar un valor numérico, rotar una vista 3D o escribir en un buscador sin que la interfaz se congele. BUI hereda ese mismo pipeline de dibujo, con damage rendering: redibuja solo la región de la pantalla que realmente cambió.

Cómo funciona por dentro: el kit en C

En el centro de BUI está lo que el proyecto llama el kit, un runtime escrito en C que mantiene en un solo árbol todos los widgets de la aplicación. Ese kit resuelve el layout, procesa el mouse y el teclado, y dibuja cada elemento siguiendo las reglas de interacción de Blender.

Sobre el kit se apoyan los bindings: capas delgadas que traducen las llamadas de Python, Rust, JavaScript, C++ y Dear ImGui hacia esa misma base en C. Una app en Python y otra en Rust comparten así el mismo motor de renderizado, no dos implementaciones distintas con comportamientos ligeramente diferentes.

BUI frente a Electron

Electron empaqueta un navegador Chromium completo dentro de cada aplicación: motor de layout, motor de JavaScript, proceso de red y renderizador, todo para mostrar botones y texto. Por eso una app de Electron en reposo puede consumir cientos de megabytes de RAM solo para mantener el navegador vivo en segundo plano.

BUI ataca el mismo problema, interfaces ricas y multiplataforma sin reescribir widgets nativos por sistema operativo, pero sin webview ni motor de navegador. El costo es que BUI no tiene el ecosistema de extensiones ni el soporte de accesibilidad que Chromium acumuló en más de una década; el propio proyecto lo reconoce como limitación conocida.

BUI frente a GPUI

GPUI es el framework de interfaz en Rust que usa el editor Zed, también pensado para renderizar en GPU y evitar el costo de un navegador embebido. La diferencia está en el origen: GPUI nació atado a las necesidades de un editor de texto, mientras que BUI parte de una interfaz probada durante años en una aplicación de uso intensivo como Blender, y la expone para cinco lenguajes a la vez.

El README del proyecto afirma rendir el doble que GPUI, pero la documentación revisada no publica un benchmark reproducible con metodología abierta. La forma correcta de verificarlo es correr el benchmark incluido en la carpeta bench del repositorio y comparar los números en tu propia máquina, no tomar la cifra como dato cerrado.

Un primer ejemplo

La instalación depende del lenguaje. Para Python, lo esperable (el repo trae pyproject.toml) es un paquete instalable con pip, igual en Windows, macOS y Linux:

# Windows (PowerShell)
pip install bui-kit

# macOS
pip3 install bui-kit

# Linux
pip3 install bui-kit

Un primer programa, siguiendo el patrón de callbacks que describe la documentación del proyecto, se vería así:

import bui

ventana = bui.Window(title="Panel de render", width=400, height=250)
panel = bui.Panel(ventana)

boton = bui.Button(panel, label="Renderizar escena")
boton.on_click(lambda: print("Render iniciado"))

ventana.run()

Este bloque crea una ventana, agrega un panel con un botón y registra una función para cuando se hace clic: el mismo patrón de evento de tkinter o Qt, pero dibujado con el motor de Blender.

Limitaciones reales

El propio proyecto lista limitaciones antes de recomendarse para producción. Todavía no hay soporte de accesibilidad, no soporta métodos de entrada para idiomas como japonés o chino, y la interfaz se ve como Blender, no como el sistema operativo del usuario.

Para una app dirigida a artistas que ya usan Blender eso es una ventaja. Para una herramienta pensada para público general, puede sentirse ajena, y tampoco sirve si el objetivo es aprovechar el ecosistema de componentes web: BUI usa HTML y CSS solo como sintaxis para describir el árbol de widgets, sin motor de renderizado web detrás.

Por qué importa

La aparición de BUI confirma una tendencia. Cada vez más equipos prefieren extraer el motor de renderizado de una aplicación grande y madura, en lugar de escribir un framework de UI desde cero o cargar un navegador completo para mostrar un formulario. GPUI, egui y ahora BUI comparten esa misma apuesta: dibujar directo sobre la GPU, sin DOM ni proceso de navegador de por medio.

Para un equipo que construye una herramienta de escritorio multiplataforma, la decisión entre estas opciones depende de qué interfaz quiere que reconozcan sus usuarios: la de su propio sistema operativo, una interfaz neutral tipo editor de código, o los hábitos de millones de artistas que ya conocen Blender.

Conclusión

BUI no reemplaza a Electron ni a GPUI en todos los casos, pero demuestra que el motor de interfaz de una aplicación con más de 20 años de desarrollo puede desacoplarse y reutilizarse en cinco lenguajes distintos sin perder su velocidad. Si tu app necesita paneles y sliders al estilo de software 3D, vale la pena revisar el repositorio antes de sumar un navegador completo a tu stack.

📖 Versión extendida con más detalle: https://elsolitario.org/2026/11/06/ui-acelerada-por-gpu-que-es-y-como-se-compara/?utm_source=telegraph&utm_medium=instant_view&utm_campaign=programacion

Report Page