bambuddy/backend/app/services
maziggy fdd6ec416f fix(slicer): classify filament profiles by their real printer scope, not just their name (#2628 follow-up)
Slicing for a P2S failed with "filament preset Bambu PLA Basic @BBL X1C 0.2
nozzle (slot 1) is not compatible with printer Bambu Lab P2S 0.4 nozzle" —
naming a profile shown nowhere in the dialog. The picked profile was
"Overture PLA Matte @0.2", whose inheritance chain roots in that X1C profile.

The dialog classifies a profile by its compatible_printers list and falls back
to reading the printer out of its name. That name carries no model, and the
list — present on the imported copy — is not shipped by every source: Bambu
Cloud omits it deliberately (rate limits), and Orca Cloud shipped it but
Bambuddy only mined filament type and colour from the same content.

Orca Cloud entries now carry their own compatible_printers, and the existing
same-name enrichment bridge carries the list onto entries that lack one, in
both directions between the cloud tiers. A bare "@<size>" name tag is read as
a nozzle size as a last resort: it can rule a printer out but never rules one
in, and implausible values are ignored rather than guessed at.
2026-07-22 10:44:05 +02:00
..
git_providers security(github-backup): refuse to save against a non-private repository 2026-05-17 15:30:05 +02:00
virtual_printer feat(print-options): add "Auto" state to bed levelling, flow & nozzle-offset calibration 2026-07-20 17:55:56 +02:00
__init__.py Added screenshots 2025-11-28 10:23:59 +01:00
archive.py fix(queue): persist selected plate to the archive; reconcile archive on offline stop (#2603) 2026-07-19 09:29:54 +02:00
archive_comparison.py fix(archives): keep Quick Stats contribution when deleting a print (#1343) 2026-05-15 09:21:43 +02:00
archive_purge.py fix(archives): bulk and auto purge now honour the soft / hard delete choice from #1343 (#1390 follow-up) 2026-05-17 10:54:28 +02:00
backup_path.py fix(backup): diagnose an unwritable backup path instead of quoting errno 30 (#2544) 2026-07-12 08:44:53 +02:00
bambu_cloud.py fix(cloud): only sign out on Bambu's real token-expiry 401, not any 401 2026-07-21 07:26:19 +02:00
bambu_ftp.py fix(db): stop holding pooled connections across FTP/camera/SMTP work (#2572) 2026-07-18 09:10:08 +02:00
bambu_mqtt.py fix(smart-plugs): don't blank printer state when an accessory plug switches off (#2629) 2026-07-22 09:57:27 +02:00
bug_report.py Add in-app bug reporting with relay, debug log collection, and privacy controls 2026-03-04 13:33:19 +01:00
camera.py fix(photo): source finish photo from forced timelapse + cleanup (#1397) 2026-06-05 13:53:26 +02:00
camera_diagnose.py feat(camera): in-app diagnostic for "Connection lost" (#1395 follow-up) 2026-05-18 10:52:02 +02:00
camera_fanout.py fix(camera): stop /camera/stop from letting a second socket open (#2521) 2026-07-14 11:52:56 +02:00
camera_profiles.py fix(camera): P2S RTSP stream dropped every frame after the first (#1395) 2026-05-22 13:55:16 +02:00
diagnostic_snapshot.py ● feat(support): include sanitized connection / VP / log-health diagnostics in support bundle and bug report (#1506 follow-up) 2026-05-24 10:16:30 +02:00
discovery.py Fix timestamps off by timezone offset in non-UTC containers (#504) 2026-02-24 08:18:02 +01:00
email_service.py feat: Two-Factor Authentication (TOTP, Email OTP) and OIDC/SSO – full implementation with admin UI (#933) 2026-04-13 13:24:28 +02:00
export.py Security hardening (security #2) 2026-06-13 09:35:49 +02:00
external_camera.py fix(camera): transcode non-JPEG external snapshots to JPEG (#1902) 2026-07-06 07:54:30 +02:00
failure_analysis.py fix(stats): cancelled prints get their own bucket; gauge denominator excludes them (#1390 follow-up) 2026-05-24 15:21:10 +02:00
filament_deficit.py feat(deficit): backup-aware filament deficit check, colour-strict (#1762) 2026-06-22 10:00:02 +02:00
filament_requirements.py fix(queue): scope force-colour overrides to the plate the item prints (#2551) 2026-07-13 09:18:17 +02:00
firmware_check.py feat(a2l): add Bambu Lab A2L support (#1684) 2026-06-10 10:59:27 +02:00
firmware_update.py fix(asyncio): track strong refs on orphan create_task sites 2026-06-06 10:41:28 +02:00
ftp_profiles.py fix(ftp): cap H2C FTPS to TLS 1.2 so the sliced 3MF downloads reliably (#2582) 2026-07-18 09:33:22 +02:00
github_backup.py security(github-backup): refuse to save against a non-private repository 2026-05-17 15:30:05 +02:00
hms_actions.py [Feature]: HMS Actions (#1743) 2026-06-26 14:40:25 +02:00
hms_errors.py Add HMS error notifications with translations and plate detection fixes 2026-01-27 08:48:57 +01:00
homeassistant.py fix(smart-plugs): HA entity search bypassed the schema's domain whitelist (#1388) 2026-05-17 08:20:28 +02:00
label_renderer.py feat(labels): scannable QR on 203 dpi thermal printers + monochrome mode (#1870) 2026-07-07 10:31:19 +02:00
layer_timelapse.py feat(camera): optional snapshot URL override for external cameras (#1177) 2026-05-03 07:59:02 +02:00
ldap_service.py feat(auth): manual LDAP user provisioning from the UI (#1298) 2026-05-15 12:05:43 +02:00
library_trash.py security: harden path-traversal class across routes + services; fifth CI backstop 2026-06-02 12:12:54 +02:00
local_backup.py fix(backup): diagnose an unwritable backup path instead of quoting errno 30 (#2544) 2026-07-12 08:44:53 +02:00
location_service.py feat(inventory): structured storage locations catalog (#1505) 2026-06-17 11:33:23 +02:00
log_health.py feat(system): log-health scanner + Add/Edit-Printer setup pre-flight 2026-05-22 16:31:16 +02:00
log_reader.py feat(system): log-health scanner + Add/Edit-Printer setup pre-flight 2026-05-22 16:31:16 +02:00
long_lived_tokens.py fix(overlay): authenticate the OBS overlay with a token when login is enabled (#2613) 2026-07-20 13:04:35 +02:00
loop_watchdog.py feat(diagnostics): event-loop stall watchdog to catch silent backend freezes 2026-05-22 09:28:43 +02:00
makerworld.py fix(cloud): only sign out on Bambu's real token-expiry 401, not any 401 2026-07-21 07:26:19 +02:00
mqtt_relay.py Fix timestamps off by timezone offset in non-UTC containers (#504) 2026-02-24 08:18:02 +01:00
mqtt_smart_plug.py fix(smart-plug): restore MQTT subscriptions for per-type topic configs on startup (#1010) 2026-04-19 13:51:58 +02:00
network_utils.py fix(vp): populate bind-interface list on macOS (route non-Linux to psutil) 2026-07-06 13:03:22 +02:00
notification_service.py fix(db): stop holding pooled connections across FTP/camera/SMTP work (#2572) 2026-07-18 09:10:08 +02:00
obico_actions.py feat(notifications): dedicate AI Failure Detection notification event (#1794) 2026-06-22 08:15:29 +02:00
obico_detection.py fix(obico): Failure Detection status panel shows thresholds for the selected sensitivity (#1469) 2026-05-21 08:45:59 +02:00
obico_smoothing.py feat(obico): AI print-failure detection via self-hosted Obico ML API (#172) 2026-04-13 09:54:26 +02:00
oidc_icon.py feat(auth): proxy OIDC provider icons server-side (#1333) (#1342) 2026-05-15 08:50:37 +02:00
opentag3d.py Feature/spoolman inventory UI (#1241) 2026-05-08 11:52:42 +02:00
orca_cloud.py feat(orca-cloud): pair via RFC 8628 device flow, replacing the paste-based sign-in 2026-07-17 08:16:35 +02:00
orca_profiles.py Fix AMS slot showing wrong material for "Support for" profiles 2026-03-03 13:34:03 +01:00
pipeline_eligibility.py feat(slicer): Pipelines — multi-copy + class targeting + fanout + runs dashboard + retry-failed + WS updates (#1425 PR C — completes the v3 design) 2026-06-27 16:52:05 +02:00
plate_detection.py feat(camera): optional snapshot URL override for external cameras (#1177) 2026-05-03 07:59:02 +02:00
plate_thumbnail.py fix(archives): render plate thumbnails server-side when sidecar slice skips them (#1759) 2026-06-19 07:28:09 +02:00
plug_energy_history.py fix(smart-plugs): read a REST plug's lifetime counter, and derive Today/Yesterday from it (issue #2539) 2026-07-11 14:22:31 +02:00
preset_resolver.py remove(slicer): drop bundle import; fix cloud preset type/from for CLI (#1712) 2026-06-12 10:14:06 +02:00
print_log.py fix(stats): don't bank the disconnect gap as print time on reconnect (#2592) 2026-07-18 09:58:21 +02:00
print_scheduler.py fix(smart-plugs): don't blank printer state when an accessory plug switches off (#2629) 2026-07-22 09:57:27 +02:00
printer_diagnostic.py fix(diagnostic): skip external-storage check on P1S/P1P instead of fail (#2524) 2026-07-09 08:43:59 +02:00
printer_manager.py fix(smart-plugs): don't blank printer state when an accessory plug switches off (#2629) 2026-07-22 09:57:27 +02:00
rest_smart_plug.py fix(smart-plugs): read a REST plug's lifetime counter, and derive Today/Yesterday from it (issue #2539) 2026-07-11 14:22:31 +02:00
slice_dispatch.py feat: Unify print dispatch through the scheduler (#1625) 2026-06-26 12:31:48 +02:00
slice_preview.py remove(slicer): drop bundle import; fix cloud preset type/from for CLI (#1712) 2026-06-12 10:14:06 +02:00
slicer_3mf_convert.py fix(slicer): classify filament profiles by their real printer scope, not just their name (#2628 follow-up) 2026-07-22 10:44:05 +02:00
slicer_api.py remove(slicer): drop bundle import; fix cloud preset type/from for CLI (#1712) 2026-06-12 10:14:06 +02:00
slicer_filament_resolver.py fix(spoolbuddy): close #1815 — preserve PFUS/PFCN setting_id in resolver 2026-06-25 09:26:33 +02:00
slot_preset_writer.py fix(ams): keep slot card preset name in sync after spool swaps 2026-06-10 08:39:21 +02:00
smart_plug_manager.py fix(smart-plugs): don't blank printer state when an accessory plug switches off (#2629) 2026-07-22 09:57:27 +02:00
sponsor_prompt.py feat(sponsor-prompt): lower print/archive/cost thresholds to fire for typical new installs 2026-06-26 16:48:22 +02:00
spool_assignment_notifications.py fix(a2l): normalise AMS Lite unit 16->6 so slots load and deduct (#a2l-am-unit-16) 2026-07-21 10:21:11 +02:00
spool_csv.py feat(inventory): CSV import/export for the inventory page (#1576) (#1659) 2026-06-08 09:30:16 +02:00
spool_tag_matcher.py fix(ams): keep slot card preset name in sync after spool swaps 2026-06-10 08:39:21 +02:00
spoolbuddy_ssh.py fix(spoolbuddy): lower /update permission to INVENTORY_UPDATE so kiosk's own Settings -> Update button works 2026-05-08 14:28:41 +02:00
spoolman.py feat(inventory): toggle to disable auto-add of unknown RFID spools + global confirmation modal (issue #1764) 2026-06-23 09:59:05 +02:00
spoolman_tracking.py fix(inventory): record the mapped spool's material, not the sliced type (#2563) 2026-07-15 07:29:16 +02:00
stl_thumbnail.py security: harden path-traversal class across routes + services; fifth CI backstop 2026-06-02 12:12:54 +02:00
tasmota.py Fix support bundle leaking personal data (#473) 2026-02-21 08:17:59 +01:00
timelapse_processor.py Remove unused imports, variables, and fix minor CodeQL findings 2026-02-06 12:19:17 +01:00
usage_tracker.py fix(inventory): record the mapped spool's material, not the sliced type (#2563) 2026-07-15 07:29:16 +02:00