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 --builddocker-compose.yml shipped in the repo. Two overrides sit next to it: docker-compose.postgres.yml for PostgreSQL in its own container and docker-compose.signal.yml for a signal-cli-rest-api that feeds Signal notifications; MQTT or Spoolman can be added as siblings the same way.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 --loop asyncio --timeout-graceful-shutdown 15cd frontend && npm install && npm run dev in a second terminal.pip install does not bring: with the same venv, python -m backend.app.step_runtime choose enabled --by cli, then install and status --check — see STEP previews. Docker and the Windows installer carry it already.SQLite by default. One variable switches to PostgreSQL - bundled or your own.
DATABASE_URL picks the storage: leave it empty for SQLite (the default, one file, fine for most farms), set it to embedded for the PostgreSQL 18 that ships with BamDude and that BamDude runs for you, or give a postgresql+asyncpg:// URL for your own server. Switching from SQLite imports your existing database automatically on the next start.
install.sh has --db sqlite|embedded|external, the Windows setup has a Database page, and docker-install.sh offers the same choice.127.0.0.1 only and keeps its own generated password; pin EMBEDDED_PG_PORT=6432 if you want to reach it with psql or DBeaver.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.