Múltiples instancias Klipper

Una de las ventajas de la arquitectura de Klipper es que el host puede controlar varias impresoras al mismo tiempo. Cada impresora necesita su propia instancia de Klipper y Moonraker, pero todas comparten el mismo SBC, la misma red y pueden gestionarse desde una sola interfaz web.

Esta guía cubre el proceso completo: instalación, gestión de serial USB, configuración de interfaces y las preguntas más frecuentes.

Requisitos previos

  • KIAUH instalado y funcionando en tu host. Si aún no lo tienes, sigue la guía de instalación.

  • Punto de partida limpio: instalación recién hecha, o instalación existente completamente actualizada con todas las instancias funcionando.

  • Python 3.8 o superior (KIAUH v6+ lo requiere y lo verifica automáticamente).

KIAUH v6 (lanzado en octubre 2025) es una reescritura completa del instalador en Python. Si tienes una versión anterior basada en bash, actualiza con:

cd ~/kiauh && git pull

El proceso de instalación de múltiples instancias es funcionalmente el mismo, aunque la interfaz de menús puede verse diferente a las capturas de esta guía.

Nomenclatura — nombres de instancia

Cuando KIAUH instala varias instancias, te permite elegir entre dos modos:

  • Nombres por defecto (numérico): las instancias se llaman printer, printer_2, printer_3... Los directorios de datos serán ~/printer_data/, ~/printer_2_data/...

  • Nombres personalizados: puedes poner nombres descriptivos como voron, ender3, artillery. Los directorios serán ~/voron_data/, ~/ender3_data/...

Recomendación: usa nombres personalizados siempre que puedas. Hace que todo sea mucho más fácil de identificar: servicios, logs, configuraciones y URLs tienen el nombre de la impresora.

Estructura de directorios

Tras instalar múltiples instancias con KIAUH, cada instancia tiene su propio directorio de datos con esta estructura:

Cada instancia es completamente independiente en cuanto a datos, configuraciones y logs.

Puertos asignados por instancia

KIAUH asigna los puertos automáticamente según el orden de instalación:

Instancia
Moonraker API
Interfaz web (Nginx)

1ª instancia

7125

80

2ª instancia

7126

81

3ª instancia

7127

82

4ª instancia

7128

83

Para acceder a la segunda impresora desde el navegador: http://IP_DEL_HOST:81

Para ver los puertos activos en cualquier momento, desde SSH:

O con más detalle:

Servicios systemd

Cada instancia crea sus propios servicios de sistema. Con nombres personalizados:

Con nombres por defecto:

Comandos útiles para gestionar instancias individualmente


Instalación paso a paso con KIAUH

Paso 1 — Instalar varias instancias de Klipper

Lanza KIAUH desde SSH:

En el menú inicial, KIAUH muestra el número de instancias instaladas y la versión de cada componente.

  • Selecciona #1 Install

  • Selecciona #1 Klipper

    • Elige la versión de Python (selecciona Python 3, que es la única opción válida actualmente)

    • Indica el número de instancias que quieres instalar

    • KIAUH te preguntará si quieres personalizar los nombres — di que sí y pon nombres descriptivos

Klipper se descarga e instala para cada instancia. Al terminar vuelves al menú principal.

Paso 2 — Instalar varias instancias de Moonraker

  • Selecciona de nuevo #1 Install

  • Selecciona #2 Moonraker

    • KIAUH te preguntará el número de instancias. Debe coincidir con el de Klipper (el menú ya te muestra las instancias existentes como referencia).

Al terminar, KIAUH muestra las IPs y puertos asignados a cada instancia de Moonraker:

Anota estos datos — los necesitarás para configurar las interfaces web.

Paso 3 — Instalar la interfaz web

Tienes dos opciones:

Opción A — Una interfaz compartida (recomendada)

Instala Mainsail o Fluidd una sola vez. Desde esa interfaz puedes gestionar todas las impresoras añadiéndolas como impresoras adicionales (ver sección de gestión más abajo). Es la opción más limpia y consume menos recursos.

Opción B — Una interfaz por instancia

Instala Mainsail o Fluidd tantas veces como instancias, cada una en su propio puerto. Útil si diferentes personas deben controlar impresoras distintas de forma independiente.

