Antes de tener OctoPrint, mi relación con la impresora 3D era físicamente exigente. Copiar el archivo en una tarjeta SD, llevarla a la impresora, insertarla, navegar los menús con la ruedecita, iniciar la impresión, y quedarte cerca por si algo iba mal. Si necesitabas cancelar o ajustar algo, tenías que ir hasta la máquina.
Ahora inicio impresiones desde el sofá, veo la webcam en tiempo real, recibo notificaciones cuando algo falla, y el historial de impresiones está en un servidor de mi red local. Eso es lo que hace OctoPrint.
Qué es exactamente OctoPrint#
OctoPrint es un servidor web de código abierto que se comunica con tu impresora 3D a través del puerto serie (USB normalmente) y te da una interfaz web para controlarlo todo. Desarrollado originalmente por Gina Häußge en 2012, tiene una comunidad enorme y un ecosistema de plugins tan grande que cubre prácticamente cualquier cosa que puedas querer hacer.
No es magia: OctoPrint envía comandos G-code a tu impresora igual que lo haría un software de impresión desde el ordenador. La diferencia es que el servidor corre 24/7 en un mini PC o Raspberry Pi conectado a la impresora, y tú accedes desde cualquier dispositivo de tu red.
El hardware#
La opción clásica es una Raspberry Pi. OctoPi, la distribución oficial, es una imagen Raspbian preconfigurada con OctoPrint instalado y lista para arrancar. Metes la tarjeta SD, conectas la Pi a tu impresora por USB, y en diez minutos tienes OctoPrint funcionando.
Pero yo no tenía una Raspberry Pi 3 o 4 libre. Tenía un mini PC en el cluster que hacía poco trabajo. Así que lo monté con Docker.
| |
El truco con Docker es el acceso al dispositivo /dev/ttyUSB0. Cuando conectas la impresora por USB al servidor, Linux crea ese dispositivo. El container necesita acceso a él. Asegúrate de que el usuario que corre Docker tiene permisos sobre /dev/ttyUSB0 (suele requerir añadirlo al grupo dialout).
| |
Si la impresora no aparece en /dev/ttyUSB0, prueba con /dev/ttyACM0. Depende del modelo y del chipset del cable USB. En mi caso, la Prusa aparece como /dev/ttyACM0.
El primer arranque#
El wizard de configuración inicial de OctoPrint te pide definir el perfil de la impresora: dimensiones de la cama, tipo de extrusor, velocidades. Esto es importante porque OctoPrint usa esa información para los controles de movimiento manual y para la estimación de tiempos.
La conexión con la impresora se configura en la sección de conexión: puerto serie, baudrate. Para la mayoría de impresoras Prusa el baudrate es 115200. Las Creality suelen funcionar también a 115200. Si no conecta, prueba a 250000.
Una vez conectado, el dashboard principal muestra la temperatura del hotend y de la cama, controles de movimiento manual, consola G-code para enviar comandos directos, y el visor de archivos. Lo básico funciona en minutos.
La webcam#
La monitorización visual es donde OctoPrint gana la partida de forma definitiva. Con una cámara apuntando a la cama de impresión puedes ver lo que está pasando sin estar delante de la máquina.
En OctoPi (la imagen oficial para Raspberry Pi) el streaming de cámara viene configurado con mjpg-streamer. En Docker, la imagen oficial también lo incluye si defines ENABLE_MJPG_STREAMER=true y montas /dev/video0.
Yo uso una cámara USB barata de 1080p. No necesitas nada caro. Lo que necesitas es buena iluminación. Una cámara de 20 euros con iluminación lateral decente da mejor imagen que una de 80 euros en la oscuridad.
El stream de la cámara se ve en el dashboard de OctoPrint y también puedes acceder directamente a la URL del stream (http://tu-servidor:8080/?action=stream) para verlo en cualquier reproductor o integrarlo en dashboards como Grafana o Home Assistant.
Los plugins que no puedo vivir sin ellos#
El ecosistema de plugins de OctoPrint es enorme. Hay más de 300 plugins en el repositorio oficial. Estos son los que tengo instalados y uso de verdad:
Obico (antes llamado The Spaghetti Detective) es el más interesante. Usa una red neuronal para analizar el stream de la cámara y detectar fallos de impresión: espaguetis de filamento, adherencia que falla, piezas desplazadas. Cuando detecta algo raro, puede pausar o cancelar la impresión automáticamente y enviarte una notificación.
Funciona con un servidor remoto de Obico (hay versión gratuita con límites y versión de pago) o puedes montar el servidor de Obico en tu homelab y usarlo completamente local. Yo uso la versión local. Requiere una GPU o al menos algo de CPU para el modelo, pero en un mini PC moderno funciona bien.
OctoEverywhere permite acceder a tu OctoPrint desde fuera de casa sin configurar port forwarding. Funciona a través de un túnel a sus servidores. Hay versión gratuita. Para los que no quieren lidiar con Cloudflare Tunnels o reverse proxies, es una opción cómoda. Yo lo tengo desactivado porque prefiero usar Tailscale para el acceso remoto.
Bed Visualizer genera una visualización del nivelado de la cama después de hacer un ABL (Auto Bed Leveling). Si tu impresora tiene sensor de nivelado (BLTouch, CR Touch, SuperPINDA en las Prusa), este plugin muestra una mapa de calor con las variaciones de altura. Te dice si la cama está muy torcida antes de que empieces a imprimir.
Print Time Genius mejora la estimación de tiempos de impresión. Las estimaciones de OctoPrint por defecto no son muy precisas. Este plugin aprende de tus impresiones anteriores y calibra las estimaciones según el comportamiento real de tu impresora específica.
Telegram Notifications envía mensajes a un bot de Telegram cuando empieza una impresión, cuando termina, o cuando hay un fallo. También te permite enviar comandos desde Telegram para pausar, cancelar, o pedir una captura de la cámara. Lo uso constantemente.
TouchUI adapta la interfaz para pantallas táctiles. Si tienes una pantalla pequeña conectada al servidor donde corre OctoPrint, con este plugin la interfaz es mucho más usable con los dedos.
Integración con el homelab#
Cuando digo que metí la impresora en el homelab no exagero. OctoPrint tiene una API REST completa que devuelve el estado de la impresora en JSON. Eso significa que puedo sacarlo a Grafana, monitorizarlo con Uptime Kuma, o hacer automatizaciones con n8n.
Tengo un panel en Grafana con la temperatura del hotend y la cama a lo largo del tiempo para cada impresión. También muestro el progreso de impresión actual. El endpoint de la API es /api/printer y /api/job para el trabajo actual.
| |
También tengo Home Assistant integrado con OctoPrint (hay una integración oficial en el catálogo de HA). Eso me da un sensor con el estado de la impresora, el progreso del trabajo, y las temperaturas, directamente en el dashboard de Home Assistant. Y puedo crear automatizaciones: cuando la impresión termina, encender una luz verde en el despacho.
El tema de los archivos#
OctoPrint gestiona los archivos de impresión (G-code). Puedes subir archivos desde la interfaz web, directamente. Desde el slicer (PrusaSlicer, Cura, Bambu Studio), hay plugins que envían el G-code directamente a OctoPrint al exportar, sin pasar por la tarjeta SD. Eso solo ya justifica OctoPrint.
PrusaSlicer tiene soporte nativo para enviar a OctoPrint: en las preferencias del slicer defines la URL de tu OctoPrint y la API key, y tienes un botón “Enviar a OctoPrint” en la barra de herramientas. El archivo llega al servidor y puedes iniciarlo desde la interfaz o desde el propio slicer.
Lo que OctoPrint no puede hacer#
OctoPrint no convierte tu impresora en algo que no es. Si tu impresora tiene problemas de adherencia, de retracción, o de temperatura, OctoPrint no los soluciona. Tampoco puede actualizar el firmware de la impresora por sí solo (aunque hay plugins para eso también).
El control remoto tiene un límite práctico: si algo sale mal físicamente (el filamento se atasco, la boquilla toca la pieza), tienes que estar cerca para intervenir. Obico ayuda a detectar problemas pronto, pero no puede cortar el filamento por ti.
Otro punto: OctoPrint consume CPU mientras imprime porque procesa el G-code y actualiza el estado en tiempo real. En una Raspberry Pi 3 antigua es suficiente pero ajustado. En una Pi 4 o en un mini PC no se nota. Si usas Docker en un servidor con más recursos, menos todavía.
Acceso desde fuera de casa#
Para acceder a OctoPrint desde fuera de tu red local tienes varias opciones. La que más recomiendo si ya tienes homelab es Tailscale. Instalas Tailscale en el servidor donde corre OctoPrint, y puedes acceder a la IP de Tailscale de ese servidor desde cualquier parte. Sin puertos abiertos, sin complicaciones.
Si prefieres no instalar Tailscale en el servidor de impresión, puedes usar OctoEverywhere como mencioné antes. Es la opción más fácil para quien no quiere gestionar la red.
Lo que no recomiendo es exponer OctoPrint directamente a internet sin autenticación adicional. La interfaz tiene usuario y contraseña, pero no está diseñada para ser un servicio público. Ponlo detrás de un reverse proxy con autenticación o úsalo a través de una VPN.
Vale la pena montar esto#
La respuesta es sí, sin dudarlo. El cambio que más noto en mi flujo de trabajo es enviar archivos desde el slicer directamente a OctoPrint. Antes la cadena era: exportar, copiar a SD, llevar la SD a la impresora. Ahora es: exportar y hacer clic en enviar.
Las notificaciones de Telegram cuando una impresión termina son otra mejora enorme. Ya no tengo que recordar “oye, ¿no había una impresión corriendo?” Cuando termina, me avisa. Si falla, me avisa antes, con una captura de cámara incluida.
Para quien tiene una impresora 3D y un homelab, no hay razón para no montarlo. El hardware más barato que funciona es una Raspberry Pi 4 de 4GB (o incluso 2GB), y si tienes un servidor con puertos USB disponibles, directamente con Docker.
El único consejo práctico que añado: usa un cable USB de calidad entre el servidor y la impresora. Los cables baratos tienen interferencias que provocan desconexiones durante impresiones largas. Un cable con ferrita de buena calidad puede parecer un detalle menor, pero cuando llevas 18 horas imprimiendo y la conexión se cae a falta de 2 horas, ya no te parece un detalle menor.