Add filament calibration feature#855
Open
SmoothBrainIT wants to merge 1 commit into
Open
Conversation
Adds a guided calibration workflow attached to filaments, allowing users
to run and record results for standard FDM calibration steps (temperature
tower, flow rate, pressure advance, VFA, input shaping) directly within
Spoolman.
Backend:
- New `calibration_session` and `calibration_step` DB models with Alembic
migrations; sessions are linked to a filament (not a spool) so calibration
data follows the material
- REST API: CRUD for sessions and steps under `/api/v1/calibration/`
- Pydantic response models with `from_db()` helpers
Frontend:
- `CalibrationSection` embedded on the Filament show page; lists sessions
with status badges and per-step results in a collapsible panel
- `CalibrationWizard` — step-by-step modal with contextual instructions,
test-setup inputs, auto-computed results (e.g. PA = step × height), and
OrcaSlicer wiki links per step
- `StepResultDrawer` — inline drawer for editing/re-recording a saved step
- Pressure Advance supports Tower method (auto-compute) and Pattern/Line
method (direct entry) via a Segmented toggle
- Steps can be marked as Skipped (sentinel `{ _skipped: true }` in outputs)
for steps not applicable to a given printer
- `SessionFormModal` for creating / editing session metadata
Tests:
- Integration tests for session and step CRUD covering create, get, list,
update, and delete
Note: UI copy is currently English-only. i18n strings will be contributed
to Weblate in a follow-up PR.
Author
Roadmap — Open to Additional IdeasThis PR lays the groundwork for calibration data to live in Spoolman. Below are natural next steps we'd love community input on before implementing. All are open for discussion. 🎯 Slicer Profile Export / ImportThe most impactful near-term extension. Our calibration results map almost 1:1 to slicer filament profile fields:
Proposed features:
🖨️ Printer ProfilesCurrently
📊 Calibration History & Trends
🔔 Calibration Reminders / Status Indicators
🌐 i18nUI copy in this PR is English-only. All strings are hardcoded candidates for Weblate translation — planned as a follow-up PR once the feature stabilizes. 💡 Other Ideas WelcomeIf you have use cases not covered above — different slicer formats, API integrations, mobile QR-scan-to-load-settings workflows — please comment below. This is intentionally left open. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Screenshots
Changes
Backend
calibration_sessionandcalibration_stepDB models (spoolman/database/models.py) with two Alembic migrations/api/v1/calibration/with Pydantic response modelsFrontend
CalibrationSection— embedded panel on the Filament show page; lists sessions with status badges and per-step resultsCalibrationWizard— step-by-step modal with instructions, inputs, auto-computed results, and OrcaSlicer wiki linksStepResultDrawer— inline drawer for editing or re-recording a saved step resultSessionFormModal— create/edit session metadata (printer name, nozzle diameter, notes)Other
.env.productiontoclient/.gitignoreto prevent local dev artifacts from being committedTest plan
poe itestNotes
_skippedsentinel (outputs: { _skipped: true }) is a frontend convention stored in the step's JSON outputs field; it is not a separate DB column.