Four paths - Docker, Docker Compose, a native Windows installer, or manual Python - plus first login and bot setup.
The fastest path. Single container, SQLite by default, persistent volumes.
docker run -d \
--name bamdude \
--network host \
-e TZ=Europe/Kyiv \
-v bamdude_data:/app/data \
-v bamdude_logs:/app/logs \
--restart unless-stopped \
kainpl/bamdude:latest --network host makes printer SSDP auto-discovery work; on macOS / Windows Docker Desktop swap it for -p 8000:8000 and add printers manually by IP. bamdude_data (SQLite + 3MFs + thumbnails) and bamdude_logs. Keep them - they hold every print you've ever done. Build the image yourself, easier to extend.
git clone https://github.com/kainpl/bamdude.git
cd bamdude
docker compose up -d --build docker-compose.yml shipped in the repo. Edit it to add Postgres, MQTT, or Spoolman as siblings. docker compose pull && docker compose up -d --build. No Python or Node — one self-contained setup for Windows.
Download bamdude-windows-x64-setup.exe and run it. It bundles an embedded Python, the pre-built frontend and ffmpeg, installs to C:\Program Files\BamDude, keeps your data and logs in C:\ProgramData\BamDude, and registers BamDude as a Windows Service that serves http://localhost:8000 on boot. A Start Menu shortcut opens the web UI.
For developers or environments where Docker is not an option.
git clone https://github.com/kainpl/bamdude.git
cd bamdude
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
uvicorn backend.app.main:app --host 0.0.0.0 --port 8000 cd frontend && npm install && npm run dev in a second terminal. Open the web UI and create the initial admin.
Browse to http://localhost:8000 (or the host IP). The setup gate refuses every API call except /auth/setup until the first admin exists - pick a username, set a password (≥8 chars, upper + lower + digit), and you're in. After that the login form takes over and the gate disengages forever.
python -m backend.app.cli reset_admin clears the setup flags so the next boot re-enters this flow. TRUSTED_PROXY_IPS so rate-limit and refresh-cookie code can read X-Forwarded-Proto correctly. Auto-discovery via SSDP or paste the IP.
Settings → Printers → Add Printer. SSDP picks up Bambu printers on the same subnet automatically; otherwise paste the IP. Then enter the access code (printer screen → Settings → Information). Hit Save - BamDude opens the MQTT/FTPS connection and the dashboard starts streaming live status.
Control the farm from chat.
Create a bot via @BotFather and copy the token. Settings → Notifications → New Telegram provider → paste the token. Enable Registration Mode, send /start to your bot. Settings → Telegram Chats → assign your chat a role (Operator works for most). The reply keyboard and inline menus are now wired up.
Free, open source, AGPL-3.0 licensed. No cloud lock-in. Ever.