Commit Graph
190 Commits
Author SHA1 Message Date
maziggy e2b2877965 Archive improvements: list view actions, object count, cross-view highlighting
Added:
  - Archive list view: edit/delete buttons and context menu with full feature parity
  - Archive object count display on cards (extracted from 3MF metadata)
  - Cross-view archive highlighting: click in calendar/project to highlight in card view
  - Context menu button (⋮) on cards and list rows for easy access
  - Spoolman: clear location when spools are removed from AMS

  Fixed:
  - QR code endpoint 500 error (added qrcode[pil] dependency)
2026-01-09 08:24:14 +01:00
maziggy b4bc046684 Clear Spoolman location when spool is removed from AMS
Previously, when syncing to Spoolman, the location field was set to the
  printer/AMS slot but was never cleared when the spool was removed from
  the AMS.

  Now during sync, the system tracks which tray UUIDs are currently in the
  AMS and clears the location for any spools that were previously at this
  printer but are no longer present.

  Changes:
  - Add clear_location parameter to update_spool() method
  - Add find_spools_by_location_prefix() to find spools at a printer
  - Add clear_location_for_removed_spools() to clear stale locations
  - Update sync_printer_ams and sync_all_printers endpoints to clear
    locations for removed spools after syncing
2026-01-09 07:43:40 +01:00
maziggy 50a5f5473b Fixed print object label positioning in skip objects modal 2026-01-08 16:42:35 +01:00
maziggy 000ef632d8 Add print options to reprint modal and fix AMS mapping for multi-color prints
Features:
  - Add print options UI to reprint modal (bed leveling, flow calibration,
    vibration calibration, first layer inspection, timelapse)
  - Collapsible "Print Options" section with toggle switches
  - Default values: bed leveling=on, vibration_cali=on, others=off

  Fixes:
  - Fix AMS mapping format to match Bambu Studio exactly
    - Use slot_id from 3MF to position tray IDs correctly
    - Fill unused slots with -1 placeholder
    - Add ams_mapping2 with detailed {ams_id, slot_id} pairs
  - Fix print command format for proper printer recognition
    - Add auto_bed_leveling, cfg, extrude_cali_flag, nozzle_offset_cali
    - Use American spelling "bed_leveling" (not British "bed_levelling")
    - Match sequence_id format from official apps
  - Prevent duplicate tray assignment in filament matching

  This resolves the "stuck at filament change" issue on multi-color reprints
  affecting X1C and other multi-AMS printer configurations.
2026-01-08 16:27:29 +01:00
maziggy 63c08c8154 Fixed critical bug.
The delete_archive() function in backend/app/services/archive.py now has these safety checks:

  1. Empty path check: Refuses to delete files if file_path is empty/whitespace
  2. Path containment check: Verifies archive_dir is inside settings.archive_dir
  3. Depth check: Ensures we're at least 1 level deep inside archive directory
  4. Logging: All security refusals are logged with SECURITY prefix
  5. Database record still deleted: Even if file deletion is refused, the orphan DB record is cleaned up

  Before the fix:
  file_path = settings.base_dir / archive.file_path  # If empty: /opt/bambuddy
  archive_dir = file_path.parent                      # = /opt
  shutil.rmtree(archive_dir)                         # DELETES /opt!
