Guppyflo
GuppyFLO is a self-hosted service that enables local/remote management of multiple Klipper printers using Moonraker
Install / Use
/learn @ballaswag/GuppyfloREADME
GuppyFLO
GuppyFLO is a self-hosted service that enables local/remote management of multiple Klipper printers using Moonraker.
<p align="center"> <a aria-label="Downloads" href="https://github.com/ballaswag/guppyflo/releases"> <img src="https://img.shields.io/github/downloads/ballaswag/guppyflo/total?style=flat-square"> </a> <a aria-label="Stars" href="https://github.com/ballaswag/guppyflo/stargazers"> <img src="https://img.shields.io/github/stars/ballaswag/guppyflo?style=flat-square"> </a> <a aria-label="Forks" href="https://github.com/ballaswag/guppyflo/network/members"> <img src="https://img.shields.io/github/forks/ballaswag/guppyflo?style=flat-square"> </a> <a aria-label="License" href="https://github.com/ballaswag/guppyflo/blob/main/LICENSE"> <img src="https://img.shields.io/github/license/ballaswag/guppyflo?style=flat-square"> </a> <a aria-label="Sponsor" href="https://github.com/sponsors/ballaswag"> <img src="https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86"> </a> <br> <a href='https://ko-fi.com/ballaswag' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi3.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com'></a> <br> <a href="https://discord.gg/BpGRPkvtQP" target='_blank'><img src='https://discord.com/api/guilds/1184542740856447156/widget.png?style=banner2' alt='Guppy Platform Discord'></a> </p>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
- 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
go2rtcWebRTC cameras. - Mpjeg-streamer webcams over
tailscale. Don't usengrokfor these streams, they'll use all your freengrokbandwidth. - Integrated
tailscale. - Auto camera detection (mjpeg stream).
- Free and secure remote access with
ngrok(paidngroksubscription 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.
Roadmap
- More camera service support (e.g. ustreamer/camera-streamer).
- Automatic camera detection and configuration*.
- More printer metrics at a glance (e.g. heater states)
Screenshot
<p> <img src="https://github.com/ballaswag/guppyflo/blob/main/screenshots/auto-camera-detection.gif" alt="Auto camera detection"/> <img src="https://github.com/ballaswag/guppyflo/blob/main/screenshots/guppyflo.png" alt="GuppyFLO UI" width="550"/> </p>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 serviceto- proxied service defined inip:portformattls- 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.
- Once you have a
tailscaleaccount, open browser tohttp://<guppyflo-host-ip>:9873. - Click the
tailscaleauthentication link to add GuppyFLO as atailscaledevice. - 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).
Remote Access via ngrok
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/settingsand paste your ngrok auth token inNgrok Auth Token. - In the GuppyFLO
settingspage, select an OAuth provider (e.g.google). - Add your
OAuth Email. - Click
Saveand restart guppyflo from your server. - The ngrok remote URL is found in GuppyFLO logs, or in your ngrok dashboard
Mobileraker via Tailscale
<img src="https://github.com/ballaswag/guppyflo/assets/145094472/f2b2aa91-5b9a-4f53-873a-afcff14b1e12" alt="GuppyFLO Mobileraker Camera Setup gif" align="right" />If you enable tailscale, you can view/manage your guppy printers with cameras remote in Mobileraker.
- In the GuppyFLO dashboard, click the
Networkbutton to find printer links, e.g.http://guppyflo/printers/390877414/ - The
Networkmodal shows all configured printer/camera links. - Click the
Copyicon next to each link to copy it. - In Mobileraker, click
Advanced Printer - Addressisguppyflo/printers/390877414/Websocket - Addressisguppyflo/printers/390877414/websocket- 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:
- Open GuppyFLO Dashboard in a browser.
- Click
Add Printerand fill in printer detail. - Click
Auto Detectto discover camera streams hosted on the printer. - You can also click
Add Camerato manually fill in camera details. Camera Endpointis the endpoint to ago2rtcsource, e.g./api/ws?src=mycamera1.Camera IPis the host IP wherego2rtcis running.Camera Portis the API port used bygo2rtcCamera Serviceis the stream type.- Repeat step 4 to 9 to add more cameras. <br /><br /><br />
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
Related Skills
node-connect
342.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
342.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.7kCommit, push, and open a PR
