Phase 3 · Ship it · L17
Profile structure and naming
Measurements that live in your head are lost. This is how they become named, machine-scoped presets that can't end up on the wrong printer.
You run three printers with two firmware families. The specific way that goes wrong is not dramatic: it's selecting eSun PETG on the Core One when the numbers in it were measured on the MK3S, and the print coming out nearly right. Slightly bulged corners, slightly wrong dimensions, no error message. A profile that cannot physically appear on the wrong machine is the only reliable fix, and PrusaSlicer gives you the mechanism. This lesson wires it up.
Four decisions, and they compound. Get them right once and the fleet stays sane for years; get them wrong and you'll be renaming presets in three months trying to work out which number came from where.
1One profile per printer family — not per spool
The temptation is a profile per spool, since extrusion multiplier genuinely varies between colours. Resist it. You will have forty presets by Christmas and no idea which are current.
The unit that earns a preset is vendor + material + printer family + nozzle:
# <Vendor> <Material> @<PRINTER> <nozzle>
eSun PETG @MK3S 0.4
eSun PETG @MK4S 0.4
eSun PETG @COREONE 0.4
Per-spool variation goes in the notes field, not in a new preset — that's Lesson 19. The reason the printer belongs in the name and not just in the metadata is that the name is what you read in a dropdown at 11 pm.
An EM and a temperature transfer between two machines of the same family. A Pressure Advance value does not transfer from an MK3S — different firmware, different feature, different scale. Your MK4S and Core One share an MK4S-class hotend, so their filament profiles will end up close; their print profiles won't, because one is a bedslinger and the other is CoreXY. Keep them as separate presets anyway — you want to be able to change one without touching the other.
2Save as. Never overwrite a system profile
The workflow, every time:
- Select the target printer first
Then pick a system filament profile of the same material — e.g.
Generic PETGorPrusament PETG. Starting from a system profile for the right machine means you inherit its printer-specific conditional G-code rather than writing it. - Change your measured values Temperature, EM, advance, retraction overrides, cooling, MVS — the seven Phase 2 numbers.
- Save as, with the name above Never Save over the system profile. Overwriting one loses the update path and the printer-specific conditionals, and you cannot get them back without a reset.
- Set the compatibility condition
Filament Settings → Dependencies → Compatible printers condition. Section 3. - Export a config bundle
File → Export → Export Config Bundlewrites every custom setting in your current PrusaSlicer version — print, filament and printer profiles — to one.ini.1 Do this after every tuning session.
That last step is your only backup. PrusaSlicer's user presets are not in your repo and are not in version control; a reinstall or a profile-update collision loses them silently.
3The compatibility condition — the part that keeps a fleet honest
Filament Settings → Dependencies → Compatible printers condition takes an expression. If it
evaluates false for the selected printer, the profile does not appear. That is the mechanism that
makes a mis-selection impossible rather than merely unlikely.2
Open your machine. The pattern and the advance command both differ.
MK3S · Marlin, Linear Advance
; Filament Settings → Dependencies → Compatible printers condition
printer_model=~/.*MK3.*/ and nozzle_diameter[0]==0.4
; Filament Settings → Custom G-code → Start G-code
M900 K0.07 ; eSun PETG — measured L12, MK3S only
M900 K is Marlin's Linear
Advance.3 Putting an M572 here does
nothing on this machine.
MK4S · Buddy, Pressure Advance
; Filament Settings → Dependencies → Compatible printers condition
printer_model=~/.*MK4.*/ and nozzle_diameter[0]==0.4
; Filament Settings → Custom G-code → Start G-code
M572 S0.05 ; eSun PETG — measured L12, MK4S only
Note that /.*MK4.*/ matches an MK4 and an MK4S. That is deliberately loose. If
you want it strict, read your machine's actual model string first — see the callout below — and change
it to /.*MK4S.*/. Don't tighten a pattern you haven't verified: an over-strict condition
makes the profile vanish with no error, which looks exactly like having lost it.
Core One · Buddy, Pressure Advance, enclosed
; Filament Settings → Dependencies → Compatible printers condition
printer_model=~/.*COREONE.*/ and nozzle_diameter[0]==0.4
; Filament Settings → Custom G-code → Start G-code
M572 S0.05 ; eSun PETG — measured L12, Core One only
Same command family as the MK4S, different measured value — measure it on this machine. And
if you own more than one Core One variant, note that Core One, Core One+ and Core One L are distinct
models with distinct strings; verify before assuming /.*COREONE.*/ catches yours.
Select the printer, slice anything, and open the G-code in a text editor. PrusaSlicer writes its
configuration as comments at the end of the file — search for printer_model and read the
literal value. That is the string your regex has to match. Guessing and getting it wrong produces the
quietest possible failure: the profile simply isn't in the dropdown, and nothing tells you why.
A related quiet failure worth knowing: when a printer change makes a filament profile incompatible, PrusaSlicer flags it red rather than hiding it, and there's a preference to show incompatible profiles at all times.2 If you've enabled that preference, a red-flagged profile is selectable — and selecting one is exactly the mistake this section exists to prevent.
The two lines every shipped filament preset needs, generated together so they
can't disagree. Defaults reproduce the MK3S panel above. The condition uses the loose family pattern —
verify printer_model from a sliced file's config comments before tightening it.
4Inherit, or stand alone?
A PrusaSlicer preset can inherit from a system profile — carrying only your changes, and picking up Prusa's updates to everything else. Or it can be self-contained, listing every value explicitly. Your existing bundle is deliberately self-contained.
# upside
picks up Prusa's fixes
smaller, easier to read
tracks new settings
# downside
a system update can
move a value you never
measured, silently
# upside
survives system updates
imports on any version
what you measured is
what you print
# downside
misses Prusa's fixes
you own every value
For a tuning baseline, self-contained is the right call and your bundle already makes it. The point of this whole course is that the numbers are yours, measured, attributable. A value that can change under you because a vendor bundle updated is a value you can't reason about. The price is that you must periodically diff your profile against the current system one and decide, deliberately, whether to adopt anything — which is a Lesson 19 habit.
One more structural rule, from your own conventions and worth restating because it is easy to get backwards: the advance command lives in the filament profile's start G-code, never in the printer's. PrusaSlicer is unusual in offering per-filament custom G-code, and that is precisely what makes the K or S value change automatically when you switch material.4 Put it in the printer profile and every filament on that machine gets one material's value.
5Find the fault
Click each. Each one is a real way a three-printer fleet goes wrong.
- A filament profile with no compatibility condition setScoping
- Tuned values saved straight over
Generic PETGSave as - A condition regex that was tightened but never verifiedRegex
- The
M572line living in printer start G-codePlacement - Three evenings of measurements, never exportedBackup
6Check yourself
From memory. Question 2 reaches back to Phase 0.
Audit and scope your existing bundle
Your reference/source-material/esun-starter-profiles-bundle.ini already follows most of
this. Verify it against a real machine rather than against the file:
- For each of your three printers: select it, slice anything, export the G-code, and read the literal
printer_modelvalue out of the config comments at the end. Write all three down. - Compare each against the regex in the bundle. Does
/.*MK4.*/match your MK4S's actual string? Does/.*COREONE.*/match your Core One's? Decide — with the evidence in front of you — whether to tighten/.*MK4.*/to/.*MK4S.*/. - Import the bundle and confirm each profile appears on exactly one machine — with the matching nozzle selected, since the conditions scope by nozzle too — and disappears on the other two. That's the test that matters; the file being correct is not the same as it working.
- Export your own config bundle and save it into this repo. Note what it contains that the starter bundle doesn't.
→ Paste me the three model strings and your tighten-or-not decision with its reason. If you tightened without step 1, I'll ask you to undo it.
What you can now say
- One profile per vendor + material + printer family + nozzle — per-spool variation goes in notes, not in new presets.
- Save as, never over a system profile, or you lose its conditionals and its update path.
- The compatibility condition makes mis-selection impossible, which is stronger than making it unlikely.
- Verify the model string from sliced G-code before tightening a regex — an over-strict condition fails silently.
- Advance lives in the filament profile's start G-code, which is what lets the value follow the material.
§References
- Prusa Research. How to import and export custom profiles in PrusaSlicer. The
File → ImportandFile → Exportpaths, and that a config bundle contains all custom settings saved in the current PrusaSlicer version. Link. - Prusa Research. Configuration and profiles. The
Dependencies → Compatible printers conditionsetting, that profiles made incompatible by a printer or nozzle change are flagged red, and the preference that shows incompatible profiles anyway. Link. - Prusa Research. Linear Advance.
M900 Kon Marlin-firmware MK3-family machines. Link. - This course. Master tuning guide, §2.3 — PrusaSlicer is the only slicer with per-filament custom G-code, which is what makes the advance value change automatically per filament preset. Link.
Lesson L17 of the prusa-profile-tuning course · all lessons · The Calibration Card · glossary