0.7.0
Added
- Outbound notifications on print & printer events — get alerted when a print completes, fails, or is cancelled, and when a printer goes offline (cancellations are a distinct event you can mute separately). Four delivery targets: generic JSON webhooks, Discord, Telegram, and ntfy. Configure under Settings → Notifications (admins only) with per-event and per-printer toggles.
- Reliable delivery — events are enqueued atomically with the state change that produced them (none are lost) and delivered by a background dispatcher with automatic retry and exponential backoff. Each channel shows its last delivery status and a recent-deliveries log; a Test button verifies a channel end to end. Off by default behind a master switch.
- Richer notifications — messages lead with an event glyph and carry a "View model" link to the model's source page (Printables, MakerWorld, …) where known. Only safe
http(s)links are ever rendered. - Much better mesh thumbnails — crease-aware smooth (Gouraud) shading and a Z-up 3/4 "hero" framing, so organic models render as smooth surfaces instead of a faceted blob, and you see the front of upright models rather than the top.
Fixed
- G-code parsing — OrcaSlicer filament length is no longer multiplied ×1000 (a benchy could report millions of mm); bed temperature is now detected on OrcaSlicer/Bambu Studio (
hot_plate_temp); infill is now detected on PrusaSlicer (fill_density). - Notification delivery edge cases — Telegram now uses HTML with every value escaped, so an ordinary
name_with_underscore.gcodeno longer fails with HTTP 400; ntfy titles with Unicode / em-dash are RFC 2047-encoded instead of breaking every send. - Library scans no longer OOM-killed by a dense mesh (#24) — triangle count is estimated before loading (STL/PLY/OBJ/3MF) and anything over
VAULT_MESH_MAX_RENDER_TRIANGLES(2,000,000 default) is skipped; the file is still indexed and 3MF keeps its embedded preview. STL/3MF serving now streams off disk, and an interrupted scan lands in a terminal state instead of crash-looping. - "Open in slicer" now works on self-hosted instances (#27) — the button mints a short-lived, file-scoped download token embedded ahead of the filename so OrcaSlicer/Bambu Studio can fetch the file and detect its format. macOS
bambustudioopen://handling is retained. - Zip imports preserve the archive's folder structure as nested collections instead of flattening everything into one.
- 3D viewer stands models upright — Z-up print meshes no longer lie on their side with the floor grid cutting through them.
Notes
- Schema: two additive migrations (
e6f4a2b8c1d9,f7a5b3c9d2e1) add the notification tables and asystem_config.notifications_enabledflag (defaults off). No existing tables or columns are altered or dropped; migrations run automatically on startup. Notifications are off by default. - New configuration (all optional, with defaults):
VAULT_MESH_MAX_RENDER_TRIANGLES(2,000,000) andVAULT_SLICER_DOWNLOAD_TOKEN_EXPIRE_MINUTES(15). - Behavioral: very dense meshes (multi-million-triangle lattice/gyroid) skip thumbnail rendering; thumbnails are re-rendered with the new look on rebuild. See the upgrade notes.