Hay un momento en la vida de todo el que tiene una impresora 3D en el que empieza a ver los límites del firmware de fábrica. El mío llegó cuando quise imprimir a 150mm/s y las capas empezaron a quedar como si las hubiera dibujado borracho.
El firmware stock de las impresoras, casi siempre Marlin, hace su trabajo. Pero tiene un diseño que viene de otra época: corre en el microcontrolador de la propia placa de la impresora, con poca RAM, poca potencia de cómputo, y configuración que requiere recompilar el firmware para cambiar cualquier parámetro. Quieres ajustar la aceleración: recompilas. Quieres habilitar input shaping: recompilas. Quieres cambiar los pasos por mm porque compraste motores nuevos: recompilas.
Klipper tiene una arquitectura distinta. El control real de los motores y sensores sigue en la placa, pero el cerebro se mueve a una Raspberry Pi o cualquier ordenador Linux que tengas por ahí. Ahí corre Python. Y eso cambia todo.
Qué es Klipper exactamente#
Klipper es un firmware de código abierto para impresoras 3D con una arquitectura dividida en dos partes:
El “host” corre en Linux (Raspberry Pi 4 en mi caso, aunque también funciona en una Pi Zero 2W o en una VM). Aquí está el motor de planificación de movimientos, el procesador de GCode, el servidor de red y la lógica de corrección de errores. Es código Python, bien escrito, que puede usar toda la potencia de un procesador moderno.
El “MCU” es el microcontrolador de la placa original de tu impresora. Solo hace una cosa: ejecutar los pasos de motor que el host le manda, con microsegundos de precisión. Le quitamos todo el trabajo pesado y lo dejamos hacer lo que sabe hacer bien.
La comunicación entre ambos es por USB o UART. El host calcula los movimientos con bastante antelación y los manda al MCU en bloques. Si el MCU se adelanta o atrasa, el host ajusta. El resultado es una sincronización mucho más precisa de lo que Marlin puede lograr con el microcontrolador calculando en tiempo real.
Por qué me cambié#
Mi impresora era capaz de más de lo que el firmware le dejaba dar. Con Marlin, imprimir a más de 80mm/s en piezas con detalles finos resultaba en esquinas deformadas y vibraciones que quedaban impresas en las paredes. El input shaping de Marlin existe pero es complicado de configurar y no tan eficaz.
Con Klipper activé resonance compensation (input shaping) midiendo la resonancia real de mi estructura con un acelerómetro conectado a la Pi. El proceso tarda unos 10 minutos. El software genera la configuración correcta automáticamente. Y pasé de tener que frenar a 80mm/s a imprimir limpio a 200mm/s en perimetrales y 300mm/s en relleno interno.
Eso en la misma impresora, con los mismos motores y la misma mecánica.
Luego está la configuración. Todo está en un archivo de texto (printer.cfg) que edito desde el navegador o con cualquier editor. Para cambiar cualquier parámetro, edito el archivo y hago “restart firmware”. Sin compilar, sin flashear, sin esperar. El historial de cambios va en git si quiero.
Hardware que necesitas#
Para correr Klipper necesitas un ordenador Linux separado de la placa de la impresora. Las opciones más comunes:
Raspberry Pi 4 (2GB): la opción estándar. Funciona perfecto, tiene USB, WiFi, y aguanta bien el calor típico de un despacho con impresora. El problema es el precio en 2026, que sigue siendo más alto de lo razonable por escasez.
Raspberry Pi Zero 2W: suficiente para Klipper en impresoras de un solo extrusor. Impresión normal a velocidades normales va bien. Para el input shaping con acelerómetro es un poco justito pero funciona. Precio mucho más razonable.
Orange Pi Zero 3: alternativa económica que uso en un segundo puesto. 1.5GHz, 1GB RAM, WiFi. Klipper le va bien para impresoras no muy exigentes.
Un mini PC reciclado: si tienes un N100 o un NUC viejo, también funciona. Yo tengo una VM en Proxmox dedicada a esto para la impresora del estudio, aunque para impresoras en el taller prefiero una Pi física cerca de la máquina.
Para el input shaping necesitas un acelerómetro ADXL345, que cuesta unos 3 euros en Amazon. Te lo conectas a los pines SPI de la Pi y a la estructura del cabezal durante la calibración. Luego lo puedes quitar.
Instalación paso a paso#
Voy a cubrir la instalación con KIAUH (Klipper Installation And Update Helper), que es el método que uso porque automatiza todo el proceso.
Primero flashea Raspberry Pi OS Lite en tu Pi (sin escritorio, ahorras RAM y CPU). Conéctala a la red y entra por SSH:
| |
Actualiza el sistema:
| |
Descarga KIAUH:
| |
Se abre un menú de texto. Selecciona “1) [Install]” y luego instala en este orden:
- Klipper
- Moonraker (API que conecta Klipper con las interfaces web)
- Mainsail o Fluidd (tu interfaz web, son equivalentes)
El proceso tarda unos 10-15 minutos. Al terminar tienes Klipper corriendo como servicio y Mainsail accesible en http://ip-de-tu-pi.
Ahora toca flashear el firmware en la placa de tu impresora. Desde la Pi:
| |
Aquí seleccionas el microcontrolador correcto para tu placa. Cada fabricante usa MCUs distintos. Para una placa con STM32F103 (muy común en impresoras chinas):
- Micro-controller Architecture: STMicroelectronics STM32
- Processor model: STM32F103
- Bootloader offset: 28KiB bootloader (en la mayoría de casos)
Para una Prusa con EINSY Board (Atmega2560):
- Micro-controller Architecture: Atmel AVR
- Processor model: atmega2560
Compilas:
| |
Esto genera un archivo out/klipper.bin (para STM32) o similar. Lo copias a una tarjeta SD o lo flasheas por USB según tu placa, igual que harías con cualquier firmware.
Una vez que la placa está flasheada, Klipper la detecta automáticamente. Ve a la interfaz web y busca los logs de inicio para confirmar que la conexión MCU está activa.
El archivo printer.cfg#
Este es el corazón de Klipper. Un archivo de configuración en INI que describe completamente tu impresora: pines GPIO de cada motor, pasos por mm, aceleración máxima, sensores de temperatura, offsets del BLTouch…
Un ejemplo básico de la sección de un motor X con un driver TMC2209:
| |
Cada parámetro que cambies se aplica al siguiente restart del firmware sin recompilar nada. Es una diferencia enorme cuando estás calibrando: ajustar los pasos por mm de los ejes es editar un número y reiniciar, no una odisea de compilación.
Input shaping: la función que más marca la diferencia#
El input shaping (en Klipper se llama resonance compensation) es una técnica que cancela las frecuencias de resonancia de la estructura de la impresora para evitar el “ringing” en las paredes.
El ringing es ese efecto de ondas que aparece en las paredes de la pieza después de las esquinas, causado por las vibraciones que genera el cambio de dirección del cabezal. A velocidades altas es muy visible. A velocidades bajas es menos notable pero existe.
Para activarlo necesitas el acelerómetro ADXL345. Lo conectas al cabezal de tu impresora y lo enchufas a los pines SPI de la Raspberry Pi:
| |
En printer.cfg añades:
| |
Desde la consola de Klipper ejecutas:
| |
La impresora hace una serie de movimientos oscilantes mientras mide las vibraciones con el acelerómetro. Al terminar te propone los parámetros óptimos y puedes aceptarlos con SAVE_CONFIG. Se escriben solos en tu printer.cfg.
Mis resultados después de calibrar:
- Frecuencia X: 68.4 Hz, algoritmo MZV, vibración residual 5.9%
- Frecuencia Y: 44.2 Hz, algoritmo MZV, vibración residual 2.6%
Antes de calibrar: máxima velocidad sin ringing visible en pruebas de Square Tower = 80mm/s. Después: 200mm/s perimetrales, 300mm/s relleno interno. El mismo hardware.
Moonraker y la API REST#
Una de las partes que menos se menciona de Klipper pero que más me gusta en el contexto del homelab es que Moonraker expone una API REST completa. Puedes consultar el estado de la impresora, enviar GCode, monitorizar temperaturas o cancelar impresiones desde cualquier script o sistema de automatización.
Ejemplo: tengo un cron job que cada hora guarda en InfluxDB el estado de la impresora mientras está en marcha. Si se para por error, me avisa por mensaje. Todo via la API de Moonraker.
| |
Esto es algo que Marlin directamente no tiene. Si quieres monitorizar tu impresora con Marlin necesitas OctoPrint o un plugin específico. Con Klipper y Moonraker, la API está incluida.
Klipper Backup con git#
Una práctica que recomiendo desde el primer día: guarda tu printer.cfg en git. El archivo puede estar en cualquier repo privado de Gitea o GitHub. Klipper tiene una extensión llamada klipper-backup que hace commit automático de tu configuración cada vez que la cambias.
La instalas con KIAUH y en 5 minutos tienes historial completo de todos los cambios en tu configuración. Si rompes algo ajustando el pressure advance a las 2 de la mañana, git revert y listo.
Lo que pierdes con Klipper#
Toca reconocerlo: Klipper tiene algunos inconvenientes reales.
Dependencia de la Pi: si la Pi se cuelga o se va la luz, la impresión se para. Marlin puede recuperar impresiones desde donde se quedó después de un corte de luz. Klipper puede hacerlo con el plugin de “Power Loss Recovery” pero no es tan robusto como en Marlin.
Curva de configuración inicial: el printer.cfg puede intimidar. Configurar bien los TMC2209 en modo UART, los offsets del bed mesh, el probe Z… hay bastante que entender. Marlin tiene una curva parecida pero más documentada para placas comunes.
No funciona offline: bueno, funciona, pero pierdes la interfaz web si no tienes red. En un taller sin red local esto puede ser un problema. Marlin tiene la pantalla de la impresora como interfaz siempre disponible.
Mi setup actual#
- Impresora: Prusa Core One L con extrusor Revo
- Host: Raspberry Pi 4 de 2GB dedicada
- Interfaz: Mainsail (por encima de Fluidd en términos de UX en mi opinión)
- Cámara: Logitech C920 integrada en Mainsail para timelapse
- Velocidades actuales: 200mm/s perimetrales, 300mm/s relleno, 50mm/s primera capa
- Input shaping: activo, calibrado con ADXL345
El tiempo de impresión de piezas habituales bajó entre un 35% y un 45% respecto a Marlin en las mismas velocidades teóricas. La diferencia es real.
Si tienes una impresora que llevas tiempo queriendo exprimir más, Klipper merece la pena. La instalación inicial requiere un par de horas y leer documentación, pero el resultado es una impresora que responde diferente. No es magia, es firmware.