5.6 KiB
Preset naming
A preset's name is its identity, not decoration. The index registers it; inherits,
compatible_printers, printer_model and the default_* keys reference it by the exact,
case-sensitive string; renamed_from migrates it; setting_id and filament_id hash it
(ids.md). Treat a name change as an identity change that needs
migration, not a relabel. Which part of each name the loader acts on
is the table in SKILL.md; this page holds the conventions.
machine_model
<Model>, vendor-prefixed: Bambu Lab X1 Carbon, Creality K1, Prusa CORE One. Each variant's
printer_model names it verbatim (a mismatch discards the bundle), and its index entry equals the
file's name. It is also the stem of <Model>_cover.png and, by convention, of the bed assets
(<Model>_buildplate_model.stl).
machine (variant)
<Model> <nozzle> nozzle is near-universal (Bambu Lab X1 Carbon 0.4 nozzle). Casing varies
(nozzle / Nozzle): match the bundle, not this page. A variant that is not nozzle-specific (a
special toolhead, a multi-material build, IDEX copy and mirror modes such as
<Model> COPY MODE (0.4 nozzle)) may drop or reshape the suffix; it is still an exact reference. printer_variant
holds the nozzle token: 0.4, a suffixed 0.4HF, or 0.4+0.6 for mixed nozzles
(rules).
process
<layer height>mm <quality> @<target>. The quality word stays before @ and the printer target after
it: a printer model in the quality position leaves the tier undescribed. The @<target> is a label,
and need not equal any variant name; compatibility comes from compatible_printers or the
condition. The quality ladder and per-nozzle labels are in
process-profiles.md.
filament
<Product> @<target>. The product half, up to the first @ and right-trimmed, is the alias:
shadowing matches on it and filament_id hashes it. The target half is a label, except for the
reserved forms:
@base: a non-instantiated product root. Convention only; a base is reallyinstantiation: "false"withoutsetting_id(the three-part shape).@System: the OrcaFilamentLibrary selectable shim, and the convention for an all-printer product (<Product> @System, emptycompatible_printers). Not enforced, so a deviation is worth a review comment. The literalGeneric <mat> @Systemis also load-bearing for project recovery (alias shadowing).- Printer tunes. BBL's shape is the reference:
@<Vendor>(vendor-wide),@<Vendor> <Model>(one model),@<Vendor> <Model> <nozzle> nozzle(one variant). Other vendors differ: a bare model (QIDI ABS-GF@Q2-Series), a printer serial, Creality's@<Model>-all. Judge specificity fromcompatible_printers, never from the name (one variant, one profile). - No colour in the product name:
<Product> <Colour>presets are not authored; colour is chosen at runtime (colour).
Bases
| Type | Base names |
|---|---|
machine |
fdm_machine_common, fdm_<vendor>_common, fdm_klipper_common, or an established machine-family base |
process |
fdm_process_*: shared roots and per-layer-height or per-nozzle bases such as fdm_process_single_0.20 or fdm_process_<vendor>_<lh>_nozzle_<n> |
filament |
fdm_filament_* material roots, <Product> @base product roots |
There is no leading-underscore convention. Base names repeat across bundles by design:
every bundle may have its own fdm_process_common, and a product root such as Fiberon PA6-CF @base
can exist in both the library and a vendor. Investigate a newly authored base that kept an unrelated
selectable preset's name from a copy.
Uniqueness
- Type + name is unique within a bundle, indexed or not;
checkenforces it. machine_modelnames are unique across the whole tree;checkenforces it even with--vendor. Printer-type lookup matchesprinter_modelagainst every vendor's models and takes the first, so a duplicate makes it depend on vendor order.- At load, two selectable presets with one name discard the bundle, and a duplicate across vendors
is a validator error. Two bases with one name, or a base and a selectable preset, load silently and
the first in the index wins; an unindexed twin is therefore one
sub_pathedit away from becoming the parent every child resolves to.
Filenames and paths
The loader keys off name, and a filename that disagrees usually still loads, but keep the filename
equal to the name and to the index sub_path. Match the exact case of every sub_path and asset
filename: Linux filesystems distinguish case even when a macOS or Windows checkout does not, and
preset-name references are case-sensitive on every platform. Avoid Windows-invalid characters
(< > : " | ? *), reserved device names such as CON and NUL (with any extension), and trailing
spaces or dots in a path component; a space right before .json is not a trailing space.
Checking names
Check the name of every newly added profile, and every intentional rename, against its type and role
(model, selectable preset or base). check does not enforce the shapes on this page: inspect the
added or renamed presets in the diff, use neighbouring names as context, and follow the bundle's
established style where the conventions allow variation. Preserve shipped names during ordinary
tuning; renaming a shipped selectable preset needs renamed_from.