v0.1.6b4
### New Features
# Printer Cards
- Refactored AMS section for better visual grouping and spacing
### Bugfixes
### Printer Hour Counter
- Fixed runtime_seconds not incrementing during prints
- Bug fix: first timestamp was set but never committed
### Slicer Protocol
- Add OS detection for slicer protocol handler
- Windows: `bambustudio://`, macOS/Linux: `bambustudioopen://`
- Updated all usages in Archives and Model Viewer
-
### Camera Popup Window
- Auto-resize to fit video resolution on first open
- Persist window size and position to localStorage
- Restore saved window state for subsequent opens
### Maintenance Page
- Improved duration display with better precision (weeks instead of imprecise months)
- Large print hours now show readable units (e.g., 478h → 3w, 100h → 4d)
- Auto-resize to fit video resolution on first open
- Persist window size and position to localStorage
- Restore saved window state for subsequent opens
- Fix runtime_seconds never incrementing during prints
- Bug: first timestamp was set but never committed (updated_count was 0)
- Add needs_commit flag to ensure timestamp is saved on first iteration
- Add utils/slicer.ts with OS detection for protocol handler
- Windows: bambustudio://, macOS/Linux: bambustudioopen://
- Update all usages in ArchivesPage.tsx and ModelViewerModal.tsx
Implement comprehensive theme customization with independent settings for
dark and light modes:
- Style layer: Classic (clean shadows), Glow (accent-colored glow effects),
Vibrant (dramatic deep shadows)
- Background layer: Neutral, Warm, Cool (light mode); plus OLED, Slate,
Forest (dark mode only)
- Accent colors: Green, Teal, Blue, Orange, Purple, Red
All combinations work independently (e.g., Glow + Forest + Teal). Settings
sync across devices via database and show toast confirmations on change.
Backend:
- Add 6 new settings fields (dark_style, dark_background, dark_accent,
light_style, light_background, light_accent)
- Add integration test for theme settings API
Frontend:
- Refactor index.css with 3-layer CSS variable system
- Update ThemeContext for dual-mode theme management
- Add Appearance section to Settings page with 6 dropdowns
- Update components for new ThemeContext API
0.1.6b3
* Bug Fixes
- Fixed printer hour counter inconsistency - Printer card and maintenance page now show consistent hour values (both use Math.round)
- Improved printer hour tracking accuracy - Introduced real-time runtime counter that tracks actual machine active time (RUNNING/PAUSE states), including calibration, heating, and bed leveling. This provides more accurate hours matching the printer's display
- Fixed Add Smart Plug modal scrolling - Modal now scrolls properly on lower resolution screens (https://github.com/maziggy/bambuddy/issues/34)
- Excluded virtual printer from discovery - Bambuddy's own virtual printer no longer appears in "Add Printer → Discovery" results
- Fixed bottom sidebar layout
* New Features
- Confirmation modal for quick power switch - Sidebar smart plug toggle now requires confirmation before turning on/off to prevent accidental clicks
* Repository
- Added community files: CODE_OF_CONDUCT.md, CONTRIBUTING.md, SECURITY.md
- Updated screenshots
0.1.6b2
* New Features
- Add Virtual Printer feature - SSDP discovery, TLS/MQTT, queue/auto-start modes, Docker support
- Emulates a Bambu Lab printer on your network - Bambuddy pretends to be a real printer
- Auto-discovery - appears automatically in Bambu Studio/Orca Slicer via SSDP protocol
- Send prints from slicer - slice and send directly to Bambuddy without a physical printer connected
- Two modes:
- Queue mode - prints go to "Pending Uploads" for manual review/scheduling
- Auto-start mode - prints immediately start on your default printer
- Secure communication - TLS 1.3 encrypted MQTT + FTPS with auto-generated certificates
- Access code authentication - 8-digit code like real Bambu printers
- Docker compatible - requires network_mode: host and volume mount for certificate persistence
- All archive page filters are now persistent
* Bugfixes
- Fix AMS filament matching in reprint modal
- Archive card: fixed cache bug with wrong cover image
- Minor bugfixes in queueing module (re-queue modal fix)
* Housekeeping
- Added frontend/backend tests for archive card AMS mapping
- Virtual printer appears in Bambu Studio/Orca Slicer via SSDP discovery
- Secure TLS/MQTT communication with auto-generated certificates
- Queue mode (pending uploads) or auto-start mode
- Configurable access code for authentication
- Docker support with network_mode: host and certificate persistence
- Fix backup/restore for virtual printer settings (auto-save no longer overwrites)
- Add fuzzy color matching for filament comparison
Colors within RGB threshold of 40 are considered a match, fixing
cases where 3MF and printer report slightly different hex values
for the same filament color (e.g., beige #F5F5DC vs #FCECD6)
- Add POST /printers/{id}/refresh-status endpoint
Sends MQTT pushall command to request fresh AMS data from printer
- Improve Re-read button in filament check section
- Now triggers backend refresh before refetching status
- More prominent styling with text label and border
- 500ms delay after pushall to allow printer to respond
- Add AMS slot labels to matched filament display
Shows location like "PLA (AMS-B Slot 3)" instead of just "PLA"
- Add color hex tooltips on filament color circles
New Features (0.1.6b)
Smart Plugs
- Tasmota device discovery - Auto-detect network and scan for Tasmota devices. Supports devices with/without authentication.
- Switchbar quick access - Sidebar widget for controlling smart plugs from anywhere. Shows real-time status and power consumption.
Timelapse
- Timelapse editor - Trim, speed adjustment (0.25x-4x), and music overlay with FFmpeg server-side processing.
Printer Discovery & Cards
- Docker subnet scanning - Auto-detect Docker environment and enable subnet input for discovering printers
- Printer model mapping - Show friendly names (X1C, H2D, P1S) instead of raw SSDP codes
- Detailed status stages - Show heater states and print status stages on printer cards
- Dual nozzle temperature - Fixed display for H2D printers
Archives & Projects
- AMS filament preview - Reprint modal shows filament comparison (type + color match indicators)
- File type badges - GCODE (green) or SOURCE (orange) badges on archive cards
- Project filament colors - Display filament swatches from assigned archives
- BOM filter - "Hide done" toggle for completed items
- Projects in backup/restore - Include projects, BOM items, and attachments
- Attachment validation - File type validation for project attachments
Maintenance
- Custom maintenance types - No longer auto-assign to all printers; manual per-printer assignment
- Delete printer options - Choose to keep or delete archives when deleting a printer
UI Improvements
- Project card design - Enhanced with gradients, shadows, and glow effects
- Confirmation modals - Replace browser confirm dialogs with styled modals
- Default timelapse speed - Changed from 2x to 1x
---
Bug Fixes
- Notifications sent when printer offline - Fixed notification module
- Camera stream stopping - Increased timeouts, added auto-reconnection with exponential backoff
- A1/P1 camera streaming - Fixed with extended timeouts and lower FPS cap; removed deprecated -stimeout option
- Attachment uploads not persisting - Fixed SQLAlchemy JSON column mutation detection
- Total print hours calculation - Now includes all prints, not just completed
- Mock state bug - Fixed in test fixtures
- Features:
- Tasmota device discovery: Auto-detect network and scan for Tasmota devices
in Add Smart Plug modal. Supports devices with/without authentication.
- Switchbar: Quick access widget in sidebar footer for controlling smart plugs
from anywhere in the app. Shows real-time status and power consumption.
- AMS Filament Preview:
- Add GET /archives/{id}/filament-requirements endpoint to extract
filament data from archived 3MF slice_info.config
- Show filament comparison in reprint modal when printer is selected
- Compare both filament type AND color with visual indicators:
- Green checkmark: Type and color match
- Yellow warning: Same type, different color
- Orange warning: Different type or empty slot
- Handle AMS-HT units (id >= 128) and virtual tray (slot 254)
- Normalize color formats between API (RRGGBBAA) and 3MF (#RRGGBB)
- File Type Badge:
- Archive cards show GCODE (green) or SOURCE (orange) badge
- Helps users identify which files have print data vs source-only
- Badge appears next to printer name in card content area
- Camera Stream Stability:
- Increase ffmpeg read timeout from 10s to 30s
- Add ffmpeg RTSP options: -timeout, -buffer_size, -max_delay
- Add frontend auto-reconnection with exponential backoff (2s-30s)
- Show reconnection UI with countdown and attempt counter
- Add TimelapseEditorModal component with visual timeline scrubber
- Add timelapse processing endpoints (info, thumbnails, process)
- Add TimelapseProcessor service using FFmpeg for video processing
- Support trim (start/end), speed (0.25x-4x), and audio overlay
- Add Edit button to TimelapseViewer
- Fix browser caching with timestamp query parameter
- Change default timelapse playback speed from 2x to 1x
- Detect Docker environment automatically via /.dockerenv and cgroup
- Show subnet input field in Add Printer dialog when running in Docker
- Scan IP range for Bambu printer ports (8883 MQTT, 990 FTPS)
- Query SSDP to get printer name/serial/model from discovered IPs
- Map raw SSDP model codes to friendly names (BL-P001→X1C, O1D→H2D)
1. "Unknown Status (255)" bug
File: backend/app/services/printer_manager.py:291-293
Problem: A1/P1 printers send stg_cur=255 when idle (unlike X1 which uses -1). The code treated 255 as a valid stage number and returned "Unknown stage (255)".
Fix: Changed the condition from if state.stg_cur >= 0: to if 0 <= state.stg_cur < 255: so that 255 is now treated as "no calibration stage" (same as -1).
2. AMS humidity/temp displaced on mobile
File: frontend/src/pages/PrintersPage.tsx:1164-1212
Problem: The AMS row used a rigid horizontal flex layout that didn't adapt to narrow mobile screens, causing humidity/temperature indicators to be displaced.
Fix:
- Added flex-wrap to allow wrapping on very narrow screens
- Added ml-auto to humidity/temp section to keep it right-aligned
- Added max-w-[60px] sm:max-w-none to truncate long filament names on mobile
- Changed gap from fixed gap-3 to responsive gap-2 sm:gap-3
Tests Added
4 new unit tests for get_derived_status_name:
- test_stg_cur_255_returns_none - Verifies A1/P1 idle state
- test_stg_cur_negative_one_returns_none_when_idle - Verifies X1 idle state
- test_valid_stage_returns_name - Verifies valid stages work
- test_stg_cur_zero_returns_printing - Verifies printing state
All 382 tests pass.