Skip to content

GuppyFLO is a self-hosted service that enables local/remote management of multiple Klipper printers using Moonraker

License

Notifications You must be signed in to change notification settings

ballaswag/guppyflo

Repository files navigation

GuppyFLO

GuppyFLO is a self-hosted service that enables local/remote management of multiple Klipper printers using Moonraker.


Buy Me a Coffee at ko-fi.com
Guppy Platform Discord

Install

HTTP Reverse Proxy Mode

wget -O - https://raw.githubusercontent.com/ballaswag/guppyflo/main/installer.sh | sh

TCP Proxy Mode

wget -O - https://raw.githubusercontent.com/ballaswag/guppyflo/main/installer.sh | sh -s -- tcpproxy

Docker

docker compose up -d

Features

  1. Global view of all your Klipper/Moonraker printers.
  2. Fluidd/Mainsail opens directly to desired printer (no need to mock with switching printers in the UI).
  3. Unlimited go2rtc WebRTC cameras.
  4. Mpjeg-streamer webcams over tailscale. Don't use ngrok for these streams, they'll use all your free ngrok bandwidth.
  5. Integrated tailscale.
  6. Auto camera detection (mjpeg stream).
  7. Free and secure remote access with ngrok (paid ngrok subscription availiable via their terms).
  8. Unlimited local access.
  9. Multiplatform support (runs on Linux/Windows x86_64, buildroot mipsle, PI ARMv6).
  10. Mobileraker via tailscale.
  11. Runs as a HTTP Reverse Proxy or TCP Proxy.

Roadmap

  1. More camera service support (e.g. ustreamer/camera-streamer).
  2. Automatic camera detection and configuration*.
  3. More printer metrics at a glance (e.g. heater states)

Screenshot

Auto camera detection GuppyFLO UI

TCP Proxy Mode

Start GuppyFLO with argument -tcpproxy to use it in TCP Proxy Mode. In this mode, all proxied connections are defined in proxies.json. If proxies.json does not exists, create it in the same directory as guppyflo or the path specified by -c.

proxy.json

It's a array JSON containing binding definitions as follow:

  • from - remote port used to access the proxied service
  • to - proxied service defined in ip:port format
  • tls - boolean to indicate if the proxied service supports TLS

Example proxies.json

Proxies moonraker using port 7125 to localhost on port 7125, and proxies remote port 80 to localhost on port 4408.

[
    {
        "from": 7125,
        "to": "127.0.0.1:7125",
        "tls": false
    },
    {
        "from": 80,
        "to": "127.0.0.1:4408",
        "tls": false
    }
]

HTTP Reverse Proxy Mode

Local Access

GuppyFLO starts locally on port 9873. Open a browser and go to <guppyflo-host-ip>:9873 for local accces.

Remote Access via Tailscale

GuppyFlo support secure remote access via Tailscale. You can sign up a free accout here.

  1. Once you have a tailscale account, open browser to http://<guppyflo-host-ip>:9873.
  2. Click the tailscale authentication link to add GuppyFLO as a tailscale device.
  3. Done! Now you can access GuppyFLO and all your guppy managed printers via your tailnet.
  4. On any device running tailscale, open your browser to http://guppyflo (Need MagicDNS for shortnames).

Remote Access via ngrok

GuppyFLO supports secure and authenticated remote access using ngrok. You can sign up for a free account here.

  1. Sign up for a free/paid ngrok account.
  2. Copy your ngrok auth token from here.
  3. Open in browse http://<guppyflo-host-ip>:9873/settings and paste your ngrok auth token in Ngrok Auth Token.
  4. In the GuppyFLO settings page, select an OAuth provider (e.g. google).
  5. Add your OAuth Email.
  6. Click Save and restart guppyflo from your server.
  7. The ngrok remote URL is found in GuppyFLO logs, or in your ngrok dashboard

GuppyFLO Settings

Mobileraker via Tailscale

GuppyFLO Mobileraker Camera Setup gif

If you enable tailscale, you can view/manage your guppy printers with cameras remote in Mobileraker.

  1. In the GuppyFLO dashboard, click the Network button to find printer links, e.g. http://guppyflo/printers/390877414/
  2. The Network modal shows all configured printer/camera links.
  3. Click the Copy icon next to each link to copy it.
  4. In Mobileraker, click Advanced
  5. Printer - Address is guppyflo/printers/390877414/
  6. Websocket - Address is guppyflo/printers/390877414/websocket
  7. Click Test Connection, Continue

Camera Setup

GuppyFLO supports mjpeg and go2rtc webrtc streams. Refer to go2rtc for setting up webcams and WebRTC. To add a go2rtc WebRTC camera:

  1. Open GuppyFLO Dashboard in a browser.
  2. Click Add Printer and fill in printer detail.
  3. Click Auto Detect to discover camera streams hosted on the printer.
  4. You can also click Add Camera to manually fill in camera details.
  5. Camera Endpoint is the endpoint to a go2rtc source, e.g. /api/ws?src=mycamera1.
  6. Camera IP is the host IP where go2rtc is running.
  7. Camera Port is the API port used by go2rtc
  8. Camera Service is the stream type.
  9. Repeat step 4 to 9 to add more cameras.


Disclaimers

  • GuppyFLO is not associate with ngrok/tailscale. It uses these for remote access because they offer a free, secure, and programmable solution.
  • GuppyFLO uses a fork of fluidd/mainsail that enable path base access to moonraker websocket. The changes are tracked in this fluid and mainsail fork.

Credit

Moonraker
Fluidd
Mainsail
go2rtc
ngrok-go

About

GuppyFLO is a self-hosted service that enables local/remote management of multiple Klipper printers using Moonraker

Resources

License

Stars

Watchers

Forks

Packages