Para instalar una segunda interfaz: selecciona #1 Install → #3 Mainsail (o Fluidd) y repite el proceso.


El problema del serial USB con electrónicas idénticas

Esta es la pregunta más frecuente cuando se configuran múltiples instancias: si tengo dos impresoras con la misma placa (por ejemplo, dos Ender 3 con placa Creality original), ¿cómo las diferencio?

El problema está en el chip USB. Muchas placas económicas usan chips CH340 que no tienen un número de serie único grabado. Cuando Klipper busca la MCU por by-id, ambas placas tienen el mismo identificador y no sabe a cuál conectarse.

Tienes tres soluciones:

Solución 1 — Serial by-path (más sencilla)

En lugar de usar el ID del dispositivo, usas el puerto USB físico del host. El sistema operativo asigna un path diferente a cada puerto, independientemente del dispositivo conectado.

Ejemplo de resultado:

En el printer.cfg de cada impresora:

Solución 2 — ID USB personalizado en el firmware (más robusta)

Cuando compilas el firmware Klipper para tu MCU, puedes establecer un número de serie USB único para cada placa. Así aunque ambas tengan el mismo chip CH340, Klipper las distingue por el ID personalizado.

En el proceso de compilación del firmware (make menuconfig), busca la sección USB ids y establece un valor único por impresora:

