{"id":48728507,"url":"https://github.com/kainpl/bamdude","last_synced_at":"2026-04-24T21:01:53.592Z","repository":{"id":348725723,"uuid":"1199350516","full_name":"kainpl/bamdude","owner":"kainpl","description":"Self-hosted print archive and management system for Bambu Lab 3D printers","archived":false,"fork":false,"pushed_at":"2026-04-21T23:28:18.000Z","size":29387,"stargazers_count":9,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-21T23:36:02.519Z","etag":null,"topics":["3d-printing","bambulab","filament","management","self-hosted","telegram"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kainpl.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":".github/MAINTAINERS.md","copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://send.monobank.ua/jar/2vREyf3SrF"]}},"created_at":"2026-04-02T09:07:44.000Z","updated_at":"2026-04-21T22:02:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kainpl/bamdude","commit_stats":null,"previous_names":["kainpl/bambuddy-he","kainpl/bamdude"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/kainpl/bamdude","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kainpl%2Fbamdude","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kainpl%2Fbamdude/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kainpl%2Fbamdude/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kainpl%2Fbamdude/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kainpl","download_url":"https://codeload.github.com/kainpl/bamdude/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kainpl%2Fbamdude/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32240613,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-printing","bambulab","filament","management","self-hosted","telegram"],"created_at":"2026-04-12T00:12:06.770Z","updated_at":"2026-04-24T21:01:53.586Z","avatar_url":"https://github.com/kainpl.png","language":"Python","funding_links":["https://send.monobank.ua/jar/2vREyf3SrF"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"static/img/bamdude_logo_dark.png\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"static/img/bamdude_logo_light.png\"\u003e\n    \u003cimg src=\"static/img/bamdude_logo_dark.png\" alt=\"BamDude Logo\" width=\"300\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eBamDude\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eSelf-hosted print archive, management and automation system for Bambu Lab 3D printers\u003c/strong\u003e\n  \u003cbr\u003e\n  \u003cem\u003eHard fork of \u003ca href=\"https://github.com/maziggy/bambuddy\"\u003eBambuddy\u003c/a\u003e by maziggy, with Telegram bot, multi-chat auth, Ukrainian locale and more\u003c/em\u003e\n\u003c/p\u003e\n\n---\n\n## What's different from Bambuddy?\n\nBamDude is a hard fork of [Bambuddy](https://github.com/maziggy/bambuddy) focused on print farm operators who need deeper automation and Telegram-based control. Key additions:\n\n- **Full Telegram bot** (aiogram 3.x) — printer control, status, maintenance, queue from Telegram\n- **Multi-chat authorization** — each Telegram chat gets a role (group) with granular permissions\n- **Actionable notifications** — \"Clear plate\", \"Mark maintenance done\" buttons right in Telegram notifications\n- **Per-chat notification settings** — event types, quiet hours, daily digest per chat\n- **Printer maintenance in bot** — view overdue items, mark done, edit hours\n- **Clear plate from bot** — confirm plate cleared for queue auto-dispatch\n- **Print from Library** — select file, pick printer (model-filtered), print now or add to queue\n- **Queue management** — paginated list, detail, move, cancel, add to queue\n- **Add Printer via bot** — enter IP, auto-detect serial/name/model via SSDP, enter access code\n- **Camera snapshots** — `/camera` command and inline button per printer\n- **Speed control** — change print speed mode from bot\n- **Printer calibration** — model-aware UI and bot (bed leveling, vibration, motor noise, nozzle offset, high-temp)\n- **Ukrainian locale** — full UI + bot + notification templates\n- **Backend i18n system** — JSON-file-based translations for bot UI (easy to add languages)\n- **MarkdownV2** — Telegram messages with proper formatting\n- **Notification template editor** — MarkdownV2 toolbar with formatting buttons\n- **Virtual Printer File Manager mode** — saves 3MF directly to library without archiving\n- Various fixes: ghost print prevention, MQTT connection freshness, SD card cleanup, server-side pagination\n\n---\n\n## Why BamDude?\n\n- **Own your data** — All print history stored locally, no cloud dependency\n- **Works offline** — Uses Developer Mode for direct printer control via local network\n- **Full automation** — Schedule prints, auto power-off, get notified when done\n- **Multi-printer support** — Manage your entire print farm from one interface\n\n---\n\n## Features\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n### Print Archive\n- Automatic 3MF archiving with metadata\n- **3MF download recovery** — when the printer's FTP fails during archive, recovery triggers fire on startup / printer reconnect / print-complete / manual button; per-archive lock prevents duplicate FTP sessions\n- 3D model preview (Three.js)\n- Duplicate detection \u0026 full-text search (source-hash chain-of-custody for patched files)\n- Photo attachments \u0026 failure analysis\n- Timelapse editor (trim, speed, music)\n- Re-print to any printer with AMS mapping\n- Archive comparison, tag management\n- Print Log with filtering and pagination\n\n### Monitoring \u0026 Control\n- **Printer calibration** — bed leveling, vibration, motor noise, nozzle offset, high-temp heatbed (model-aware, from UI and Telegram bot)\n- Real-time printer status via WebSocket\n- Live camera streaming \u0026 snapshots\n- Streaming overlay for OBS\n- External camera support (MJPEG, RTSP, USB)\n- Build plate empty detection\n- Printer control (stop, pause, resume, light, speed)\n- AMS management (RFID re-read, slot config, drying)\n- HMS error monitoring with history\n- Print success rates, filament usage, cost analytics\n\n### Scheduling \u0026 Automation\n- Per-printer queues with status tracking (idle/printing/paused/error)\n- Auto error-pause on print failure (queue stops, user decides next step)\n- Staggered start for farms (limit concurrent heating, bed temp monitoring)\n- **Swap Mode** — A1 Mini / A1 plate swapper with multi-profile support (Kit, STL, JobOx), auto-detect swap files, per-job event selection (start sequence / change table), plate-clear auto-bypass\n- **Swap macro auto-execution** — `swap_mode_start` before print, `swap_mode_change_table` after print, with ACK + stg_cur completion tracking, queue pause on failure\n- **Quick Vibration Check toggle** — per-job toggle; when disabled, 3MF gcode post-processor comments out `M970` commands, recalculates MD5 sidecars, repacks archive\n- **G-code macros** — execute from printer menu, ACK-based MQTT confirmation, `stg_cur` completion tracking, real-time status on printer card\n- Model-aware maintenance types with history tracking and Excel export\n- Clear plate confirmation between prints\n- Smart plug integration (Tasmota, HA, MQTT, REST/webhook)\n- Energy consumption tracking\n- Auto power-on/off\n- Background print dispatch with WebSocket progress\n\n### File Manager (Library)\n- Upload and organize sliced files\n- External folder mounting (NAS, USB)\n- STL thumbnail generation\n- Folder structure with drag-and-drop\n- Print directly or add to queue\n- Duplicate detection\n\n### Projects\n- Group related prints\n- Track plates and parts\n- **Print plan table**: per-file copies with live filament/time/cost totals\n- Link folders or individual files from the File Manager\n- Import/Export as ZIP or JSON\n\n\u003c/td\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n### Telegram Bot\n- Full printer control: pause, resume, stop, light, speed, camera snapshot\n- Printer calibration from bot: model-aware selection (bed leveling, vibration, motor noise, nozzle offset, high-temp heatbed)\n- Printer status with model tag, maintenance indicators\n- Edit printer hours, view/mark maintenance from bot\n- Clear plate confirmation for queue auto-dispatch\n- Print from Library: file → printer (model-filtered) → Print Now or Add to Queue\n- Add to Queue: file → target (specific printer or model) → confirm\n- Queue management: paginated list, detail, move up/down, cancel\n- Add Printer: enter IP → SSDP auto-detect serial/name/model → access code → done\n- Reply keyboard + inline menus + /start /status /camera /help commands\n- Multi-chat auth with per-chat roles (BamDude permission groups)\n- Per-chat notification events, quiet hours, daily digest\n- Actionable notification buttons: clear plate, mark maintenance done, pause/stop on progress\n- Auto-registration mode for new chats\n- 13 handler modules, 171 i18n keys (EN/UK), MarkdownV2 formatting\n\n### Notifications\n- Telegram (auto-restart bot on config change), Discord, Email, Pushover, ntfy, CallMeBot\n- Home Assistant, custom webhooks\n- Customizable message templates (MarkdownV2 editor)\n- Per-chat quiet hours \u0026 daily digest (Telegram)\n- Actionable buttons: clear plate, mark maintenance done, pause/stop on progress\n- Print finish photo, filament usage details\n- HMS error alerts, bed cooled alerts\n- Queue events (waiting, skipped, failed)\n\n### Spool Inventory\n- Built-in inventory with AMS slot assignment\n- Automatic filament consumption tracking\n- Per-spool cost tracking\n- Bulk spool addition\n- Spool catalog, color catalog, low-stock alerts\n- Spoolman integration\n\n### Integrations\n- Spoolman filament sync\n- MQTT publishing for Home Assistant\n- Prometheus metrics for Grafana\n- Local OrcaSlicer preset import\n- K-profiles (pressure advance)\n- Git backup (GitHub + GitLab)\n- API keys \u0026 webhooks\n- LDAP/Active Directory authentication\n\n### Virtual Printer \u0026 Remote Printing\n- Proxy Mode for remote printing via TLS relay\n- Archive, Review, Queue, **File Manager (NEW)**, or Proxy modes\n- **File Manager mode** — saves received 3MF files to the library instead of archiving or printing\n- SSDP discovery or manual IP\n\n### Authentication\n- Group-based permissions (80+ granular)\n- JWT tokens, API key support\n- LDAP/Active Directory with group mapping\n- Per-user Bambu Cloud accounts\n- Advanced Auth via Email (SMTP)\n- Per-user email notifications\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n**Plus:** Customizable themes, mobile responsive, multi-language (EN/UK), auto updates, database backup/restore, PostgreSQL support\n\n---\n\n## Quick Start\n\n### Requirements\n- Python 3.10+ (3.11/3.12 recommended)\n- Bambu Lab printer with **Developer Mode** enabled\n- Same local network as printer\n\n### Docker Hub (Recommended)\n\n```bash\ndocker run -d \\\n  --name bamdude \\\n  --network host \\\n  -e TZ=Europe/Kyiv \\\n  -v bamdude_data:/app/data \\\n  -v bamdude_logs:/app/logs \\\n  --restart unless-stopped \\\n  kainpl/bamdude:latest\n```\n\nOpen **http://localhost:8000** in your browser.\n\n\u003e **macOS/Windows:** Docker Desktop doesn't support `--network host`. Use `-p 8000:8000` instead and add printers manually by IP.\n\n### Docker Compose (from source)\n\n```bash\ngit clone https://github.com/kainpl/bamdude.git\ncd bamdude\ndocker compose up -d --build\n```\n\n### Manual Installation\n\n```bash\ngit clone https://github.com/kainpl/bamdude.git\ncd bamdude\npython3 -m venv venv\nsource venv/bin/activate\npip install -r requirements.txt\nuvicorn backend.app.main:app --host 0.0.0.0 --port 8000\n```\n\n### Upgrading or migrating\n\nFull manual: **[docs/getting-started/upgrading.md](docs/getting-started/upgrading.md)** — covers migration from Bambuddy 2.2.2, from Bambuddy-HE / BamDude 0.2.x, routine BamDude-to-BamDude updates, switching between self-install / Docker / GHCR, and rollback.\n\nShort version:\n\n- **From Bambuddy 2.2.2** (tested \u0026 supported) — drop `bambuddy.db` into BamDude's `data/` and start. The `m000` migration imports automatically and renames the file to `bamdude.db`.\n- **From Bambuddy-HE / BamDude 0.2.x / 0.3.x** (tested \u0026 supported) — Docker users run `install/migrate-volumes.sh` once to copy `bambuddy_he_*` → `bamdude_*`; native users just point the installer at the existing data dir.\n- **From Bambuddy 0.2.3 or newer** — ⚠️ not tested. BamDude diverged from upstream at 2.2.2 and applies its own migrations; newer upstream schemas may hit `no such column` errors on boot. Back up first, keep the Bambuddy data directory untouched, and file an issue if you hit a wall.\n\n### Telegram Bot Setup\n\n1. Create a bot via [@BotFather](https://t.me/BotFather), get the token\n2. In BamDude Settings \u003e Notifications, add a Telegram provider with the bot token\n3. Enable Registration Mode, send `/start` to the bot from your Telegram\n4. In Settings \u003e Telegram Chats, assign a role to your chat and enable it\n5. Done! Use the reply keyboard or inline menus to control printers\n\n### Enabling Developer Mode\n\n1. On printer: **Settings** \u003e **Network** \u003e **LAN Only Mode** \u003e Enable\n2. Enable **Developer Mode**\n3. Note the **Access Code** and **IP address**\n\n---\n\n## Tech Stack\n\n| Component | Technology |\n|-----------|------------|\n| Backend | Python, FastAPI, SQLAlchemy, aiogram 3.x |\n| Frontend | React 19, TypeScript, Tailwind CSS 4 |\n| Database | SQLite (default) or PostgreSQL |\n| 3D Viewer | Three.js |\n| Communication | MQTT (TLS), FTPS |\n| Telegram | aiogram 3.x, MarkdownV2, FSM |\n\n---\n\n## Supported Printers\n\n| Series | Models |\n|--------|--------|\n| X1 | X1, X1 Carbon, X1E |\n| H2 | H2D, H2D Pro, H2C, H2S |\n| P1 | P1P, P1S |\n| P2 | P2S |\n| A1 | A1, A1 Mini |\n\n---\n\n## Development\n\n```bash\n# Backend\npython3 -m venv venv \u0026\u0026 source venv/bin/activate\npip install -r requirements.txt\nDEBUG=true uvicorn backend.app.main:app --reload\n\n# Frontend (separate terminal)\ncd frontend \u0026\u0026 npm install \u0026\u0026 npm run dev\n```\n\n---\n\n## License\n\nAGPL-3.0 License — see [LICENSE](LICENSE) for details.\n\n---\n\n## Acknowledgments\n\n- [Bambuddy](https://github.com/maziggy/bambuddy) by maziggy — the original project this is forked from\n- [Bambu Lab](https://bambulab.com/) for amazing printers\n- The reverse engineering community for protocol documentation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkainpl%2Fbamdude","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkainpl%2Fbamdude","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkainpl%2Fbamdude/lists"}