Intruducing: PrusaLink Discord Notify
Since the introduction of Buddy firmware, tools like OctoPrint are no longer fully reliable as a monitoring layer for Prusa printers in my experience.
With that in mind, I was looking for a solution to send print progress notifications to a Discord server, similar to what the OctoPrint plugin Octorant provides.
Because OctoPrint relies on serial communication with the printer, it has several limitations when used purely as a monitoring solution:
- Unreliable detection of prints that were not started through OctoPrint
- Inconsistent job and progress tracking for locally started prints
Prusa Connect, the cloud-based counterpart to PrusaLink, does offer a Discord integration, but it is limited to basic status notifications.
It does not provide (as of now):
- detailed printer metrics
- live snapshots or images (even if a camera is available)
Since PrusaLink provides a direct local API with live printer data, I decided to develop my own solution:
PrusaLink Discord Notify (BETA)
PrusaLink Discord Notify is a lightweight C# background service that monitors a Prusa printer via the local PrusaLink API and posts structured status and progress updates to a Discord channel — including live camera snapshots.
It's still in a beta-like state and will be further refined.
Feature requests are also welcome XD
Features
- Polls the printer at a configurable interval
- Detects relevant state changes only
- Sends updates only when meaningful events occur
- Rate-limited progress notifications using:
- time-based thresholds
- percentage-based thresholds
- Persistent local state for restart safety
- Prevents:
- duplicate notifications
- outdated job detection
- false progress updates after restarts
- Designed for:
- unattended operation
- graceful shutdown
- long-running stability
Recommended Platform
Raspberry Pi 5 (recommended)
Raspberry Pi 4 (should also work fine, not tested)


Installation
Requirements
- .NET 9
- FFmpeg
⚠️ Disclaimer: All apt commands use the -y flag, which skips user confirmation prompts.
1. Update the system
sudo apt update && sudo apt upgrade -y
2. Install .NET 9
curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --version 9.0.310 && \
echo 'export DOTNET_ROOT=$HOME/.dotnet' >> ~/.bashrc && \
echo 'export PATH=$PATH:$HOME/.dotnet' >> ~/.bashrc && \
source ~/.bashrc
3. Install FFmpeg
sudo apt install ffmpeg -y
Download
Raspberry Pi OS (ARM64)
https://fynnovation.com/cdn/PrusaDiscordNotify/Pi/PrusaDiscordNotify_armx64.zip
Raspberry Pi OS (ARM32 / x86)
https://fynnovation.com/cdn/PrusaDiscordNotify/Pi/PrusaDiscordNotify_arm.zip
Download & extract via SSH
mkdir -p PrusaNotify && \
cd PrusaNotify && \
wget https://fynnovation.com/cdn/PrusaDiscordNotify/Pi/PrusaDiscordNotify_armx64.zip && \
unzip PrusaDiscordNotify_armx64.zip && \
sudo chmod +x PrusaDiscordNotify
If the command fails, ensure wget and unzip are installed:
sudo apt update && sudo apt install wget unzip -y
Systemd Service Setup
Create the service file:
sudo nano /etc/systemd/system/prusanotify.service
[Unit]
Description=Prusa Discord Notify
After=network.target
[Service]
ExecStart=/PATH/TO/PrusaNotify/PrusaDiscordNotify
WorkingDirectory=/PATH/TO/PrusaNotify/
Restart=always
RestartSec=10
KillSignal=SIGINT
StandardOutput=append:/var/log/PrusaNotify.log
StandardError=append:/var/log/PrusaNotify.log
SyslogIdentifier=prusanotify
[Install]
WantedBy=multi-user.target
Note: Replace /PATH/TO/PrusaNotify/ with the actual installation path.
Enable and start the service:
sudo systemctl enable prusanotify sudo systemctl start prusanotify
Logs & Monitoring
To inspect the service output:
cat /var/log/PrusaNotify.log
Or follow it live:
tail -f /var/log/PrusaNotify.log
Configuration (config.json)
PrusaLink Discord Notify is configured using a simple config.json file. All settings can be adjusted without recompiling the application.
{
"language": "en",
"printer_name": "Prusa Printer",
"api_base_url": "http://YOUR_PRINTER_IP/api/v1/",
"api_key": "PrusaLinkPassword",
"DC_Webhook": "DiscordWebhookURL",
"rtspUrl": "rtsp://YOUR_BUDDYCAM_IP/live",
"output": "snapshot.jpg",
"delete": true,
"MinPostInterval": 5,
"TimeTrigger": 5,
"ProgressStep": 10
}
Configuration options explained:
- language
Specifies the language used for Discord messages.
This must match a JSON file in thelang/directory (without the.jsonextension).
Example:"en","de","cs","tlh" - printer_name
Display name of the printer shown in Discord messages and embeds. - api_base_url
Base URL of the local PrusaLink API.
Example:http://192.168.1.50/api/v1/ - api_key
PrusaLink API key (the PrusaLink password). - DC_Webhook
Discord webhook URL where status updates and snapshots will be posted. - rtspUrl
RTSP stream URL of the printer camera (e.g. BuddyCam). - output
Temporary filename used for the generated snapshot image. - delete
If set totrue, the snapshot image is deleted after it has been sent to Discord. - MinPostInterval
Minimum time (in minutes) between Discord updates, even if progress changes frequently. - TimeTrigger
Time-based fallback trigger (in minutes).
Ensures periodic updates even if progress does not advance significantly. - ProgressStep
Percentage-based progress step required to trigger a new notification.
Example:10= notify every 10% progress.
Languages
The service ships with multiple predefined language files located in the lang/ directory. These files are simple JSON dictionaries based on a common template.
Important:
The following languages are fantasy languages and are included purely for fun:
- sindarin – Elvish (Lord of the Rings)
- goauld – Goa’uld (Stargate SG-1 / Atlantis)
- tlh – Klingon (Star Trek)
These languages follow a somewhat lore-consistent convention but are not real-world languages.
All language files are derived from the same base template (see en.json). Using this template, anyone can:
- add their own language
- modify existing translations
- create custom or themed language variants
To add a new language, simply copy en.json, translate the values, and name the file accordingly (e.g. fr.json, es.json, pirate.json).
Applying configuration changes
The config.json and .json file can be modified while the service is installed. To apply changes, restart the service:
sudo systemctl restart prusanotify
The new configuration and language settings will be applied immediately after restart.