Commit Graph
588 Commits
Author SHA1 Message Date
maziggy 4c2cef64b3 Add script automation and visibility options (#176)
Enhance Home Assistant script support with automation triggers and
printer card visibility control.

- Script automation: Run scripts automatically when main plug turns on/off
- Show/hide scripts on printer cards (configurable per script)
- Scripts appear in dedicated row on printer cards with quick-run buttons
- Toast notification when triggering scripts from settings/sidebar

Closes #176
2026-01-30 09:46:03 +01:00
MartinNYHC 48c349bed1 Merge pull request #179 from maziggy/revert-178-feature/stl-thumbnail
Revert "Feature/stl thumbnail"
2026-01-29 15:52:58 +01:00
MartinNYHC 221f9ffcc3 Revert "Feature/stl thumbnail" 2026-01-29 15:52:46 +01:00
MartinNYHC d9b4b011ba Merge pull request #178 from maziggy/feature/stl-thumbnail
Feature/stl thumbnail
2026-01-29 15:49:42 +01:00
MartinNYHC c4b3b69914 Merge branch '0.1.6-final' into feature/stl-thumbnail 2026-01-29 15:49:27 +01:00
maziggy 0a120b7735 Trigger CI 2026-01-29 15:20:37 +01:00
maziggy 523d14c216 Updated CI 2026-01-29 15:10:03 +01:00
MisterBeardyandClaude Opus 4.5 375d5238d0 Add STL thumbnail generation support
- Add trimesh and matplotlib dependencies for software-based 3D rendering
- Create stl_thumbnail service with generate_stl_thumbnail() function
- Handle mesh simplification for large files (>100k vertices)
- Auto-generate thumbnails during STL file upload and ZIP extraction
- Add POST /library/files/{id}/regenerate-thumbnail endpoint
- Add POST /library/generate-stl-thumbnails batch endpoint
- Add "Generate Thumbnails" button to file manager toolbar
- Add "Regenerate Thumbnail" option to file context menu
- Add unit and integration tests for new functionality

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 15:06:01 +01:00
maziggy 86ad13398a Updated CI 2026-01-29 13:31:07 +01:00
maziggy 48b897a5a9 Updated CI 2026-01-29 13:30:45 +01:00
maziggy 18fbd9c156 Remove timestamps from GitHub backup files for cleaner diffs
- Remove created_at from backup_metadata.json
- Remove exported_at from K-profile files
 - Remove exported_at from cloud profile files (filament, printer, process)
- Remove exported_at from app settings backup
- Git already tracks file modification history, so these were redundant
- Backups now only show changes in git diff when actual data changes
2026-01-29 08:27:20 +01:00
maziggy e74d5be4b8 @renovate
- vitest: ^2.1.0 → ^3.2.4
- @vitest/coverage-v8: upgraded to match
2026-01-29 08:17:53 +01:00
maziggy a367ddc66e Add toggle to disable printer firmware update checks
Add new setting "Check printer firmware" in Settings → General → Updates
that allows users to disable automatic firmware update checks from
Bambu Lab servers.

Closes #169
2026-01-29 07:50:32 +01:00
maziggy c123fa08c0 Fix A1/A1 Mini showing Printing instead of Idle (Issue #168)
Some A1/A1 Mini firmware versions incorrectly report stg_cur=0 (which
maps to "Printing") even when the printer is idle. This is a known
firmware bug also observed in the Home Assistant Bambu Lab integration.

- Add A1_MODELS constant listing affected model variants
- Add has_stg_cur_idle_bug() helper to identify affected models
- Update get_derived_status_name() to check gcode_state before stg_cur
  for A1 models: if IDLE + stg_cur=0, return None to show "Idle"
- Fix only applies when all conditions match (A1 model + IDLE + stg_cur=0)
- Non-A1 printers and A1 printers without the bug are unaffected

Closes #168
2026-01-29 07:23:53 +01:00
maziggy c203d9bf5b Fix multi-plate thumbnail display in queue and add archive plate browsing
- Queue now shows correct plate thumbnail based on selected plate_id
  (previously always showed plate 1 regardless of selection)
- Archive cards now support plate browsing for multi-plate 3MF files:
  - Left/right arrows to cycle through plates on hover
  - Dot indicators at bottom show current plate (clickable)
  - Lazy-loads plate data only when user hovers
- Added getArchivePlateThumbnail and getLibraryFilePlateThumbnail API methods

Closes #166
2026-01-28 16:22:33 +01:00
maziggy be34b778ff Uodated CHANGELOG 2026-01-28 15:57:43 +01:00
maziggy 2afdbc5e60 Fix K-profiles backup status showing incorrect printer connection count
The GitHub backup settings page was showing "1/2 connected" even when
both printers were connected. This happened because the code read
printer status from the React Query cache, which is only populated by
WebSocket messages received on other pages.

Changed to use useQueries to fetch printer status directly from the API
(/api/v1/printers/{id}/status) instead of relying on cached WebSocket
data. Results are cached for 10s and refreshed every 30s.
2026-01-28 13:56:37 +01:00
maziggy 65a6e7791b Fix Bambu Cloud preset lookup by transforming filament_id to setting_id
Printers report filament_id (e.g., GFA00) but the Bambu Cloud API expects
setting_id format which has an "S" inserted after "GF" (e.g., GFSA00).

- Add _filament_id_to_setting_id() helper function
- Transform IDs before API calls: GFx## -> GFSx##
- User presets (P-prefix) and already-correct IDs unchanged
- Improved warning message to show both original and transformed IDs
2026-01-28 09:34:56 +01:00
maziggy 54abee53f8 Updated Github workflow 2026-01-28 09:15:46 +01:00
maziggy 180752f7e6 Updated Github workflow 2026-01-28 09:15:26 +01:00
maziggy ead2bfc822 @renovate baseline-browser-mapping@latest 2026-01-28 07:18:19 +01:00
maziggy a1c59fd6cb Updated the workflow:
- Changed stale-issue-label from feedback to stale (so stale issues get the "stale" label)
- Added remove-issue-labels: 'feedback' to remove the feedback label when issues are auto-closed
2026-01-28 07:13:35 +01:00
maziggy f17c9e572b Updated the workflow:
- Changed stale-issue-label from feedback to stale (so stale issues get the "stale" label)
- Added remove-issue-labels: 'feedback' to remove the feedback label when issues are auto-closed
2026-01-28 07:13:01 +01:00
maziggy 2bc0ef122d Minor layout fixes 2026-01-27 17:15:26 +01:00
maziggy b258e14eda Minor layout fixes 2026-01-27 16:56:01 +01:00
maziggy 181a748506 Minor layout fixes 2026-01-27 16:55:05 +01:00
maziggy 80d4b63939 Add Prometheus metrics endpoint for external monitoring (#161)
Expose printer telemetry at /api/v1/metrics in Prometheus text format for
integration with Grafana, Prometheus, and other monitoring systems.

Backend:
- Add metrics.py route with GET /api/v1/metrics endpoint
- Support optional bearer token authentication
- Export printer metrics: connection, state, temperatures, fans, WiFi
- Export print metrics: progress, remaining time, layer count
- Export statistics: prints by status, filament used, print time
- Export queue metrics: pending and active jobs
- Add prometheus_enabled and prometheus_token settings

Frontend:
- Add Prometheus Metrics card in Settings → Network tab
- Toggle to enable/disable metrics endpoint
- Optional bearer token field for authentication
- Display list of available metrics

Tests:
- Add test_metrics_api.py with 7 integration tests
- Test access control (disabled, enabled, token auth)
- Test metrics format and content validation
2026-01-27 16:49:28 +01:00
maziggy 3a03cfe928 Add resizable sidebar and text wrap option to File Manager (#160)
- Add draggable resize handle to folder sidebar (200-500px range)
- Persist sidebar width in localStorage
- Double-click resize handle to reset to default width
- Add "Wrap" toggle button in Folders header for text wrapping
- When wrap enabled: folder names break across lines, menu always visible
- When wrap disabled: folder names truncate with tooltip on hover
- Persist wrap preference in localStorage

Closes #160
2026-01-27 16:13:04 +01:00
maziggy cc4dd3a0e8 Auto-control chamber light for plate detection
- Automatically turn on chamber light before plate check if it's off
- Restore light to original state after modal closes or check completes
- Add 2.5s delay for light to turn on and camera to adjust exposure
- Remove manual light warning from plate check modal
- Apply to both manual plate checks (modal) and automatic checks on print start
2026-01-27 16:00:47 +01:00
maziggy 2c761e7663 Add library file support to print queue scheduler
The print queue now supports two sources:
- archive_id: Print from existing archive (existing behavior)
- library_file_id: Print from file manager library files (NEW)

Previously, queue items from the file manager failed with "Archive not
found" because the scheduler only handled archive-based prints.

Changes:
- Add LibraryFile model import
- Update _start_print() to handle both archive and library file sources
- Handle absolute vs relative file paths correctly
- Update logging and MQTT notifications to use correct filename

Fixes GitHub issue #163
2026-01-27 15:40:27 +01:00
maziggy 14e8e512f2 Fix timezone comparison in GitHub backup scheduler
The scheduler compared timezone-aware datetime.now(UTC) with naive
datetimes from the SQLite database, causing "can't compare offset-naive
and offset-aware datetimes" error.

Fixed by adding UTC timezone to naive datetimes before comparison.
2026-01-27 15:21:32 +01:00
maziggy 84fe13dd07 Fix print queue not starting when printer state is FAILED
The print scheduler only considered IDLE, FINISH, and unknown as valid
idle states. This caused the queue to not process items when the printer
was in FAILED state (e.g., after an aborted print).

Added FAILED to the list of idle states since a failed print means the
printer is ready to accept a new print job.
2026-01-27 15:16:18 +01:00
maziggy 4ea7f7c4aa Add GitHub profile backup feature
New feature to automatically backup K-profiles, cloud profiles, and app
settings to a GitHub repository with scheduled or on-demand execution.

Features:
- Configure GitHub repo URL and Personal Access Token
- Schedule backups hourly, daily, or weekly (background scheduler)
- Manual backup trigger with real-time progress tracking
- Skip unchanged commits (only creates commit when data changes)
- Backup history log with status and commit links
- Requires Bambu Cloud login for full profile access
- New Settings → Backup & Restore tab consolidating all backup options
- GitHub backup config included in local backup/restore (except PAT)

Backend:
- New models: GitHubBackupConfig, GitHubBackupLog
- New service: GitHubBackupService with scheduler and GitHub API client
- New routes: /github-backup/* for config, status, logs, and triggers
- Updated settings.py to include github_backup in backup/restore

Frontend:
- New GitHubBackupSettings.tsx component with auto-save
- Updated SettingsPage with Backup tab and status indicator
- Added API types and methods to client.ts

Tests:
- Backend integration tests for all GitHub backup API endpoints
- Frontend API type and endpoint tests
2026-01-27 15:01:06 +01:00
maziggy ea737c4719 Updated CHANGELOG 2026-01-27 13:02:17 +01:00
maziggy 5c0b5500fb Fix backup/restore 2026-01-27 12:52:24 +01:00
maziggy b28b829bd8 Fix backup/restore 2026-01-27 12:47:43 +01:00
maziggy 945121b799 Fix plate calibration backup/restore with printer ID remapping
- Add "Plate Detection" option to backup modal
- Store printer_id_to_serial mapping in backup for calibration files
- Remap printer IDs during restore based on serial numbers so files
  like printer_3_ref_0.jpg get correctly renamed if printer 3 becomes
  printer 2 on the new system
- Add parents=True to mkdir calls in config.py to fix startup crash
- Labels/metadata are now correctly restored via the metadata.json files
2026-01-27 12:39:02 +01:00
maziggy 30f7d41ec3 Add plate calibration to backup and fix directory creation
- Add "Plate Detection" option to backup modal for exporting empty plate
  reference images (requires Printers to be selected)
- Add parents=True to mkdir calls in config.py to create full directory
  tree on first run (fixes startup crash when data dir doesn't exist)
- Update BackupModal test to use exact match for "Printers" text
2026-01-27 12:30:15 +01:00
maziggy 8f30f08559 Fix startup crash when data directory doesn't exist
Add parents=True to mkdir calls for archive_dir and plate_calibration_dir
in config.py to create the full directory tree on first run.
2026-01-27 12:12:04 +01:00
maziggy 56efb44c4f Added explicit permissions: issues: write 2026-01-27 11:44:23 +01:00
maziggy c52c505ad8 Added explicit permissions: issues: write 2026-01-27 11:24:49 +01:00
maziggy d6dcc7656d Fix auth mock in tests
Add missing /api/v1/auth/status mock to MSW handlers to prevent
network errors during frontend tests
2026-01-27 11:23:23 +01:00
maziggy aa5ab135c7 Added stale issues workflow 2026-01-27 11:15:13 +01:00
maziggy cdf52a6a28 Added stale issues workflow 2026-01-27 11:14:48 +01:00
maziggy c196ae017a Fix plate detection calibration persistence
- Check cv2.imwrite() return value to catch silent failures
- Verify reference image file exists after save
- Validate file size is reasonable (>1KB) to detect corruption
- Add logging for save, rotate, and delete operations
- Use temp directory for plate calibration during tests to avoid
  deleting real user calibration files

Previously, calibration could report success even if the image file
failed to save. Additionally, running tests would delete real
calibration files because tests shared the same plate_calibration_dir.
2026-01-27 10:38:44 +01:00
maziggy db236f0aa7 Improved cv2.imwrite for build plate empty detection 2026-01-27 10:14:39 +01:00
maziggy e57fb87a52 Add queue bulk editing and fix milestone time display
New Features:
- Queue bulk edit: Select multiple pending items and edit printer
  assignment, print options, or cancel them at once (Issue #159)
- Tri-state toggles (unchanged/on/off) for selective field updates

Fixes:
- Progress milestone notifications showed wrong time (e.g., "17m" instead
  of "17h 47m") - fixed by converting remaining_time from minutes to
  seconds (Issue #157)
- File Manager folder names now show full name on hover tooltip (Issue #160)

Backend:
- Added PATCH /queue/bulk endpoint for bulk updates
- Route ordering fixed to prevent /bulk matching as /{item_id}

Frontend:
- Added checkbox selection to pending queue items
- Added bulk action toolbar with Select All, Edit Selected, Cancel Selected
- Created BulkEditModal with tri-state toggles for each setting

Tests:
- Added 7 integration tests for bulk update endpoint

Closes #159
2026-01-27 09:35:28 +01:00
maziggy 60d9505c0d Add tooltip for truncated folder names in File Manager
Long folder names are truncated to prevent layout issues. Added title
attribute so users can hover to see the full folder name.

Fixes #160
2026-01-27 09:07:18 +01:00
maziggy d0cc282d3e Allow folder names to wrap in File Manager navigation
Long folder names were truncated with ellipsis. Now they wrap onto
multiple lines and show full name on hover tooltip.

Closes #160
2026-01-27 09:04:20 +01:00
maziggy 2e03fca2df Fix progress milestone notification showing wrong time unit
The remaining_time from printer state is in minutes (from mc_remaining_time),
but _format_duration() expects seconds. This caused "17h 47m" to display as
"17m" in milestone notifications.

Closes #157
2026-01-27 08:53:48 +01:00