Bambuddy v0.2.3b2
Highlights
SpoolBuddy continues to mature with a new quick menu (swipe down for power and system controls), improved spool detail cards, and several reliability fixes. This release also adds LDAP/Active Directory authentication, optional PostgreSQL database support, shortest-job-first scheduling and auto-print G-code injection for bed-clearing systems.
New Features
- SpoolBuddy Quick Menu (#893) — Swipe down from the top of the SpoolBuddy display to open a quick-access control panel. Toggle printer power via smart plugs directly from the touchscreen, and manage the SpoolBuddy system with restart daemon, restart browser, reboot, and shutdown controls. All destructive actions require confirmation. The menu shows real-time smart plug state (ON/OFF) for each printer that has a linked power plug.
- LDAP Authentication (#794) — Users can now authenticate against an LDAP/Active Directory server. Configure the LDAP server URL, bind DN, search base, and user filter in Settings > Authentication > LDAP. Supports StartTLS, LDAPS (SSL), and plaintext connections. LDAP groups can be mapped to BamBuddy groups (Administrators, Operators, Viewers) for automatic role assignment. Auto-provisioning creates BamBuddy accounts on first LDAP login when enabled. Local admin accounts remain as fallback when the
LDAP server is unreachable. - Optional PostgreSQL Database Support — Bambuddy can now use an external PostgreSQL database instead of the built-in SQLite. Set the DATABASE_URL environment variable to connect to Postgres. SQLite remains the default. All features work with both backends including full-text archive search, backup/restore, health diagnostics, and cross-database restore (import a SQLite backup into PostgreSQL with automatic type conversion).
- Shortest Job First Queue Scheduling (#879) — New SJF toggle badge on the queue page header. When enabled, the scheduler starts shorter print jobs before longer ones instead of FIFO order. A starvation guard ensures long jobs that get skipped once are protected from being skipped again. Print duration is cached on queue items at creation time from the 3MF metadata.
- Auto-Print G-code Injection (#422) — Configure custom start and end G-code snippets per printer model in Settings (Workflow tab) for bed-clearing systems like Farmloop, SwapMod, AutoClear, and Printflow 3D. When adding a print to the queue, enable "Inject G-code" to have the scheduler inject the configured snippets into the 3MF before uploading. The original file is never modified — injection creates a temporary copy for upload only.
- External Folder Subfolder Preservation (#890) — Scanning an external folder now mirrors the real directory structure into the file manager folder tree instead of flattening all files into the root. Subdirectories are created as child folders with correct parent/child hierarchy. Hidden directories are skipped when "Show hidden files" is disabled.
- Queue Timeline View (#823) — Production schedule view showing estimated print completion times, grouped by hour, with live progress bars. Filter by All/Printing/Queued and navigate between days.
- Staggered Batch Start for Multi-Printer Jobs (#752) — Stagger print starts across multiple printers to avoid simultaneous bed heating power spikes. Configure group size and interval in the Print/Schedule dialog or set defaults in Settings → Queue.
- Plate-Clear Confirmation Setting (#752) — New toggle in Settings → Queue to skip plate-clear confirmation for farm workflows where plates are verified physically.
- Per-User Statistics Filtering (#730) — Admins can filter the Statistics page by user to see individual prints, filament usage, and costs.
- Bulk Printer Actions (#825) — Select multiple printer cards and apply bulk Stop, Pause, Resume, Clear Notifications, or Clear Bed. Select by state or location.
- Prefer Lowest Remaining Filament (#805) — Optional setting to prefer AMS spools with the least remaining filament during auto-matching, helping consume partial spools first.
- REST/Webhook Smart Plug Type (#472) — New generic HTTP smart plug type for openHAB, ioBroker, FHEM, Node-RED, etc. Configure ON/OFF URLs, methods, headers, and optional status polling.
- Configurable Default Print Options (#858) — Set default print options (bed levelling, flow calibration, vibration calibration, timelapse, etc.) in Settings → Workflow.
- Batch Print Quantity (#342) — Print multiple copies of a file in one step with a quantity field in the Print/Schedule dialog.
- GitHub Backup: Spool Inventory & Print Archives (#870) — Optional backup of spool inventory and print archive metadata to GitHub.
Improved
- Assign Spool Modal Filtering (#889) — Improved filtering logic in the assign spool modal for faster spool selection.
- SpoolBuddy Spool Detail Card (#866) — Improved spool detail card UI on the SpoolBuddy kiosk with better layout and information density.
- Database Engine Info on System Page — The System Information page now shows the active database engine (SQLite or PostgreSQL) and its version.
- Plate Number in Printer View (#881) — Printer cards now show the plate number alongside the filename when printing plate 2+ of a multi-plate 3MF file.
- Printer Name in Queue for Model-Based Jobs (#881) — Queue items assigned to a printer type ("Any P1S") now show the actual printer name once the scheduler assigns one.
- AMS Drying Support for H2S (#886) — Remote AMS drying and queue auto-drying now work on H2S printers with firmware 01.02.00.00 or later.
- REST Smart Plug: Separate Power/Energy URLs (#472) — REST smart plugs can now use individual URLs for power and energy data with unit multipliers for conversion.
- Standardized Webhook Notification Payloads (#871) — Webhooks now include structured event data fields alongside existing title/message fields for easier automation.
- Developer Mode Detection for A1/P1 Printers — Printers without the fun MQTT field now have developer mode detected via a probe command on reconnect.
- Queue Page Visual Refresh — Compact stats bar, color-coded left borders, collapsible history section, and condensed history rows.
- SpoolBuddy Kiosk Performance Optimizations — Reduced idle CPU from ~3.3 to ~0.9 on Raspberry Pi.
- SpoolBuddy Inventory Page — New kiosk page with spool grid, search, filter pills, and tap-to-detail view.
- SpoolBuddy Auto-Navigate on Tag Scan — Automatically navigates to dashboard and wakes screen when a tag is scanned.
- SpoolBuddy Swipe to Switch Printers — Left/right swipe cycles through online printers on the touchscreen.
Fixed
- Spool Weight Not Updated After Print (#839) — Filament usage tracking failed silently in several scenarios: fallback archives without 3MF, external/VT tray spools, notifications showing "Unknown", auto-archive disabled, and queue/reprint prints with auto-archive disabled. All five paths are now fixed.
- Ghost Jobs From SQLite Lock on Print Completion (#897) — Queue status update could fail silently on SQLite lock, leaving jobs permanently stuck in "printing" status. Now retries with backoff. Runtime tracker commits per-printer to minimize lock hold time.
- Multi-Plug Automation Only Working for First Plug (#903) — When multiple smart plugs were assigned to a printer, only the first was automated. All automation paths now control every assigned plug.
- SpoolBuddy Inventory Not Updating on Spool Changes (#905) — Adding, editing, or deleting spools did not update SpoolBuddy views. Inventory mutations now broadcast websocket events for instant updates.
- AMS Slot Changes Fail Until Reconnect (#887) — After a keep-alive timeout, paho-mqtt auto-reconnects but silently ignores commands. Added probe timeout with retry and force-close after two unanswered probes. Also fixed developer mode probe destabilizing MQTT on A1/P1 series by caching results and adding a stabilization delay.
- Spool Manager Deducts Double Filament (#880) — Two independent deduction paths ran in the same event loop cycle. AMS weight sync now skips updates while a print session is active.
- File Manager Stale UI After Deleting Folders/Files — Delete endpoints relied on auto-commit after response. Added explicit commit before returning.
- Thumbnails Broken After Backend Restart — Stream tokens lost on restart. Frontend now auto-refreshes failed token-protected image loads.
- SpoolBuddy Kiosk Screen Blanks on Boot — Added consoleblank=0 to kernel cmdline and immediate wlr-randr anti-blank loop.
- Queue Widget Ignores Plate-Clear Setting (#752) — "Clear Plate & Start Next" button showed even when plate-clear confirmation was disabled.
- WebSocket Crash on Printers Without fun Field (#873) — Race condition in developer mode probe caused repeating crashes on A1, P1, X1Plus printers.
- Filament Hover Card Behind Sidebar (#900) — Hover card z-index conflicted with mobile sidebar, rendering partially behind it.
- SpoolBuddy Horizontal Swiping — Fixed horizontal swipe gestures on the SpoolBuddy kiosk.
- Docker Install Script (#915) — Removed deprecated --bind flag from docker_install.sh.
- Bed Cooled Notification Never Firing (#872) — Replaced polling-based monitor with event-driven approach for firmware that stops sending bed temperature after completion.
- Filament Color and Subtype Inconsistencies (#857) — Fixed generic color names, missing Silk+/Tough+ subtypes, and misclassified gradient/dual-color filaments.
- External Spool Print Fails on Printers With AMS (#854, #859) — Fixed use_ams flag and ams_id mapping for external spool printing.
- External Folder Scan 500 on 3MF Files (#846) — Fixed crash from raw thumbnail bytes in JSON serialization.
- Archives Capped at 50 Items (#843) — Removed hardcoded limit, added client-side pagination.
- Filament Usage Not Recorded When Auto-Archive Disabled — Moved filament tracking to run before the archive check.
- AMS History Cleanup Crash — Fixed naive/aware datetime mismatch in periodic cleanup.
- SpoolBuddy Status Bar Not Updating on Printer Switch — Fixed stale warnings from previous printer.
- SpoolBuddy "Add to Inventory" Failed Silently — Fixed float/int weight mismatch and added error feedback.
- SpoolBuddy Dashboard Crash on Null Spool Fields — Fixed TypeError from null subtype/brand/rgba fields.
- Plate Thumbnails 401 in Print Modal — Fixed missing stream token on multi-plate thumbnails.
- Sidebar Bottom Icons Cut Off With Smart Plugs (#862) — Fixed footer overflow in sidebar.
- Native Install Misdetected as Docker in LXC Containers — Fixed detection logic.
- SpoolBuddy Kiosk Display Blanking and Crashes — Removed aggressive Chromium flags causing instability.
- Database Connection Pool Exhaustion on Large Farms — Increased pool from 30 to 220 connections.
Security
- Path Traversal in File Upload Endpoints — Archive upload endpoints used the client-supplied filename directly without stripping directory components. All upload endpoints now sanitize filenames by extracting only the basename.
- Unauthenticated Bug Report Endpoints — Bug report endpoints had no authentication. Now require appropriate permissions when auth is enabled.
- API Key Empty Printer List Grants Full Access — An API key with an empty printer_ids list was treated as global access. Now null = global, [] = no access
- Missing HTTP Security Headers — Added X-Content-Type-Options, X-Frame-Options, and Referrer-Policy headers on every response.
- Camera Snapshot Temp Files World-Readable — Switched to mkstemp with 0600 permissions so only the application user can read snapshot files.
- Update aiohttp, cryptography, and Pygments for CVE fixes
- Token-Based Auth for Media Endpoints — Camera streams, snapshots, thumbnails, and timelapse videos now require a stream token when authentication is enabled.
- Bump vite from 7.3.1 to 7.3.2 (#909)
Contributors
Thank you to the contributors who helped make this release possible: