GuppyFLO is a self-hosted service that enables local/remote management of multiple Klipper printers using Moonraker.
wget -O - https://raw.githubusercontent.com/ballaswag/guppyflo/main/installer.sh | sh
wget -O - https://raw.githubusercontent.com/ballaswag/guppyflo/main/installer.sh | sh -s -- tcpproxy
docker compose up -d
- Global view of all your Klipper/Moonraker printers.
- Fluidd/Mainsail opens directly to desired printer (no need to mock with switching printers in the UI).
- Unlimited
go2rtc
WebRTC cameras. - Mpjeg-streamer webcams over
tailscale
. Don't usengrok
for these streams, they'll use all your freengrok
bandwidth. - Integrated
tailscale
. - Auto camera detection (mjpeg stream).
- Free and secure remote access with
ngrok
(paidngrok
subscription availiable via their terms). - Unlimited local access.
- Multiplatform support (runs on Linux/Windows x86_64, buildroot mipsle, PI ARMv6).
- Mobileraker via
tailscale
. - Runs as a HTTP Reverse Proxy or TCP Proxy.
- More camera service support (e.g. ustreamer/camera-streamer).
- Automatic camera detection and configuration*.
- More printer metrics at a glance (e.g. heater states)
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
.
It's a array JSON containing binding definitions as follow:
from
- remote port used to access the proxied serviceto
- proxied service defined inip:port
formattls
- boolean to indicate if the proxied service supports TLS
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
}
]
GuppyFLO starts locally on port 9873
. Open a browser and go to <guppyflo-host-ip>:9873
for local accces.
GuppyFlo support secure remote access via Tailscale. You can sign up a free accout here.
- Once you have a
tailscale
account, open browser tohttp://<guppyflo-host-ip>:9873
. - Click the
tailscale
authentication link to add GuppyFLO as atailscale
device. - Done! Now you can access GuppyFLO and all your guppy managed printers via your
tailnet
. - On any device running
tailscale
, open your browser to http://guppyflo (Need MagicDNS for shortnames).
GuppyFLO supports secure and authenticated remote access using ngrok. You can sign up for a free account here.
- Sign up for a free/paid ngrok account.
- Copy your ngrok auth token from here.
- Open in browse
http://<guppyflo-host-ip>:9873/settings
and paste your ngrok auth token inNgrok Auth Token
. - In the GuppyFLO
settings
page, select an OAuth provider (e.g.google
). - Add your
OAuth Email
. - Click
Save
and restart guppyflo from your server. - The ngrok remote URL is found in GuppyFLO logs, or in your ngrok dashboard
If you enable tailscale
, you can view/manage your guppy printers with cameras remote in Mobileraker.
- In the GuppyFLO dashboard, click the
Network
button to find printer links, e.g.http://guppyflo/printers/390877414/
- The
Network
modal shows all configured printer/camera links. - Click the
Copy
icon next to each link to copy it. - In Mobileraker, click
Advanced
Printer - Address
isguppyflo/printers/390877414/
Websocket - Address
isguppyflo/printers/390877414/websocket
- Click
Test Connection
,Continue
GuppyFLO supports mjpeg and go2rtc
webrtc streams. Refer to go2rtc for setting up webcams and WebRTC. To add a go2rtc
WebRTC camera:
- Open GuppyFLO Dashboard in a browser.
- Click
Add Printer
and fill in printer detail. - Click
Auto Detect
to discover camera streams hosted on the printer. - You can also click
Add Camera
to manually fill in camera details. Camera Endpoint
is the endpoint to ago2rtc
source, e.g./api/ws?src=mycamera1
.Camera IP
is the host IP wherego2rtc
is running.Camera Port
is the API port used bygo2rtc
Camera Service
is the stream type.- Repeat step 4 to 9 to add more cameras.