2026-01-08 14:09:49 +01:00
maziggy 508116e5b7 Fixed bug, where deleted printer was not removed from maintenance 2026-01-07 08:01:24 +01:00
maziggy 4f2a45c190 Add maintenance documentation links with model-specific wiki URLs (#59)
Features:
  - Add wiki_url field to MaintenanceType for custom type documentation links
  - Add printer_model to MaintenanceStatus for model-specific URL mapping
  - Display external link icon next to maintenance item names
  - Map system maintenance types to Bambu Lab wiki pages by printer model:
    - Lubricate Linear Rails, Clean Nozzle/Hotend, Check Belt Tension
    - Clean Carbon Rods (X1/P1 only), Clean Build Plate, Check PTFE Tube
    - HEPA/Carbon Filter, Left Nozzle Rail (H2 series)
  - Add Documentation Link input to custom type create/edit forms

  Bug fix:
  - Fix 500 error when assigning maintenance type to printer (lazy loading)

  Database:
  - Add migration for wiki_url column on maintenance_types table
2026-01-07 07:53:42 +01:00
maziggy fe1d10b705 1. Runtime tracking - Removed the 60s upper bound so restarts don't break hour counting
2. Chamber stream check - Added _active_chamber_streams check for A1/P1 printers (proactive)
3. Browser freeze - Removed immediate printerStatus invalidation on print_complete
2026-01-06 09:10:59 +01:00
maziggy c960b91f2a Fixed bug where printer's hour counter was not updated, if backend was restarted 2026-01-06 08:50:59 +01:00
maziggy a1c69dc89d Changed version to 0.1.6 2026-01-05 10:43:30 +01:00
maziggy 50fd0c018b Add support bundle feature for issue reporting
- Add /api/v1/support/debug-logging endpoints to toggle debug log level
  - Add /api/v1/support/bundle endpoint to generate ZIP with system info and logs
  - Debug logging state persists across restarts via Settings database
  - Add debug logging indicator banner in Layout with real-time duration timer
  - Add Support & Troubleshooting section to System Information page
  - Privacy protection:
    - Filter sensitive settings (emails, keys, tokens, URLs, configs)
    - Sanitize paths to remove usernames
    - Remove hostname from collected data
    - Replace IP addresses with [IP] and emails with [EMAIL] in logs
  - Add privacy info panel explaining what data is/isn't collected
  - Require debug logging to be enabled before downloading support bundle
2026-01-05 09:54:31 +01:00
maziggy 4f2fa7685a Minor fixes 2026-01-05 08:48:58 +01:00
maziggy 19dfbf1c96 Excluded virtual printer from printer discovery 2026-01-05 07:52:39 +01:00
maziggy ffd0c8bddf Fixed bug where print cover could not be fetched in Docker environments 2026-01-04 18:56:11 +01:00
maziggy a18d0c0939 Fixed datetime import bug 2026-01-04 18:44:59 +01:00
maziggy 6fb71de6a2 Add firmware update helper for LAN-only printers
Enables checking and uploading firmware updates for printers operating
  in LAN-only mode without Bambu Cloud connectivity.

  Features:
  - Automatic firmware version checking against Bambu Lab servers
  - Orange "Update" badge on printer cards when updates available
  - Firmware update modal with version info and release notes
  - One-click firmware upload to printer SD card via FTP
  - Real-time upload progress (actual bytes transferred)
  - Step-by-step instructions for triggering update from printer
  - Local firmware caching for faster re-uploads
  - Supports all Bambu Lab printer models

  New files:
  - backend/app/services/firmware_check.py - Version checking service
  - backend/app/services/firmware_update.py - Upload orchestration
  - backend/app/api/routes/firmware.py - REST API endpoints

  Also includes:
  - FTP upload progress callback support
  - 10-minute upload timeout protection
  - Firmware cache directory in .gitignore
2026-01-04 18:41:24 +01:00
maziggy b0c576c8a8 Improved duplicate archive check 2026-01-04 16:46:59 +01:00
maziggy 5f989c34f1 Changed version to 0.1.6b7 2026-01-04 16:01:53 +01:00
maziggy 9e952f797e Fixed bug where wrong active AMS tray was shown for multi nozzle printers 2026-01-04 15:50:23 +01:00
maziggy d241c5e4db Fixed backend tests for virtual printer 2026-01-04 15:17:34 +01:00
maziggy a1f6d648dc Fixed bug in virtual printer 2026-01-04 14:57:12 +01:00
maziggy cd5be4b842 Fixed bug in virtual printer 2026-01-04 14:54:27 +01:00
maziggy bb37a8c8a8 Fix virtual printer model codes and serial prefixes
- Correct SSDP model codes: C11=P1P, C12=P1S, N7=P2S, C13=X1E
  - Fix serial prefixes based on actual Bambu serial format
  - Add confirmation modal for pending upload discard
  - Sort model dropdown alphabetically, remove internal codes
  - Add "Setup Required" warning with link to wiki documentation
  - Update wiki with certificate installation and platform setup guides
2026-01-04 14:05:08 +01:00
maziggy 81c8dd7d0c Add virtual printer model selection
Features:
  - Configurable printer model for virtual printer emulation
  - Supports X1 series (X1C, X1, X1E), P series (P1S, P1P, P2S),
    A1 series (A1, A1 Mini), and H2 series (H2D, H2C, H2S)
  - Dropdown in Settings > Virtual Printer to select model
  - Model affects SSDP discovery and slicer compatibility
  - Model change restarts virtual printer services automatically

  Backend:
  - Added VIRTUAL_PRINTER_MODELS mapping in manager.py
  - Added virtual_printer_model setting in database
  - New GET /api/v1/settings/virtual-printer/models endpoint
  - Updated PUT /api/v1/settings/virtual-printer to accept model

  Frontend:
  - Added model dropdown to VirtualPrinterSettings component
  - Status display shows selected model name
  - Model change disabled while virtual printer is running

  Tests:
  - Added 3 unit tests for model configuration
  - Updated frontend test mocks for getModels API
2026-01-04 09:39:06 +01:00
maziggy 8639f39028 Add resizable printer cards and Queue Only mode
Features:
  - Resizable printer cards (S/M/L/XL) with toolbar controls on Printers page
  - Queue Only mode for staging prints without automatic scheduling
    - "Queue Only" option in add/edit queue modals
    - Purple "Staged" badge and Play button to release to queue
    - manual_start field in database with migration

  Fixes:
  - Improved camera stream stuck detection with automatic reconnection

  Tests:
  - Added 16 integration tests for print queue API endpoints
2026-01-04 09:10:06 +01:00
maziggy 53eff03fb5 Added debug logging for printer's hour counter and current active AMS slot mapping 2026-01-04 08:08:10 +01:00
maziggy 3c336b0da2 Fixed bug in camera stream stuck detection 2026-01-03 11:03:00 +01:00
maziggy a308248880 Camera stream is now reconnecting if stream stucks 2026-01-03 10:51:37 +01:00
maziggy 226094982d Fixed active AMS slot display 2026-01-03 10:38:26 +01:00
maziggy 5dae3d3021 Fixed bug in skip objects modal, where the object ID markers are not correctly positioned over their corresponding objects in the build plate preview 2026-01-03 10:26:06 +01:00
maziggy 55ec08d4d1 Improved cover image retrieval 2026-01-03 10:02:00 +01:00
maziggy c9ad09864d Minor GCode viewer improvements 2026-01-03 09:59:17 +01:00
maziggy 410924a94f Fixed bug where printer card was showing wrong cover image, if print file has multiple plates 2026-01-03 08:36:59 +01:00
maziggy d03fe7598f Fixed bug in Spoolman sync 2026-01-03 08:11:55 +01:00
maziggy 74e2d95ea8 Changed version to 0.1.6b6 2026-01-02 17:22:05 +01:00
maziggy 94c961dbaf Add real-time fan status monitoring to printer cards
- Controls section: New section before Filaments with fan status and printer controls
  - Part cooling fan (Fan icon, cyan)
  - Auxiliary fan (Wind icon, blue)
  - Chamber fan (AirVent icon, green)
  - Stop/Pause/Resume buttons moved from Temperature section
- Real-time updates: Fan speeds now broadcast via WebSocket
- Backend: Parse MQTT fan data (cooling_fan_speed, big_fan1_speed, big_fan2_speed)
  - Convert 0-15 scale to 0-100%
- Always-visible badges with dynamic coloring based on fan state
- Removed horizontal dividers before Controls and Filaments sections
2026-01-02 16:05:20 +01:00
maziggy 83cbac04b7 - Add interactive API Browser to Settings > API Keys
- New APIBrowser component with full OpenAPI schema integration
    - Fetches and parses /openapi.json automatically
    - Groups endpoints by API tags (printers, archives, settings, etc.)
    - Expandable endpoint sections with color-coded method badges
    - Path parameter, query parameter, and JSON body editors
    - Auto-populates request body with schema examples
    - Live API request execution with response display
    - Response shows status code, timing, and formatted JSON
    - Copy response button with clipboard fallback
    - Search to filter endpoints across all categories
    - Expand All / Collapse All buttons
    - Link to Swagger UI (/docs)

  - Two-column layout for API Keys tab
    - Left: API key management + webhook documentation
    - Right: API Browser with dedicated test key input

  - Parameter validation
    - Shows warning for missing required parameters
    - Validates before sending requests to avoid 422 errors

  - UX improvements
    - "Use in API Browser" button on newly created keys
    - Responsive layout (stacked on mobile, side-by-side on xl+)
2026-01-02 15:00:21 +01:00
maziggy 0f65fb9484 - Bugfixes
- AMS "Unexpected format" warnings fixed - P1S/P1P send partial updates without full tray list (per https://github.com/Doridian/OpenBambuAPI/blob/main/mqtt.md). Now handled correctly.
  - FTP improvements:
    - Added timeouts (60s download, 30s listing)
    - Better logging at INFO level
    - Shows what files exist in /cache
  - Fallback archive - When 3MF can't be downloaded, creates minimal archive so prints are tracked
2026-01-02 13:21:57 +01:00
maziggy e356d03ee1 - Added new settings tab Filament and moved Spoolman Sync card 2026-01-02 12:00:57 +01:00
maziggy 32bd11ad82 - Fixed bug in update module for Docker based installations 2026-01-02 11:43:48 +01:00
maziggyandClaude Opus 4.5 a1c12331db Add Spoolman integration tests and update spool comment
Backend tests:
- 21 integration tests for all Spoolman API endpoints
- Status, connect/disconnect, spools, filaments, link, sync

Frontend tests:
- 20 component tests for SpoolmanSettings
- Rendering, disabled/enabled states, connection status, sync UI

Also changed auto-created spool comment to "Created by Bambuddy"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 10:42:43 +01:00
maziggy ea0bf5f932 - Add print quantity tracking for project progress
- Track number of items per print job (default: 1)
  - Project stats now show total items vs print jobs
  - Progress bar counts items toward target, not just archives
  - "Items Printed" field in archive edit modal

  Backend:
  - Added quantity field to PrintArchive model
  - Database migration for quantity column
  - Updated project stats to use SUM(quantity)
  - Updated backup/restore to include quantity
  - Updated CSV/Excel export with quantity field

  Frontend:
  - Added quantity input to EditArchiveModal
  - Updated ProjectsPage to display total_items
  - Updated ProjectDetailPage stats
  - Fixed project delete not refreshing the list
2026-01-02 10:24:31 +01:00
maziggy 5b8d24f2ce - Spoolman: Add link spool feature, UUID display, and sync feedback
- Link to Spoolman: Manually link existing Spoolman spools to AMS trays
    - Hover over AMS slot to see "Link to Spoolman" button
    - Select from list of unlinked Spoolman spools
    - Automatically sets extra.tag field in Spoolman
  - Spool UUID display: View and copy Bambu Lab spool UUID in AMS hover card
    - Shows first 8 chars with copy button (full UUID to clipboard)
    - Fallback copy method for HTTP contexts
  - Sync feedback: Shows synced count and skipped spools with reasons
    - Expandable list when more than 5 skipped
    - Color swatches for identification
  - Fixed Spoolman 400 Bad Request: extra field values must be valid JSON
  - Updated documentation (wiki, website)
2026-01-02 09:20:24 +01:00
maziggy fd3919574b - Major fixes for skip objects feature 2026-01-01 18:31:59 +01:00
maziggy 2dcd1a2ef2 - Enhanced skip objects feature with visual improvements and better UX
- Skip Objects Modal:
    - Object ID markers overlaid on preview image (grid layout)
    - Large prominent ID badges to match printer display
    - Info banner explaining to match IDs with printer screen
    - Layer warning when skip unavailable (layer <= 1)
    - Red badge on button showing skipped count
    - Preview image now shown when paused (not just running)
    - Close with ESC key or click outside modal
    - Full light/dark theme support

  - Backend:
    - Extract object positions from 3MF (include_positions=True)
    - API returns x/y coordinates for objects (when available)
    - Parse s_obj from printer MQTT for skipped state persistence
    - Cover URL available in PAUSE/PAUSED states

  - Tests:
    - Added test for objects with position data
2026-01-01 18:01:41 +01:00
maziggy fe250b9b7f - Added frontnend/backend tests for printer controls 2026-01-01 16:02:25 +01:00
maziggy 2c61ba930a Updated version to 0.1.6b4 2026-01-01 14:10:41 +01:00
maziggyandClaude Opus 4.5 1234e44eb2 - Docker update detection for in-app updates
- Added _is_docker_environment() function
  - Check endpoint returns is_docker and update_method fields
  - Apply endpoint rejects Docker with helpful instructions
- Added updates API tests
- Updated CHANGELOG

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 14:06:06 +01:00
maziggy ccdb084f23 - Refactored printer card's AMS section for better experience 2026-01-01 12:08:55 +01:00
maziggy 569dbc3d21 - Printer Hour Counter:
- 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
2026-01-01 07:58:23 +01:00