Tras flashear cada MCU con su firmware personalizado, ls /dev/serial/by-id/* mostrará identificadores diferentes y podrás usar by-id con normalidad.


Gestión desde las interfaces web

Mainsail — gestionar múltiples impresoras

Mainsail puede gestionar todas las instancias desde una sola ventana del navegador. Añade cada impresora así:

  • Ve a Configuración (icono de engranajes) → Printers

  • Pulsa ADD PRINTER e introduce la IP y puerto de Moonraker de cada instancia:

Instancia
Host
Puerto

Impresora 1

IP_HOST

7125

Impresora 2

IP_HOST

7126

Impresora 3

IP_HOST

7127

Una vez añadidas, puedes cambiar entre impresoras desde la barra superior de Mainsail sin cambiar de URL. También puedes acceder a cada una directamente desde http://IP_HOST:80, http://IP_HOST:81, etc.

Fluidd — gestionar múltiples impresoras

Fluidd funciona de forma similar a Mainsail. Ve a Configuración → Impresoras y añade cada instancia con su IP y puerto de Moonraker.

También puedes acceder a cada instancia directamente por su puerto Nginx (http://IP_HOST:80, :81, :82...).

KlipperScreen — múltiples impresoras en pantalla táctil

KlipperScreen puede mostrar y gestionar varias impresoras desde una única pantalla. Edita el fichero KlipperScreen.conf y añade una sección [printer ...] por cada impresora:

Si las impresoras están en hosts diferentes, pon la IP correspondiente en moonraker_host.

En KlipperScreen aparecerá un selector en la pantalla de inicio para elegir con qué impresora operar.


Configuración de printer.cfg y moonraker.conf

printer.cfg

Cada instancia tiene su propio printer.cfg en ~/NOMBRE_data/config/printer.cfg. No hay nada especial respecto a una instalación única — simplemente configura cada uno para su impresora.

moonraker.conf

El fichero moonraker.conf de cada instancia es generado automáticamente por KIAUH con el puerto correcto. Raramente necesitas editarlo, pero es útil entender los parámetros clave:

El parámetro klippy_uds_address es el socket Unix que conecta Moonraker con Klipper. Cada instancia tiene el suyo propio en su directorio comms/. KIAUH lo configura correctamente de forma automática — no lo cambies.

Update Manager en Moonraker

Para que Mainsail/Fluidd muestre las actualizaciones disponibles de cada instancia correctamente, el moonraker.conf de cada instancia debe tener su propia sección [update_manager]:


Añadir una instancia adicional a una instalación existente

Si ya tienes una instancia funcionando y quieres añadir una segunda sin reinstalar todo:

  • Lanza KIAUH y selecciona #1 Install → #1 Klipper

  • KIAUH detecta que ya tienes instancias instaladas y te ofrece añadir una nueva sin tocar las existentes

  • Indica el número total de instancias que quieres tener (existentes + nuevas)

  • Repite el proceso para Moonraker


Cámaras con Crowsnest

Crowsnest gestiona las cámaras USB y las expone como streams MJPEG o HLS accesibles desde Mainsail/Fluidd.

Recomendación para múltiples impresoras: usa una sola instancia de Crowsnest gestionando todas las cámaras. Es más sencillo de mantener y Crowsnest puede manejar varias cámaras sin problema.

En tu crowsnest.conf (en ~/printer_data/config/crowsnest.conf de la primera instancia):

En el moonraker.conf de cada instancia, referencia el stream correcto:

Si necesitas instancias separadas de Crowsnest

Si prefieres instancias independientes (por ejemplo, para que el fallo de una no afecte a las demás), el proceso es manual ya que Crowsnest no tiene soporte nativo multi-instancia en su instalador:

El asistente te preguntará el directorio de datos para esta instancia. Repite tantas veces como necesites, luego:

Reinicia el host al terminar y añade la entrada de Update Manager en el moonraker.conf correspondiente.


Dimensionamiento del host

Una guía orientativa para no quedarse corto:

Número de instancias
Hardware mínimo
Hardware recomendado

2 impresoras

Raspberry Pi 3B+, 1 GB RAM

Raspberry Pi 4, 2 GB RAM

3-4 impresoras

Raspberry Pi 4, 2 GB RAM

Raspberry Pi 4, 4 GB RAM

5+ impresoras

Raspberry Pi 4/5, 4 GB RAM

Raspberry Pi 5, 8 GB RAM

Estos valores asumen impresoras en operación normal. Si añades cámaras con timelapse, Input Shaper en curso o compilación de firmware simultánea, multiplica los requisitos.

Puedes monitorizar la carga del sistema con:


Acceso remoto con múltiples instancias

Si usas OctoEverywhere o Obico para acceso remoto, cada instancia de Moonraker requiere su propio registro. El proceso es el mismo que con una sola instancia, pero repitiendo el emparejamiento para cada puerto.

Para OctoEverywhere:

  • Ve a http://IP_HOST:80 (instancia 1) y sigue el proceso de enlace

  • Ve a http://IP_HOST:81 (instancia 2) y repite

Cada instancia tendrá su propio enlace de acceso remoto independiente.


Troubleshooting — Problemas frecuentes

Klipper no arranca en una instancia

Los errores más comunes son:

  • Serial no encontrado: el cable USB no está conectado, el path by-path cambió porque se conectó a otro puerto, o el ID by-id es incorrecto.

  • Error de configuración: algún parámetro de printer.cfg tiene un error de sintaxis. El log lo indica con el fichero y la línea exacta.

  • Puerto ocupado: otro proceso ya usa el socket de comunicación. Reinicia ambos servicios (klipper y moonraker) de esa instancia.

Confundo qué serial pertenece a qué impresora

Con by-path, identifica cada puerto físico USB del host y etiquétalo. Para by-id con firmware personalizado, documenta qué ID pusiste en cada placa.

Un truco: desconecta todas las placas excepto una y lanza ls /dev/serial/by-id/* — solo aparecerá la que dejaste conectada. Repite para cada una.

Moonraker no conecta con Klipper en una instancia

Verifica que el socket klippy_uds_address en moonraker.conf apunta al directorio correcto de esa instancia:

Si no existe pero Klipper está corriendo, hay un problema en la ruta configurada. Revisa moonraker.conf de esa instancia.

Una interfaz web muestra la impresora equivocada

Comprueba a qué puerto Moonraker estás conectando. La instancia 1 usa 7125, la 2 usa 7126. En Mainsail/Fluidd, ve a la configuración de impresoras y verifica que cada entrada apunta al puerto correcto.

Tras actualizar Klipper, solo se actualiza una instancia

Verifica que el managed_services en la sección [update_manager] de cada moonraker.conf tiene el nombre correcto del servicio systemd de esa instancia.

Los logs crecen mucho con varias instancias

Moonraker gestiona la rotación de logs automáticamente. Si los logs son excesivamente grandes, puedes reducir el nivel de verbosidad en el moonraker.conf:


Checklist de verificación final

Antes de dar por buena la instalación múltiple, verifica:

Última actualización