diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 575b8f17fe..8b82f51730 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -20,6 +20,8 @@ > Please describe the tests that you have conducted to verify the changes made in this PR. --> +- [ ] New filament/material profiles: I wrote **no** `filament_id` key by hand — I ran `python scripts/assign_filament_ids.py` and `--update-snapshot` and committed both diffs (see `doc/developer-reference/filament_id.md`) + diff --git a/doc/developer-reference/filament_id.md b/doc/developer-reference/filament_id.md new file mode 100644 index 0000000000..a45268b6aa --- /dev/null +++ b/doc/developer-reference/filament_id.md @@ -0,0 +1,169 @@ +# Filament IDs (`filament_id`) + +`filament_id` identifies a **material family**: one commercial product line = one id, shared by +all of that material's per-printer / per-nozzle variants. Devices use it to match a physical +spool or tray to a filament preset. It is never per-color, per-printer, per-nozzle, or +per-preset (per-preset identity is `setting_id`). + +This page is the rule for authoring `filament_id` in system profiles +(`resources/profiles/**`). CI enforces everything below; the short version is: + +> [!IMPORTANT] +> **Never write a `filament_id` value by hand.** New families get their id from +> `python scripts/assign_filament_ids.py`; existing families already have one — inherit it. + +## Who consumes the id + +Every device integration funnels a tray material id (`tray_info_idx`) through the same +matching pipeline (`PresetBundle::sync_ams_list` and friends): + +| Ecosystem | Where the id comes from | +| --- | --- | +| Bambu AMS | device side (RFID / user tray setting) — the `GF*` catalog | +| Qidi box | built from device enums (`QD_*`); needs an exactly matching visible preset | +| Creality CFS | runtime brand/type scoring returns the current preset's id | +| Klipper (AFC / Happy Hare) | runtime lookup by filament type | +| Snapmaker | runtime color/vendor/type match | + +Tray-to-preset matching is printer-scoped, but **several consumers match globally by id alone, +first hit wins**: tray display names, `filament_is_support`, vitrification warnings, and +multi-nozzle filament grouping in the slicing pipeline. Two *different* materials sharing one +id feed wrong data to those consumers even when the presets live in different vendors — so +cross-material id sharing is never safe. Within one printer, duplicate ids silently break AMS +matching (first match wins, the tray-edit dialog hides the second preset); the profile +validator's `-f` check rejects this. + +## Do I need a new id? The one-question test + +> **Would a user consider this a different spool product than anything already in the tree?** + +Different polymer, different sub-brand (Basic / Matte / Silk / HF), fiber-filled sibling, or a +second selectable diameter → **new family, new id**. The same spool tuned for another printer +or nozzle → **join the existing family** (inherit its `@base`, write no id key). Tuning a +generic material → **join the OrcaFilamentLibrary family** (inherit `Generic X @System`, keep +the `Generic X` base name, write no id key). + +| Situation | id | +| --- | --- | +| Per-printer / per-nozzle variant of an existing material | same id (inherit, never write the key) | +| Sub-brand or product line (PLA vs PLA Matte vs PLA Silk vs PLA HF) | new id each | +| Color | never a new id | +| Second diameter selectable on the same printer (1.75 + 2.85) | sibling family, new id | +| "High-speed" tuned for a *different printer model* | same id (it is a printer variant) | +| "High-speed" selectable *alongside* the normal preset on one printer | new id (it is a product line) | + +## Structure rules + +1. **Only family roots carry the key.** Root presets (any preset *not* marked + `"instantiation": "true"`, typically ` @base` with `"instantiation": "false"`) + declare `filament_id`; instantiated variants inherit a root and never + write the key. A family may have several roots (e.g. per-series bases) — all of them must + declare the *identical* id. +2. **The family name is the base name**: the preset name with everything from the first + (optionally space-preceded) `@` stripped. `MyBrand PLA @Orca 3D Fuse1` and `MyBrand PLA@HS` + both belong to family `MyBrand PLA`. +3. **Within a family, variants' `compatible_printers` are pairwise disjoint** — per printer + preset, at most one compatible instantiated preset per id. The C++ validator (`-f`) + enforces this. +4. **Generics belong to OrcaFilamentLibrary.** A vendor tuning a generic material inherits + `Generic X @System`, keeps the `Generic X` base name (that alias is what hides the library + preset on your printers), sets a non-empty `compatible_printers`, and writes no id key. + A vendor-*branded* filament never rides a generic family id. +5. **Ids are immutable once shipped.** Renaming a family does not change its id — use + `renamed_from`. A shipped id is never recycled for a different material: old ids live on in + user presets and 3mf files and a recycled id would silently match the wrong material. + +## Minting — nobody invents ids + +New ids are deterministic, computed exactly like the `setting_id` precedent +(`scripts/assign_vendor_setting_ids.py`): + +```text +FILAMENT_ID_NAMESPACE = uuid5(setting-id NAMESPACE, "filament_id") + = c4d3ff49-4c32-5534-a3e3-00894157ab97 +filament_id = "OF" + base62_6( uuid5(FILAMENT_ID_NAMESPACE, "filament_family//") ) +``` + +`base62_6` is the low 6 base62 digits (alphabet `0-9A-Za-z`) of the UUID taken as a big-endian +integer, most-significant digit first — 8 chars total, within the AMS length limit. `` +is the vendor bundle name (the stem of the vendor index json, e.g. `Qidi`, +`OrcaFilamentLibrary`); `` is the family base name. On the rare collision with any +existing or retired id, the minter salts the input (`…/1`, `…/2`, …) until free and the result +is frozen in the file. Example: family `MyBrand PLA` in vendor `Orca 3D` mints `OFvCEY5V`. + +Workflow for a new family: + +```bash +# 1. Author the family with NO filament_id key anywhere. +python scripts/assign_filament_ids.py # 2. mint + insert ids into the family root(s) +python scripts/assign_filament_ids.py --update-snapshot # 3. record the new claims in the ledger +python scripts/assign_filament_ids.py --check # 4. verify — the same checks CI runs +# 5. Commit the profile edits together with scripts/filament_id_snapshot.json. +``` + +`--mint "Vendor/Family"` prints the id for one family without touching anything. The default +run is idempotent and never rewrites a valid existing id. + +If you skip the tooling, CI fails and prints the remedy: the expected id for your family, and +the instruction to run `python scripts/assign_filament_ids.py --update-snapshot` and commit +the resulting diff. + +## Reserved namespaces — never mint or hand-write into + +| Space | Owner | Rule | +| --- | --- | --- | +| `GF*` | Bambu AMS/RFID catalog | BBL vendor only; byte-copies elsewhere only where the snapshot already sanctions them | +| `QD_*` | Qidi device protocol | frozen device contract; Qidi vendor only | +| `P` + 7 hex chars (case-insensitive), `"null"` | user-created custom filaments (`CreatePresetsDialog.cpp`) | never appears in system profiles | +| every already-shipped id | grandfather snapshot | frozen as-is; new claims need maintainer sign-off | +| every retired id | `scripts/retired_filament_ids.json` | never used again, for anything | + +## How CI enforces this + +Profile CI (`check_profiles.yml` → `scripts/orca_extra_profile_check.py`) runs +`check_filament_ids()` tree-wide. Its ground truth is +**`scripts/filament_id_snapshot.json` — the sanctioned state**: the id state derived from the +tree must equal the snapshot exactly, in both directions. Any change to the id landscape +therefore surfaces as a diff to that file, and **that snapshot diff is what maintainers review +and gate in a PR**. Never edit the snapshot by hand — `--update-snapshot` regenerates it +deterministically (running it twice changes nothing). + +The checks, in brief: + +- **Format** — every id is either in the snapshot, `OF` + 6 base62 chars, BBL's, or Qidi `QD_*`. +- **Snapshot equality** — tree claims == snapshot claims, both directions. +- **Mint conformance** — a non-grandfathered `OF*` claim must equal the mint (or a salt + iteration) of its `(vendor, family)`; the error prints the expected id. +- **Retired reuse** — any tree id present in `scripts/retired_filament_ids.json` is an error. + Ids that fully vanish from the tree are appended there by `--update-snapshot`; the file is + **append-only**. +- **Alias hygiene** — a tuned generic must keep the library preset's base name and a non-empty + `compatible_printers` (structure rule 4); the error names the rename as the cause. +- **Reserved namespaces** — `GF*` outside BBL, `QD_*` outside Qidi, `P<7-hex>` or `null` + anywhere, unless that exact claim is grandfathered in the snapshot. +- **Structure** — no `filament_id` key on instantiated presets; no declared-vs-inherited id + drift; every instantiated system filament must resolve an effective id through its + `inherits` chain (an id-less one is a hard load error in C++ that discards the whole vendor + bundle). + +Sharing a **reserved-catalog** id with a new family or vendor (e.g. shipping a Bambu-cataloged +product under another vendor with its authentic `GF*` id) is refused by `--update-snapshot` +unless you pass `--allow-shared-catalog` — and it still lands in the snapshot diff for +maintainer review. Any other new sharing of an existing id is caught by the mint-conformance +check instead. + +## FAQ + +- **A new color of an existing product?** Never a new id — colors are not families. +- **A second diameter (1.75 mm and 2.85 mm) of the same product?** A sibling family with its + own id: two diameters are separately selectable spool products. +- **A high-speed tune of an existing material for another printer model?** Same family: + inherit the family's root, write no id key. +- **A tuned generic ("our profile for Generic PLA")?** Inherit `Generic PLA @System`, keep the + `Generic PLA` base name, set `compatible_printers`, write no id key. +- **I need to rename a family.** Keep the id, add `renamed_from`. Ids never change. +- **CI says my family needs an id.** Run `python scripts/assign_filament_ids.py`, then + `--update-snapshot`, and commit both diffs. Do not type an id by hand. + +For general profile authoring, see the profile development guide on the +[OrcaSlicer wiki](https://www.orcaslicer.com/wiki). diff --git a/scripts/assign_filament_ids.py b/scripts/assign_filament_ids.py new file mode 100644 index 0000000000..8100ecb880 --- /dev/null +++ b/scripts/assign_filament_ids.py @@ -0,0 +1,851 @@ +#!/usr/bin/env python3 +""" +Mint deterministic filament_id values for OrcaSlicer system filament families and +validate the tree against the sanctioned-state ledger. + +Policy (companion to assign_vendor_setting_ids.py; see filament_id_plan.md): + * filament_id is a MATERIAL-FAMILY id: one commercial product line = one id, + shared by all of that material's per-printer/per-nozzle variants. The key is + declared only on family ROOT presets (instantiation != "true"); instantiated + variants inherit it through `inherits` and never write the key themselves. + * New ids are a pure function of the family's identity: + filament_id = "OF" + base62_6( uuid5(FILAMENT_ID_NAMESPACE, + "filament_family//") ) + where is the vendor bundle name (stem of the vendor index json) and + is the family name = preset base name (name with /\\s?@.*$/ stripped). + 8 chars total, which satisfies the AMS length limit. Nobody invents ids by + hand; on the astronomically rare collision with any existing or retired id the + input is salted ("/1", "/2", ...) until free and the result is frozen in file. + * Reserved id spaces that are never minted into or altered: + - GF* Bambu AMS/RFID catalog (vendor BBL untouchable) + - QD_* Qidi device protocol + - P + 7 hex chars (case-insensitive) and the literal "null" + user-custom presets (CreatePresetsDialog.cpp) + - every already-shipped id, grandfathered via scripts/filament_id_snapshot.json + * scripts/filament_id_snapshot.json is the sanctioned-state ledger: it must + exactly equal the tree-derived state at all times, so any id/claim change shows + up as a reviewable diff to that file (the maintainer gate). Ids that fully + vanish from the tree are appended to scripts/retired_filament_ids.json; a + retired id may never be used again for anything. + +The effective-id resolution below is loader-faithful (PresetBundle.cpp +load_vendor_configs_from_json): own filament_id key, else walk `inherits` within +the vendor map, with OrcaFilamentLibrary base-bundle fallback; once a chain enters +OFL it stays in OFL; a vendor chain that dead-ends id-less retries its direct +parent in the OFL map. + +Run from anywhere: python3 scripts/assign_filament_ids.py + (default) mint + insert ids for id-less families; idempotent, never + rewrites a valid existing id; a no-op on a fully-idded tree + --mint "V/Family" print the id that would be minted; touches nothing + --update-snapshot regenerate the snapshot from the tree; retire vanished ids + --check run the validation checks (also run by CI through + orca_extra_profile_check.py); exit nonzero on errors +""" + +import argparse +import json +import os +import re +import sys +import uuid + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from assign_vendor_setting_ids import ALPHABET, NAMESPACE # noqa: E402 + +# Dedicated namespace for filament_id, derived from the setting_id namespace baked +# into both Python and C++ (assign_vendor_setting_ids.NAMESPACE). Never change it. +# FILAMENT_ID_NAMESPACE == UUID("c4d3ff49-4c32-5534-a3e3-00894157ab97") +FILAMENT_ID_NAMESPACE = uuid.uuid5(NAMESPACE, "filament_id") +FILAMENT_ID_LENGTH = 6 # base62 digits after the "OF" prefix -> 8 chars total + +SCRIPTS_DIR = os.path.dirname(os.path.abspath(__file__)) +PROFILES_DIR = os.path.normpath(os.path.join(SCRIPTS_DIR, "..", "resources", "profiles")) +SNAPSHOT_PATH = os.path.join(SCRIPTS_DIR, "filament_id_snapshot.json") +RETIRED_PATH = os.path.join(SCRIPTS_DIR, "retired_filament_ids.json") + +OFL = "OrcaFilamentLibrary" + +OF_ID_RE = re.compile(r"^OF[0-9A-Za-z]{6}$") +# User-custom id space minted by CreatePresetsDialog.cpp ("P" + md5(name)[0:7]); +# reserved case-insensitively, together with its "null" sentinel. +USER_CUSTOM_ID_RE = re.compile(r"^P[0-9A-Fa-f]{7}$", re.IGNORECASE) +# Family name = preset base name: strip the first "@..." suffix. The space before +# "@" is optional because names like "Afinia PLA@HS" exist. +BASE_NAME_RE = re.compile(r"\s?@.*$") +# OFL generic presets relevant for alias hygiene (check 5). +OFL_GENERIC_RE = re.compile(r"^Generic .* @System$") +# Salt iterations accepted by the mint-conformance check (check 3). +MAX_CHECK_SALT = 8 + +UPDATE_HINT = 'run "python scripts/assign_filament_ids.py --update-snapshot" and commit the diff for maintainer review' + + +# Same output helpers/format as orca_extra_profile_check.py (not imported from +# there to avoid a circular import: that script imports check_filament_ids). +def print_error(msg): + print(f"\033[91m[ERROR]\033[0m {msg}") # Red + +def print_warning(msg): + print(f"\033[93m[WARNING]\033[0m {msg}") # Yellow + +def print_info(msg): + print(f"\033[94m[INFO]\033[0m {msg}") # Blue + +def print_success(msg): + print(f"\033[92m[SUCCESS]\033[0m {msg}") # Green + + +def _utf8_console(): + """Make stdout/stderr survive non-ASCII profile names on cp1252 consoles.""" + for stream in (sys.stdout, sys.stderr): + if hasattr(stream, "reconfigure"): + try: + stream.reconfigure(encoding="utf-8", errors="replace") + except (ValueError, OSError): + pass + + +# --------------------------------------------------------------------------- +# Minting +# --------------------------------------------------------------------------- + +def base_name(name): + """Family name of a preset: name with the first "@..." suffix stripped.""" + return BASE_NAME_RE.sub("", name, count=1) + + +def generate_filament_id(vendor, family, salt=0): + """Deterministic "OF" + 6-char base62 filament_id for a material family. + + input = "filament_family//" (+ "/" when salted); + u = uuid5(FILAMENT_ID_NAMESPACE, input); the id tail is the low + FILAMENT_ID_LENGTH base62 digits of int(u.bytes, "big"), most-significant + first — the same derivation as generate_preset_setting_id. + """ + key = f"filament_family/{vendor}/{family}" + if salt: + key = f"{key}/{salt}" + u = uuid.uuid5(FILAMENT_ID_NAMESPACE, key) + n = int.from_bytes(u.bytes, "big") + digits = [] + for _ in range(FILAMENT_ID_LENGTH): + digits.append(ALPHABET[n % 62]) + n //= 62 + return "OF" + "".join(reversed(digits)) + + +def mint_filament_id(vendor, family, taken): + """Mint the family's id, salting past any id in `taken` (existing + retired).""" + for salt in range(10000): + candidate = generate_filament_id(vendor, family, salt) + if candidate not in taken: + return candidate + raise RuntimeError(f"could not mint a free filament_id for {vendor}/{family}") + + +# --------------------------------------------------------------------------- +# Tree loading + loader-faithful effective-id resolution +# --------------------------------------------------------------------------- + +def load_json(path): + with open(path, "r", encoding="utf-8-sig") as f: + return json.load(f) + + +def list_vendor_names(profiles_dir): + """Vendor bundles = subdirectories with a matching .json index file. + + (Ignores stray non-bundle entries such as the tracked "user" directory, + which has no user.json index.) + """ + profiles_dir = str(profiles_dir) + return sorted( + os.path.splitext(f)[0] for f in os.listdir(profiles_dir) + if f.endswith(".json") + and os.path.isdir(os.path.join(profiles_dir, os.path.splitext(f)[0])) + ) + + +def load_vendor_filaments(profiles_dir, vendor): + """Load a vendor's filament presets from its index's filament_list. + + Returns (presets dict name -> record, list of unreadable-file messages). + """ + profiles_dir = str(profiles_dir) + presets = {} + errors = [] + try: + idx = load_json(os.path.join(profiles_dir, vendor + ".json")) + except (OSError, ValueError) as e: + return presets, [f"unreadable vendor index {vendor}.json: {e}"] + for entry in idx.get("filament_list", []): + rel = f"{vendor}/{entry.get('sub_path', '')}" + path = os.path.join(profiles_dir, vendor, entry.get("sub_path", "")) + try: + data = load_json(path) + except (OSError, ValueError) as e: + errors.append(f"unreadable filament profile {rel}: {e}") + continue + name = data.get("name", entry.get("name")) + presets[name] = { + "name": name, + "file": rel, + "path": path, + "filament_id": data.get("filament_id"), + "inherits": data.get("inherits"), + "instantiation": str(data.get("instantiation", "")).lower() == "true", + "compatible_printers": data.get("compatible_printers") or [], + } + return presets, errors + + +def resolve_filament_id(name, filaments, ofl_filaments, seen=None, in_ofl=False, skip_own=False): + """Walk the inherits chain for the effective filament_id, loader-faithfully. + + Mirrors PresetBundle.cpp load_vendor_configs_from_json: a hop resolves in the + vendor's own map first, then falls back to the OFL base-bundle map. OFL's map + was memoized entirely within OFL, so once a chain enters OFL it stays in OFL + (a vendor file sharing an OFL preset's name must not shadow OFL-internal + hops). Additionally, a vendor preset that never resolves an id inside the + vendor is re-tried against the OFL map keyed by its direct parent name. + + skip_own ignores the first preset's own filament_id key (used to compute the + id its inherits chain would resolve WITHOUT the declaration — check 7b drift). + + Returns (filament_id or None, source, ofl_entry) where source is one of + "own"/"inherited"/"missing"/"dangling"/"cycle" and ofl_entry is the name of + the OFL preset through which a vendor chain entered OFL (None when the id was + declared vendor-side or resolution started inside OFL). + """ + if seen is None: + seen = set() + if name in seen: + return None, "cycle", None + seen.add(name) + entry = None + if in_ofl: + rec = ofl_filaments.get(name) + else: + rec = filaments.get(name) + if rec is None and name in ofl_filaments: + rec, in_ofl, entry = ofl_filaments[name], True, name + if rec is None: + return None, "dangling", None + if rec.get("filament_id") and not skip_own: + return rec["filament_id"], "own" if len(seen) == 1 else "inherited", entry + parent = rec.get("inherits") + if parent: + fid, src, sub_entry = resolve_filament_id(parent, filaments, ofl_filaments, seen, in_ofl) + if fid or in_ofl: + return fid, src, entry if entry is not None else sub_entry + # Vendor chain dead-ended id-less: the loader would have consulted the + # OFL map at each vendor hop's inherits; retry this hop's parent in OFL. + if parent in ofl_filaments: + fid, src, _ = resolve_filament_id(parent, filaments, ofl_filaments, set(), True) + return fid, src, parent + return fid, src, sub_entry + return None, "missing", entry + + +def analyze_tree(profiles_dir): + """Load every vendor bundle and derive the full filament_id state. + + Returns a dict with the tree-derived snapshot sections plus the working data + the checks and the assign pass need. All claims are "Vendor/Family" strings + over INSTANTIATED system filaments, tree-wide including OFL and BBL. + """ + profiles_dir = str(profiles_dir) + vendor_names = list_vendor_names(profiles_dir) + ofl_filaments, ofl_errors = ( + load_vendor_filaments(profiles_dir, OFL) if OFL in vendor_names else ({}, []) + ) + + vendors = {} + read_errors = list(ofl_errors) + for vendor in vendor_names: + if vendor == OFL: + filaments = ofl_filaments + else: + filaments, errs = load_vendor_filaments(profiles_dir, vendor) + read_errors.extend(errs) + for rec in filaments.values(): + eff, src, ofl_entry = resolve_filament_id(rec["name"], filaments, ofl_filaments) + rec["eff_filament_id"] = eff + rec["id_source"] = src + rec["ofl_entry"] = ofl_entry + vendors[vendor] = filaments + + # id -> set of "Vendor/Family" claims over instantiated presets. Every id + # occurring in the tree is a key; ids only ever DECLARED (e.g. on a root + # whose children all override them) keep an empty claim list, so that the + # snapshot exactly equals the tree-derived state and the format/retirement + # checks can grandfather them. + ids = {} + vendor_ids = {} # vendor -> set of ids occurring there (declared or effective) + declared_ids = {} # vendor -> set of ids DECLARED in that vendor's own files + instantiated_with_id = [] # "Vendor/PresetName" (own filament_id key on an instantiated preset) + overrides = [] # (vendor, name, declared, inherited, file) + missing_effective = [] # (vendor, name, file) instantiated presets resolving no id + alias_candidates = [] # (vendor, rec, ofl_entry) presets id-resolved through an OFL generic + + for vendor, filaments in vendors.items(): + occurring = vendor_ids.setdefault(vendor, set()) + for rec in filaments.values(): + if rec.get("filament_id"): + occurring.add(rec["filament_id"]) + declared_ids.setdefault(vendor, set()).add(rec["filament_id"]) + ids.setdefault(rec["filament_id"], set()) + if rec.get("inherits"): + inherited, _src, _e = resolve_filament_id( + rec["name"], filaments, ofl_filaments, skip_own=True) + if inherited and inherited != rec["filament_id"]: + overrides.append( + (vendor, rec["name"], rec["filament_id"], inherited, rec["file"])) + if not rec["instantiation"]: + continue + eff = rec.get("eff_filament_id") + if not eff: + missing_effective.append((vendor, rec["name"], rec["file"])) + continue + occurring.add(eff) + ids.setdefault(eff, set()).add(f"{vendor}/{base_name(rec['name'])}") + if rec.get("filament_id"): + instantiated_with_id.append(f"{vendor}/{rec['name']}") + if vendor != OFL and rec["ofl_entry"] and OFL_GENERIC_RE.match(rec["ofl_entry"]): + alias_candidates.append((vendor, rec, rec["ofl_entry"])) + + # Alias hygiene (check 5): a vendor preset that tunes an OFL generic (no id + # anywhere in its vendor-side chain) is matched to the OFL preset by ALIAS + # (base name); renaming it re-exposes the OFL generic and creates a live + # duplicate, and empty compatible_printers cannot claim any printer. + alias_violations = [] # (vendor, name, ofl_entry, reason, file) + for vendor, rec, entry in alias_candidates: + expected = base_name(entry) + own_base = base_name(rec["name"]) + if own_base != expected: + alias_violations.append(( + vendor, rec["name"], entry, + f'base name "{own_base}" != "{expected}" — the rename re-exposes the ' + f"OFL preset on its printers (alias shadowing is name-based)", + rec["file"])) + elif not rec["compatible_printers"]: + alias_violations.append(( + vendor, rec["name"], entry, + "empty compatible_printers cannot shadow the OFL preset anywhere", + rec["file"])) + + return { + "vendors": vendors, + "read_errors": read_errors, + "ids": {fid: sorted(claims) for fid, claims in ids.items()}, + "vendor_ids": vendor_ids, + "declared_ids": declared_ids, + "instantiated_with_id": sorted(instantiated_with_id), + "overrides": overrides, + "id_overrides": sorted(f"{v}/{n}" for v, n, _d, _i, _f in overrides), + "missing_effective": sorted(missing_effective), + "alias_violations": alias_violations, + "alias_exceptions": sorted(f"{v}/{n}" for v, n, _e, _r, _f in alias_violations), + } + + +# --------------------------------------------------------------------------- +# Snapshot / retired-ledger IO +# --------------------------------------------------------------------------- + +def snapshot_from_analysis(analysis): + return { + "ids": {fid: sorted(claims) for fid, claims in analysis["ids"].items()}, + "instantiated_with_id": analysis["instantiated_with_id"], + "id_overrides": analysis["id_overrides"], + "alias_exceptions": analysis["alias_exceptions"], + } + + +def load_snapshot(path): + """Return the snapshot dict, or None when the file does not exist.""" + if not os.path.exists(path): + return None + data = load_json(path) + for key in ("ids", "instantiated_with_id", "id_overrides", "alias_exceptions"): + data.setdefault(key, {} if key == "ids" else []) + return data + + +def load_retired(path): + """Return the retired-ids map {id: ["Vendor/Family", ...]} ({} if absent).""" + if not os.path.exists(path): + return {} + return load_json(path).get("retired", {}) + + +def write_ledger(path, obj): + """Deterministic serialization: sorted keys, indent 1, LF, trailing newline.""" + with open(path, "w", encoding="utf-8", newline="\n") as f: + json.dump(obj, f, indent=1, ensure_ascii=False, sort_keys=True) + f.write("\n") + + +# --------------------------------------------------------------------------- +# Reserved namespaces +# --------------------------------------------------------------------------- + +def reserved_space_owner(fid): + """(is_reserved, owner_vendor or None) for the frozen id spaces.""" + if fid.startswith("GF"): + return True, "BBL" + if fid.startswith("QD_"): + return True, "Qidi" + if USER_CUSTOM_ID_RE.match(fid) or fid == "null": + return True, None # user-custom space: no system vendor may own it + return False, None + + +# --------------------------------------------------------------------------- +# Checks (imported and called tree-wide by orca_extra_profile_check.py) +# --------------------------------------------------------------------------- + +def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, + retired_path=RETIRED_PATH): + """Validate filament_id state across every vendor. Returns the error count. + + 1. Format: every id occurring in the tree (declared or effective) must be in + the snapshot, or match ^OF[0-9A-Za-z]{6}$, or belong to vendor BBL, or be + a QD_* id within vendor Qidi. + 2. Snapshot equality, both directions: the tree-derived id->families multimap + must equal the snapshot exactly (the snapshot diff is the maintainer gate). + 3. Mint conformance: an OF-format id's claim that is not grandfathered must + equal the mint of (vendor, family) or a salted iteration. + 4. Retired ids may never occur again. + 5. Alias hygiene: a tuned OFL generic must keep the generic's base name and + claim printers via non-empty compatible_printers. + 6. Reserved namespaces (GF*/QD_*/P-hex/"null") only for their owner vendors, + except claims grandfathered in the snapshot. + 7. Structure ratchet: (a) no NEW instantiated preset carries its own + filament_id key; (b) no NEW declared-vs-inherited id drift; (c) every + instantiated filament resolves an effective id (a hard load error in C++). + """ + _utf8_console() + errors = 0 + analysis = analyze_tree(profiles_dir) + snapshot = load_snapshot(snapshot_path) + if snapshot is None: + print_error(f"filament_id snapshot not found at {snapshot_path}; {UPDATE_HINT}") + return 1 + retired = load_retired(retired_path) + + for msg in analysis["read_errors"]: + print_error(msg) + errors += 1 + + snap_ids = snapshot["ids"] + tree_ids = analysis["ids"] + + # -- 1. format ---------------------------------------------------------- + for vendor in sorted(analysis["vendor_ids"]): + for fid in sorted(analysis["vendor_ids"][vendor]): + if fid in snap_ids or OF_ID_RE.match(fid): + continue + if vendor == "BBL": + continue + if vendor == "Qidi" and fid.startswith("QD_"): + continue + print_error( + f'filament_id "{fid}" ({vendor}) is neither grandfathered in the ' + f'snapshot nor a minted "OF" id; new family ids must come from ' + f'"python scripts/assign_filament_ids.py" (see --mint)') + errors += 1 + + # -- 2. snapshot equality (both directions) ----------------------------- + for fid in sorted(tree_ids): + if fid not in snap_ids: + print_error( + f'filament_id "{fid}" is not sanctioned by ' + f"scripts/filament_id_snapshot.json; {UPDATE_HINT}") + errors += 1 + continue + for claim in tree_ids[fid]: + if claim not in snap_ids[fid]: + print_error( + f'filament_id "{fid}" claim "{claim}" is not sanctioned by ' + f"scripts/filament_id_snapshot.json; {UPDATE_HINT}") + errors += 1 + for fid in sorted(snap_ids): + if fid not in tree_ids: + print_error( + f'filament_id stability: snapshot id "{fid}" vanished from the tree ' + f"(ids are immutable once shipped); {UPDATE_HINT}") + errors += 1 + continue + for claim in snap_ids[fid]: + if claim not in tree_ids[fid]: + print_error( + f'filament_id stability: snapshot claim "{claim}" of id "{fid}" ' + f"vanished from the tree (ids are immutable once shipped); {UPDATE_HINT}") + errors += 1 + + # -- 3. mint conformance for OF-format ids ------------------------------ + for fid in sorted(tree_ids): + if not OF_ID_RE.match(fid): + continue + for claim in tree_ids[fid]: + if claim in snap_ids.get(fid, []): + continue # grandfathered + vendor, family = claim.split("/", 1) + if fid not in analysis["declared_ids"].get(vendor, set()): + # The claiming vendor never declares this id — it is inherited + # from another vendor's root (an OFL generic family): correctly + # tuned generics ride the OFL family id by design, so only the + # snapshot gate (check 2) applies to this claim. + continue + minted = [generate_filament_id(vendor, family, s) for s in range(MAX_CHECK_SALT + 1)] + if fid not in minted: + print_error( + f'filament_id "{fid}" of family "{claim}" does not match its mint: ' + f'expected "{minted[0]}" (or a salted iteration); paste the expected ' + f"id into the family root (or, for an intentionally shared id, " + f"{UPDATE_HINT})") + errors += 1 + + # -- 4. retired ids may never come back --------------------------------- + for vendor in sorted(analysis["vendor_ids"]): + for fid in sorted(analysis["vendor_ids"][vendor]): + if fid in retired: + print_error( + f'filament_id "{fid}" ({vendor}) is retired ' + f"(scripts/retired_filament_ids.json) and may never be reused") + errors += 1 + + # -- 5. alias hygiene for tuned OFL generics ----------------------------- + exceptions = set(snapshot["alias_exceptions"]) + for vendor, name, entry, reason, file in analysis["alias_violations"]: + if f"{vendor}/{name}" in exceptions: + continue + print_error( + f'preset "{name}" ({file}) tunes the OFL generic "{entry}" but {reason}; ' + f'keep the OFL base name and non-empty compatible_printers, or give the ' + f"family its own minted id") + errors += 1 + + # -- 6. reserved namespaces ---------------------------------------------- + for fid in sorted(tree_ids): + is_reserved, owner = reserved_space_owner(fid) + if not is_reserved: + continue + for claim in tree_ids[fid]: + vendor = claim.split("/", 1)[0] + if vendor == owner: + continue + if claim in snap_ids.get(fid, []): + continue # grandfathered + space = f"owned by {owner}" if owner else "reserved for user-custom presets" + print_error( + f'filament_id "{fid}" of "{claim}" is in a reserved id space ' + f"({space}) and must not be claimed by system presets of other vendors") + errors += 1 + + # -- 7. structure ratchet ------------------------------------------------- + grandfathered = set(snapshot["instantiated_with_id"]) + for key in analysis["instantiated_with_id"]: + if key not in grandfathered: + print_error( + f'instantiated preset "{key}" declares its own filament_id key; the key ' + f"belongs on the family root preset only (variants inherit it)") + errors += 1 + grandfathered = set(snapshot["id_overrides"]) + for vendor, name, declared, inherited, file in analysis["overrides"]: + if f"{vendor}/{name}" in grandfathered: + continue + print_error( + f'preset "{name}" ({file}) declares filament_id "{declared}" but its ' + f'inherits chain resolves "{inherited}"; a preset must not override its ' + f"family's id") + errors += 1 + for vendor, name, file in analysis["missing_effective"]: + expected = generate_filament_id(vendor, base_name(name)) + print_error( + f'instantiated filament "{name}" ({file}) resolves no filament_id anywhere ' + f"in its inherits chain — this is a hard load error in the C++ loader; " + f'run "python scripts/assign_filament_ids.py" (expected id for family ' + f'"{vendor}/{base_name(name)}": "{expected}", salted if taken)') + errors += 1 + + return errors + + +# --------------------------------------------------------------------------- +# --update-snapshot +# --------------------------------------------------------------------------- + +def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, + retired_path=RETIRED_PATH, allow_shared_catalog=False): + """Regenerate the snapshot from the tree; retire ids that fully vanished. + + Refuses to sanction NEW reserved-namespace ids (or new claims on them) for + non-owner vendors unless --allow-shared-catalog is passed. Idempotent: a + second run over an unchanged tree changes nothing. Returns 0 on success. + """ + analysis = analyze_tree(profiles_dir) + for msg in analysis["read_errors"]: + print_error(msg) + new_snap = snapshot_from_analysis(analysis) + old_snap = load_snapshot(snapshot_path) + old_ids = old_snap["ids"] if old_snap else {} + + # Gate: new reserved-namespace ids / claims for non-owner vendors. + refusals = [] + for fid, claims in sorted(new_snap["ids"].items()): + is_reserved, owner = reserved_space_owner(fid) + if not is_reserved: + continue + for claim in claims: + if claim in old_ids.get(fid, []): + continue + vendor = claim.split("/", 1)[0] + if vendor == owner: + continue + refusals.append((fid, claim, owner)) + if not claims and fid not in old_ids: + # Declared-only new id: attribute it to its declaring vendor(s). + for vendor in sorted(analysis["vendor_ids"]): + if fid in analysis["vendor_ids"][vendor] and vendor != owner: + refusals.append((fid, f"{vendor}/(declared only)", owner)) + if refusals and not allow_shared_catalog: + for fid, claim, owner in refusals: + space = f"owned by {owner}" if owner else "reserved for user-custom presets" + print_error( + f'refusing to sanction new claim "{claim}" on reserved-namespace id ' + f'"{fid}" ({space}); pass --allow-shared-catalog only for ' + f"maintainer-approved shared-catalog families") + return 1 + + # Retirement is permanent: refuse to sanction a tree that resurrects a + # retired id (check 4 would reject the resulting snapshot forever anyway). + retired = load_retired(retired_path) + reused = sorted(set(new_snap["ids"]) & set(retired)) + if reused: + for fid in reused: + print_error( + f'refusing to sanction retired filament_id "{fid}" ' + f"(scripts/retired_filament_ids.json is append-only; retired ids may " + f"never be reused — mint a fresh id for the family instead)") + return 1 + + # Retire ids that fully vanished from the tree (append-only ledger). + newly_retired = [] + for fid in sorted(old_ids): + if fid not in new_snap["ids"]: + retired[fid] = sorted(set(retired.get(fid, [])) | set(old_ids[fid])) + newly_retired.append(fid) + + # Diff summary. + added_ids = sorted(set(new_snap["ids"]) - set(old_ids)) + removed_ids = sorted(set(old_ids) - set(new_snap["ids"])) + added_claims = sum( + len(set(claims) - set(old_ids.get(fid, []))) + for fid, claims in new_snap["ids"].items()) + removed_claims = sum( + len(set(claims) - set(new_snap["ids"].get(fid, []))) + for fid, claims in old_ids.items()) + old_snap = old_snap or {"ids": {}, "instantiated_with_id": [], "id_overrides": [], + "alias_exceptions": []} + changed = new_snap != old_snap + + if changed: + write_ledger(snapshot_path, new_snap) + if newly_retired or not os.path.exists(retired_path): + write_ledger(retired_path, {"retired": retired}) + + print_info(f"snapshot ids : {len(new_snap['ids'])} (+{len(added_ids)} / -{len(removed_ids)})") + print_info(f"claims added : {added_claims}") + print_info(f"claims removed : {removed_claims}") + print_info(f"ids retired now : {len(newly_retired)}" + + (f" ({', '.join(newly_retired)})" if newly_retired else "")) + for section in ("instantiated_with_id", "id_overrides", "alias_exceptions"): + before, after = len(old_snap.get(section, [])), len(new_snap[section]) + print_info(f"{section:<18}: {after} ({after - before:+d})") + if changed: + print_success(f"snapshot written to {snapshot_path}") + else: + print_success("snapshot already up to date; nothing changed") + return 0 + + +# --------------------------------------------------------------------------- +# Default run: mint + insert ids for id-less families +# --------------------------------------------------------------------------- + +def insert_filament_id(text, new_id): + """Insert a `"filament_id"` line into a preset that lacks one. + + Placed just before `instantiation` (or, failing that, after the `name` line) + so it matches the canonical key order, reusing that anchor line's indentation + and line ending. Same byte-preserving approach as assign_vendor_setting_ids. + """ + m = re.search(r'^([ \t]*)"instantiation"[ \t]*:.*?(\r?\n)', text, re.MULTILINE) + if m: + line = f'{m.group(1)}"filament_id": {json.dumps(new_id, ensure_ascii=False)},{m.group(2)}' + return text[:m.start()] + line + text[m.start():], 1 + m = re.search(r'^([ \t]*)"name"[ \t]*:.*?(\r?\n)', text, re.MULTILINE) + if m: + line = f'{m.group(1)}"filament_id": {json.dumps(new_id, ensure_ascii=False)},{m.group(2)}' + return text[:m.end()] + line + text[m.end():], 1 + return text, 0 + + +def write_filament_id(path, new_id): + """Insert new_id into the profile at path, byte-preserving everything else. + + Binary IO keeps the file's original line endings (LF or CRLF) and exact + formatting apart from the inserted line; the result is re-parsed to + guarantee it is still valid JSON. + """ + with open(path, "rb") as f: + raw = f.read() + bom = raw.startswith(b"\xef\xbb\xbf") + text = raw.decode("utf-8-sig") + text, n = insert_filament_id(text, new_id) + if n == 0: + raise RuntimeError(f"Could not insert filament_id into {path}") + json.loads(text) # fail loudly if the edit broke the JSON + with open(path, "wb") as f: + f.write((b"\xef\xbb\xbf" if bom else b"") + text.encode("utf-8")) + + +def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, + retired_path=RETIRED_PATH): + """Mint + insert ids for id-less families. Never rewrites a valid existing id. + + A family = (vendor, base name) group over instantiated filaments with no + effective id. The minted id is inserted into the family's root(s): the + presets its members inherit that carry no id, or the member itself when it + has no vendor-side parent. Returns (files_changed, errors). + """ + analysis = analyze_tree(profiles_dir) + errors = 0 + for msg in analysis["read_errors"]: + print_error(msg) + errors += 1 + + # Group id-less instantiated presets into families. + families = {} # (vendor, family) -> [rec] + for vendor, name, _file in analysis["missing_effective"]: + rec = analysis["vendors"][vendor][name] + if rec["id_source"] in ("cycle", "dangling"): + print_error(f'cannot mint for "{vendor}/{name}": broken inherits chain ' + f'({rec["id_source"]})') + errors += 1 + continue + families.setdefault((vendor, base_name(name)), []).append(rec) + + if not families: + print_success("every instantiated filament already resolves a filament_id; " + "nothing to do (0 files changed)") + return 0, errors + + # Ids already spoken for: whole tree (declared or effective) + ledgers. + snapshot = load_snapshot(snapshot_path) or {"ids": {}} + taken = set(snapshot["ids"]) | set(load_retired(retired_path)) + for occurring in analysis["vendor_ids"].values(): + taken |= occurring + + # Family root(s): the direct vendor-side parents of the members (id-less by + # construction), or the member itself when it has none. + roots = {} # (vendor, family) -> {preset name: rec} + root_claims = {} # (vendor, root name) -> set of families wanting to write it + for key, members in sorted(families.items()): + vendor = key[0] + vendor_map = analysis["vendors"][vendor] + family_roots = {} + for rec in members: + parent = rec.get("inherits") + root = vendor_map.get(parent) if parent else None + if root is None or root.get("filament_id"): + root = rec # root-less member carries the id itself + family_roots[root["name"]] = root + root_claims.setdefault((vendor, root["name"]), set()).add(key) + roots[key] = family_roots + + files_changed = 0 + families_minted = 0 + for key, family_roots in sorted(roots.items()): + vendor, family = key + shared = [n for n in family_roots + if len(root_claims[(vendor, n)]) > 1] + if shared: + others = sorted({f"{v}/{f}" for n in shared + for (v, f) in root_claims[(vendor, n)] if (v, f) != key}) + print_error( + f'cannot mint for family "{vendor}/{family}": root(s) ' + f"{sorted(shared)} are shared with famil(ies) {others}; split the " + f"roots so each family has its own") + errors += 1 + continue + new_id = mint_filament_id(vendor, family, taken) + taken.add(new_id) + families_minted += 1 + for name in sorted(family_roots): + root = family_roots[name] + write_filament_id(root["path"], new_id) + files_changed += 1 + print_info(f'family "{vendor}/{family}": filament_id "{new_id}" -> {root["file"]}') + + print_info(f"families minted : {families_minted}") + print_info(f"files changed : {files_changed}") + if files_changed: + print_warning(f"now {UPDATE_HINT}") + return files_changed, errors + + +# --------------------------------------------------------------------------- +# CLI +# --------------------------------------------------------------------------- + +def main(argv=None): + _utf8_console() + parser = argparse.ArgumentParser( + description="Mint deterministic filament_id values for id-less filament " + "families and validate the tree against the sanctioned snapshot.") + parser.add_argument("--mint", metavar='"Vendor/Family"', + help="print the id that would be minted for a family; " + "touches nothing") + parser.add_argument("--update-snapshot", action="store_true", + help="regenerate scripts/filament_id_snapshot.json from the " + "tree; ids that fully vanished are retired") + parser.add_argument("--check", action="store_true", + help="run the filament_id checks; exit nonzero on errors") + parser.add_argument("--allow-shared-catalog", action="store_true", + help="with --update-snapshot: allow sanctioning new claims " + "on reserved-namespace ids for non-owner vendors") + parser.add_argument("--profiles", default=PROFILES_DIR, + help="profiles directory (default: resources/profiles)") + args = parser.parse_args(argv) + + if args.mint: + if "/" not in args.mint: + parser.error('--mint expects "Vendor/Family"') + vendor, family = args.mint.split("/", 1) + snapshot = load_snapshot(SNAPSHOT_PATH) or {"ids": {}} + taken = set(snapshot["ids"]) | set(load_retired(RETIRED_PATH)) + print(mint_filament_id(vendor, family, taken)) + return 0 + + if args.update_snapshot: + return update_snapshot(args.profiles, SNAPSHOT_PATH, RETIRED_PATH, + allow_shared_catalog=args.allow_shared_catalog) + + if args.check: + errors = check_filament_ids(args.profiles, SNAPSHOT_PATH, RETIRED_PATH) + if errors: + print_error(f"filament_id check: {errors} error(s)") + return 1 + print_success("filament_id check: no errors") + return 0 + + _changed, errors = assign_missing_ids(args.profiles, SNAPSHOT_PATH, RETIRED_PATH) + return 1 if errors else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json new file mode 100644 index 0000000000..462098d581 --- /dev/null +++ b/scripts/filament_id_snapshot.json @@ -0,0 +1,7811 @@ +{ + "alias_exceptions": [ + "Flashforge/Flashforge ABS Basic @FF C5", + "Flashforge/Flashforge ABS Basic @FF C5P", + "Flashforge/Flashforge ABS-GF @FF C5", + "Flashforge/Flashforge ABS-GF @FF C5P", + "Flashforge/Flashforge ASA Basic @FF C5", + "Flashforge/Flashforge ASA Basic @FF C5P", + "Flashforge/Flashforge ASA-CF @FF C5", + "Flashforge/Flashforge ASA-CF @FF C5P", + "Flashforge/Flashforge ASA-GF @FF C5", + "Flashforge/Flashforge ASA-GF @FF C5P", + "Flashforge/Flashforge HIPS @FF C5", + "Flashforge/Flashforge HIPS @FF C5P", + "Flashforge/Flashforge HS PETG @FF C5", + "Flashforge/Flashforge HS PETG @FF C5P", + "Flashforge/Flashforge HS PLA @FF C5", + "Flashforge/Flashforge HS PLA @FF C5P", + "Flashforge/Flashforge PA-CF @FF C5", + "Flashforge/Flashforge PA-CF @FF C5P", + "Flashforge/Flashforge PAHT-CF @FF C5", + "Flashforge/Flashforge PAHT-CF @FF C5P", + "Flashforge/Flashforge PET-CF @FF C5", + "Flashforge/Flashforge PET-CF @FF C5P", + "Flashforge/Flashforge PETG Pro @FF C5", + "Flashforge/Flashforge PETG Pro @FF C5P", + "Flashforge/Flashforge PETG Transparent @FF C5", + "Flashforge/Flashforge PETG Transparent @FF C5P", + "Flashforge/Flashforge PETG-CF @FF C5", + "Flashforge/Flashforge PETG-CF @FF C5P", + "Flashforge/Flashforge PLA Matte @FF C5", + "Flashforge/Flashforge PLA Matte @FF C5P", + "Flashforge/Flashforge PLA Metal @FF C5", + "Flashforge/Flashforge PLA Metal @FF C5P", + "Flashforge/Flashforge PLA Pro @FF C5", + "Flashforge/Flashforge PLA Pro @FF C5P", + "Flashforge/Flashforge PLA Basic @FF C5", + "Flashforge/Flashforge PLA Basic @FF C5P", + "Flashforge/Flashforge PLA Color Change @FF C5", + "Flashforge/Flashforge PLA Color Change @FF C5P", + "Flashforge/Flashforge PLA Galaxy @FF C5", + "Flashforge/Flashforge PLA Galaxy @FF C5P", + "Flashforge/Flashforge PLA Luminous @FF C5", + "Flashforge/Flashforge PLA Luminous @FF C5P", + "Flashforge/Flashforge PLA Silk @FF C5", + "Flashforge/Flashforge PLA Silk @FF C5P", + "Flashforge/Flashforge PLA-CF @FF C5", + "Flashforge/Flashforge PLA-CF @FF C5P", + "Flashforge/Flashforge PPA-CF @FF C5", + "Flashforge/Flashforge PPA-CF @FF C5P", + "Flashforge/Flashforge PPS-CF @FF C5", + "Flashforge/Flashforge PPS-CF @FF C5P", + "Flashforge/Flashforge PVA @FF C5", + "Flashforge/Flashforge PVA @FF C5P", + "Flashforge/Flashforge TPU-64D @FF C5", + "Flashforge/Flashforge TPU-64D @FF C5P", + "Flashforge/Flashforge TPU-90A @FF C5", + "Flashforge/Flashforge TPU-90A @FF C5P", + "Flashforge/Flashforge TPU-95A @FF C5", + "Flashforge/Flashforge TPU-95A @FF C5P", + "Flashforge/FusRock PAHT-CF @FF C5", + "Flashforge/FusRock PAHT-CF @FF C5P", + "Flashforge/FusRock S-Multi @FF C5", + "Flashforge/FusRock S-Multi @FF C5P", + "Flashforge/FusRock S-PAHT @FF C5", + "Flashforge/FusRock S-PAHT @FF C5P", + "Flashforge/Generic TPU-64D @FF C5", + "Flashforge/Generic TPU-64D @FF C5P", + "Flashforge/Generic TPU-90A @FF C5", + "Flashforge/Generic TPU-90A @FF C5P", + "Flashforge/Generic TPU-95A @FF C5", + "Flashforge/Generic TPU-95A @FF C5P" + ], + "id_overrides": [ + "Afinia/Afinia PLA", + "Afinia/Afinia PLA@HS", + "Afinia/Afinia Value PLA", + "Afinia/Afinia Value PLA@HS", + "Anker/Anker Generic PA @base", + "Anker/Anker Generic PA-CF @base", + "Anker/Anker Generic PC @base", + "Anker/Anker Generic PETG @base", + "Anker/Anker Generic PETG-CF @base", + "Anker/Anker Generic PLA @base", + "Anker/Anker Generic PLA Silk @base", + "Anker/Anker Generic PLA+ @base", + "Anker/Anker Generic PLA-CF @base", + "Anycubic/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic Generic PA", + "Anycubic/Anycubic Generic PA-CF", + "Anycubic/Anycubic Generic PC", + "Anycubic/Anycubic Generic PETG", + "Anycubic/Anycubic Generic PLA", + "Anycubic/Anycubic Generic PLA-CF", + "Anycubic/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle", + "Anycubic/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Fiberon PA6-CF20 @Anycubic Kobra S1", + "Anycubic/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Generic PETG @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Panchroma PLA @Anycubic Kobra S1", + "Anycubic/Polymaker PLA Pro @Anycubic Kobra S1", + "Anycubic/Polymaker PLA Pro Metallic @Anycubic Kobra S1", + "Artillery/Artillery Generic PETG", + "Artillery/Artillery Generic PLA", + "Artillery/Artillery Generic PLA-CF", + "BBL/BETA HIPS @base", + "BBL/BETA PAHT-CF @base", + "BBL/BETA PETG @base", + "BBL/BETA PETG Fluorescence @base", + "BBL/BETA PETG Glitter @base", + "BBL/BETA PETG Glow @base", + "BBL/BETA PETG Gradient @base", + "BBL/BETA PETG HF @base", + "BBL/BETA PETG Heat Color Change @base", + "BBL/BETA PETG Marble @base", + "BBL/BETA PETG Matte @base", + "BBL/BETA PETG Metallic @base", + "BBL/BETA PETG Transparent @base", + "BBL/BETA PETG UV Color Change @base", + "BBL/BETA PETG-CF @base", + "BBL/BETA PETG-GF @base", + "BBL/BETA PLA Basic @base", + "BBL/BETA PLA Chameleon @base", + "BBL/BETA PLA Fluorescence @base", + "BBL/BETA PLA Glitter @base", + "BBL/BETA PLA Glow @base", + "BBL/BETA PLA Gradient @base", + "BBL/BETA PLA Heat Color Change @base", + "BBL/BETA PLA High Speed @base", + "BBL/BETA PLA High Temp @base", + "BBL/BETA PLA Marble @base", + "BBL/BETA PLA Matte @base", + "BBL/BETA PLA Metal @base", + "BBL/BETA PLA Metallic @base", + "BBL/BETA PLA PRO @base", + "BBL/BETA PLA Silk @base", + "BBL/BETA PLA Silk+ @base", + "BBL/BETA PLA Transparent @base", + "BBL/BETA PLA UV Color Change @base", + "BBL/BETA PLA Wood @base", + "BBL/BETA PLA Youth @base", + "BBL/BETA PLA-CF @base", + "BBL/Bambu PA-CF @base", + "BBL/Bambu PA6-CF @base", + "BBL/Bambu PA6-GF @base", + "BBL/Bambu PAHT-CF @base", + "BBL/Bambu PC @base", + "BBL/Bambu PC FR @base", + "BBL/Bambu PET-CF @base", + "BBL/Bambu PETG Basic @base", + "BBL/Bambu PETG HF @base", + "BBL/Bambu PETG Translucent @base", + "BBL/Bambu PETG-CF @base", + "BBL/Bambu PLA Aero @base", + "BBL/Bambu PLA Basic @base", + "BBL/Bambu PLA Dynamic @base", + "BBL/Bambu PLA Galaxy @base", + "BBL/Bambu PLA Glow @base", + "BBL/Bambu PLA Lite @base", + "BBL/Bambu PLA Marble @base", + "BBL/Bambu PLA Matte @base", + "BBL/Bambu PLA Metal @base", + "BBL/Bambu PLA Silk @base", + "BBL/Bambu PLA Silk+ @base", + "BBL/Bambu PLA Sparkle @base", + "BBL/Bambu PLA Tough @base", + "BBL/Bambu PLA Tough+ @base", + "BBL/Bambu PLA Translucent @base", + "BBL/Bambu PLA Wood @base", + "BBL/Bambu PLA-CF @base", + "BBL/Bambu PPA-CF @base", + "BBL/Bambu Support For PA/PET @base", + "BBL/Bambu Support For PLA @base", + "BBL/Bambu Support For PLA/PETG @base", + "BBL/Bambu Support G @base", + "BBL/Bambu Support W @base", + "BBL/Fiberon PA12-CF @base", + "BBL/Fiberon PA12-CF10 @base", + "BBL/Fiberon PA6-CF @base", + "BBL/Fiberon PA6-CF20 @base", + "BBL/Fiberon PA6-GF @base", + "BBL/Fiberon PA6-GF25 @base", + "BBL/Fiberon PA612-CF @base", + "BBL/Fiberon PA612-CF15 @base", + "BBL/Fiberon PET-CF @base", + "BBL/Fiberon PET-CF17 @base", + "BBL/Fiberon PETG-ESD @base", + "BBL/Fiberon PETG-rCF @base", + "BBL/Fiberon PETG-rCF08 @base", + "BBL/Generic BVOH @base", + "BBL/Generic EVA @base", + "BBL/Generic HIPS @base", + "BBL/Generic PA @base", + "BBL/Generic PA-CF @base", + "BBL/Generic PC @base", + "BBL/Generic PCTG @base", + "BBL/Generic PE @base", + "BBL/Generic PE-CF @base", + "BBL/Generic PETG @base", + "BBL/Generic PETG HF @base", + "BBL/Generic PETG-CF @base", + "BBL/Generic PHA @base", + "BBL/Generic PLA @base", + "BBL/Generic PLA High Speed @base", + "BBL/Generic PLA Silk @base", + "BBL/Generic PLA-CF @base", + "BBL/Generic PP @base", + "BBL/Generic PP-CF @base", + "BBL/Generic PP-GF @base", + "BBL/Generic PPA-CF @base", + "BBL/Generic PPA-GF @base", + "BBL/Generic SBS", + "BBL/Generic SBS @base", + "BBL/Numakers PLA+ @base", + "BBL/Overture Matte PLA @base", + "BBL/Overture PLA @base", + "BBL/Overture PLA Pro @base", + "BBL/Panchroma CoPE @base", + "BBL/Panchroma PLA @base", + "BBL/Panchroma PLA Celestial @base", + "BBL/Panchroma PLA Galaxy @base", + "BBL/Panchroma PLA Glow @base", + "BBL/Panchroma PLA Luminous @base", + "BBL/Panchroma PLA Marble @base", + "BBL/Panchroma PLA Matte @base", + "BBL/Panchroma PLA Metallic @base", + "BBL/Panchroma PLA Neon @base", + "BBL/Panchroma PLA Satin @base", + "BBL/Panchroma PLA Silk @base", + "BBL/Panchroma PLA Starlight @base", + "BBL/Panchroma PLA Temp Shift @base", + "BBL/Panchroma PLA Translucent @base", + "BBL/Panchroma PLA UV Shift @base", + "BBL/PolyLite CosPLA @base", + "BBL/PolyLite PETG @base", + "BBL/PolyLite PLA @base", + "BBL/PolyLite PLA Galaxy @base", + "BBL/PolyLite PLA Glow @base", + "BBL/PolyLite PLA Luminous @base", + "BBL/PolyLite PLA Neon @base", + "BBL/PolyLite PLA Pro @base", + "BBL/PolyLite PLA Starlight @base", + "BBL/PolyLite PLA Translucent @base", + "BBL/PolyTerra PLA @base", + "BBL/PolyTerra PLA Marble @base", + "BBL/PolyTerra PLA+ @base", + "BBL/Polymaker HT-PLA @base", + "BBL/Polymaker HT-PLA-GF @base", + "BBL/SUNLU PETG @base", + "BBL/SUNLU PLA Marble @base", + "BBL/SUNLU PLA Matte @base", + "BBL/SUNLU PLA+ 2.0 @base", + "BBL/SUNLU PLA+ @base", + "BBL/SUNLU Silk PLA+ @base", + "BBL/SUNLU Wood PLA @base", + "BBL/eSUN PLA+ @base", + "Blocks/Blocks Generic PA", + "Blocks/Blocks Generic PA-CF", + "Blocks/Blocks Generic PC", + "Blocks/Blocks Generic PLA", + "Blocks/Blocks Generic PLA-CF", + "CONSTRUCT3D/C1 Generic High Flow PETG", + "CONSTRUCT3D/C1 Generic PETG", + "CONSTRUCT3D/C1 Generic PLA", + "Chuanying/Chuanying Generic HS PLA", + "Chuanying/Chuanying Generic PETG", + "Chuanying/Chuanying Generic PETG-CF10", + "Chuanying/Chuanying Generic PLA", + "Chuanying/Chuanying Generic PLA-CF10", + "Chuanying/Chuanying Generic PLA-Silk", + "Chuanying/Chuanying Generic PVA", + "Co Print/CoPrint Generic PLA", + "CoLiDo/CoLiDo Generic PETG @CoLiDo DIY 4.0", + "CoLiDo/CoLiDo Generic PETG @CoLiDo X16", + "CoLiDo/CoLiDo Generic PLA @CoLiDo DIY 4.0", + "CoLiDo/CoLiDo Generic PLA @CoLiDo X16", + "CoLiDo/CoLiDo PETG @CoLiDo SR1", + "CoLiDo/CoLiDo PLA @CoLiDo SR1", + "CoLiDo/CoLiDo PLA Silk @CoLiDo SR1", + "CoLiDo/CoLiDo PLA+ @CoLiDo DIY 4.0 V2", + "Comgrow/Comgrow Generic PETG", + "Comgrow/Comgrow Generic PLA", + "Creality/CR-Nylon @K1 Max_CFS-C-all", + "Creality/CR-Nylon @K1C-all", + "Creality/CR-Nylon @K1C_CFS-C-all", + "Creality/CR-Nylon @K1_CFS-C-all", + "Creality/CR-Nylon @K2 Plus-all", + "Creality/CR-PLA @Ender-3 V4-all", + "Creality/CR-PLA @Hi-all", + "Creality/CR-PLA @K1 Max_CFS-C-all", + "Creality/CR-PLA @K1 SE-all", + "Creality/CR-PLA @K1 SE_CFS-C-all", + "Creality/CR-PLA @K1C-all", + "Creality/CR-PLA @K1C_CFS-C-all", + "Creality/CR-PLA @K1_CFS-C-all", + "Creality/CR-PLA @K2 Plus-all", + "Creality/CR-PLA @K2 Pro-all", + "Creality/CR-PLA @K2 SE-all", + "Creality/CR-PLA @K2-all", + "Creality/CR-PLA @SPARKX i7-all", + "Creality/CR-PLA Carbon @K1 Max_CFS-C-all", + "Creality/CR-PLA Carbon @K1C-all", + "Creality/CR-PLA Carbon @K1C_CFS-C-all", + "Creality/CR-PLA Carbon @K1_CFS-C-all", + "Creality/CR-PLA Carbon @K2 Plus-all", + "Creality/CR-PLA Fluo @K1 Max_CFS-C-all", + "Creality/CR-PLA Fluo @K1C-all", + "Creality/CR-PLA Fluo @K1C_CFS-C-all", + "Creality/CR-PLA Fluo @K1_CFS-C-all", + "Creality/CR-PLA Fluo @K2 Plus-all", + "Creality/CR-PLA Fluo @K2 Pro-all", + "Creality/CR-PLA Fluo @K2-all", + "Creality/CR-PLA Fluo @SPARKX i7-all", + "Creality/CR-PLA Matte @Ender-3 V4-all", + "Creality/CR-PLA Matte @K1 Max_CFS-C-all", + "Creality/CR-PLA Matte @K1C-all", + "Creality/CR-PLA Matte @K1C_CFS-C-all", + "Creality/CR-PLA Matte @K1_CFS-C-all", + "Creality/CR-PLA Matte @K2 Plus-all", + "Creality/CR-PLA Matte @K2 Pro-all", + "Creality/CR-PLA Matte @K2-all", + "Creality/CR-PLA Matte @SPARKX i7-all", + "Creality/CR-Silk @Ender-3 V4-all", + "Creality/CR-Silk @Hi-all", + "Creality/CR-Silk @K1 Max_CFS-C-all", + "Creality/CR-Silk @K1 SE-all", + "Creality/CR-Silk @K1 SE_CFS-C-all", + "Creality/CR-Silk @K1C-all", + "Creality/CR-Silk @K1C_CFS-C-all", + "Creality/CR-Silk @K1_CFS-C-all", + "Creality/CR-Silk @K2 Plus-all", + "Creality/CR-Silk @K2 Pro-all", + "Creality/CR-Silk @K2 SE-all", + "Creality/CR-Silk @K2-all", + "Creality/CR-Silk @SPARKX i7-all", + "Creality/CR-Wood @K1 Max_CFS-C-all", + "Creality/CR-Wood @K1C-all", + "Creality/CR-Wood @K1C_CFS-C-all", + "Creality/CR-Wood @K1_CFS-C-all", + "Creality/CR-Wood @K2 Plus-all", + "Creality/Creality Generic PA-CF", + "Creality/Creality Generic PC", + "Creality/Creality Generic PETG", + "Creality/Creality Generic PLA", + "Creality/Creality Generic PLA-CF", + "Creality/Creality HF Generic PLA", + "Creality/Creality HF Generic Speed PLA", + "Creality/EN-PLA+ @K1 Max_CFS-C-all", + "Creality/EN-PLA+ @K1C-all", + "Creality/EN-PLA+ @K1C_CFS-C-all", + "Creality/EN-PLA+ @K1_CFS-C-all", + "Creality/EN-PLA+ @K2 Plus-all", + "Creality/EN-PLA+ @K2 Pro-all", + "Creality/EN-PLA+ @K2-all", + "Creality/EN-PLA+ @SPARKX i7-all", + "Creality/ENDER FAST PLA @Hi-all", + "Creality/ENDER FAST PLA @K2 Plus-all", + "Creality/ENDER FAST PLA @K2 Pro-all", + "Creality/ENDER FAST PLA @K2-all", + "Creality/ENDER FAST PLA @SPARKX i7-all", + "Creality/Ender-PLA @Ender-3 V4-all", + "Creality/Ender-PLA @Hi-all", + "Creality/Ender-PLA @K1 Max_CFS-C-all", + "Creality/Ender-PLA @K1C-all", + "Creality/Ender-PLA @K1C_CFS-C-all", + "Creality/Ender-PLA @K1_CFS-C-all", + "Creality/Ender-PLA @K2 Plus-all", + "Creality/Ender-PLA @K2 Pro-all", + "Creality/Ender-PLA @K2-all", + "Creality/Ender-PLA @SPARKX i7-all", + "Creality/Generic HIPS @K1 Max_CFS-C-all", + "Creality/Generic HIPS @K1C-all", + "Creality/Generic HIPS @K1C_CFS-C-all", + "Creality/Generic HIPS @K1_CFS-C-all", + "Creality/Generic HIPS @K2 Plus-all", + "Creality/Generic PA @K1 Max_CFS-C-all", + "Creality/Generic PA @K1C-all", + "Creality/Generic PA @K1C_CFS-C-all", + "Creality/Generic PA @K1_CFS-C-all", + "Creality/Generic PA @K2 Plus-all", + "Creality/Generic PA @K2 Pro-all", + "Creality/Generic PA @K2-all", + "Creality/Generic PA-CF @K1 Max_CFS-C-all", + "Creality/Generic PA-CF @K1C-all", + "Creality/Generic PA-CF @K1C_CFS-C-all", + "Creality/Generic PA-CF @K1_CFS-C-all", + "Creality/Generic PA-CF @K2 Plus-all", + "Creality/Generic PA12-CF @K2 Plus-all", + "Creality/Generic PA6-CF @K1 Max_CFS-C-all", + "Creality/Generic PA6-CF @K1C-all", + "Creality/Generic PA6-CF @K1C_CFS-C-all", + "Creality/Generic PA6-CF @K1_CFS-C-all", + "Creality/Generic PA6-CF @K2 Plus-all", + "Creality/Generic PA6-CF @K2 Pro-all", + "Creality/Generic PA612-CF @K2 Plus-all", + "Creality/Generic PA612-CF @K2 Pro-all", + "Creality/Generic PAHT-CF @K1 Max_CFS-C-all", + "Creality/Generic PAHT-CF @K1C-all", + "Creality/Generic PAHT-CF @K1C_CFS-C-all", + "Creality/Generic PAHT-CF @K1_CFS-C-all", + "Creality/Generic PAHT-CF @K2 Plus-all", + "Creality/Generic PAHT-CF @K2 Pro-all", + "Creality/Generic PAHT-CF @K2-all", + "Creality/Generic PC @K1 Max_CFS-C-all", + "Creality/Generic PC @K1C-all", + "Creality/Generic PC @K1C_CFS-C-all", + "Creality/Generic PC @K1_CFS-C-all", + "Creality/Generic PC @K2 Plus-all", + "Creality/Generic PC @K2 Pro-all", + "Creality/Generic PET @K1 Max_CFS-C-all", + "Creality/Generic PET @K1C-all", + "Creality/Generic PET @K1C_CFS-C-all", + "Creality/Generic PET @K1_CFS-C-all", + "Creality/Generic PET @K2 Plus-all", + "Creality/Generic PET @K2 Pro-all", + "Creality/Generic PET @K2-all", + "Creality/Generic PET-CF @K1 Max_CFS-C-all", + "Creality/Generic PET-CF @K1C-all", + "Creality/Generic PET-CF @K1C_CFS-C-all", + "Creality/Generic PET-CF @K1_CFS-C-all", + "Creality/Generic PET-CF @K2 Plus-all", + "Creality/Generic PET-CF @K2 Pro-all", + "Creality/Generic PLA @Ender-3 V4-all", + "Creality/Generic PLA @Hi-all", + "Creality/Generic PLA @K1 Max_CFS-C-all", + "Creality/Generic PLA @K1 SE-all", + "Creality/Generic PLA @K1 SE_CFS-C-all", + "Creality/Generic PLA @K1C-all", + "Creality/Generic PLA @K1C_CFS-C-all", + "Creality/Generic PLA @K1_CFS-C-all", + "Creality/Generic PLA @K2 Plus-all", + "Creality/Generic PLA @K2 Pro-all", + "Creality/Generic PLA @K2 SE-all", + "Creality/Generic PLA @K2-all", + "Creality/Generic PLA @SPARKX i7-all", + "Creality/Generic PLA-CF @Ender-3 V4-all", + "Creality/Generic PLA-CF @K1 Max_CFS-C-all", + "Creality/Generic PLA-CF @K1 SE-all", + "Creality/Generic PLA-CF @K1 SE_CFS-C-all", + "Creality/Generic PLA-CF @K1C-all", + "Creality/Generic PLA-CF @K1C_CFS-C-all", + "Creality/Generic PLA-CF @K1_CFS-C-all", + "Creality/Generic PLA-CF @K2 Plus-all", + "Creality/Generic PLA-CF @K2 Pro-all", + "Creality/Generic PLA-CF @K2 SE-all", + "Creality/Generic PLA-CF @K2-all", + "Creality/Generic PLA-CF @SPARKX i7-all", + "Creality/Generic PLA-Silk @Ender-3 V4-all", + "Creality/Generic PLA-Silk @Hi-all", + "Creality/Generic PLA-Silk @K1 Max_CFS-C-all", + "Creality/Generic PLA-Silk @K1 SE-all", + "Creality/Generic PLA-Silk @K1 SE_CFS-C-all", + "Creality/Generic PLA-Silk @K1C-all", + "Creality/Generic PLA-Silk @K1C_CFS-C-all", + "Creality/Generic PLA-Silk @K1_CFS-C-all", + "Creality/Generic PLA-Silk @K2 Plus-all", + "Creality/Generic PLA-Silk @K2 Pro-all", + "Creality/Generic PLA-Silk @K2 SE-all", + "Creality/Generic PLA-Silk @K2-all", + "Creality/Generic PLA-Silk @SPARKX i7-all", + "Creality/Generic PP @K1 Max_CFS-C-all", + "Creality/Generic PP @K1C-all", + "Creality/Generic PP @K1C_CFS-C-all", + "Creality/Generic PP @K1_CFS-C-all", + "Creality/Generic PP @K2 Plus-all", + "Creality/Generic PP @K2 Pro-all", + "Creality/Generic PP @K2-all", + "Creality/Generic Support for PA @K2 Plus-all", + "Creality/Generic Support for PLA @K2 Plus-all", + "Creality/HP Ultra PLA @K1 Max_CFS-C-all", + "Creality/HP Ultra PLA @K1C-all", + "Creality/HP Ultra PLA @K1C_CFS-C-all", + "Creality/HP Ultra PLA @K1_CFS-C-all", + "Creality/HP Ultra PLA @K2 Plus-all", + "Creality/Hyper L-W PLA @Hi-all", + "Creality/Hyper L-W PLA @K1 Max_CFS-C-all", + "Creality/Hyper L-W PLA @K1 SE-all", + "Creality/Hyper L-W PLA @K1 SE_CFS-C-all", + "Creality/Hyper L-W PLA @K1C-all", + "Creality/Hyper L-W PLA @K1C_CFS-C-all", + "Creality/Hyper L-W PLA @K1_CFS-C-all", + "Creality/Hyper L-W PLA @K2 Plus-all", + "Creality/Hyper L-W PLA @K2 Pro-all", + "Creality/Hyper L-W PLA @K2-all", + "Creality/Hyper Luminous @Hi-all", + "Creality/Hyper Luminous @K1C-all", + "Creality/Hyper Luminous @K2 Plus-all", + "Creality/Hyper Luminous @K2 Pro-all", + "Creality/Hyper Luminous @K2-all", + "Creality/Hyper Luminous @SPARKX i7-all", + "Creality/Hyper Marble @Hi-all", + "Creality/Hyper Marble @K1 Max_CFS-C-all", + "Creality/Hyper Marble @K1C-all", + "Creality/Hyper Marble @K1C_CFS-C-all", + "Creality/Hyper Marble @K1_CFS-C-all", + "Creality/Hyper Marble @K2 Plus-all", + "Creality/Hyper Marble @K2 Pro-all", + "Creality/Hyper Marble @K2 SE-all", + "Creality/Hyper Marble @K2-all", + "Creality/Hyper Marble @SPARKX i7-all", + "Creality/Hyper PA6-CF @K2 Plus-all", + "Creality/Hyper PA6-CF @K2 Pro-all", + "Creality/Hyper PA612-CF @K2 Plus-all", + "Creality/Hyper PA612-CF @K2 Pro-all", + "Creality/Hyper PAHT-CF @K1 Max_CFS-C-all", + "Creality/Hyper PAHT-CF @K1C-all", + "Creality/Hyper PAHT-CF @K1C_CFS-C-all", + "Creality/Hyper PAHT-CF @K1_CFS-C-all", + "Creality/Hyper PAHT-CF @K2 Plus-all", + "Creality/Hyper PAHT-CF @K2 Pro-all", + "Creality/Hyper PAHT-CF @K2-all", + "Creality/Hyper PC @K2 Plus-all", + "Creality/Hyper PC @K2 Pro-all", + "Creality/Hyper PLA @Ender-3 V4-all", + "Creality/Hyper PLA @Hi-all", + "Creality/Hyper PLA @K1 Max_CFS-C-all", + "Creality/Hyper PLA @K1 SE-all", + "Creality/Hyper PLA @K1 SE_CFS-C-all", + "Creality/Hyper PLA @K1C-all", + "Creality/Hyper PLA @K1C_CFS-C-all", + "Creality/Hyper PLA @K1_CFS-C-all", + "Creality/Hyper PLA @K2 Plus-all", + "Creality/Hyper PLA @K2 Pro-all", + "Creality/Hyper PLA @K2 SE-all", + "Creality/Hyper PLA @K2-all", + "Creality/Hyper PLA @SPARKX i7-all", + "Creality/Hyper PLA-CF @Ender-3 V4-all", + "Creality/Hyper PLA-CF @Hi-all", + "Creality/Hyper PLA-CF @K1 Max_CFS-C-all", + "Creality/Hyper PLA-CF @K1 SE-all", + "Creality/Hyper PLA-CF @K1 SE_CFS-C-all", + "Creality/Hyper PLA-CF @K1C-all", + "Creality/Hyper PLA-CF @K1C_CFS-C-all", + "Creality/Hyper PLA-CF @K1_CFS-C-all", + "Creality/Hyper PLA-CF @K2 Plus-all", + "Creality/Hyper PLA-CF @K2 Pro-all", + "Creality/Hyper PLA-CF @K2 SE-all", + "Creality/Hyper PLA-CF @K2-all", + "Creality/Hyper PLA-CF @SPARKX i7-all", + "Creality/Hyper PPA-CF @K2 Plus-all", + "Creality/Hyper PPA-CF @K2 Pro-all", + "Creality/Hyper Stardust @Hi-all", + "Creality/Hyper Stardust @K1 Max_CFS-C-all", + "Creality/Hyper Stardust @K1C-all", + "Creality/Hyper Stardust @K1C_CFS-C-all", + "Creality/Hyper Stardust @K1_CFS-C-all", + "Creality/Hyper Stardust @K2 Plus-all", + "Creality/Hyper Stardust @K2 Pro-all", + "Creality/Hyper Stardust @K2 SE-all", + "Creality/Hyper Stardust @K2-all", + "Creality/Hyper Stardust @SPARKX i7-all", + "Creality/Panchroma PLA Matte @K2 Plus-all", + "Creality/Panchroma PLA Satin @K2 Plus-all", + "Creality/PolySonic PLA @K2 Plus-all", + "Creality/PolySonic PLA Pro @K2 Plus-all", + "Creality/Soleyin Ultra PLA @Ender-3 V4-all", + "Creality/Soleyin Ultra PLA @Hi-all", + "Creality/Soleyin Ultra PLA @K1 Max_CFS-C-all", + "Creality/Soleyin Ultra PLA @K1C-all", + "Creality/Soleyin Ultra PLA @K1C_CFS-C-all", + "Creality/Soleyin Ultra PLA @K1_CFS-C-all", + "Creality/Soleyin Ultra PLA @K2 Plus-all", + "Creality/Soleyin Ultra PLA @K2 Pro-all", + "Creality/Soleyin Ultra PLA @K2 SE-all", + "Creality/Soleyin Ultra PLA @K2-all", + "Creality/Soleyin Ultra PLA @SPARKX i7-all", + "Creality/eSUN PET-Basic @K2 Plus-all", + "Creality/eSUN PLA+ @K2 Plus-all", + "Creality/eSUN PLA-CF @K2 Plus-all", + "Creality/eSUN PLA-HS @K2 Plus-all", + "Creality/eSUN PLA-LW @K2 Plus-all", + "Creality/eSUN PLA-Lite @K2 Plus-all", + "Creality/eSUN PLA-Matte @K2 Plus-all", + "Creality/eSUN PLA-Silk @K2 Plus-all", + "Cubicon/Cubicon ABS-A100 @base", + "Cubicon/Cubicon ABSk @base", + "Cubicon/Cubicon PA-CF @base", + "Cubicon/Cubicon PC @base", + "Cubicon/Cubicon PETG @base", + "Cubicon/Cubicon PLA @base", + "Cubicon/Cubicon PLA+ @base", + "Cubicon/Cubicon PLAi21 @base", + "Custom/Generic PC @MyToolChanger", + "Custom/Generic PETG @MyToolChanger", + "Custom/Generic PLA @MyToolChanger", + "Custom/Generic PLA-CF @MyToolChanger", + "Custom/Generic PVA @MyToolChanger", + "Custom/Generic TPU @MyToolChanger", + "DeltaMaker/DeltaMaker Brand PLA", + "DeltaMaker/DeltaMaker Generic PETG", + "DeltaMaker/DeltaMaker Generic PLA", + "Dremel/Dremel Generic PLA", + "Elegoo/Elegoo PAHT @base", + "Elegoo/Elegoo PC @base", + "Elegoo/Elegoo PETG @base", + "Elegoo/Elegoo PLA @base", + "Elegoo/Generic PA @base", + "Elegoo/Generic PC @base", + "Elegoo/Generic PET @base", + "Elegoo/Generic PETG @base", + "Elegoo/Generic PLA @base", + "FLSun/FLSun Generic PA", + "FLSun/FLSun Generic PA-CF", + "FLSun/FLSun Generic PC", + "FLSun/FLSun Generic PETG", + "FLSun/FLSun Generic PLA", + "FLSun/FLSun Generic PLA-CF", + "Flashforge/Flashforge Generic ASA @G3U 0.6 Nozzle", + "Flashforge/Flashforge Generic HS PLA", + "Flashforge/Flashforge Generic PETG", + "Flashforge/Flashforge Generic PETG @G3U", + "Flashforge/Flashforge Generic PETG @G3U 0.6 Nozzle", + "Flashforge/Flashforge Generic PETG @G3U 0.8 Nozzle", + "Flashforge/Flashforge Generic PETG-CF @G3U", + "Flashforge/Flashforge Generic PETG-CF @G3U 0.6 Nozzle", + "Flashforge/Flashforge Generic PETG-CF @G3U 0.8 Nozzle", + "Flashforge/Flashforge Generic PETG-CF10", + "Flashforge/Flashforge Generic PLA", + "Flashforge/Flashforge Generic PLA-CF @G3U", + "Flashforge/Flashforge Generic PLA-CF @G3U 0.6 Nozzle", + "Flashforge/Flashforge Generic PLA-CF @G3U 0.8 Nozzle", + "Flashforge/Flashforge Generic PLA-CF10", + "Flashforge/Flashforge Generic PLA-Silk", + "Flashforge/Flashforge Generic PVA", + "Flashforge/Flashforge PETG", + "Flashforge/Flashforge PLA", + "Flashforge/FusRock Generic NexPA-CF25", + "Flashforge/FusRock Generic PAHT-CF", + "Flashforge/FusRock Generic PAHT-CF @G3U 0.6 Nozzle", + "Flashforge/FusRock Generic PET-CF", + "Flashforge/FusRock Generic PET-CF @G3U 0.6 Nozzle", + "Flashforge/FusRock Generic S-Multi", + "Flashforge/FusRock Generic S-Multi @G3U 0.6 Nozzle", + "Flashforge/FusRock Generic S-PAHT", + "Flashforge/FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "Flashforge/Generic PETG @Flashforge Artemis", + "Flashforge/Generic PLA @Flashforge AD4", + "Flashforge/Polymaker Generic CoPA", + "Flashforge/Polymaker Generic S1", + "Flashforge/SUNLU PETG @base", + "Flashforge/SUNLU PLA Marble @base", + "Flashforge/SUNLU PLA Matte @base", + "Flashforge/SUNLU PLA+ 2.0 @base", + "Flashforge/SUNLU PLA+ @base", + "Flashforge/SUNLU Silk PLA+ @base", + "Flashforge/SUNLU Wood PLA @base", + "FlyingBear/FlyingBear Generic PA-CF", + "FlyingBear/FlyingBear Generic PC", + "FlyingBear/FlyingBear Generic PETG", + "FlyingBear/FlyingBear Generic PLA", + "InfiMech/InfiMech Generic PA-CF", + "InfiMech/InfiMech Generic PC", + "InfiMech/InfiMech Generic PETG", + "InfiMech/InfiMech Generic PLA", + "LH/LHS PC CF", + "LH/LHS PCTG", + "LH/LHS PETG", + "LH/LHS PLA", + "LONGER/Generic PETG @LONGER LK10", + "LONGER/Generic PETG @LONGER LK10 Plus", + "LONGER/Generic PLA @LONGER LK10", + "LONGER/Generic PLA @LONGER LK10 Plus", + "Lulzbot/Lulzbot 2.85mm ABS", + "Lulzbot/Lulzbot 2.85mm PETG", + "Lulzbot/Lulzbot 2.85mm PLA", + "OrcaArena/Arena PA-CF @base", + "OrcaArena/Arena PAHT-CF @base", + "OrcaArena/Arena PC @base", + "OrcaArena/Arena PET-CF @base", + "OrcaArena/Arena PETG Basic @base", + "OrcaArena/Arena PETG-CF @base", + "OrcaArena/Arena PLA Basic @base", + "OrcaArena/Arena PLA Impact @base", + "OrcaArena/Arena PLA Marble @base", + "OrcaArena/Arena PLA Matte @base", + "OrcaArena/Arena PLA Metal @base", + "OrcaArena/Arena PLA Silk @base", + "OrcaArena/Arena PLA Sparkle @base", + "OrcaArena/Arena PLA Tough @base", + "OrcaArena/Arena PLA-CF @base", + "OrcaArena/Arena Support G @base", + "OrcaArena/Arena Support W @base", + "OrcaArena/OrcaArena Generic PA", + "OrcaArena/OrcaArena Generic PA-CF", + "OrcaArena/OrcaArena Generic PC @base", + "OrcaArena/OrcaArena Generic PETG @base", + "OrcaArena/OrcaArena Generic PETG-CF @base", + "OrcaArena/OrcaArena Generic PLA @base", + "OrcaArena/OrcaArena Generic PLA Silk @base", + "OrcaArena/OrcaArena Generic PLA-CF @base", + "OrcaArena/PolyLite PLA @base", + "OrcaArena/PolyTerra PLA @base", + "OrcaFilamentLibrary/AliZ PA-CF @base", + "OrcaFilamentLibrary/AliZ PETG @base", + "OrcaFilamentLibrary/AliZ PETG-CF @base", + "OrcaFilamentLibrary/AliZ PETG-Metal @base", + "OrcaFilamentLibrary/AliZ PLA @base", + "OrcaFilamentLibrary/Bambu PA-CF @base", + "OrcaFilamentLibrary/Bambu PA6-CF @base", + "OrcaFilamentLibrary/Bambu PA6-GF @base", + "OrcaFilamentLibrary/Bambu PAHT-CF @base", + "OrcaFilamentLibrary/Bambu PC @base", + "OrcaFilamentLibrary/Bambu PC FR @base", + "OrcaFilamentLibrary/Bambu PET-CF @base", + "OrcaFilamentLibrary/Bambu PETG Basic @base", + "OrcaFilamentLibrary/Bambu PETG HF @base", + "OrcaFilamentLibrary/Bambu PETG Translucent @base", + "OrcaFilamentLibrary/Bambu PETG-CF @base", + "OrcaFilamentLibrary/Bambu PLA Aero @base", + "OrcaFilamentLibrary/Bambu PLA Basic @base", + "OrcaFilamentLibrary/Bambu PLA Dynamic @base", + "OrcaFilamentLibrary/Bambu PLA Galaxy @base", + "OrcaFilamentLibrary/Bambu PLA Glow @base", + "OrcaFilamentLibrary/Bambu PLA Impact @base", + "OrcaFilamentLibrary/Bambu PLA Marble @base", + "OrcaFilamentLibrary/Bambu PLA Matte @base", + "OrcaFilamentLibrary/Bambu PLA Metal @base", + "OrcaFilamentLibrary/Bambu PLA Silk @base", + "OrcaFilamentLibrary/Bambu PLA Silk+ @base", + "OrcaFilamentLibrary/Bambu PLA Sparkle @base", + "OrcaFilamentLibrary/Bambu PLA Tough @base", + "OrcaFilamentLibrary/Bambu PLA Wood @base", + "OrcaFilamentLibrary/Bambu PLA-CF @base", + "OrcaFilamentLibrary/Bambu PPA-CF @base", + "OrcaFilamentLibrary/Bambu Support For PA/PET @base", + "OrcaFilamentLibrary/Bambu Support For PLA @base", + "OrcaFilamentLibrary/Bambu Support For PLA/PETG @base", + "OrcaFilamentLibrary/Bambu Support G @base", + "OrcaFilamentLibrary/Bambu Support W @base", + "OrcaFilamentLibrary/COEX NYLEX PA6-CF @base", + "OrcaFilamentLibrary/COEX NYLEX UNFILLED @base", + "OrcaFilamentLibrary/COEX PCTG PRIME @base", + "OrcaFilamentLibrary/COEX PETG @base", + "OrcaFilamentLibrary/COEX PLA @base", + "OrcaFilamentLibrary/COEX PLA PRIME @base", + "OrcaFilamentLibrary/COEX PLA+Silk @base", + "OrcaFilamentLibrary/DREMC PA12-CF @base", + "OrcaFilamentLibrary/DREMC PA6-CF @base", + "OrcaFilamentLibrary/DREMC PET-CF @base", + "OrcaFilamentLibrary/DREMC PETG @base", + "OrcaFilamentLibrary/DREMC PLA+ @base", + "OrcaFilamentLibrary/DREMC PLA+ HS @base", + "OrcaFilamentLibrary/DREMC PPA-CF @base", + "OrcaFilamentLibrary/Elas PETG Basic @base", + "OrcaFilamentLibrary/Elas PLA Basic @base", + "OrcaFilamentLibrary/Elas PLA Pro @base", + "OrcaFilamentLibrary/Elegoo PAHT @base", + "OrcaFilamentLibrary/Elegoo PC @base", + "OrcaFilamentLibrary/Elegoo PETG @base", + "OrcaFilamentLibrary/Elegoo PLA @base", + "OrcaFilamentLibrary/Eolas Prints PETG @System", + "OrcaFilamentLibrary/Eolas Prints PETG Transition @System", + "OrcaFilamentLibrary/Eolas Prints PETG UV Resistant @System", + "OrcaFilamentLibrary/Eolas Prints PLA Antibacterial @System", + "OrcaFilamentLibrary/Eolas Prints PLA High Speed @System", + "OrcaFilamentLibrary/Eolas Prints PLA INGEO 850 @System", + "OrcaFilamentLibrary/Eolas Prints PLA INGEO 870 @System", + "OrcaFilamentLibrary/Eolas Prints PLA Matte @System", + "OrcaFilamentLibrary/Eolas Prints PLA Neon @System", + "OrcaFilamentLibrary/Eolas Prints PLA Premium @System", + "OrcaFilamentLibrary/Eolas Prints PLA Silk @System", + "OrcaFilamentLibrary/Eolas Prints PLA Transition @System", + "OrcaFilamentLibrary/FDplast HIPS @base", + "OrcaFilamentLibrary/FDplast PETG @base", + "OrcaFilamentLibrary/FDplast PLA @base", + "OrcaFilamentLibrary/FDplast SBS @base", + "OrcaFilamentLibrary/FILL3D PA @base", + "OrcaFilamentLibrary/FILL3D PETG @base", + "OrcaFilamentLibrary/FILL3D PETG CF @base", + "OrcaFilamentLibrary/FILL3D PLA Basic @base", + "OrcaFilamentLibrary/FILL3D PLA Turbo @base", + "OrcaFilamentLibrary/FILL3D PP @base", + "OrcaFilamentLibrary/FILL3D PPCF @base", + "OrcaFilamentLibrary/Fiberon PA12-CF @base", + "OrcaFilamentLibrary/Fiberon PA6-CF @base", + "OrcaFilamentLibrary/Fiberon PA6-GF @base", + "OrcaFilamentLibrary/Fiberon PA612-CF @base", + "OrcaFilamentLibrary/Fiberon PET-CF @base", + "OrcaFilamentLibrary/Fiberon PETG-ESD @base", + "OrcaFilamentLibrary/Fiberon PETG-rCF @base", + "OrcaFilamentLibrary/FilAr PETG @base", + "OrcaFilamentLibrary/FilAr PETG Amarillo Lima", + "OrcaFilamentLibrary/FilAr PETG Amarillo Radiante", + "OrcaFilamentLibrary/FilAr PETG Azul Boreal", + "OrcaFilamentLibrary/FilAr PETG Azul Francia", + "OrcaFilamentLibrary/FilAr PETG Azul Imperial", + "OrcaFilamentLibrary/FilAr PETG Blanco Antartida", + "OrcaFilamentLibrary/FilAr PETG Cian", + "OrcaFilamentLibrary/FilAr PETG Coral", + "OrcaFilamentLibrary/FilAr PETG Cristal", + "OrcaFilamentLibrary/FilAr PETG Gris Ceniza", + "OrcaFilamentLibrary/FilAr PETG Gris Plata", + "OrcaFilamentLibrary/FilAr PETG Magenta", + "OrcaFilamentLibrary/FilAr PETG Negro Azabache", + "OrcaFilamentLibrary/FilAr PETG Rojo Carmesi", + "OrcaFilamentLibrary/FilAr PLA @base", + "OrcaFilamentLibrary/FilAr PLA Amarillo Lirio", + "OrcaFilamentLibrary/FilAr PLA Azul Francia", + "OrcaFilamentLibrary/FilAr PLA Blanco Antartida", + "OrcaFilamentLibrary/FilAr PLA Blanco Calido", + "OrcaFilamentLibrary/FilAr PLA Bronce", + "OrcaFilamentLibrary/FilAr PLA Cafe con Leche", + "OrcaFilamentLibrary/FilAr PLA Carpincho", + "OrcaFilamentLibrary/FilAr PLA Celeste Cielo", + "OrcaFilamentLibrary/FilAr PLA Cobre", + "OrcaFilamentLibrary/FilAr PLA Dorado", + "OrcaFilamentLibrary/FilAr PLA Gris Ceniza", + "OrcaFilamentLibrary/FilAr PLA Gris Pizarra", + "OrcaFilamentLibrary/FilAr PLA Gris Plata", + "OrcaFilamentLibrary/FilAr PLA Manteca", + "OrcaFilamentLibrary/FilAr PLA Marron Oxido", + "OrcaFilamentLibrary/FilAr PLA Naranja Tigre", + "OrcaFilamentLibrary/FilAr PLA Negro Azabache", + "OrcaFilamentLibrary/FilAr PLA Oro", + "OrcaFilamentLibrary/FilAr PLA Piel", + "OrcaFilamentLibrary/FilAr PLA Rojo de Carreras", + "OrcaFilamentLibrary/FilAr PLA Rosa Amaranto", + "OrcaFilamentLibrary/FilAr PLA Rosa Flamenco", + "OrcaFilamentLibrary/FilAr PLA Tabaco", + "OrcaFilamentLibrary/FilAr PLA Titanio", + "OrcaFilamentLibrary/FilAr PLA Verde FilAr", + "OrcaFilamentLibrary/FilAr PLA Verde Manzana", + "OrcaFilamentLibrary/FilAr PLA Verde Oliva", + "OrcaFilamentLibrary/FilAr PLA Verde Pixel", + "OrcaFilamentLibrary/FilAr PLA Violeta Jacaranda", + "OrcaFilamentLibrary/FilAr PLA-mate @base", + "OrcaFilamentLibrary/FilAr PLA-mate Amarillo", + "OrcaFilamentLibrary/FilAr PLA-mate Azul", + "OrcaFilamentLibrary/FilAr PLA-mate Beige", + "OrcaFilamentLibrary/FilAr PLA-mate Blanco", + "OrcaFilamentLibrary/FilAr PLA-mate Bordo", + "OrcaFilamentLibrary/FilAr PLA-mate Celeste Cielo", + "OrcaFilamentLibrary/FilAr PLA-mate Chocolate", + "OrcaFilamentLibrary/FilAr PLA-mate Gris", + "OrcaFilamentLibrary/FilAr PLA-mate Marron", + "OrcaFilamentLibrary/FilAr PLA-mate Naranja", + "OrcaFilamentLibrary/FilAr PLA-mate Negro", + "OrcaFilamentLibrary/FilAr PLA-mate Piel", + "OrcaFilamentLibrary/FilAr PLA-mate Rojo", + "OrcaFilamentLibrary/FilAr PLA-mate Rosa", + "OrcaFilamentLibrary/FilAr PLA-mate Uva", + "OrcaFilamentLibrary/FilAr PLA-mate Verde", + "OrcaFilamentLibrary/FilAr PLA-mate Violeta", + "OrcaFilamentLibrary/Generic PA-CF @System", + "OrcaFilamentLibrary/Generic PLA High Speed @System", + "OrcaFilamentLibrary/Generic PLA-CF @System", + "OrcaFilamentLibrary/Generic PPA-GF @System", + "OrcaFilamentLibrary/GreenGate3D PETG @base", + "OrcaFilamentLibrary/NIT PETG @base", + "OrcaFilamentLibrary/NIT PLA @base", + "OrcaFilamentLibrary/Numakers PLA+ @base", + "OrcaFilamentLibrary/Overture Air PLA @base", + "OrcaFilamentLibrary/Overture Easy PLA @base", + "OrcaFilamentLibrary/Overture Matte PLA @base", + "OrcaFilamentLibrary/Overture PLA @base", + "OrcaFilamentLibrary/Overture PLA Pro @base", + "OrcaFilamentLibrary/Overture Rock PLA @base", + "OrcaFilamentLibrary/Overture Silk PLA @base", + "OrcaFilamentLibrary/Overture Super PLA+ @base", + "OrcaFilamentLibrary/Panchroma CoPE @base", + "OrcaFilamentLibrary/Panchroma PLA @base", + "OrcaFilamentLibrary/Panchroma PLA Celestial @base", + "OrcaFilamentLibrary/Panchroma PLA Galaxy @base", + "OrcaFilamentLibrary/Panchroma PLA Glow @base", + "OrcaFilamentLibrary/Panchroma PLA Luminous @base", + "OrcaFilamentLibrary/Panchroma PLA Marble @base", + "OrcaFilamentLibrary/Panchroma PLA Matte @base", + "OrcaFilamentLibrary/Panchroma PLA Metallic @base", + "OrcaFilamentLibrary/Panchroma PLA Neon @base", + "OrcaFilamentLibrary/Panchroma PLA Satin @base", + "OrcaFilamentLibrary/Panchroma PLA Silk @base", + "OrcaFilamentLibrary/Panchroma PLA Starlight @base", + "OrcaFilamentLibrary/Panchroma PLA Temp Shift @base", + "OrcaFilamentLibrary/Panchroma PLA Translucent @base", + "OrcaFilamentLibrary/Panchroma PLA UV Shift @base", + "OrcaFilamentLibrary/PolyLite PETG @base", + "OrcaFilamentLibrary/PolyLite PLA @base", + "OrcaFilamentLibrary/PolyLite PLA Pro @base", + "OrcaFilamentLibrary/PolyTerra Dual PLA @System", + "OrcaFilamentLibrary/PolyTerra PLA @base", + "OrcaFilamentLibrary/Polymaker HT-PLA @base", + "OrcaFilamentLibrary/Polymaker HT-PLA-GF @base", + "OrcaFilamentLibrary/SUNLU PETG @base", + "OrcaFilamentLibrary/SUNLU PLA Marble @base", + "OrcaFilamentLibrary/SUNLU PLA Matte @base", + "OrcaFilamentLibrary/SUNLU PLA+ 2.0 @base", + "OrcaFilamentLibrary/SUNLU PLA+ @base", + "OrcaFilamentLibrary/SUNLU Silk PLA+ @base", + "OrcaFilamentLibrary/SUNLU Wood PLA @base", + "OrcaFilamentLibrary/Valment PLA @base", + "OrcaFilamentLibrary/Valment PLA Galaxy @base", + "OrcaFilamentLibrary/Valment PLA Silk @base", + "OrcaFilamentLibrary/Valment PLA-CF @base", + "OrcaFilamentLibrary/eSUN PETG @base", + "OrcaFilamentLibrary/eSUN PLA+ @base", + "OrcaFilamentLibrary/eSUN PLA-Basic @base", + "OrcaFilamentLibrary/eSUN PLA-Marble @base", + "OrcaFilamentLibrary/eSUN PLA-Matte @base", + "OrcaFilamentLibrary/eSUN ePLA-LW @System", + "OrcaFilamentLibrary/fdm_filament_pla_silk", + "Peopoly/Peopoly Generic PLA", + "Peopoly/Peopoly Lancer PLA-C", + "Phrozen/Phrozen PLA @Phrozen Arco 0.4 nozzle", + "Prusa/Prusa Generic ABS @CORE One", + "Prusa/Prusa Generic ABS @CORE One 0.6", + "Prusa/Prusa Generic ABS @CORE One 0.8", + "Prusa/Prusa Generic ABS @CORE One HF 0.4", + "Prusa/Prusa Generic ABS @CORE One HF 0.5", + "Prusa/Prusa Generic ABS @CORE One HF 0.6", + "Prusa/Prusa Generic ABS @CORE One HF 0.8", + "Prusa/Prusa Generic ABS @MK3.5", + "Prusa/Prusa Generic ABS @MK3.5 0.25", + "Prusa/Prusa Generic ABS @MK3.5 0.6", + "Prusa/Prusa Generic ABS @MK3.5 0.8", + "Prusa/Prusa Generic ABS @MK4S", + "Prusa/Prusa Generic ABS @MK4S 0.6", + "Prusa/Prusa Generic ABS @MK4S 0.8", + "Prusa/Prusa Generic ABS @MK4S HF0.4", + "Prusa/Prusa Generic ABS @MK4S HF0.5", + "Prusa/Prusa Generic ABS @MK4S HF0.6", + "Prusa/Prusa Generic ABS @MK4S HF0.8", + "Prusa/Prusa Generic ABS HF @MK3.5", + "Prusa/Prusa Generic ABS HF @MK3.5 0.6", + "Prusa/Prusa Generic ABS HF @MK3.5 0.8", + "Prusa/Prusa Generic ASA @CORE One", + "Prusa/Prusa Generic ASA @CORE One 0.6", + "Prusa/Prusa Generic ASA @CORE One 0.8", + "Prusa/Prusa Generic ASA @CORE One HF 0.4", + "Prusa/Prusa Generic ASA @CORE One HF 0.5", + "Prusa/Prusa Generic ASA @CORE One HF 0.6", + "Prusa/Prusa Generic ASA @CORE One HF 0.8", + "Prusa/Prusa Generic ASA @MK3.5", + "Prusa/Prusa Generic ASA @MK3.5 0.25", + "Prusa/Prusa Generic ASA @MK3.5 0.6", + "Prusa/Prusa Generic ASA @MK3.5 0.8", + "Prusa/Prusa Generic ASA @MK4S", + "Prusa/Prusa Generic ASA @MK4S 0.6", + "Prusa/Prusa Generic ASA @MK4S 0.8", + "Prusa/Prusa Generic ASA @MK4S HF0.4", + "Prusa/Prusa Generic ASA @MK4S HF0.5", + "Prusa/Prusa Generic ASA @MK4S HF0.6", + "Prusa/Prusa Generic ASA @MK4S HF0.8", + "Prusa/Prusa Generic ASA HF @MK3.5", + "Prusa/Prusa Generic ASA HF @MK3.5 0.6", + "Prusa/Prusa Generic ASA HF @MK3.5 0.8", + "Prusa/Prusa Generic PA @MK3.5", + "Prusa/Prusa Generic PA @MK3.5 0.25", + "Prusa/Prusa Generic PA @MK3.5 0.6", + "Prusa/Prusa Generic PA @MK3.5 0.8", + "Prusa/Prusa Generic PA-CF @MK3.5", + "Prusa/Prusa Generic PA-CF @MK3.5 0.25", + "Prusa/Prusa Generic PA-CF @MK3.5 0.6", + "Prusa/Prusa Generic PA-CF @MK3.5 0.8", + "Prusa/Prusa Generic PC @MK3.5", + "Prusa/Prusa Generic PC @MK3.5 0.25", + "Prusa/Prusa Generic PC @MK3.5 0.6", + "Prusa/Prusa Generic PC @MK3.5 0.8", + "Prusa/Prusa Generic PC HF @MK3.5", + "Prusa/Prusa Generic PC HF @MK3.5 0.6", + "Prusa/Prusa Generic PC HF @MK3.5 0.8", + "Prusa/Prusa Generic PETG @CORE One", + "Prusa/Prusa Generic PETG @CORE One 0.6", + "Prusa/Prusa Generic PETG @CORE One 0.8", + "Prusa/Prusa Generic PETG @CORE One HF 0.4", + "Prusa/Prusa Generic PETG @CORE One HF 0.5", + "Prusa/Prusa Generic PETG @CORE One HF 0.6", + "Prusa/Prusa Generic PETG @CORE One HF 0.8", + "Prusa/Prusa Generic PETG @MK3.5", + "Prusa/Prusa Generic PETG @MK3.5 0.25", + "Prusa/Prusa Generic PETG @MK3.5 0.6", + "Prusa/Prusa Generic PETG @MK3.5 0.8", + "Prusa/Prusa Generic PETG @MK4S", + "Prusa/Prusa Generic PETG @MK4S 0.6", + "Prusa/Prusa Generic PETG @MK4S 0.8", + "Prusa/Prusa Generic PETG @MK4S HF0.4", + "Prusa/Prusa Generic PETG @MK4S HF0.5", + "Prusa/Prusa Generic PETG @MK4S HF0.6", + "Prusa/Prusa Generic PETG @MK4S HF0.8", + "Prusa/Prusa Generic PETG HF @MK3.5", + "Prusa/Prusa Generic PETG HF @MK3.5 0.6", + "Prusa/Prusa Generic PETG HF @MK3.5 0.8", + "Prusa/Prusa Generic PLA @CORE One", + "Prusa/Prusa Generic PLA @CORE One 0.6", + "Prusa/Prusa Generic PLA @CORE One 0.8", + "Prusa/Prusa Generic PLA @CORE One HF 0.4", + "Prusa/Prusa Generic PLA @CORE One HF 0.5", + "Prusa/Prusa Generic PLA @CORE One HF 0.6", + "Prusa/Prusa Generic PLA @CORE One HF 0.8", + "Prusa/Prusa Generic PLA @MK3.5", + "Prusa/Prusa Generic PLA @MK3.5 0.25", + "Prusa/Prusa Generic PLA @MK3.5 0.6", + "Prusa/Prusa Generic PLA @MK3.5 0.8", + "Prusa/Prusa Generic PLA @MK4S", + "Prusa/Prusa Generic PLA @MK4S 0.6", + "Prusa/Prusa Generic PLA @MK4S 0.8", + "Prusa/Prusa Generic PLA @MK4S HF0.4", + "Prusa/Prusa Generic PLA @MK4S HF0.5", + "Prusa/Prusa Generic PLA @MK4S HF0.6", + "Prusa/Prusa Generic PLA @MK4S HF0.8", + "Prusa/Prusa Generic PLA HF @MK3.5", + "Prusa/Prusa Generic PLA HF @MK3.5 0.6", + "Prusa/Prusa Generic PLA HF @MK3.5 0.8", + "Prusa/Prusa Generic PLA Silk @CORE One", + "Prusa/Prusa Generic PLA Silk @CORE One 0.6", + "Prusa/Prusa Generic PLA Silk @CORE One 0.8", + "Prusa/Prusa Generic PLA Silk @MK4S", + "Prusa/Prusa Generic PLA Silk @MK4S 0.6", + "Prusa/Prusa Generic PLA Silk @MK4S 0.8", + "Prusa/Prusa Generic PLA-CF @MK3.5", + "Prusa/Prusa Generic PLA-CF @MK3.5 0.25", + "Prusa/Prusa Generic PLA-CF @MK3.5 0.6", + "Prusa/Prusa Generic PLA-CF @MK3.5 0.8", + "Prusa/Prusa Generic PVA @MK3.5", + "Prusa/Prusa Generic PVA @MK3.5 0.25", + "Prusa/Prusa Generic PVA @MK3.5 0.6", + "Prusa/Prusa Generic PVA @MK3.5 0.8", + "Prusa/Prusa Generic PVA HF @MK3.5", + "Prusa/Prusa Generic PVA HF @MK3.5 0.6", + "Prusa/Prusa Generic PVA HF @MK3.5 0.8", + "Prusa/Prusa Generic TPU @CORE One", + "Prusa/Prusa Generic TPU @CORE One 0.6", + "Prusa/Prusa Generic TPU @CORE One 0.8", + "Prusa/Prusa Generic TPU @MK3.5", + "Prusa/Prusa Generic TPU @MK4S", + "Prusa/Prusa Generic TPU @MK4S 0.6", + "Prusa/Prusa Generic TPU @MK4S 0.8", + "Prusa/Prusa Generic TPU HF @MK3.5", + "Prusa/Prusament ASA @CORE One", + "Prusa/Prusament ASA @CORE One 0.6", + "Prusa/Prusament ASA @CORE One 0.8", + "Prusa/Prusament ASA @CORE One HF 0.4", + "Prusa/Prusament ASA @CORE One HF 0.5", + "Prusa/Prusament ASA @CORE One HF 0.6", + "Prusa/Prusament ASA @CORE One HF 0.8", + "Prusa/Prusament PA-CF @CORE One", + "Prusa/Prusament PA-CF @CORE One 0.6", + "Prusa/Prusament PA-CF @CORE One 0.8", + "Prusa/Prusament PC Blend @CORE One", + "Prusa/Prusament PC Blend @CORE One 0.6", + "Prusa/Prusament PC Blend @CORE One 0.8", + "Prusa/Prusament PC Blend @CORE One HF 0.4", + "Prusa/Prusament PC Blend @CORE One HF 0.5", + "Prusa/Prusament PC Blend @CORE One HF 0.6", + "Prusa/Prusament PC Blend @CORE One HF 0.8", + "Prusa/Prusament PC-CF @CORE One", + "Prusa/Prusament PC-CF @CORE One 0.6", + "Prusa/Prusament PC-CF @CORE One 0.8", + "Prusa/Prusament PETG @CORE One", + "Prusa/Prusament PETG @CORE One 0.6", + "Prusa/Prusament PETG @CORE One 0.8", + "Prusa/Prusament PETG @CORE One HF 0.4", + "Prusa/Prusament PETG @CORE One HF 0.5", + "Prusa/Prusament PETG @CORE One HF 0.6", + "Prusa/Prusament PETG @CORE One HF 0.8", + "Prusa/Prusament PLA @CORE One", + "Prusa/Prusament PLA @CORE One 0.6", + "Prusa/Prusament PLA @CORE One 0.8", + "Prusa/Prusament PLA @CORE One HF 0.4", + "Prusa/Prusament PLA @CORE One HF 0.5", + "Prusa/Prusament PLA @CORE One HF 0.6", + "Prusa/Prusament PLA @CORE One HF 0.8", + "Prusa/Prusament PVB @CORE One", + "Prusa/Prusament PVB @CORE One 0.6", + "Prusa/Prusament PVB @CORE One 0.8", + "Prusa/Prusament rPLA @CORE One", + "Prusa/Prusament rPLA @CORE One 0.6", + "Prusa/Prusament rPLA @CORE One 0.8", + "Qidi/Bambu PETG", + "Qidi/Bambu PETG @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Bambu PETG @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Bambu PETG @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Bambu PETG @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Bambu PETG @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Bambu PETG @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Bambu PETG @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Bambu PETG @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Bambu PLA", + "Qidi/Bambu PLA @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Bambu PLA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Bambu PLA @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Bambu PLA @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Bambu PLA @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Bambu PLA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Bambu PLA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Bambu PLA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/HATCHBOX PETG @Qidi", + "Qidi/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle", + "Qidi/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle", + "Qidi/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle", + "Qidi/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle", + "Qidi/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle", + "Qidi/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle", + "Qidi/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle", + "Qidi/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle", + "Qidi/HATCHBOX PLA @Qidi", + "Qidi/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle", + "Qidi/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle", + "Qidi/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle", + "Qidi/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle", + "Qidi/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Overture PLA @Qidi", + "Qidi/Overture PLA @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Overture PLA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Overture PLA @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Overture PLA @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Overture PLA @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Overture PLA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Overture PLA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Overture PLA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/PolyLite PLA @Qidi", + "Qidi/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle", + "Qidi/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle", + "Qidi/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle", + "Qidi/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle", + "Qidi/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle", + "Qidi/QIDI PA-Ultra", + "Qidi/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PA-Ultra @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PA-Ultra @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PA-Ultra @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PA12-CF", + "Qidi/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PA12-CF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PA12-CF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PA12-CF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PAHT-CF", + "Qidi/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PAHT-CF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PAHT-CF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PAHT-CF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PAHT-GF", + "Qidi/QIDI PAHT-GF @0.6 nozzle", + "Qidi/QIDI PAHT-GF @0.8 nozzle", + "Qidi/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PAHT-GF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PAHT-GF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PAHT-GF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PET-CF", + "Qidi/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PET-CF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PET-CF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PET-CF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PET-GF", + "Qidi/QIDI PET-GF @0.6 nozzle", + "Qidi/QIDI PET-GF @0.8 nozzle", + "Qidi/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PET-GF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PET-GF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PET-GF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PETG Basic", + "Qidi/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PETG Basic @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PETG Basic @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PETG Basic @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PETG Basic @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PETG Rapido", + "Qidi/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PETG Rapido @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PETG Rapido @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PETG Rapido @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PETG Rapido @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PETG Tough", + "Qidi/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PETG Tough @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PETG Tough @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PETG Tough @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PETG Tough @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PETG Translucent", + "Qidi/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PETG Translucent @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PETG Translucent @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PETG Translucent @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PETG Translucent @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PETG-CF", + "Qidi/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PETG-CF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PETG-CF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PETG-CF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PETG-GF", + "Qidi/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PETG-GF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PETG-GF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PLA Basic", + "Qidi/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PLA Basic @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PLA Basic @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA Basic @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA Basic @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PLA Matte Basic", + "Qidi/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PLA Rapido", + "Qidi/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PLA Rapido @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PLA Rapido @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA Rapido @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA Rapido @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PLA Rapido Matte", + "Qidi/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PLA Rapido Metal", + "Qidi/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PLA Rapido Silk", + "Qidi/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA-CF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA-CF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PPS-CF", + "Qidi/QIDI PPS-CF @0.6 nozzle", + "Qidi/QIDI PPS-CF @0.8 nozzle", + "Qidi/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PPS-CF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PPS-CF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PPS-CF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PPS-GF", + "Qidi/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI Support For PAHT", + "Qidi/QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI Support For PAHT @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI Support For PAHT @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI Support For PET/PA", + "Qidi/QIDI Support For PET/PA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI Support For PET/PA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI Support For PET/PA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI TPU-Aero @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI UltraPA-CF25", + "Qidi/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI WOOD Rapido", + "Qidi/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI WOOD Rapido @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI WOOD Rapido @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Qidi Generic PA", + "Qidi/Qidi Generic PA-CF", + "Qidi/Qidi Generic PC", + "Qidi/Qidi Generic PETG", + "Qidi/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi Generic PETG-CF", + "Qidi/Qidi Generic PLA", + "Qidi/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi Generic PLA Silk", + "Qidi/Qidi Generic PLA+", + "Qidi/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi Generic PLA-CF", + "Qidi/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi PC-ABS-FR @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi PC-ABS-FR @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Qidi PLA-CF", + "Qidi/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Qidi TPU 95A-HF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Tinmorry PETG-ECO", + "RH3D/Generic ABS @E3NG v1.2S", + "RH3D/Generic ASA @E3NG v1.2S", + "RH3D/Generic PCCF @E3NG v1.2S", + "RH3D/Generic PETG @E3NG v1.2S", + "RH3D/Generic PLA @E3NG v1.2S", + "RH3D/Generic TPU @E3NG v1.2S", + "Ratrig/RatRig BigNozzle PCTG", + "Ratrig/RatRig BigNozzle PETG", + "Ratrig/RatRig BigNozzle PLA", + "Ratrig/RatRig Generic PA", + "Ratrig/RatRig Generic PA-CF", + "Ratrig/RatRig Generic PC", + "Ratrig/RatRig Generic PCTG", + "Ratrig/RatRig Generic PETG", + "Ratrig/RatRig Generic PLA", + "Ratrig/RatRig Generic PLA-CF", + "Ratrig/RatRig PunkFil PETG", + "Ratrig/RatRig PunkFil PETG CF", + "SecKit/SecKit Generic PA", + "SecKit/SecKit Generic PA-CF", + "SecKit/SecKit Generic PC", + "SecKit/SecKit Generic PETG", + "SecKit/SecKit Generic PLA", + "SecKit/SecKit Generic PLA-CF", + "Snapmaker/Fiberon PA12-CF10 @Snapmaker U1 base", + "Snapmaker/Fiberon PA6-CF20 @Snapmaker U1 base", + "Snapmaker/Fiberon PA612-ESD @Snapmaker U1 base", + "Snapmaker/Panchroma CoPE @Snapmaker U1 base", + "Snapmaker/Panchroma PLA @Snapmaker U1 base", + "Snapmaker/Panchroma PLA Celestial @Snapmaker U1 base", + "Snapmaker/Panchroma PLA Galaxy @Snapmaker U1 base", + "Snapmaker/Panchroma PLA Glow @Snapmaker U1 base", + "Snapmaker/Panchroma PLA Luminous @Snapmaker U1 base", + "Snapmaker/Panchroma PLA Marble @Snapmaker U1 base", + "Snapmaker/Panchroma PLA Matte @Snapmaker U1 base", + "Snapmaker/Panchroma PLA Metallic @Snapmaker U1 base", + "Snapmaker/Panchroma PLA Neon @Snapmaker U1 base", + "Snapmaker/Panchroma PLA Satin @Snapmaker U1 base", + "Snapmaker/Panchroma PLA Silk @Snapmaker U1 base", + "Snapmaker/Panchroma PLA Starlight @Snapmaker U1 base", + "Snapmaker/Panchroma PLA Temp Shift @Snapmaker U1 base", + "Snapmaker/Panchroma PLA Translucent @Snapmaker U1 base", + "Snapmaker/Panchroma PLA UV Shift @Snapmaker U1 base", + "Snapmaker/PolyLite CosPLA @Snapmaker U1 base", + "Snapmaker/PolyLite PLA @Snapmaker U1 base", + "Snapmaker/PolyLite PLA @base", + "Snapmaker/PolyLite PLA Galaxy @Snapmaker U1 base", + "Snapmaker/PolyLite PLA Glow @Snapmaker U1 base", + "Snapmaker/PolyLite PLA Luminous @Snapmaker U1 base", + "Snapmaker/PolyLite PLA Neon @Snapmaker U1 base", + "Snapmaker/PolyLite PLA Pro @Snapmaker U1 base", + "Snapmaker/PolyLite PLA Pro Metallic @Snapmaker U1 base", + "Snapmaker/PolyLite PLA Starlight @Snapmaker U1 base", + "Snapmaker/PolyLite PLA Translucent @Snapmaker U1 base", + "Snapmaker/PolyTerra PLA @Snapmaker U1 base", + "Snapmaker/PolyTerra PLA Marble @Snapmaker U1 base", + "Snapmaker/PolyTerra PLA+ @Snapmaker U1 base", + "Snapmaker/Polymaker HT-PLA @Snapmaker U1 base", + "Snapmaker/Polymaker HT-PLA-GF @Snapmaker U1 base", + "Snapmaker/Polymaker PLA @Snapmaker U1 base", + "Snapmaker/Polymaker PLA Pro @Snapmaker U1 base", + "Snapmaker/Polymaker PLA Pro Metallic @Snapmaker U1 base", + "Snapmaker/Snapmaker Dual PA-CF @base", + "Snapmaker/Snapmaker Dual PET @base", + "Snapmaker/Snapmaker Dual PLA @base", + "Snapmaker/Snapmaker Dual PLA Eco @base", + "Snapmaker/Snapmaker Dual PLA Matte @base", + "Snapmaker/Snapmaker Dual PLA Metal @base", + "Snapmaker/Snapmaker Dual PLA Silk @base", + "Snapmaker/Snapmaker Dual PLA-CF @base", + "Snapmaker/Snapmaker J1 PA-CF @base", + "Snapmaker/Snapmaker J1 PET @base", + "Snapmaker/Snapmaker J1 PLA @base", + "Snapmaker/Snapmaker J1 PLA Eco @base", + "Snapmaker/Snapmaker J1 PLA Matte @base", + "Snapmaker/Snapmaker J1 PLA Metal @base", + "Snapmaker/Snapmaker J1 PLA Silk @base", + "Snapmaker/Snapmaker J1 PLA-CF @base", + "Snapmaker/Snapmaker PA-CF @U1 base", + "Snapmaker/Snapmaker PA-CF @base", + "Snapmaker/Snapmaker PET @U1 base", + "Snapmaker/Snapmaker PET @base", + "Snapmaker/Snapmaker PLA @U1 base", + "Snapmaker/Snapmaker PLA @base", + "Snapmaker/Snapmaker PLA Eco @U1 base", + "Snapmaker/Snapmaker PLA Eco @base", + "Snapmaker/Snapmaker PLA Metal @U1 base", + "Snapmaker/Snapmaker PLA Silk @U1 base", + "Snapmaker/Snapmaker PLA Silk @base", + "Snapmaker/Snapmaker PLA-CF @U1 base", + "Snapmaker/Snapmaker PLA-CF @base", + "Sovol/Generic ABS @Sovol SV08 MAX", + "Sovol/Generic PC @Sovol SV08 MAX", + "Sovol/Generic PETG @Sovol SV08 MAX", + "Sovol/Generic PLA @Sovol SV08 MAX", + "Sovol/Generic PLA Silk @Sovol SV08 MAX", + "Sovol/Generic TPU @Sovol SV08 MAX", + "Sovol/Polymaker PETG @Sovol SV08 MAX", + "Sovol/SUNLU PETG @Sovol SV08 MAX", + "Sovol/Sovol SV06 ACE ABS", + "Sovol/Sovol SV06 ACE PETG", + "Sovol/Sovol SV06 ACE PLA", + "Sovol/Sovol SV06 ACE TPU", + "Sovol/Sovol SV06 Plus ACE ABS", + "Sovol/Sovol SV06 Plus ACE PETG", + "Sovol/Sovol SV06 Plus ACE PLA", + "Sovol/Sovol SV06 Plus ACE TPU", + "Sovol/Sovol SV07 PLA", + "Sovol/Sovol SV08 ABS", + "Sovol/Sovol SV08 PETG", + "Sovol/Sovol SV08 PLA", + "Sovol/Sovol SV08 PLA @SV08 0.2 nozzle", + "Sovol/Sovol SV08 TPU", + "Sovol/Sovol Zero ABS", + "Sovol/Sovol Zero PC", + "Sovol/Sovol Zero PETG", + "Sovol/Sovol Zero PETG HS Nozzle", + "Sovol/Sovol Zero PLA Basic", + "Sovol/Sovol Zero PLA Basic HS Nozzle", + "Sovol/Sovol Zero PLA Silk", + "Sovol/Sovol Zero PLA Silk HS Nozzle", + "Sovol/Sovol Zero TPU", + "Tiertime/Tiertime Generic BVOH", + "Tiertime/Tiertime Generic BVOH@300HS", + "Tiertime/Tiertime Generic EVA", + "Tiertime/Tiertime Generic EVA@300HS", + "Tiertime/Tiertime Generic HIPS", + "Tiertime/Tiertime Generic HIPS@300HS", + "Tiertime/Tiertime Generic PA", + "Tiertime/Tiertime Generic PA-CF", + "Tiertime/Tiertime Generic PA-CF@300HS", + "Tiertime/Tiertime Generic PA@300HS", + "Tiertime/Tiertime Generic PC", + "Tiertime/Tiertime Generic PC@300HS", + "Tiertime/Tiertime Generic PCTG", + "Tiertime/Tiertime Generic PCTG@300HS", + "Tiertime/Tiertime Generic PE", + "Tiertime/Tiertime Generic PE-CF", + "Tiertime/Tiertime Generic PE-CF@300HS", + "Tiertime/Tiertime Generic PE@300HS", + "Tiertime/Tiertime Generic PETG", + "Tiertime/Tiertime Generic PETG-CF", + "Tiertime/Tiertime Generic PETG-CF@300HS", + "Tiertime/Tiertime Generic PETG@300HS", + "Tiertime/Tiertime Generic PHA", + "Tiertime/Tiertime Generic PHA@300HS", + "Tiertime/Tiertime Generic PLA", + "Tiertime/Tiertime Generic PLA High Speed", + "Tiertime/Tiertime Generic PLA High Speed@300HS", + "Tiertime/Tiertime Generic PLA Silk", + "Tiertime/Tiertime Generic PLA Silk@300HS", + "Tiertime/Tiertime Generic PLA-CF", + "Tiertime/Tiertime Generic PLA-CF@300HS", + "Tiertime/Tiertime Generic PLA@300HS", + "Tiertime/Tiertime Generic PP", + "Tiertime/Tiertime Generic PP-CF", + "Tiertime/Tiertime Generic PP-CF@300HS", + "Tiertime/Tiertime Generic PP-GF", + "Tiertime/Tiertime Generic PP-GF@300HS", + "Tiertime/Tiertime Generic PP@300HS", + "Tiertime/Tiertime Generic PPA-CF", + "Tiertime/Tiertime Generic PPA-CF@300HS", + "Tiertime/Tiertime Generic PPA-GF", + "Tiertime/Tiertime Generic PPA-GF@300HS", + "Tiertime/Tiertime Generic SBS", + "Tiertime/Tiertime Generic SBS@300HS", + "Tiertime/Tiertime PA6-CF", + "Tiertime/Tiertime PA6-CF@300HS", + "Tiertime/Tiertime PC", + "Tiertime/Tiertime PC@300HS", + "Tiertime/Tiertime PET-CF", + "Tiertime/Tiertime PET-CF@300HS", + "Tiertime/Tiertime PETG", + "Tiertime/Tiertime PETG@300HS", + "Tiertime/Tiertime PLA", + "Tiertime/Tiertime PLA-CF", + "Tiertime/Tiertime PLA-CF@300HS", + "Tiertime/Tiertime PLA@300HS", + "TwoTrees/TwoTrees Generic HS PLA @SK1", + "Volumic/Désactivé", + "Volumic/PA6 CF20 (Performance)", + "Volumic/PETG ESD (Performance)", + "Volumic/PPS Carbone (Performance)", + "Volumic/Volumic NYLON Ultra", + "Volumic/Volumic NYLON Ultra (Performance)", + "Volumic/Volumic PC", + "Volumic/Volumic PC (Performance)", + "Volumic/Volumic PCTG Ultra (Performance)", + "Volumic/Volumic PETG Ultra", + "Volumic/Volumic PETG Ultra (Performance)", + "Volumic/Volumic PETG Ultra carbone", + "Volumic/Volumic PETG Ultra carbone (Performance)", + "Volumic/Volumic PLA Ultra", + "Volumic/Volumic PLA Ultra (Performance)", + "Volumic/Volumic PP Ultra", + "Volumic/Volumic PP Ultra (Performance)", + "Volumic/Volumic UNIVERSAL Ultra", + "Volumic/Volumic UNIVERSAL Ultra (Performance)", + "Vzbot/Vzbot Generic PA", + "Vzbot/Vzbot Generic PA-CF", + "Vzbot/Vzbot Generic PC", + "Vzbot/Vzbot Generic PETG", + "Vzbot/Vzbot Generic PLA", + "Vzbot/Vzbot Generic PLA-CF", + "Wanhao France/YUMI PLA Bowden", + "Wanhao France/YUMI PLA Direct Drive", + "Wanhao France/Yumi Generic PETG", + "Wanhao France/Yumi Generic PLA", + "WonderMaker/WonderMaker PET-CF", + "WonderMaker/WonderMaker PETG Basic", + "WonderMaker/WonderMaker PLA Basic", + "WonderMaker/WonderMaker PLA Marble", + "WonderMaker/WonderMaker PLA Matte", + "WonderMaker/WonderMaker PLA Metal", + "WonderMaker/WonderMaker PLA Silk", + "WonderMaker/WonderMaker PLA Wood", + "Z-Bolt/Generic ABS @Z-Bolt 0.4 nozzle", + "Z-Bolt/Generic ABS @Z-Bolt 0.6 nozzle", + "Z-Bolt/Generic ABS @Z-Bolt 0.8 nozzle", + "Z-Bolt/Generic ABS HT @Z-Bolt 0.4 nozzle", + "Z-Bolt/Generic ABS HT @Z-Bolt 0.6 nozzle", + "Z-Bolt/Generic ABS HT @Z-Bolt 0.8 nozzle", + "Z-Bolt/Generic ABS HT @Z-Bolt Base", + "Z-Bolt/Generic PA @Z-Bolt 0.4 nozzle", + "Z-Bolt/Generic PA @Z-Bolt 0.6 nozzle", + "Z-Bolt/Generic PA @Z-Bolt 0.8 nozzle", + "Z-Bolt/Generic PA @Z-Bolt Base", + "Z-Bolt/Generic PETG @Z-Bolt 0.4 nozzle", + "Z-Bolt/Generic PETG @Z-Bolt 0.6 nozzle", + "Z-Bolt/Generic PETG @Z-Bolt 0.8 nozzle", + "Z-Bolt/Generic PETG @Z-Bolt Base", + "Z-Bolt/Generic PLA @Z-Bolt 0.6 nozzle", + "Z-Bolt/Generic PLA @Z-Bolt 0.8 nozzle", + "Z-Bolt/Generic PLA @Z-Bolt Base", + "re3D/re3D Greengate rPETG", + "re3D/re3D Greengate rPETG @0.8 nozzle", + "re3D/re3D Greengate rPETG @1.75 nozzle", + "re3D/re3D PC", + "re3D/re3D PC @0.4 nozzle", + "re3D/re3D PC @0.8 nozzle", + "re3D/re3D PETG", + "re3D/re3D PETG @0.4 nozzle", + "re3D/re3D PETG @0.8 nozzle", + "re3D/re3D PLA", + "re3D/re3D PLA @0.4 nozzle", + "re3D/re3D PLA @0.8 nozzle", + "re3D/re3D rPP", + "re3D/re3D rPP @0.8 nozzle", + "re3D/re3D rPP @1.75 nozzle" + ], + "ids": { + "00001": [ + "Creality/Generic PLA" + ], + "00002": [ + "Creality/Generic PLA-Silk" + ], + "00003": [ + "Creality/Generic PETG" + ], + "00004": [ + "Creality/Generic ABS" + ], + "00005": [ + "Creality/Generic TPU" + ], + "00006": [ + "Creality/Generic PLA-CF" + ], + "00007": [ + "Creality/Generic ASA" + ], + "00008": [ + "Creality/Generic PA" + ], + "00009": [ + "Creality/Generic PA-CF" + ], + "00010": [ + "Creality/Generic BVOH" + ], + "00011": [ + "Creality/Generic PVA" + ], + "00012": [ + "Creality/Generic HIPS" + ], + "00013": [ + "Creality/Generic PET-CF" + ], + "00014": [ + "Creality/Generic PETG-CF" + ], + "00015": [ + "Creality/Generic PA6-CF" + ], + "00016": [ + "Creality/Generic PAHT-CF" + ], + "00017": [ + "Creality/Generic PPS" + ], + "00018": [ + "Creality/Generic PPS-CF" + ], + "00019": [ + "Creality/Generic PP" + ], + "00020": [ + "Creality/Generic PET" + ], + "00021": [ + "Creality/Generic PC" + ], + "00022": [ + "Creality/Generic PA612-CF" + ], + "00023": [ + "Creality/Generic Support for PA" + ], + "00024": [ + "Creality/Generic Support for PLA" + ], + "00025": [ + "Creality/Generic PA12-CF" + ], + "00026": [ + "Creality/Generic TPU 64D" + ], + "00027": [ + "Creality/Generic PETG-GF" + ], + "00031": [ + "Creality/Generic PP-CF" + ], + "00032": [ + "Creality/Generic PCTG" + ], + "00033": [ + "Creality/Generic ASA-CF" + ], + "00034": [ + "Creality/Generic PA6-GF" + ], + "00035": [ + "Creality/eSUN PLA-LW" + ], + "01001": [ + "Creality/Creality Hyper PLA", + "Creality/Hyper PLA" + ], + "01002": [ + "Creality/Hyper L-W PLA" + ], + "01003": [ + "Creality/Hyper Luminous" + ], + "01004": [ + "Creality/Hyper Stardust" + ], + "01601": [ + "Creality/Soleyin Ultra PLA" + ], + "02001": [ + "Creality/Creality Hyper PLA-CF", + "Creality/Hyper PLA-CF" + ], + "03001": [ + "Creality/Creality Hyper ABS", + "Creality/Hyper ABS" + ], + "04001": [ + "Creality/CR-PLA", + "Creality/Creality Generic PLA" + ], + "05001": [ + "Creality/CR-Silk", + "Creality/Creality Silk PLA" + ], + "06001": [ + "Creality/CR-PETG", + "Creality/Creality Generic PETG" + ], + "06002": [ + "Creality/Hyper PETG" + ], + "06003": [ + "Creality/Hyper PETG-CF" + ], + "06004": [ + "Creality/Hyper PETG-GF" + ], + "06005": [ + "Creality/Soleyin Basic PETG" + ], + "07001": [ + "Creality/CR-ABS", + "Creality/Creality Generic ABS" + ], + "07002": [ + "Creality/Hyper PC" + ], + "08001": [ + "Creality/Ender-PLA" + ], + "09001": [ + "Creality/EN-PLA+" + ], + "09002": [ + "Creality/ENDER FAST PLA" + ], + "10001": [ + "Creality/Creality Generic TPU", + "Creality/HP-TPU" + ], + "1009481135": [ + "Snapmaker/Snapmaker J1 PET" + ], + "1042511226": [ + "Snapmaker/Snapmaker Dual PETG-CF" + ], + "10425112260": [ + "Snapmaker/Snapmaker PETG-CF" + ], + "11001": [ + "Creality/CR-Nylon", + "Creality/Creality Generic PA" + ], + "1172603684": [ + "Snapmaker/Snapmaker J1 PETG" + ], + "1181363872": [ + "Snapmaker/Snapmaker Dual PLA Silk" + ], + "11813638720": [ + "Snapmaker/Snapmaker PLA Silk" + ], + "1192769348": [ + "Snapmaker/Snapmaker J1 PLA Matte" + ], + "12002": [ + "Creality/Hyper PPA-CF" + ], + "12003": [ + "Creality/Hyper PAHT-CF" + ], + "12004": [ + "Creality/Hyper PA612-CF" + ], + "12005": [ + "Creality/Hyper PA6-CF" + ], + "1207881278": [ + "Snapmaker/Snapmaker Dual Breakaway" + ], + "1210173120": [ + "Snapmaker/Snapmaker J1 PA-CF" + ], + "1223824394": [ + "Snapmaker/Snapmaker J1 ABS", + "Snapmaker/Snapmaker J1 ABS Benchy" + ], + "1247172706": [ + "Snapmaker/Snapmaker Dual ASA" + ], + "12471727060": [ + "Snapmaker/Snapmaker ASA" + ], + "13001": [ + "Creality/CR-PLA Carbon" + ], + "1344609062": [ + "Snapmaker/Snapmaker PVA" + ], + "1355502217": [ + "Snapmaker/Snapmaker PETG-CF" + ], + "1393866034": [ + "Snapmaker/PolyLite Dual PLA", + "Snapmaker/PolyLite J1 PLA", + "Snapmaker/PolyLite PLA" + ], + "14001": [ + "Creality/CR-PLA Matte" + ], + "1417031127": [ + "Snapmaker/Snapmaker Dual PLA" + ], + "14170311270": [ + "Snapmaker/Snapmaker PLA", + "Snapmaker/Snapmaker PLA Matte" + ], + "141703112701": [ + "Snapmaker/Snapmaker PLA SnapSpeed" + ], + "1417031127011": [ + "Snapmaker/Snapmaker PLA Lite" + ], + "144877656": [ + "Snapmaker/Snapmaker J1 ASA" + ], + "1480063856": [ + "Snapmaker/Snapmaker TPE", + "Snapmaker/Snapmaker TPU" + ], + "15001": [ + "Creality/CR-PLA Fluo" + ], + "1528786603": [ + "Snapmaker/Snapmaker J1 PLA Silk" + ], + "16001": [ + "Creality/CR-TPU" + ], + "1655727393": [ + "Snapmaker/Snapmaker PLA Silk" + ], + "168223792": [ + "Snapmaker/Snapmaker Dual ABS", + "Snapmaker/Snapmaker Dual ABS Benchy" + ], + "1682237920": [ + "Snapmaker/Snapmaker ABS", + "Snapmaker/Snapmaker ABS Benchy" + ], + "1695556157": [ + "Snapmaker/Snapmaker PLA Eco" + ], + "17001": [ + "Creality/CR-Wood" + ], + "1702147325": [ + "Snapmaker/Snapmaker Dual PLA-CF" + ], + "17021473250": [ + "Snapmaker/Snapmaker PLA-CF" + ], + "18001": [ + "Creality/HP Ultra PLA" + ], + "1895495477": [ + "Snapmaker/Snapmaker PETG" + ], + "19001": [ + "Creality/Creality Generic ASA", + "Creality/HP-ASA" + ], + "200803790": [ + "Snapmaker/Snapmaker Dual PLA Eco" + ], + "2008037900": [ + "Snapmaker/Snapmaker PLA Eco" + ], + "2029994346": [ + "Snapmaker/Snapmaker Dual PLA Metal" + ], + "20299943460": [ + "Snapmaker/Snapmaker PLA Metal" + ], + "2128577941": [ + "Snapmaker/Snapmaker Dual PET", + "Snapmaker/Snapmaker PET" + ], + "21285779410": [ + "Snapmaker/Snapmaker PET" + ], + "2209001062": [ + "Snapmaker/Snapmaker Dual PETG" + ], + "22090010620": [ + "Snapmaker/Snapmaker PETG" + ], + "2549587591": [ + "Snapmaker/Snapmaker PET" + ], + "2742961008": [ + "Snapmaker/Snapmaker ASA" + ], + "29001": [ + "Creality/Hyper Marble" + ], + "2971656290": [ + "Snapmaker/Snapmaker Dual TPE", + "Snapmaker/Snapmaker Dual TPU", + "Snapmaker/Snapmaker Dual TPU High-Flow" + ], + "29716562900": [ + "Snapmaker/Snapmaker TPE", + "Snapmaker/Snapmaker TPU", + "Snapmaker/Snapmaker TPU High-Flow" + ], + "297165629001": [ + "Snapmaker/Snapmaker TPU 95A" + ], + "3104636980": [ + "Snapmaker/Snapmaker Dual PVA" + ], + "31046369800": [ + "Snapmaker/Snapmaker PVA" + ], + "3177068229": [ + "Snapmaker/Snapmaker PLA" + ], + "3383257822": [ + "Snapmaker/Snapmaker J1 PLA Eco" + ], + "3492897526": [ + "Snapmaker/Snapmaker J1 Breakaway" + ], + "3493177425": [ + "Snapmaker/Snapmaker Dual PA-CF" + ], + "34931774250": [ + "Snapmaker/Snapmaker PA-CF" + ], + "3503790988": [ + "Snapmaker/Snapmaker Dual PLA Matte" + ], + "377675245": [ + "Snapmaker/Snapmaker J1 PLA" + ], + "3806593857": [ + "Snapmaker/Snapmaker J1 PLA-CF" + ], + "3811508002": [ + "Snapmaker/Snapmaker ABS" + ], + "3864371306": [ + "Snapmaker/Snapmaker PLA-CF" + ], + "4012961186": [ + "Snapmaker/Snapmaker J1 PLA Metal" + ], + "4092268632": [ + "Snapmaker/Snapmaker J1 TPE", + "Snapmaker/Snapmaker J1 TPU", + "Snapmaker/Snapmaker J1 TPU High-Flow" + ], + "4227461134": [ + "Snapmaker/Snapmaker Breakaway Support For PLA", + "Snapmaker/Snapmaker J1 PVA" + ], + "4235401834": [ + "Snapmaker/Snapmaker J1 PETG-CF" + ], + "581236806": [ + "Snapmaker/Snapmaker PA-CF" + ], + "AZ01-1": [ + "BBL/AliZ PETG-CF", + "OrcaFilamentLibrary/AliZ PETG-CF" + ], + "AZ01-2": [ + "BBL/AliZ PETG-Metal", + "OrcaFilamentLibrary/AliZ PETG-Metal" + ], + "AliZ001": [ + "BBL/AliZ PETG", + "OrcaFilamentLibrary/AliZ PETG" + ], + "AliZ002": [ + "BBL/AliZ PLA", + "OrcaFilamentLibrary/AliZ PLA" + ], + "AliZ003": [ + "BBL/AliZ PA-CF", + "OrcaFilamentLibrary/AliZ PA-CF" + ], + "BABB00": [ + "BBL/BETA ABS" + ], + "BASB00": [ + "BBL/BETA ASA" + ], + "BFLSBS99": [ + "BBL/Generic SBS" + ], + "BHIB00": [ + "BBL/BETA HIPS" + ], + "BPAB00": [ + "BBL/BETA PAHT-CF" + ], + "BPBB00": [ + "BBL/BETA PEBA 90A" + ], + "BPGB00": [ + "BBL/BETA PETG" + ], + "BPGB01": [ + "BBL/BETA PETG Heat Color Change" + ], + "BPGB02": [ + "BBL/BETA PETG Fluorescence" + ], + "BPGB03": [ + "BBL/BETA PETG Glitter" + ], + "BPGB04": [ + "BBL/BETA PETG Glow" + ], + "BPGB05": [ + "BBL/BETA PETG Gradient" + ], + "BPGB06": [ + "BBL/BETA PETG HF" + ], + "BPGB07": [ + "BBL/BETA PETG Marble" + ], + "BPGB08": [ + "BBL/BETA PETG Matte" + ], + "BPGB09": [ + "BBL/BETA PETG Metallic" + ], + "BPGB10": [ + "BBL/BETA PETG Transparent" + ], + "BPGB11": [ + "BBL/BETA PETG UV Color Change" + ], + "BPGB12": [ + "BBL/BETA PETG-CF" + ], + "BPGB13": [ + "BBL/BETA PETG-GF" + ], + "BPLB00": [ + "BBL/BETA PLA Basic" + ], + "BPLB01": [ + "BBL/BETA PLA Silk+" + ], + "BPLB02": [ + "BBL/BETA PLA Chameleon" + ], + "BPLB03": [ + "BBL/BETA PLA Heat Color Change" + ], + "BPLB04": [ + "BBL/BETA PLA Fluorescence" + ], + "BPLB05": [ + "BBL/BETA PLA Glitter" + ], + "BPLB06": [ + "BBL/BETA PLA Glow" + ], + "BPLB07": [ + "BBL/BETA PLA Gradient" + ], + "BPLB08": [ + "BBL/BETA PLA Marble" + ], + "BPLB09": [ + "BBL/BETA PLA Matte" + ], + "BPLB10": [ + "BBL/BETA PLA Metal" + ], + "BPLB11": [ + "BBL/BETA PLA Metallic" + ], + "BPLB12": [ + "BBL/BETA PLA PRO" + ], + "BPLB13": [ + "BBL/BETA PLA Silk" + ], + "BPLB14": [ + "BBL/BETA PLA Transparent" + ], + "BPLB15": [ + "BBL/BETA PLA UV Color Change" + ], + "BPLB16": [ + "BBL/BETA PLA Youth" + ], + "BPLB17": [ + "BBL/BETA PLA-CF" + ], + "BPLB18": [ + "BBL/BETA PLA High Temp" + ], + "BPLB19": [ + "BBL/BETA PLA Wood" + ], + "BPLB20": [ + "BBL/BETA PLA High Speed" + ], + "BSFI001": [ + "Blocks/Blocks Generic PLA" + ], + "BSFI002": [ + "Blocks/Blocks Generic PETG" + ], + "BSFI003": [ + "Blocks/Blocks Generic TPU" + ], + "BSFI004": [ + "Blocks/Blocks Generic ABS" + ], + "BSFI005": [ + "Blocks/Blocks Generic ASA" + ], + "BSFI006": [ + "Blocks/Blocks Generic PA" + ], + "BSFI007": [ + "Blocks/Blocks Generic PA-CF" + ], + "BSFI008": [ + "Blocks/Blocks Generic PC" + ], + "BSFI009": [ + "Blocks/Blocks Generic PVA" + ], + "BSFI010": [ + "Blocks/Blocks Generic ASA-CF", + "Blocks/Blocks Generic PLA-CF" + ], + "BTUB00": [ + "BBL/BETA TPU 90A" + ], + "BTUB01": [ + "BBL/BETA TPU Matte" + ], + "BTUB02": [ + "BBL/BETA TPU 95A" + ], + "BTUB03": [ + "BBL/BETA TPU 98A" + ], + "CX30DB20": [ + "BBL/COEX TPE 30D", + "OrcaFilamentLibrary/COEX TPE 30D" + ], + "CX40DB20": [ + "BBL/COEX TPE 40D", + "OrcaFilamentLibrary/COEX TPE 40D" + ], + "CX60AB17": [ + "BBL/COEX TPU 60A", + "OrcaFilamentLibrary/COEX TPU 60A" + ], + "CX60DB19": [ + "BBL/COEX TPE 60D", + "OrcaFilamentLibrary/COEX TPE 60D" + ], + "CXABPB09": [ + "BBL/COEX ABS PRIME", + "OrcaFilamentLibrary/COEX ABS PRIME" + ], + "CXABSB01": [ + "BBL/COEX ABS", + "OrcaFilamentLibrary/COEX ABS" + ], + "CXASAB04": [ + "BBL/COEX ASA PRIME", + "OrcaFilamentLibrary/COEX ASA PRIME" + ], + "CXPACB23": [ + "BBL/COEX NYLEX PA6-CF", + "OrcaFilamentLibrary/COEX NYLEX PA6-CF" + ], + "CXPAUB21": [ + "BBL/COEX NYLEX UNFILLED " + ], + "CXPCTB15": [ + "BBL/COEX PCTG PRIME", + "OrcaFilamentLibrary/COEX PCTG PRIME" + ], + "CXPETB13": [ + "BBL/COEX PETG", + "OrcaFilamentLibrary/COEX PETG" + ], + "CXPLAB02": [ + "BBL/COEX PLA", + "OrcaFilamentLibrary/COEX PLA" + ], + "CXPLAB08": [ + "BBL/COEX PLA PRIME", + "OrcaFilamentLibrary/COEX PLA PRIME" + ], + "CXPLSB03": [ + "BBL/COEX PLA+Silk", + "OrcaFilamentLibrary/COEX PLA+Silk" + ], + "DFL99": [ + "Volumic/Désactivé" + ], + "DREMC001": [], + "DREMC002": [], + "DREMC003": [], + "DREMC004": [], + "DREMC005": [], + "DREMC006": [ + "OrcaFilamentLibrary/DREMC PA6-CF" + ], + "DREMC007": [], + "DREMC008": [], + "DREMC009": [ + "OrcaFilamentLibrary/DREMC ABS-GF" + ], + "DREMC010": [ + "OrcaFilamentLibrary/DREMC PPA-CF" + ], + "DREMC011": [], + "DREMC012": [], + "DREMC013": [], + "E1001": [ + "Creality/eSUN PLA+" + ], + "E1002": [ + "Creality/eSUN PLA-Silk" + ], + "E1003": [ + "Creality/eSUN PLA-Matte" + ], + "E1004": [ + "Creality/eSUN PLA-Lite" + ], + "E1005": [ + "Creality/eSUN PLA-CF" + ], + "E1006": [ + "Creality/eSUN PLA-HS" + ], + "E2001": [ + "Creality/eSUN PETG" + ], + "E2002": [ + "Creality/eSUN PETG+HS" + ], + "E2003": [ + "Creality/eSUN PETG-Basic" + ], + "E3001": [ + "Creality/eSUN ABS+" + ], + "E4001": [ + "Creality/eSUN ASA+" + ], + "E8001": [ + "Creality/eSUN PET-Basic" + ], + "EABSB00": [ + "Elegoo/Elegoo ABS" + ], + "EASAB00": [ + "Elegoo/Elegoo ASA", + "Elegoo/Elegoo ASA-CF" + ], + "EFL33": [ + "Eryone/Eryone PP-CF" + ], + "EFL40": [ + "Eryone/Eryone PLA-CF" + ], + "EFL43": [ + "Eryone/Eryone PETG-CF", + "Eryone/Eryone PP" + ], + "EFL71": [ + "Eryone/Eryone PA" + ], + "EFL72": [ + "Eryone/Eryone PA-CF" + ], + "EFL73": [ + "Eryone/Eryone PA-GF" + ], + "EFL81": [ + "Eryone/Eryone ABS-CF" + ], + "EFL82": [ + "Eryone/Eryone ASA-CF" + ], + "EFL90": [ + "Eryone/Eryone PLA" + ], + "EFL91": [ + "Eryone/Eryone ABS" + ], + "EFL92": [ + "Eryone/Eryone ASA" + ], + "EFL93": [ + "Eryone/Eryone PETG" + ], + "EFL941": [ + "Eryone/Eryone Silk PLA" + ], + "EFL95": [ + "Eryone/Eryone TPU" + ], + "EPAHTB00": [ + "Elegoo/Elegoo PAHT-CF" + ], + "EPCB00": [ + "Elegoo/Elegoo PC", + "Elegoo/Elegoo PC-FR" + ], + "EPETGB00": [ + "Elegoo/Elegoo PET-CF", + "Elegoo/Elegoo PETG", + "Elegoo/Elegoo PETG HF", + "Elegoo/Elegoo PETG PRO", + "Elegoo/Elegoo PETG Translucent", + "Elegoo/Elegoo PETG-CF", + "Elegoo/Elegoo PETG-GF", + "Elegoo/Elegoo Rapid PETG" + ], + "EPLAB00": [ + "Elegoo/Elegoo PLA", + "Elegoo/Elegoo PLA Basic", + "Elegoo/Elegoo PLA Galaxy", + "Elegoo/Elegoo PLA Glow", + "Elegoo/Elegoo PLA Marble", + "Elegoo/Elegoo PLA Matte", + "Elegoo/Elegoo PLA PRO", + "Elegoo/Elegoo PLA Silk", + "Elegoo/Elegoo PLA Sparkle", + "Elegoo/Elegoo PLA Translucent2", + "Elegoo/Elegoo PLA Wood", + "Elegoo/Elegoo PLA+", + "Elegoo/Elegoo PLA-CF", + "Elegoo/Elegoo Rapid PLA+" + ], + "ESN02": [ + "OrcaFilamentLibrary/eSUN ePLA-LW" + ], + "ESN03": [ + "OrcaFilamentLibrary/eSUN PETG" + ], + "ETPUB00": [ + "Elegoo/Elegoo Rapid TPU 95A", + "Elegoo/Elegoo TPU 95A" + ], + "FDPLAST01": [ + "OrcaFilamentLibrary/FDplast ABS" + ], + "FDPLAST02": [ + "OrcaFilamentLibrary/FDplast HIPS" + ], + "FDPLAST03": [ + "OrcaFilamentLibrary/FDplast PETG" + ], + "FDPLAST04": [ + "OrcaFilamentLibrary/FDplast PLA" + ], + "FDPLAST05": [ + "OrcaFilamentLibrary/FDplast SBS" + ], + "FDPLAST06": [ + "OrcaFilamentLibrary/FDplast TPU" + ], + "FFF01": [ + "Flashforge/Flashforge PLA" + ], + "FFF02": [ + "Flashforge/Flashforge ABS" + ], + "FFF03": [ + "Flashforge/Flashforge PETG", + "Flashforge/Generic PETG" + ], + "FFG01": [ + "Flashforge/Flashforge Generic PLA", + "Flashforge/Flashforge HS PLA", + "Flashforge/Flashforge HS PLA Burnt Ti", + "Flashforge/Flashforge PA", + "Flashforge/Flashforge PLA Basic", + "Flashforge/Flashforge PLA Buint Ti", + "Flashforge/Flashforge PLA Color Change", + "Flashforge/Flashforge PLA Galaxy", + "Flashforge/Flashforge PLA Luminous", + "Flashforge/Flashforge PLA Matte", + "Flashforge/Flashforge PLA Metal", + "Flashforge/Flashforge PLA Pro", + "Flashforge/Flashforge PLA Silk", + "Flashforge/Flashforge PLA Sparkle", + "Flashforge/Flashforge TPU 65D", + "Flashforge/Flashforge TPU 95A" + ], + "FILAR0001": [ + "OrcaFilamentLibrary/FilAr PLA Bronce" + ], + "FILAR0002": [ + "OrcaFilamentLibrary/FilAr PLA Gris Plata" + ], + "FILAR0003": [ + "OrcaFilamentLibrary/FilAr PLA Cobre" + ], + "FILAR0004": [ + "OrcaFilamentLibrary/FilAr PLA Titanio" + ], + "FILAR0005": [ + "OrcaFilamentLibrary/FilAr PLA Tabaco" + ], + "FILAR0006": [ + "OrcaFilamentLibrary/FilAr PLA Cafe con Leche" + ], + "FILAR0007": [ + "OrcaFilamentLibrary/FilAr PLA Manteca" + ], + "FILAR0008": [ + "OrcaFilamentLibrary/FilAr PLA Marron Oxido" + ], + "FILAR0009": [ + "OrcaFilamentLibrary/FilAr PLA Carpincho" + ], + "FILAR0010": [ + "OrcaFilamentLibrary/FilAr PLA Rosa Amaranto" + ], + "FILAR0011": [ + "OrcaFilamentLibrary/FilAr PLA Rosa Flamenco" + ], + "FILAR0012": [ + "OrcaFilamentLibrary/FilAr PLA Piel" + ], + "FILAR0013": [ + "OrcaFilamentLibrary/FilAr PLA Verde FilAr" + ], + "FILAR0014": [ + "OrcaFilamentLibrary/FilAr PLA Verde Manzana" + ], + "FILAR0015": [ + "OrcaFilamentLibrary/FilAr PLA Verde Pixel" + ], + "FILAR0016": [ + "OrcaFilamentLibrary/FilAr PLA Verde Oliva" + ], + "FILAR0017": [ + "OrcaFilamentLibrary/FilAr PLA Blanco Antartida" + ], + "FILAR0018": [ + "OrcaFilamentLibrary/FilAr PLA Blanco Calido" + ], + "FILAR0019": [ + "OrcaFilamentLibrary/FilAr PLA Negro Azabache" + ], + "FILAR0020": [ + "OrcaFilamentLibrary/FilAr PLA Naranja Tigre" + ], + "FILAR0021": [ + "OrcaFilamentLibrary/FilAr PLA Rojo de Carreras" + ], + "FILAR0022": [ + "OrcaFilamentLibrary/FilAr PLA Amarillo Lirio" + ], + "FILAR0023": [ + "OrcaFilamentLibrary/FilAr PLA Violeta Jacaranda" + ], + "FILAR0024": [ + "OrcaFilamentLibrary/FilAr PLA Gris Pizarra" + ], + "FILAR0025": [ + "OrcaFilamentLibrary/FilAr PLA Gris Ceniza" + ], + "FILAR0026": [ + "OrcaFilamentLibrary/FilAr PLA Azul Francia" + ], + "FILAR0027": [ + "OrcaFilamentLibrary/FilAr PLA Celeste Cielo" + ], + "FILAR0028": [ + "OrcaFilamentLibrary/FilAr PLA Oro" + ], + "FILAR0029": [ + "OrcaFilamentLibrary/FilAr PLA Dorado" + ], + "FILAR0030": [ + "OrcaFilamentLibrary/FilAr PLA-mate Amarillo" + ], + "FILAR0031": [ + "OrcaFilamentLibrary/FilAr PLA-mate Azul" + ], + "FILAR0032": [ + "OrcaFilamentLibrary/FilAr PLA-mate Beige" + ], + "FILAR0033": [ + "OrcaFilamentLibrary/FilAr PLA-mate Blanco" + ], + "FILAR0034": [ + "OrcaFilamentLibrary/FilAr PLA-mate Bordo" + ], + "FILAR0035": [ + "OrcaFilamentLibrary/FilAr PLA-mate Celeste Cielo" + ], + "FILAR0036": [ + "OrcaFilamentLibrary/FilAr PLA-mate Chocolate" + ], + "FILAR0037": [ + "OrcaFilamentLibrary/FilAr PLA-mate Gris" + ], + "FILAR0038": [ + "OrcaFilamentLibrary/FilAr PLA-mate Marron" + ], + "FILAR0039": [ + "OrcaFilamentLibrary/FilAr PLA-mate Naranja" + ], + "FILAR0040": [ + "OrcaFilamentLibrary/FilAr PLA-mate Negro" + ], + "FILAR0041": [ + "OrcaFilamentLibrary/FilAr PLA-mate Piel" + ], + "FILAR0042": [ + "OrcaFilamentLibrary/FilAr PLA-mate Rojo" + ], + "FILAR0043": [ + "OrcaFilamentLibrary/FilAr PLA-mate Rosa" + ], + "FILAR0044": [ + "OrcaFilamentLibrary/FilAr PLA-mate Uva" + ], + "FILAR0045": [ + "OrcaFilamentLibrary/FilAr PLA-mate Verde" + ], + "FILAR0046": [ + "OrcaFilamentLibrary/FilAr PLA-mate Violeta" + ], + "FILAR0047": [ + "OrcaFilamentLibrary/FilAr PETG Amarillo Lima" + ], + "FILAR0048": [ + "OrcaFilamentLibrary/FilAr PETG Amarillo Radiante" + ], + "FILAR0049": [ + "OrcaFilamentLibrary/FilAr PETG Azul Boreal" + ], + "FILAR0050": [ + "OrcaFilamentLibrary/FilAr PETG Azul Francia" + ], + "FILAR0051": [ + "OrcaFilamentLibrary/FilAr PETG Azul Imperial" + ], + "FILAR0052": [ + "OrcaFilamentLibrary/FilAr PETG Blanco Antartida" + ], + "FILAR0053": [ + "OrcaFilamentLibrary/FilAr PETG Cian" + ], + "FILAR0054": [ + "OrcaFilamentLibrary/FilAr PETG Coral" + ], + "FILAR0055": [ + "OrcaFilamentLibrary/FilAr PETG Cristal" + ], + "FILAR0056": [ + "OrcaFilamentLibrary/FilAr PETG Gris Ceniza" + ], + "FILAR0057": [ + "OrcaFilamentLibrary/FilAr PETG Gris Plata" + ], + "FILAR0058": [ + "OrcaFilamentLibrary/FilAr PETG Magenta" + ], + "FILAR0059": [ + "OrcaFilamentLibrary/FilAr PETG Negro Azabache" + ], + "FILAR0060": [ + "OrcaFilamentLibrary/FilAr PETG Rojo Carmesi" + ], + "FILARB01": [], + "FILARB02": [], + "FILARB03": [], + "FILL3D001": [ + "OrcaFilamentLibrary/FILL3D PLA Turbo" + ], + "FILL3D002": [ + "OrcaFilamentLibrary/FILL3D PLA Basic" + ], + "FILL3D003": [ + "OrcaFilamentLibrary/FILL3D PETG" + ], + "FILL3D004": [ + "OrcaFilamentLibrary/FILL3D PP" + ], + "FILL3D005": [ + "OrcaFilamentLibrary/FILL3D PPCF" + ], + "FILL3D006": [ + "OrcaFilamentLibrary/FILL3D PA" + ], + "FILL3D007": [ + "OrcaFilamentLibrary/FILL3D PETG CF" + ], + "GABSB00": [ + "Elegoo/Generic ABS", + "Elegoo/Generic ABS-CF" + ], + "GASAB00": [ + "Elegoo/Generic ASA", + "Elegoo/Generic ASA-CF" + ], + "GFA00": [ + "Afinia/Afinia PLA", + "Afinia/Afinia Value PLA", + "BBL/Bambu PLA Basic", + "OrcaArena/Arena PLA Basic", + "Tiertime/Tiertime PLA", + "WonderMaker/WonderMaker PLA Basic" + ], + "GFA00_01": [ + "Afinia/Afinia PLA", + "Afinia/Afinia Value PLA", + "Tiertime/Tiertime PLA" + ], + "GFA01": [ + "BBL/Bambu PLA Matte", + "OrcaArena/Arena PLA Matte", + "WonderMaker/WonderMaker PLA Matte" + ], + "GFA02": [ + "BBL/Bambu PLA Metal", + "OrcaArena/Arena PLA Metal", + "WonderMaker/WonderMaker PLA Metal" + ], + "GFA03": [ + "OrcaArena/Arena PLA Impact" + ], + "GFA05": [ + "BBL/Bambu PLA Silk", + "OrcaArena/Arena PLA Silk", + "OrcaArena/OrcaArena Generic PLA Silk", + "Qidi/Qidi Generic PLA Silk", + "WonderMaker/WonderMaker PLA Silk" + ], + "GFA06": [ + "BBL/Bambu PLA Silk+" + ], + "GFA07": [ + "BBL/Bambu PLA Marble", + "OrcaArena/Arena PLA Marble", + "WonderMaker/WonderMaker PLA Marble" + ], + "GFA08": [ + "BBL/Bambu PLA Sparkle", + "OrcaArena/Arena PLA Sparkle" + ], + "GFA09": [ + "BBL/Bambu PLA Tough", + "OrcaArena/Arena PLA Tough" + ], + "GFA10": [ + "BBL/Bambu PLA Tough+" + ], + "GFA11": [ + "BBL/Bambu PLA Aero" + ], + "GFA12": [ + "BBL/Bambu PLA Glow" + ], + "GFA13": [ + "BBL/Bambu PLA Dynamic" + ], + "GFA15": [ + "BBL/Bambu PLA Galaxy" + ], + "GFA16": [ + "BBL/Bambu PLA Wood", + "WonderMaker/WonderMaker PLA Wood" + ], + "GFA17": [ + "BBL/Bambu PLA Translucent" + ], + "GFA18": [ + "BBL/Bambu PLA Lite" + ], + "GFA50": [ + "BBL/Bambu PLA-CF", + "OrcaArena/Arena PLA-CF", + "Tiertime/Tiertime PLA-CF" + ], + "GFA50_01": [ + "Tiertime/Tiertime PLA-CF" + ], + "GFA99": [ + "Anycubic/Anycubic ASA", + "CoLiDo/CoLiDo Generic PLA", + "CoLiDo/CoLiDo PLA", + "CoLiDo/CoLiDo PLA Silk", + "CoLiDo/CoLiDo PLA+" + ], + "GFABS": [ + "Anycubic/Anycubic ABS" + ], + "GFASA": [ + "Anycubic/Anycubic ASA" + ], + "GFB00": [ + "Afinia/Afinia ABS", + "Afinia/Afinia ABS+", + "Afinia/Afinia Value ABS", + "BBL/Bambu ABS", + "OrcaArena/Arena ABS", + "Tiertime/Tiertime ABS", + "WonderMaker/WonderMaker ABS" + ], + "GFB00_01": [ + "Afinia/Afinia ABS", + "Afinia/Afinia ABS+", + "Afinia/Afinia Value ABS", + "Tiertime/Tiertime ABS" + ], + "GFB01": [ + "BBL/Bambu ASA", + "Tiertime/Tiertime ASA", + "WonderMaker/WonderMaker ASA" + ], + "GFB01_01": [ + "Tiertime/Tiertime ASA" + ], + "GFB02": [ + "BBL/Bambu ASA-Aero" + ], + "GFB50": [ + "BBL/Bambu ABS-GF" + ], + "GFB51": [ + "BBL/Bambu ASA-CF" + ], + "GFB60": [ + "BBL/PolyLite ABS" + ], + "GFB61": [ + "BBL/PolyLite ASA" + ], + "GFB98": [ + "Anker/Anker Generic ASA", + "Anker/Anker Generic ASA 0.2 nozzle", + "Anker/Anker Generic ASA 0.25 nozzle", + "Anycubic/Anycubic Generic ASA", + "Artillery/Artillery Generic ASA", + "BBL/Generic ASA", + "Creality/Creality Generic ASA", + "Creality/Creality Generic ASA-CF", + "FLSun/FLSun Generic ASA", + "FLSun/FLSun S1 ASA", + "FLSun/FLSun T1 ASA", + "OrcaArena/OrcaArena Generic ASA", + "Prusa/Prusa Generic ASA", + "Prusa/Prusa Generic ASA HF", + "Prusa/Prusament ASA", + "Ratrig/RatRig BigNozzle ASA", + "Ratrig/RatRig Generic ASA", + "SecKit/SecKit Generic ASA", + "Tiertime/Tiertime Generic ASA", + "Vzbot/Vzbot Generic ASA" + ], + "GFB98_01": [ + "Tiertime/Tiertime Generic ASA" + ], + "GFB98_2": [ + "Prusa/Prusa Generic ASA" + ], + "GFB98_3": [ + "Prusa/Prusa Generic ASA" + ], + "GFB98_4": [ + "Prusa/Prusa Generic ASA" + ], + "GFB98_5": [ + "Prusa/Prusa Generic ASA", + "Prusa/Prusa Generic ASA HF" + ], + "GFB98_6": [ + "Prusa/Prusa Generic ASA HF" + ], + "GFB98_7": [ + "Prusa/Prusa Generic ASA HF" + ], + "GFB99": [ + "Anker/Anker Generic ABS", + "Anker/Anker Generic ABS 0.2 nozzle", + "Anker/Anker Generic ABS 0.25 nozzle", + "Anycubic/Anycubic ABS", + "Anycubic/Anycubic Generic ABS", + "Anycubic/Generic ABS", + "Artillery/Artillery Generic ABS", + "BBL/Generic ABS", + "Chuanying/Chuanying ABS", + "Chuanying/Chuanying Generic ABS", + "Chuanying/Chuanying Generic HIPS", + "Chuanying/Chuanying Generic PVA", + "CoLiDo/CoLiDo ABS", + "CoLiDo/CoLiDo Generic ABS", + "Comgrow/Comgrow Generic ABS", + "Creality/Creality Generic ABS", + "DeltaMaker/DeltaMaker Generic TPU", + "FLSun/FLSun Generic ABS", + "FLSun/FLSun S1 ABS", + "FLSun/FLSun T1 ABS", + "Flashforge/FlashForge PC", + "Flashforge/FlashForge PPS", + "Flashforge/FlashForge PPS-CF", + "Flashforge/Flashforge ABS Basic", + "Flashforge/Flashforge ABS-CF", + "Flashforge/Flashforge ASA Basic", + "Flashforge/Flashforge ASA-CF", + "Flashforge/Flashforge Generic ABS", + "Flashforge/Flashforge Generic ASA", + "Flashforge/Flashforge Generic HIPS", + "Flashforge/Flashforge Generic PETG", + "Flashforge/Flashforge Generic PETG-CF", + "Flashforge/Flashforge Generic PLA-CF", + "Flashforge/Flashforge Generic PVA", + "Flashforge/Flashforge HIPS", + "Flashforge/Flashforge HS PETG", + "Flashforge/Flashforge HS PLA", + "Flashforge/Flashforge HS PLA Burnt Ti", + "Flashforge/Flashforge PA", + "Flashforge/Flashforge PA12-CF", + "Flashforge/Flashforge PA6-CF", + "Flashforge/Flashforge PA66-CF", + "Flashforge/Flashforge PET-CF", + "Flashforge/Flashforge PETG Pro", + "Flashforge/Flashforge PETG Transparent", + "Flashforge/Flashforge PETG-CF", + "Flashforge/Flashforge PLA Basic", + "Flashforge/Flashforge PLA Color Change", + "Flashforge/Flashforge PLA Galaxy", + "Flashforge/Flashforge PLA Luminous", + "Flashforge/Flashforge PLA Matte", + "Flashforge/Flashforge PLA Metal", + "Flashforge/Flashforge PLA Pro", + "Flashforge/Flashforge PLA Silk", + "Flashforge/Flashforge PLA Sparkle", + "Flashforge/Flashforge PLA-CF", + "Flashforge/Flashforge PPA-CF", + "Flashforge/Flashforge PPA-GF", + "Flashforge/Flashforge PPS-CF", + "Flashforge/Flashforge TPU 65D", + "Flashforge/Flashforge TPU 95A", + "Flashforge/FusRock Generic NexPA-CF25", + "Flashforge/FusRock Generic PAHT-CF", + "Flashforge/FusRock Generic PAHT-GF", + "Flashforge/FusRock Generic PET-CF", + "Flashforge/FusRock Generic PET-GF", + "Flashforge/FusRock Generic S-Multi", + "Flashforge/FusRock Generic S-PAHT", + "Flashforge/FusRock PAHT", + "Flashforge/FusRock PAHT-CF", + "Flashforge/FusRock PET", + "Flashforge/FusRock PET-CF", + "Flashforge/Generic ABS", + "Flashforge/Generic PET", + "Flashforge/Polymaker CoPA", + "Flashforge/Polymaker Generic CoPA", + "Flashforge/Polymaker Generic S1", + "FlyingBear/FlyingBear ABS", + "FlyingBear/FlyingBear Generic ABS", + "FlyingBear/Other ABS", + "InfiMech/InfiMech ABS", + "InfiMech/InfiMech Generic ABS", + "InfiMech/Other ABS", + "Lulzbot/Lulzbot 2.85mm ABS", + "OrcaArena/OrcaArena Generic ABS", + "Prusa/Prusa Generic ABS", + "Prusa/Prusa Generic ABS HF", + "Qidi/Bambu ABS", + "Qidi/Bambu PETG", + "Qidi/Bambu PLA", + "Qidi/HATCHBOX ABS", + "Qidi/HATCHBOX PETG", + "Qidi/HATCHBOX PLA", + "Qidi/Overture ABS", + "Qidi/Overture PLA", + "Qidi/PolyLite ABS", + "Qidi/PolyLite PLA", + "Qidi/QIDI ABS Odorless", + "Qidi/QIDI ABS Rapido", + "Qidi/QIDI ABS Rapido 0.2 nozzle", + "Qidi/QIDI ABS Rapido 0.6 nozzle", + "Qidi/QIDI ABS Rapido 0.8 nozzle", + "Qidi/QIDI ABS Rapido Metal", + "Qidi/QIDI ABS-GF", + "Qidi/QIDI ABS-GF10", + "Qidi/QIDI ABS-GF25", + "Qidi/QIDI ASA", + "Qidi/QIDI ASA-CF", + "Qidi/QIDI PA-Ultra", + "Qidi/QIDI PA12-CF", + "Qidi/QIDI PAHT-CF", + "Qidi/QIDI PAHT-GF", + "Qidi/QIDI PEBA 95A", + "Qidi/QIDI PET-CF", + "Qidi/QIDI PET-GF", + "Qidi/QIDI PETG Basic", + "Qidi/QIDI PETG Rapido", + "Qidi/QIDI PETG Tough", + "Qidi/QIDI PETG Translucent", + "Qidi/QIDI PETG-CF", + "Qidi/QIDI PETG-GF", + "Qidi/QIDI PLA Basic", + "Qidi/QIDI PLA Matte Basic", + "Qidi/QIDI PLA Rapido", + "Qidi/QIDI PLA Rapido Matte", + "Qidi/QIDI PLA Rapido Metal", + "Qidi/QIDI PLA Rapido Silk", + "Qidi/QIDI PPS-CF", + "Qidi/QIDI PPS-GF", + "Qidi/QIDI TPU-Aero", + "Qidi/QIDI TPU-GF", + "Qidi/QIDI UltraPA-CF25", + "Qidi/QIDI WOOD Rapido", + "Qidi/Qidi ASA-Aero", + "Qidi/Qidi Generic ABS", + "Qidi/Qidi Generic ASA", + "Qidi/Qidi Generic PETG", + "Qidi/Qidi Generic PLA", + "Qidi/Qidi Generic PLA+", + "Qidi/Qidi Generic TPU", + "Qidi/Qidi Generic TPU 95A", + "Qidi/Qidi PC-ABS-FR", + "Qidi/Qidi TPU 95A-HF", + "Ratrig/RatRig BigNozzle ABS", + "Ratrig/RatRig Generic ABS", + "Ratrig/RatRig PunkFil ABS", + "Ratrig/RatRig PunkFil PETG", + "Ratrig/RatRig PunkFil PETG CF", + "SecKit/SecKit Generic ABS", + "Tiertime/Tiertime Generic ABS", + "Volumic/Volumic ABS Ultra", + "Volumic/Volumic ABS Ultra (Performance)", + "Volumic/Volumic ASA Ultra", + "Volumic/Volumic ASA Ultra (Performance)", + "Volumic/Volumic PP Ultra", + "Volumic/Volumic PP Ultra (Performance)", + "Vzbot/Vzbot Generic ABS" + ], + "GFB99_01": [ + "Tiertime/Tiertime Generic ABS" + ], + "GFB99_2": [ + "Prusa/Prusa Generic ABS" + ], + "GFB99_3": [ + "Prusa/Prusa Generic ABS" + ], + "GFB99_4": [ + "Prusa/Prusa Generic ABS" + ], + "GFB99_5": [ + "Prusa/Prusa Generic ABS", + "Prusa/Prusa Generic ABS HF" + ], + "GFB99_6": [ + "Prusa/Prusa Generic ABS HF" + ], + "GFB99_7": [ + "Prusa/Prusa Generic ABS HF" + ], + "GFC00": [ + "BBL/Bambu PC", + "OrcaArena/Arena PC", + "Tiertime/Tiertime PC" + ], + "GFC00_01": [ + "Tiertime/Tiertime PC" + ], + "GFC01": [ + "BBL/Bambu PC FR" + ], + "GFC98": [ + "Prusa/Prusament PC-CF" + ], + "GFC99": [ + "Anker/Anker Generic PC", + "Anker/Anker Generic PC 0.2 nozzle", + "Anker/Anker Generic PC 0.25 nozzle", + "Anycubic/Anycubic Generic PC", + "BBL/Generic PC", + "Creality/Creality Generic PC", + "Custom/Generic PC", + "FLSun/FLSun Generic PC", + "FlyingBear/FlyingBear Generic PC", + "FlyingBear/FlyingBear PC", + "FlyingBear/Other PC", + "InfiMech/InfiMech Generic PC", + "InfiMech/InfiMech PC", + "InfiMech/Other PC", + "OrcaArena/OrcaArena Generic PC", + "Prusa/Prusa Generic PC", + "Prusa/Prusa Generic PC HF", + "Prusa/Prusament PC Blend", + "Qidi/Qidi Generic PC", + "Ratrig/RatRig BigNozzle PCTG", + "Ratrig/RatRig Generic PC", + "Ratrig/RatRig Generic PCTG", + "SecKit/SecKit Generic PC", + "Tiertime/Tiertime Generic PC", + "Volumic/Volumic PC", + "Volumic/Volumic PC (Performance)", + "Vzbot/Vzbot Generic PC" + ], + "GFC99_01": [ + "Tiertime/Tiertime Generic PC" + ], + "GFC99_1": [ + "Prusa/Prusa Generic PC" + ], + "GFC99_2": [ + "Prusa/Prusa Generic PC" + ], + "GFC99_3": [ + "Prusa/Prusa Generic PC" + ], + "GFC99_4": [ + "Prusa/Prusa Generic PC", + "Prusa/Prusa Generic PC HF" + ], + "GFC99_5": [ + "Prusa/Prusa Generic PC HF" + ], + "GFC99_6": [ + "Prusa/Prusa Generic PC HF" + ], + "GFG00": [ + "BBL/Bambu PETG Basic", + "OrcaArena/Arena PETG Basic", + "Tiertime/Tiertime PETG", + "WonderMaker/WonderMaker PETG Basic" + ], + "GFG00_01": [ + "Tiertime/Tiertime PETG" + ], + "GFG01": [ + "BBL/Bambu PETG Translucent", + "re3D/re3D Greengate rPETG" + ], + "GFG02": [ + "BBL/Bambu PETG HF", + "re3D/re3D rPP" + ], + "GFG03": [ + "re3D/re3D PETG" + ], + "GFG50": [ + "BBL/Bambu PETG-CF", + "OrcaArena/Arena PETG-CF" + ], + "GFG60": [ + "BBL/PolyLite PETG", + "Snapmaker/PolyLite PETG" + ], + "GFG96": [ + "BBL/Generic PETG HF" + ], + "GFG97": [ + "BBL/Generic PCTG", + "Tiertime/Tiertime Generic PCTG" + ], + "GFG97-01": [ + "Tiertime/Tiertime Generic PCTG" + ], + "GFG98": [ + "Anker/Anker Generic PETG-CF", + "BBL/Generic PETG-CF", + "OrcaArena/OrcaArena Generic PETG-CF", + "Qidi/Qidi Generic PETG-CF", + "Tiertime/Tiertime Generic PETG-CF", + "Volumic/Volumic PETG Ultra carbone", + "Volumic/Volumic PETG Ultra carbone (Performance)" + ], + "GFG98_01": [ + "Tiertime/Tiertime Generic PETG-CF" + ], + "GFG99": [ + "Anker/Anker Generic PETG", + "Anker/Anker Generic PETG 0.2 nozzle", + "Anker/Anker Generic PETG 0.25 nozzle", + "Anycubic/Anycubic Generic PETG", + "Anycubic/Anycubic PETG", + "Anycubic/Generic PETG Basic", + "Artillery/Artillery Generic PETG", + "BBL/Generic PETG", + "CONSTRUCT3D/C1 Generic High Flow PETG", + "CONSTRUCT3D/C1 Generic PETG", + "Chuanying/Chuanying Generic PETG", + "Chuanying/Chuanying Generic PETG-CF10", + "Chuanying/Chuanying Generic TPU", + "Chuanying/Chuanying PETG", + "CoLiDo/CoLiDo Generic PETG", + "CoLiDo/CoLiDo PETG", + "Comgrow/Comgrow Generic PETG", + "Creality/Creality Generic PETG", + "Creality/Creality Generic PETG-CF", + "Custom/Generic PETG", + "DeltaMaker/DeltaMaker Generic PETG", + "FLSun/FLSun Generic PETG", + "FLSun/FLSun S1 PETG", + "FLSun/FLSun T1 PETG", + "Flashforge/Flashforge Generic PETG", + "Flashforge/Flashforge Generic PETG-CF10", + "Flashforge/Flashforge Generic TPU", + "Flashforge/Flashforge HS PETG", + "Flashforge/Flashforge PA", + "Flashforge/Flashforge PETG Basic", + "Flashforge/Flashforge PETG Pro", + "Flashforge/Flashforge PETG Transparent", + "Flashforge/Flashforge PETG-CF", + "Flashforge/Flashforge TPU 95A", + "Flashforge/FusRock PET-CF", + "Flashforge/Generic PET", + "Flashforge/Generic PETG", + "Flashforge/Generic PETG-CF10", + "Flashforge/Generic TPU", + "Flashforge/Generic TPU 85A", + "FlyingBear/FlyingBear Generic PETG", + "FlyingBear/FlyingBear PETG", + "FlyingBear/FlyingBear PETG Basic", + "FlyingBear/Other PETG", + "InfiMech/InfiMech Generic PETG", + "InfiMech/InfiMech PETG", + "InfiMech/Other PETG", + "Lulzbot/Lulzbot 2.85mm PETG", + "MagicMaker/MM Generic PEEK", + "OrcaArena/OrcaArena Generic PETG", + "Qidi/Bambu PETG", + "Qidi/HATCHBOX PETG", + "Qidi/QIDI PETG Basic", + "Qidi/QIDI PETG Rapido", + "Qidi/QIDI PETG Tough", + "Qidi/QIDI PETG Tough 0.2 nozzle", + "Qidi/QIDI PETG Tough 0.6 nozzle", + "Qidi/QIDI PETG Tough 0.8 nozzle", + "Qidi/QIDI PETG Translucent", + "Qidi/Qidi Generic PETG", + "Qidi/Tinmorry PETG-ECO", + "Ratrig/RatRig BigNozzle PETG", + "Ratrig/RatRig Generic PETG", + "SecKit/SecKit Generic PETG", + "Tiertime/Tiertime Generic PETG", + "Volumic/PETG ESD (Performance)", + "Volumic/Volumic PCTG Ultra (Performance)", + "Volumic/Volumic PETG Ultra", + "Volumic/Volumic PETG Ultra (Performance)", + "Vzbot/Vzbot Generic PETG", + "Wanhao France/YUMI PETG", + "re3D/re3D PC" + ], + "GFG99_01": [ + "Tiertime/Tiertime Generic PETG" + ], + "GFG99_2": [ + "Prusa/Prusa Generic PETG" + ], + "GFG99_3": [ + "Prusa/Prusa Generic PETG" + ], + "GFG99_4": [ + "Prusa/Prusa Generic PETG" + ], + "GFG99_5": [ + "Prusa/Prusa Generic PETG", + "Prusa/Prusa Generic PETG HF" + ], + "GFG99_6": [ + "Prusa/Prusa Generic PETG HF" + ], + "GFG99_7": [ + "Prusa/Prusa Generic PETG HF" + ], + "GFL00": [ + "BBL/PolyLite PLA", + "OrcaArena/PolyLite PLA", + "Snapmaker/PolyLite PLA" + ], + "GFL01": [ + "BBL/PolyTerra PLA", + "OrcaArena/PolyTerra PLA", + "Snapmaker/PolyTerra PLA" + ], + "GFL03": [ + "BBL/eSUN PLA+" + ], + "GFL04": [ + "BBL/Overture PLA" + ], + "GFL05": [ + "BBL/Overture Matte PLA" + ], + "GFL06": [ + "BBL/Fiberon PETG-ESD", + "Snapmaker/Fiberon PETG-ESD" + ], + "GFL100": [ + "TwoTrees/TwoTrees Generic HS PLA", + "Z-Bolt/Generic PLA" + ], + "GFL106": [ + "Z-Bolt/Generic PLA" + ], + "GFL108": [ + "Z-Bolt/Generic PLA" + ], + "GFL200": [], + "GFL204": [ + "Z-Bolt/Generic ABS" + ], + "GFL206": [ + "Z-Bolt/Generic ABS" + ], + "GFL208": [ + "Z-Bolt/Generic ABS" + ], + "GFL300": [], + "GFL304": [ + "Z-Bolt/Generic PETG" + ], + "GFL306": [ + "Z-Bolt/Generic PETG" + ], + "GFL308": [ + "Z-Bolt/Generic PETG" + ], + "GFL400": [], + "GFL404": [ + "Z-Bolt/Generic PA" + ], + "GFL406": [ + "Z-Bolt/Generic PA" + ], + "GFL408": [ + "Z-Bolt/Generic PA" + ], + "GFL50": [ + "BBL/Fiberon PA6-CF" + ], + "GFL500": [], + "GFL504": [ + "Z-Bolt/Generic ABS HT" + ], + "GFL506": [ + "Z-Bolt/Generic ABS HT" + ], + "GFL508": [ + "Z-Bolt/Generic ABS HT" + ], + "GFL51": [ + "BBL/Fiberon PA6-GF" + ], + "GFL52": [ + "BBL/Fiberon PA12-CF" + ], + "GFL53": [ + "BBL/Fiberon PA612-CF" + ], + "GFL54": [ + "BBL/Fiberon PET-CF" + ], + "GFL55": [ + "BBL/Fiberon PETG-rCF" + ], + "GFL56": [ + "BBL/Fiberon PA12-CF10", + "Snapmaker/Fiberon PA12-CF10" + ], + "GFL57": [ + "Anycubic/Fiberon PA6-CF20", + "BBL/Fiberon PA6-CF20", + "Snapmaker/Fiberon PA6-CF20" + ], + "GFL58": [ + "BBL/Fiberon PA6-GF25" + ], + "GFL59": [ + "BBL/Fiberon PA612-CF15" + ], + "GFL60": [ + "BBL/Fiberon PET-CF17" + ], + "GFL61": [ + "BBL/Fiberon PETG-rCF08" + ], + "GFL62": [ + "BBL/PolyLite CosPLA", + "Snapmaker/PolyLite CosPLA" + ], + "GFL63": [ + "BBL/PolyLite PLA Galaxy", + "Snapmaker/PolyLite PLA Galaxy" + ], + "GFL64": [ + "BBL/PolyLite PLA Glow", + "Snapmaker/PolyLite PLA Glow" + ], + "GFL65": [ + "BBL/PolyLite PLA Luminous", + "Snapmaker/PolyLite PLA Luminous" + ], + "GFL66": [ + "BBL/PolyLite PLA Neon", + "Snapmaker/PolyLite PLA Neon" + ], + "GFL67": [ + "BBL/PolyLite PLA Starlight", + "Snapmaker/PolyLite PLA Starlight" + ], + "GFL68": [ + "BBL/PolyLite PLA Translucent", + "Snapmaker/PolyLite PLA Translucent" + ], + "GFL69": [ + "BBL/PolyTerra PLA Marble", + "Snapmaker/PolyTerra PLA Marble" + ], + "GFL70": [ + "BBL/PolyTerra PLA+", + "Snapmaker/PolyTerra PLA+" + ], + "GFL71": [ + "Snapmaker/Fiberon ASA-CF08" + ], + "GFL72": [ + "Snapmaker/Fiberon PA612-ESD" + ], + "GFL73": [ + "Snapmaker/Fiberon PPS-GF20" + ], + "GFL74": [ + "Snapmaker/PolyLite PETG Translucent" + ], + "GFL75": [ + "Snapmaker/PolyLite PLA Pro Metallic" + ], + "GFL76": [ + "Snapmaker/Polymaker PETG" + ], + "GFL77": [ + "Snapmaker/Polymaker PETG Galaxy" + ], + "GFL78": [ + "Snapmaker/Polymaker PLA" + ], + "GFL79": [ + "Anycubic/Polymaker PLA Pro", + "Snapmaker/Polymaker PLA Pro" + ], + "GFL80": [ + "Anycubic/Polymaker PLA Pro Metallic", + "Snapmaker/Polymaker PLA Pro Metallic" + ], + "GFL92": [ + "Anycubic/Anycubic PLA" + ], + "GFL93": [ + "Anycubic/Anycubic PLA+" + ], + "GFL94": [ + "Anycubic/Anycubic PLA Slik" + ], + "GFL95": [ + "Anker/Anker Generic PLA+", + "Anker/Anker Generic PLA+ 0.2 nozzle", + "Anker/Anker Generic PLA+ 0.25 nozzle", + "Anycubic/Anycubic PLA Matte", + "BBL/Generic PLA High Speed", + "Tiertime/Tiertime Generic PLA High Speed" + ], + "GFL95_01": [ + "Tiertime/Tiertime Generic PLA High Speed" + ], + "GFL96": [ + "Anker/Anker Generic PLA Silk", + "Anker/Anker Generic PLA Silk 0.2 nozzle", + "Anker/Anker Generic PLA Silk 0.25 nozzle", + "Anycubic/Anycubic PLA High Speed", + "BBL/Generic PLA Silk", + "Tiertime/Tiertime Generic PLA Silk" + ], + "GFL96_01": [ + "Tiertime/Tiertime Generic PLA Silk" + ], + "GFL97": [ + "Anycubic/Anycubic PLA SE" + ], + "GFL98": [ + "Anker/Anker Generic PLA-CF", + "Anycubic/Anycubic Generic PLA-CF", + "Anycubic/Anycubic PLA Glow", + "Artillery/Artillery Generic PLA-CF", + "BBL/Generic PLA-CF", + "Creality/Creality Generic PLA-CF", + "Custom/Generic PLA-CF", + "FLSun/FLSun Generic PLA-CF", + "OrcaArena/OrcaArena Generic PLA-CF", + "Qidi/QIDI PAHT-GF", + "Qidi/QIDI PLA-CF", + "Qidi/Qidi Generic PLA-CF", + "Qidi/Qidi PLA-CF", + "Ratrig/RatRig Generic PLA-CF", + "SecKit/SecKit Generic PLA-CF", + "Tiertime/Tiertime Generic PLA-CF", + "Vzbot/Vzbot Generic PLA-CF" + ], + "GFL98_01": [ + "Tiertime/Tiertime Generic PLA-CF" + ], + "GFL98_1": [ + "Prusa/Prusa Generic PLA-CF" + ], + "GFL98_3": [ + "Prusa/Prusa Generic PLA-CF" + ], + "GFL98_4": [ + "Prusa/Prusa Generic PLA-CF" + ], + "GFL98_5": [ + "Prusa/Prusa Generic PLA-CF" + ], + "GFL99": [ + "Anker/Anker Generic PLA", + "Anker/Anker Generic PLA 0.2 nozzle", + "Anker/Anker Generic PLA 0.25 nozzle", + "Anycubic/Anycubic Generic PLA", + "Anycubic/Anycubic PLA", + "Anycubic/Anycubic PLA High Speed", + "Anycubic/Anycubic PLA Luminous", + "Anycubic/Anycubic PLA Matte", + "Anycubic/Anycubic PLA Silk", + "Anycubic/Anycubic PLA+", + "Artillery/Artillery ABS", + "Artillery/Artillery ASA", + "Artillery/Artillery Generic PLA", + "Artillery/Artillery PA", + "Artillery/Artillery PA-CF", + "Artillery/Artillery PC", + "Artillery/Artillery PET", + "Artillery/Artillery PETG", + "Artillery/Artillery PETG Basic", + "Artillery/Artillery PETG-CF", + "Artillery/Artillery PLA Basic", + "Artillery/Artillery PLA Basic+", + "Artillery/Artillery PLA Matte", + "Artillery/Artillery PLA Silk", + "Artillery/Artillery PLA Tough", + "Artillery/Artillery PLA-CF", + "Artillery/Artillery PVA", + "Artillery/Artillery TPU", + "BBL/Generic PLA", + "CONSTRUCT3D/C1 Generic PLA", + "Chuanying/Chuanying ASA", + "Chuanying/Chuanying Generic ASA", + "Chuanying/Chuanying Generic HS PLA", + "Chuanying/Chuanying Generic PLA", + "Chuanying/Chuanying Generic PLA-CF10", + "Chuanying/Chuanying Generic PLA-Silk", + "Chuanying/Chuanying HS PLA", + "Chuanying/Chuanying PLA", + "Chuanying/Chuanying PLA-SILK", + "Co Print/CoPrint Generic ABS", + "Co Print/CoPrint Generic PETG", + "Co Print/CoPrint Generic PLA", + "Co Print/CoPrint Generic TPU", + "Comgrow/Comgrow Generic PLA", + "Comgrow/Comgrow T300 PLA", + "Creality/Creality Generic PLA", + "Creality/Creality Generic PLA High Speed", + "Creality/Creality Generic PLA Matte", + "Creality/Creality Generic PLA Silk", + "Creality/Creality Generic PLA Wood", + "Creality/Creality HF Generic PLA", + "Creality/Creality HF Generic Speed PLA", + "Custom/Generic PLA", + "DeltaMaker/DeltaMaker Brand PLA", + "DeltaMaker/DeltaMaker Generic PLA", + "Dremel/Dremel Generic PLA", + "FLSun/FLSun Generic PLA", + "FLSun/FLSun S1 PLA Generic", + "FLSun/FLSun S1 PLA High Speed", + "FLSun/FLSun S1 PLA Silk", + "FLSun/FLSun T1 PLA Generic", + "FLSun/FLSun T1 PLA High Speed", + "FLSun/FLSun T1 PLA Silk", + "Flashforge/Flashforge ASA Basic", + "Flashforge/Flashforge Generic ASA", + "Flashforge/Flashforge Generic HS PLA", + "Flashforge/Flashforge Generic PLA-CF10", + "Flashforge/Flashforge Generic PLA-SILK", + "Flashforge/Flashforge Generic PLA-Silk", + "Flashforge/Flashforge HIPS", + "Flashforge/Flashforge HS PLA", + "Flashforge/Flashforge PA-CF", + "Flashforge/Flashforge PAHT-CF", + "Flashforge/Flashforge PLA Basic", + "Flashforge/Flashforge PLA Color Change", + "Flashforge/Flashforge PLA Galaxy", + "Flashforge/Flashforge PLA Luminous", + "Flashforge/Flashforge PLA Matte", + "Flashforge/Flashforge PLA Metal", + "Flashforge/Flashforge PLA Pro", + "Flashforge/Flashforge PLA Silk", + "Flashforge/Flashforge PLA Sparkle", + "Flashforge/Flashforge PLA-CF", + "Flashforge/Flashforge PPS", + "Flashforge/Flashforge PPS-CF", + "Flashforge/FusRock PAHT-CF", + "Flashforge/Generic ASA", + "Flashforge/Generic PLA", + "Flashforge/Generic PLA High Speed", + "Flashforge/Generic PLA Silk", + "Flashforge/Generic PLA-CF10", + "FlyingBear/FlyingBear Generic PLA", + "FlyingBear/FlyingBear PLA", + "FlyingBear/FlyingBear PLA Basic", + "FlyingBear/FlyingBear PLA Hyper", + "FlyingBear/Other PLA", + "FlyingBear/Other PLA Hyper", + "InfiMech/InfiMech Generic PLA", + "InfiMech/InfiMech PLA", + "InfiMech/InfiMech PLA Basic", + "InfiMech/InfiMech PLA Hyper", + "InfiMech/Other PLA", + "InfiMech/Other PLA Hyper", + "Lulzbot/Lulzbot 2.85mm PLA", + "OrcaArena/OrcaArena Generic PLA", + "Peopoly/Peopoly Generic PLA", + "Peopoly/Peopoly Lancer ABS-GF", + "Peopoly/Peopoly Lancer PET-CF", + "Peopoly/Peopoly Lancer PETG-C", + "Peopoly/Peopoly Lancer PLA-C", + "Phrozen/Phrozen PLA", + "Prusa/Prusa Generic PLA", + "Prusa/Prusa Generic PLA HF", + "Prusa/Prusa Generic PLA-CF", + "Prusa/Prusament PLA", + "Prusa/Prusament rPLA", + "Qidi/Bambu PLA", + "Qidi/Generic PLA+", + "Qidi/HATCHBOX PLA", + "Qidi/Overture PLA", + "Qidi/PolyLite PLA", + "Qidi/QIDI PLA Basic", + "Qidi/QIDI PLA Matte Basic", + "Qidi/QIDI PLA Rapido", + "Qidi/QIDI PLA Rapido 0.2 nozzle", + "Qidi/QIDI PLA Rapido 0.8 nozzle", + "Qidi/QIDI PLA Rapido Matte", + "Qidi/QIDI PLA Rapido Metal", + "Qidi/QIDI PLA Rapido Silk", + "Qidi/QIDI WOOD Rapido", + "Qidi/Qidi Generic PLA", + "Qidi/Qidi Generic PLA High Speed", + "Qidi/Qidi Generic PLA+", + "Ratrig/RatRig BigNozzle PLA", + "Ratrig/RatRig BigNozzle TPU", + "Ratrig/RatRig Generic PLA", + "SecKit/SecKit Generic PLA", + "Sovol/Generic ABS", + "Sovol/Generic PC", + "Sovol/Generic PETG", + "Sovol/Generic PLA", + "Sovol/Generic PLA Silk", + "Sovol/Generic TPU", + "Sovol/Polymaker PETG", + "Sovol/SUNLU PETG", + "Sovol/Sovol SV06 ACE ABS", + "Sovol/Sovol SV06 ACE PETG", + "Sovol/Sovol SV06 ACE PLA", + "Sovol/Sovol SV06 ACE TPU", + "Sovol/Sovol SV06 Plus ACE ABS", + "Sovol/Sovol SV06 Plus ACE PETG", + "Sovol/Sovol SV06 Plus ACE PLA", + "Sovol/Sovol SV06 Plus ACE TPU", + "Sovol/Sovol SV07 PLA", + "Sovol/Sovol SV08 ABS", + "Sovol/Sovol SV08 PETG", + "Sovol/Sovol SV08 PLA", + "Sovol/Sovol SV08 TPU", + "Sovol/Sovol Zero ABS", + "Sovol/Sovol Zero PC", + "Sovol/Sovol Zero PETG", + "Sovol/Sovol Zero PETG HS Nozzle", + "Sovol/Sovol Zero PLA Basic", + "Sovol/Sovol Zero PLA Basic HS Nozzle", + "Sovol/Sovol Zero PLA Silk", + "Sovol/Sovol Zero PLA Silk HS Nozzle", + "Sovol/Sovol Zero TPU", + "Tiertime/Tiertime Generic PLA", + "Tiertime/Tiertime Generic SBS", + "Volumic/Volumic PLA Ultra", + "Volumic/Volumic PLA Ultra (Performance)", + "Volumic/Volumic UNIVERSAL Ultra", + "Volumic/Volumic UNIVERSAL Ultra (Performance)", + "Vzbot/Vzbot Generic PLA", + "re3D/re3D PLA" + ], + "GFL99_01": [ + "Tiertime/Tiertime Generic PLA", + "Tiertime/Tiertime Generic SBS" + ], + "GFL99_2": [ + "Prusa/Prusa Generic PLA" + ], + "GFL99_3": [ + "Prusa/Prusa Generic PLA" + ], + "GFL99_4": [ + "Prusa/Prusa Generic PLA" + ], + "GFL99_5": [ + "Prusa/Prusa Generic PLA", + "Prusa/Prusa Generic PLA HF" + ], + "GFL99_6": [ + "Prusa/Prusa Generic PLA HF" + ], + "GFL99_7": [ + "Prusa/Prusa Generic PLA HF" + ], + "GFLLK10PETG": [ + "LONGER/Generic PETG" + ], + "GFLLK10PLA": [ + "LONGER/Generic PLA" + ], + "GFLLK10PPETG": [ + "LONGER/Generic PETG" + ], + "GFLLK10PPLA": [ + "LONGER/Generic PLA" + ], + "GFLSBS99": [], + "GFN03": [ + "BBL/Bambu PA-CF", + "OrcaArena/Arena PA-CF" + ], + "GFN04": [ + "BBL/Bambu PAHT-CF", + "OrcaArena/Arena PAHT-CF" + ], + "GFN05": [ + "BBL/Bambu PA6-CF", + "Tiertime/Tiertime PA6-CF" + ], + "GFN05_01": [ + "Tiertime/Tiertime PA6-CF" + ], + "GFN06": [ + "BBL/Bambu PPA-CF" + ], + "GFN08": [ + "BBL/Bambu PA6-GF" + ], + "GFN96": [ + "BBL/Generic PPA-GF", + "Tiertime/Tiertime Generic PPA-GF" + ], + "GFN96_01": [ + "Tiertime/Tiertime Generic PPA-GF" + ], + "GFN97": [ + "BBL/Generic PPA-CF", + "Tiertime/Tiertime Generic PPA-CF" + ], + "GFN97_01": [ + "Tiertime/Tiertime Generic PPA-CF" + ], + "GFN98": [ + "Anker/Anker Generic PA-CF", + "Anycubic/Anycubic Generic PA-CF", + "BBL/Generic PA-CF", + "Creality/Creality Generic PA-CF", + "FLSun/FLSun Generic PA-CF", + "FlyingBear/FlyingBear Generic PA-CF", + "FlyingBear/FlyingBear PA-CF", + "FlyingBear/Other PA-CF", + "InfiMech/InfiMech Generic PA-CF", + "InfiMech/InfiMech PA-CF", + "InfiMech/Other PA-CF", + "OrcaArena/OrcaArena Generic PA-CF", + "Prusa/Prusament PA-CF", + "Qidi/QIDI PA12-CF", + "Qidi/QIDI PAHT-CF", + "Qidi/QIDI PAHT-GF", + "Qidi/QIDI PET-CF", + "Qidi/QIDI PET-GF", + "Qidi/QIDI PETG-CF", + "Qidi/QIDI PETG-GF", + "Qidi/QIDI PPS-CF", + "Qidi/QIDI Support For PAHT", + "Qidi/QIDI Support For PET/PA", + "Qidi/QIDI UltraPA-CF25", + "Qidi/Qidi Generic PA-CF", + "Ratrig/RatRig Generic PA-CF", + "SecKit/SecKit Generic PA-CF", + "Tiertime/Tiertime Generic PA-CF", + "Vzbot/Vzbot Generic PA-CF" + ], + "GFN98_02": [ + "Tiertime/Tiertime Generic PA-CF" + ], + "GFN98_1": [ + "Prusa/Prusa Generic PA-CF" + ], + "GFN98_2": [ + "Prusa/Prusa Generic PA-CF" + ], + "GFN98_3": [ + "Prusa/Prusa Generic PA-CF" + ], + "GFN98_4": [ + "Prusa/Prusa Generic PA-CF" + ], + "GFN99": [ + "Anker/Anker Generic PA", + "Anker/Anker Generic PA 0.2 nozzle", + "Anker/Anker Generic PA 0.25 nozzle", + "Anycubic/Anycubic Generic PA", + "BBL/Generic PA", + "FLSun/FLSun Generic PA", + "OrcaArena/OrcaArena Generic PA", + "Prusa/Prusa Generic PA", + "Prusa/Prusa Generic PA-CF", + "Qidi/QIDI PA-Ultra", + "Qidi/Qidi Generic PA", + "Ratrig/RatRig Generic PA", + "SecKit/SecKit Generic PA", + "Tiertime/Tiertime Generic PA", + "Volumic/PA6 CF20 (Performance)", + "Volumic/PPS Carbone (Performance)", + "Volumic/Volumic NYLON Ultra", + "Volumic/Volumic NYLON Ultra (Performance)", + "Vzbot/Vzbot Generic PA" + ], + "GFN99_01": [ + "Tiertime/Tiertime Generic PA" + ], + "GFN99_1": [ + "Prusa/Prusa Generic PA" + ], + "GFN99_2": [ + "Prusa/Prusa Generic PA" + ], + "GFN99_3": [ + "Prusa/Prusa Generic PA" + ], + "GFN99_4": [ + "Prusa/Prusa Generic PA" + ], + "GFNMK00": [ + "BBL/Numakers PLA+" + ], + "GFOT001": [ + "BBL/Overture PLA Pro", + "OrcaFilamentLibrary/Overture PLA Pro" + ], + "GFOT002": [ + "BBL/Overture Silk PLA", + "OrcaFilamentLibrary/Overture Silk PLA" + ], + "GFOT003": [ + "BBL/Overture Easy PLA", + "OrcaFilamentLibrary/Overture Easy PLA" + ], + "GFOT004": [ + "BBL/Overture Rock PLA", + "OrcaFilamentLibrary/Overture Rock PLA" + ], + "GFOT005": [ + "BBL/Overture Super PLA+", + "OrcaFilamentLibrary/Overture Super PLA+" + ], + "GFOT006": [ + "BBL/Overture Air PLA", + "OrcaFilamentLibrary/Overture Air PLA" + ], + "GFOT008": [ + "BBL/Overture TPU", + "OrcaFilamentLibrary/Overture TPU" + ], + "GFOT009": [ + "BBL/Overture ASA", + "OrcaFilamentLibrary/Overture ASA" + ], + "GFP95": [ + "BBL/Generic PP-GF", + "Tiertime/Tiertime Generic PP-GF" + ], + "GFP95_01": [ + "Tiertime/Tiertime Generic PP-GF" + ], + "GFP96": [ + "BBL/Generic PP-CF", + "Tiertime/Tiertime Generic PP-CF" + ], + "GFP96_01": [ + "Tiertime/Tiertime Generic PP-CF" + ], + "GFP97": [ + "BBL/Generic PP", + "Tiertime/Tiertime Generic PP" + ], + "GFP97_01": [ + "Tiertime/Tiertime Generic PP" + ], + "GFP98": [ + "BBL/Generic PE-CF", + "Tiertime/Tiertime Generic PE-CF" + ], + "GFP98_01": [ + "Tiertime/Tiertime Generic PE-CF" + ], + "GFP99": [ + "BBL/Generic PE", + "Tiertime/Tiertime Generic PE" + ], + "GFP99_01": [ + "Tiertime/Tiertime Generic PE" + ], + "GFPA": [ + "Anycubic/Anycubic PA" + ], + "GFPA6-CF": [ + "Anycubic/Anycubic PA6-CF" + ], + "GFPAHT-CF": [ + "Anycubic/Anycubic PAHT-CF" + ], + "GFPC": [ + "Anycubic/Anycubic PC" + ], + "GFPC-CF": [ + "Anycubic/Anycubic PC-CF" + ], + "GFPC-GF": [ + "Anycubic/Anycubic PC-GF" + ], + "GFPEBA": [ + "Anycubic/Anycubic PEBA" + ], + "GFPET-CF": [ + "Anycubic/Anycubic PET-CF" + ], + "GFPETG": [ + "Anycubic/Anycubic PETG", + "Anycubic/Generic PETG" + ], + "GFPETG-1": [ + "Peopoly/Peopoly Generic PETG" + ], + "GFPETG-CF": [ + "Anycubic/Anycubic PETG-CF" + ], + "GFPLA": [ + "Anycubic/Anycubic PLA" + ], + "GFPLA Glow": [ + "Anycubic/Anycubic PLA Glow" + ], + "GFPLA High Speed": [ + "Anycubic/Anycubic PLA High Speed" + ], + "GFPLA Matte": [ + "Anycubic/Anycubic PLA Matte" + ], + "GFPLA Silk": [ + "Anycubic/Anycubic PLA Silk" + ], + "GFPLA Translucent": [ + "Anycubic/Anycubic PLA Translucent" + ], + "GFPLA+": [ + "Anycubic/Anycubic PLA+" + ], + "GFPLA-CF": [ + "Anycubic/Anycubic PLA-CF" + ], + "GFPM001": [ + "Anycubic/Panchroma PLA", + "BBL/Panchroma PLA", + "Snapmaker/Panchroma PLA" + ], + "GFPM002": [ + "BBL/Panchroma PLA Matte", + "Snapmaker/Panchroma PLA Matte" + ], + "GFPM003": [ + "BBL/Panchroma PLA Marble", + "Snapmaker/Panchroma PLA Marble" + ], + "GFPM004": [ + "BBL/Panchroma PLA Silk", + "Snapmaker/Panchroma PLA Silk" + ], + "GFPM005": [ + "BBL/Panchroma PLA Satin", + "Snapmaker/Panchroma PLA Satin" + ], + "GFPM006": [ + "BBL/Panchroma PLA Translucent", + "Snapmaker/Panchroma PLA Translucent" + ], + "GFPM007": [ + "BBL/Panchroma PLA Galaxy", + "Snapmaker/Panchroma PLA Galaxy" + ], + "GFPM008": [ + "BBL/Panchroma PLA Celestial", + "Snapmaker/Panchroma PLA Celestial" + ], + "GFPM009": [ + "BBL/Panchroma PLA Starlight", + "Snapmaker/Panchroma PLA Starlight" + ], + "GFPM010": [ + "BBL/Panchroma PLA Glow", + "Snapmaker/Panchroma PLA Glow" + ], + "GFPM011": [ + "BBL/Panchroma PLA Luminous", + "Snapmaker/Panchroma PLA Luminous" + ], + "GFPM012": [ + "BBL/Panchroma PLA Metallic", + "Snapmaker/Panchroma PLA Metallic" + ], + "GFPM013": [ + "BBL/Panchroma PLA Neon", + "Snapmaker/Panchroma PLA Neon" + ], + "GFPM014": [ + "BBL/Panchroma PLA UV Shift", + "Snapmaker/Panchroma PLA UV Shift" + ], + "GFPM015": [ + "BBL/Panchroma PLA Temp Shift", + "Snapmaker/Panchroma PLA Temp Shift" + ], + "GFPM016": [ + "BBL/Panchroma CoPE", + "Snapmaker/Panchroma CoPE" + ], + "GFPM017": [ + "BBL/Polymaker HT-PLA", + "Snapmaker/Polymaker HT-PLA" + ], + "GFPM018": [ + "BBL/Polymaker HT-PLA-GF", + "Snapmaker/Polymaker HT-PLA-GF" + ], + "GFPM019": [ + "BBL/PolyLite PLA Pro", + "Snapmaker/PolyLite PLA Pro" + ], + "GFPVA": [ + "Anycubic/Anycubic PVA" + ], + "GFR00": [ + "BBL/FusRock ABS-GF" + ], + "GFR98": [ + "BBL/Generic PHA", + "Tiertime/Tiertime Generic PHA" + ], + "GFR98_01": [ + "Tiertime/Tiertime Generic PHA" + ], + "GFR99": [ + "BBL/Generic EVA", + "Tiertime/Tiertime Generic EVA" + ], + "GFR99_01": [ + "Tiertime/Tiertime Generic EVA" + ], + "GFRH01": [], + "GFRH02": [], + "GFRH03": [], + "GFRH04": [], + "GFRH05": [], + "GFRH06": [], + "GFS00": [ + "BBL/Bambu Support W", + "OrcaArena/Arena Support W" + ], + "GFS01": [ + "BBL/Bambu Support G", + "OrcaArena/Arena Support G" + ], + "GFS02": [ + "BBL/Bambu Support For PLA" + ], + "GFS03": [ + "BBL/Bambu Support For PA/PET" + ], + "GFS04": [ + "BBL/Bambu PVA", + "Tiertime/Tiertime PVA", + "WonderMaker/WonderMaker PVA" + ], + "GFS04_01": [ + "Tiertime/Tiertime PVA" + ], + "GFS05": [ + "BBL/Bambu Support For PLA/PETG" + ], + "GFS06": [ + "BBL/Bambu Support for ABS" + ], + "GFS97": [ + "BBL/Generic BVOH", + "Tiertime/Tiertime Generic BVOH" + ], + "GFS97_01": [ + "Tiertime/Tiertime Generic BVOH" + ], + "GFS98": [ + "BBL/Generic HIPS", + "Prusa/Prusament PVB", + "Tiertime/Tiertime Generic HIPS" + ], + "GFS98_01": [ + "Tiertime/Tiertime Generic HIPS" + ], + "GFS99": [ + "Anker/Anker Generic PVA", + "Anycubic/Anycubic Generic PVA", + "BBL/Generic PVA", + "Custom/Generic PVA", + "FLSun/FLSun Generic PVA", + "OrcaArena/OrcaArena Generic PVA", + "Prusa/Prusa Generic PVA", + "Prusa/Prusa Generic PVA HF", + "Qidi/Qidi Generic PVA", + "Ratrig/RatRig Generic PVA", + "SecKit/SecKit Generic PVA", + "Tiertime/Tiertime Generic PVA", + "Volumic/Volumic PVA", + "Volumic/Volumic PVA-BVOH (Performance)", + "Vzbot/Vzbot Generic PVA" + ], + "GFS99_01": [ + "Tiertime/Tiertime Generic PVA" + ], + "GFS99_1": [ + "Prusa/Prusa Generic PVA" + ], + "GFS99_2": [ + "Prusa/Prusa Generic PVA" + ], + "GFS99_3": [ + "Prusa/Prusa Generic PVA" + ], + "GFS99_4": [ + "Prusa/Prusa Generic PVA", + "Prusa/Prusa Generic PVA HF" + ], + "GFS99_5": [ + "Prusa/Prusa Generic PVA HF" + ], + "GFS99_6": [ + "Prusa/Prusa Generic PVA HF" + ], + "GFSEP001": [ + "OrcaFilamentLibrary/Eolas Prints PLA Premium" + ], + "GFSEP002": [ + "OrcaFilamentLibrary/Eolas Prints PLA Matte" + ], + "GFSEP003": [ + "OrcaFilamentLibrary/Eolas Prints PLA Silk" + ], + "GFSEP004": [ + "OrcaFilamentLibrary/Eolas Prints PLA Neon" + ], + "GFSEP005": [ + "OrcaFilamentLibrary/Eolas Prints PLA High Speed" + ], + "GFSEP006": [ + "OrcaFilamentLibrary/Eolas Prints PLA INGEO 850" + ], + "GFSEP007": [ + "OrcaFilamentLibrary/Eolas Prints PLA INGEO 870" + ], + "GFSEP008": [ + "OrcaFilamentLibrary/Eolas Prints PLA Antibacterial" + ], + "GFSEP009": [ + "OrcaFilamentLibrary/Eolas Prints PLA Transition" + ], + "GFSEP010": [ + "OrcaFilamentLibrary/Eolas Prints PETG" + ], + "GFSEP011": [ + "OrcaFilamentLibrary/Eolas Prints PETG UV Resistant" + ], + "GFSEP012": [ + "OrcaFilamentLibrary/Eolas Prints PETG Transition" + ], + "GFSEP013": [ + "OrcaFilamentLibrary/Eolas Prints TPU Flex 93A" + ], + "GFSEP014": [ + "OrcaFilamentLibrary/Eolas Prints TPU Flex D53" + ], + "GFSEP015": [ + "OrcaFilamentLibrary/Eolas Prints TPU D60 UV Resistant" + ], + "GFSEP016": [ + "OrcaFilamentLibrary/Eolas Prints TPU Transition" + ], + "GFSEP017": [ + "OrcaFilamentLibrary/Eolas Prints ABS" + ], + "GFSEP018": [ + "OrcaFilamentLibrary/Eolas Prints ASA" + ], + "GFSL99": [ + "Peopoly/Peopoly Generic ABS" + ], + "GFSNL02": [ + "BBL/SUNLU PLA Matte", + "Flashforge/SUNLU PLA Matte" + ], + "GFSNL03": [ + "BBL/SUNLU PLA+", + "Flashforge/SUNLU PLA+" + ], + "GFSNL04": [ + "BBL/SUNLU PLA+ 2.0", + "Flashforge/SUNLU PLA+ 2.0" + ], + "GFSNL05": [ + "BBL/SUNLU Silk PLA+", + "Flashforge/SUNLU Silk PLA+" + ], + "GFSNL06": [ + "BBL/SUNLU PLA Marble", + "Flashforge/SUNLU PLA Marble" + ], + "GFSNL07": [ + "BBL/SUNLU Wood PLA", + "Flashforge/SUNLU Wood PLA" + ], + "GFSNL08": [ + "BBL/SUNLU PETG", + "Flashforge/SUNLU PETG" + ], + "GFT01": [ + "BBL/Bambu PET-CF", + "OrcaArena/Arena PET-CF", + "Tiertime/Tiertime PET-CF", + "WonderMaker/WonderMaker PET-CF" + ], + "GFT01_01": [ + "Tiertime/Tiertime PET-CF" + ], + "GFT02": [ + "BBL/Bambu PPS-CF", + "Prusa/Prusa Generic PETG", + "Prusa/Prusa Generic PETG HF", + "Prusa/Prusament PETG" + ], + "GFT97": [ + "BBL/Generic PPS", + "Tiertime/Tiertime Generic PPS" + ], + "GFT97_01": [ + "Tiertime/Tiertime Generic PPS" + ], + "GFT98": [ + "BBL/Generic PPS-CF", + "Tiertime/Tiertime Generic PPS-CF" + ], + "GFT98_01": [ + "Tiertime/Tiertime Generic PPS-CF" + ], + "GFTPU 95A": [ + "Anycubic/Anycubic TPU 95A" + ], + "GFTPU for ACE": [ + "Anycubic/Anycubic TPU for ACE" + ], + "GFU00": [ + "BBL/Bambu TPU 95A HF" + ], + "GFU01": [ + "Afinia/Afinia TPU", + "BBL/Bambu TPU 95A", + "OrcaArena/Arena TPU 95A", + "Tiertime/Tiertime TPU 95A", + "WonderMaker/WonderMaker TPU 95A" + ], + "GFU01_01": [ + "Afinia/Afinia TPU", + "Tiertime/Tiertime TPU 95A" + ], + "GFU02": [ + "BBL/Bambu TPU for AMS" + ], + "GFU03": [ + "BBL/Bambu TPU 90A" + ], + "GFU04": [ + "BBL/Bambu TPU 85A" + ], + "GFU98": [ + "BBL/Generic TPU for AMS" + ], + "GFU99": [ + "Anker/Anker Generic TPU", + "Anycubic/Anycubic Generic TPU", + "Anycubic/Anycubic PEBA 95A", + "Anycubic/Anycubic TPU", + "Anycubic/Generic TPU", + "Artillery/Artillery Generic TPU", + "BBL/Generic TPU", + "CoLiDo/CoLiDo Generic TPU", + "Creality/Creality Generic TPU", + "Custom/Generic TPU", + "FLSun/FLSun Generic TPU", + "FLSun/FLSun S1 TPU", + "FLSun/FLSun T1 TPU", + "FlyingBear/FlyingBear Generic TPU", + "FlyingBear/FlyingBear TPU", + "FlyingBear/FlyingBear TPU Basic", + "FlyingBear/Other TPU", + "InfiMech/InfiMech Generic TPU", + "InfiMech/InfiMech TPU", + "InfiMech/InfiMech TPU Basic", + "InfiMech/Other TPU", + "OrcaArena/OrcaArena Generic TPU", + "Prusa/Prusa Generic FLEX", + "Prusa/Prusa Generic TPU", + "Prusa/Prusa Generic TPU HF", + "Qidi/QIDI TPU-Aero", + "Qidi/Qidi Generic TPU", + "Qidi/Qidi Generic TPU 95A", + "Qidi/Qidi TPU 95A-HF", + "Ratrig/RatRig Generic TPU", + "SecKit/SecKit Generic TPU", + "Tiertime/Tiertime Generic TPU", + "TwoTrees/TwoTrees Generic 95A TPU", + "Volumic/Volumic FLEX93 Ultra", + "Volumic/Volumic FLEX93 Ultra (Performance)", + "Vzbot/Vzbot Generic TPU", + "Wanhao France/YUMI PLA Bowden", + "Wanhao France/YUMI PLA Direct Drive" + ], + "GFU99_01": [ + "Tiertime/Tiertime Generic TPU" + ], + "GFU99_2": [ + "Prusa/Prusa Generic TPU" + ], + "GFU99_3": [ + "Prusa/Prusa Generic TPU HF" + ], + "GPAB00": [ + "Elegoo/Generic PA", + "Elegoo/Generic PA6-CF" + ], + "GPCB00": [ + "Elegoo/Generic PC", + "Elegoo/Generic PC-CF" + ], + "GPETB00": [ + "Elegoo/Generic PET", + "Elegoo/Generic PET-CF" + ], + "GPETGB00": [ + "Elegoo/Generic PETG", + "Elegoo/Generic PETG PRO", + "Elegoo/Generic PETG-CF" + ], + "GPLAB00": [ + "Elegoo/Generic PLA", + "Elegoo/Generic PLA Matte" + ], + "Generic ABS @E3NG v1.2S": [ + "RH3D/Generic ABS" + ], + "Generic ABS @MK4S": [ + "Prusa/Prusa Generic ABS" + ], + "Generic ABS @MK4S 0.6": [ + "Prusa/Prusa Generic ABS" + ], + "Generic ABS @MK4S 0.8": [ + "Prusa/Prusa Generic ABS" + ], + "Generic ABS @MK4S HF0.4": [ + "Prusa/Prusa Generic ABS" + ], + "Generic ABS @MK4S HF0.5": [ + "Prusa/Prusa Generic ABS" + ], + "Generic ABS @MK4S HF0.6": [ + "Prusa/Prusa Generic ABS" + ], + "Generic ABS @MK4S HF0.8": [ + "Prusa/Prusa Generic ABS" + ], + "Generic ASA @E3NG v1.2S": [ + "RH3D/Generic ASA" + ], + "Generic FLEX @MK4S": [ + "Prusa/Prusa Generic TPU" + ], + "Generic FLEX @MK4S 0.6": [ + "Prusa/Prusa Generic TPU" + ], + "Generic FLEX @MK4S 0.8": [ + "Prusa/Prusa Generic TPU" + ], + "Generic PCCF @E3NG v1.2S": [ + "RH3D/Generic PCCF" + ], + "Generic PETG @E3NG v1.2S": [ + "RH3D/Generic PETG" + ], + "Generic PETG @MK4S": [ + "Prusa/Prusa Generic PETG" + ], + "Generic PETG @MK4S 0.6": [ + "Prusa/Prusa Generic PETG" + ], + "Generic PETG @MK4S 0.8": [ + "Prusa/Prusa Generic PETG" + ], + "Generic PETG @MK4S HF0.4": [ + "Prusa/Prusa Generic PETG" + ], + "Generic PETG @MK4S HF0.5": [ + "Prusa/Prusa Generic PETG" + ], + "Generic PETG @MK4S HF0.6": [ + "Prusa/Prusa Generic PETG" + ], + "Generic PETG @MK4S HF0.8": [ + "Prusa/Prusa Generic PETG" + ], + "Generic PLA @E3NG v1.2S": [ + "RH3D/Generic PLA" + ], + "Generic PLA @MK4S": [ + "Prusa/Prusa Generic PLA" + ], + "Generic PLA @MK4S 0.6": [ + "Prusa/Prusa Generic PLA" + ], + "Generic PLA @MK4S 0.8": [ + "Prusa/Prusa Generic PLA" + ], + "Generic PLA @MK4S HF0.4": [ + "Prusa/Prusa Generic PLA" + ], + "Generic PLA @MK4S HF0.5": [ + "Prusa/Prusa Generic PLA" + ], + "Generic PLA @MK4S HF0.6": [ + "Prusa/Prusa Generic PLA" + ], + "Generic PLA @MK4S HF0.8": [ + "Prusa/Prusa Generic PLA" + ], + "Generic PLA Silk @MK4S": [ + "Prusa/Prusa Generic PLA Silk" + ], + "Generic PLA Silk @MK4S 0.6": [ + "Prusa/Prusa Generic PLA Silk" + ], + "Generic PLA Silk @MK4S 0.8": [ + "Prusa/Prusa Generic PLA Silk" + ], + "Generic TPU @E3NG v1.2S": [ + "RH3D/Generic TPU" + ], + "IQM1": [ + "iQ/Fiberthree PACF Pro P1", + "iQ/Grauts HPP4GF25 P1" + ], + "IQM1011": [ + "iQ/VXL90 TiQ2 P2" + ], + "IQM2": [ + "iQ/Material4Print ABS Natur P1" + ], + "IQM3": [ + "iQ/Polymaker PETG Polymax black P1" + ], + "IQM7": [ + "iQ/Fiberthree PACF Pro P2" + ], + "LHF_abs": [ + "LH/LHS ABS" + ], + "LHF_asa": [ + "LH/LHS ASA" + ], + "LHF_ftpuf": [ + "LH/LHS TPU Foamy 78A" + ], + "LHF_pccf": [ + "LH/LHS PC CF" + ], + "LHF_pctg": [ + "LH/LHS PCTG" + ], + "LHF_petg": [ + "LH/LHS PETG" + ], + "LHF_pla": [ + "LH/LHS PLA" + ], + "LHF_ptpu_pl": [ + "LH/LHS TPU" + ], + "NIT01": [ + "OrcaFilamentLibrary/NIT ABS" + ], + "NIT02": [ + "OrcaFilamentLibrary/NIT PLA" + ], + "NIT03": [ + "OrcaFilamentLibrary/NIT PETG" + ], + "OEABSB00": [ + "OrcaFilamentLibrary/Elegoo ABS" + ], + "OEASAB00": [ + "OrcaFilamentLibrary/Elegoo ASA", + "OrcaFilamentLibrary/Elegoo ASA-CF" + ], + "OEPAHTB0": [ + "OrcaFilamentLibrary/Elegoo PAHT-CF" + ], + "OEPCB00": [ + "OrcaFilamentLibrary/Elegoo PC", + "OrcaFilamentLibrary/Elegoo PC-FR" + ], + "OEPETGB0": [ + "OrcaFilamentLibrary/Elegoo PET-CF", + "OrcaFilamentLibrary/Elegoo PETG", + "OrcaFilamentLibrary/Elegoo PETG HF", + "OrcaFilamentLibrary/Elegoo PETG PRO", + "OrcaFilamentLibrary/Elegoo PETG Translucent", + "OrcaFilamentLibrary/Elegoo PETG-CF", + "OrcaFilamentLibrary/Elegoo PETG-GF", + "OrcaFilamentLibrary/Elegoo Rapid PETG" + ], + "OEPLAB00": [ + "OrcaFilamentLibrary/Elegoo PLA", + "OrcaFilamentLibrary/Elegoo PLA Basic", + "OrcaFilamentLibrary/Elegoo PLA Galaxy", + "OrcaFilamentLibrary/Elegoo PLA Glow", + "OrcaFilamentLibrary/Elegoo PLA Marble", + "OrcaFilamentLibrary/Elegoo PLA Matte", + "OrcaFilamentLibrary/Elegoo PLA PRO", + "OrcaFilamentLibrary/Elegoo PLA Silk", + "OrcaFilamentLibrary/Elegoo PLA Sparkle", + "OrcaFilamentLibrary/Elegoo PLA Translucent2", + "OrcaFilamentLibrary/Elegoo PLA Wood", + "OrcaFilamentLibrary/Elegoo PLA+", + "OrcaFilamentLibrary/Elegoo PLA-CF", + "OrcaFilamentLibrary/Elegoo Rapid PLA+" + ], + "OETPUB00": [ + "OrcaFilamentLibrary/Elegoo Rapid TPU 95A", + "OrcaFilamentLibrary/Elegoo TPU 95A" + ], + "OFLSBS99": [ + "OrcaFilamentLibrary/Generic SBS" + ], + "OGFA00": [ + "OrcaFilamentLibrary/Bambu PLA Basic", + "OrcaFilamentLibrary/Elas PLA Basic", + "OrcaFilamentLibrary/Elas PLA Pro" + ], + "OGFA01": [ + "OrcaFilamentLibrary/Bambu PLA Matte" + ], + "OGFA02": [ + "OrcaFilamentLibrary/Bambu PLA Metal" + ], + "OGFA03": [ + "OrcaFilamentLibrary/Bambu PLA Impact" + ], + "OGFA05": [ + "OrcaFilamentLibrary/Bambu PLA Silk" + ], + "OGFA06": [ + "OrcaFilamentLibrary/Bambu PLA Silk+" + ], + "OGFA07": [ + "OrcaFilamentLibrary/Bambu PLA Marble" + ], + "OGFA08": [ + "OrcaFilamentLibrary/Bambu PLA Sparkle" + ], + "OGFA09": [ + "OrcaFilamentLibrary/Bambu PLA Tough" + ], + "OGFA11": [ + "OrcaFilamentLibrary/Bambu PLA Aero" + ], + "OGFA12": [ + "OrcaFilamentLibrary/Bambu PLA Glow" + ], + "OGFA13": [ + "OrcaFilamentLibrary/Bambu PLA Dynamic" + ], + "OGFA15": [ + "OrcaFilamentLibrary/Bambu PLA Galaxy" + ], + "OGFA16": [ + "OrcaFilamentLibrary/Bambu PLA Wood" + ], + "OGFA50": [ + "OrcaFilamentLibrary/Bambu PLA-CF" + ], + "OGFB00": [ + "OrcaFilamentLibrary/Bambu ABS" + ], + "OGFB01": [ + "OrcaFilamentLibrary/Bambu ASA", + "OrcaFilamentLibrary/Elas ASA" + ], + "OGFB02": [ + "OrcaFilamentLibrary/Bambu ASA-Aero" + ], + "OGFB50": [ + "OrcaFilamentLibrary/Bambu ABS-GF" + ], + "OGFB51": [ + "OrcaFilamentLibrary/Bambu ASA-CF" + ], + "OGFB60": [ + "OrcaFilamentLibrary/PolyLite ABS" + ], + "OGFB61": [ + "OrcaFilamentLibrary/PolyLite ASA" + ], + "OGFB98": [ + "Custom/Generic ASA", + "OrcaFilamentLibrary/Generic ASA" + ], + "OGFB99": [ + "Custom/Generic ABS", + "Flashforge/Flashforge ABS Basic", + "Flashforge/Flashforge ABS-GF", + "Flashforge/Flashforge ASA Basic", + "Flashforge/Flashforge ASA-CF", + "Flashforge/Flashforge ASA-GF", + "OrcaFilamentLibrary/Generic ABS" + ], + "OGFC00": [ + "OrcaFilamentLibrary/Bambu PC" + ], + "OGFC01": [ + "OrcaFilamentLibrary/Bambu PC FR" + ], + "OGFC99": [ + "OrcaFilamentLibrary/Generic PC" + ], + "OGFG00": [ + "OrcaFilamentLibrary/Bambu PETG Basic", + "OrcaFilamentLibrary/Elas PETG Basic" + ], + "OGFG01": [ + "OrcaFilamentLibrary/Bambu PETG Translucent" + ], + "OGFG02": [ + "OrcaFilamentLibrary/Bambu PETG HF" + ], + "OGFG50": [ + "OrcaFilamentLibrary/Bambu PETG-CF" + ], + "OGFG60": [ + "OrcaFilamentLibrary/PolyLite PETG" + ], + "OGFG97": [ + "OrcaFilamentLibrary/Generic PCTG" + ], + "OGFG99": [ + "Flashforge/Flashforge HS PETG", + "Flashforge/Flashforge PET-CF", + "Flashforge/Flashforge PETG Pro", + "Flashforge/Flashforge PETG Transparent", + "Flashforge/Flashforge PETG-CF", + "Flashforge/FusRock S-Multi", + "OrcaFilamentLibrary/Generic PETG", + "OrcaFilamentLibrary/Generic PETG HF", + "OrcaFilamentLibrary/Generic PETG-CF" + ], + "OGFGG300": [ + "OrcaFilamentLibrary/GreenGate3D PETG" + ], + "OGFL00": [ + "OrcaFilamentLibrary/PolyLite Dual PLA", + "OrcaFilamentLibrary/PolyLite PLA" + ], + "OGFL00-1": [ + "OrcaFilamentLibrary/PolyTerra Dual PLA" + ], + "OGFL01": [ + "OrcaFilamentLibrary/PolyTerra PLA", + "Snapmaker/PolyTerra Dual PLA", + "Snapmaker/PolyTerra J1 PLA", + "Snapmaker/PolyTerra PLA" + ], + "OGFL03": [ + "OrcaFilamentLibrary/eSUN PLA+" + ], + "OGFL04": [ + "OrcaFilamentLibrary/Overture PLA", + "OrcaFilamentLibrary/eSUN PLA-Basic" + ], + "OGFL05": [ + "OrcaFilamentLibrary/Overture Matte PLA", + "OrcaFilamentLibrary/eSUN PLA-Matte" + ], + "OGFL06": [ + "OrcaFilamentLibrary/Fiberon PETG-ESD", + "OrcaFilamentLibrary/eSUN PLA-Marble" + ], + "OGFL50": [ + "OrcaFilamentLibrary/Fiberon PA6-CF" + ], + "OGFL51": [ + "OrcaFilamentLibrary/Fiberon PA6-GF" + ], + "OGFL52": [ + "OrcaFilamentLibrary/Fiberon PA12-CF" + ], + "OGFL53": [ + "OrcaFilamentLibrary/Fiberon PA612-CF" + ], + "OGFL54": [ + "OrcaFilamentLibrary/Fiberon PET-CF" + ], + "OGFL55": [ + "OrcaFilamentLibrary/Fiberon PETG-rCF" + ], + "OGFL95": [ + "OrcaFilamentLibrary/Generic PLA High Speed" + ], + "OGFL96": [ + "Flashforge/Flashforge PLA Silk", + "Flashforge/Generic PLA Silk", + "OrcaFilamentLibrary/Generic PLA Silk" + ], + "OGFL98": [ + "Flashforge/Flashforge PLA-CF", + "OrcaFilamentLibrary/Generic PLA-CF" + ], + "OGFL99": [ + "Flashforge/Flashforge HS PLA", + "Flashforge/Flashforge PLA Matte", + "Flashforge/Flashforge PLA Metal", + "Flashforge/Flashforge PLA Pro", + "Flashforge/Flashforge PLA Basic", + "Flashforge/Flashforge PLA Color Change", + "Flashforge/Flashforge PLA Galaxy", + "Flashforge/Flashforge PLA Luminous", + "Flashforge/Generic PLA", + "OrcaFilamentLibrary/Generic PLA", + "OrcaFilamentLibrary/Generic PLA Matte" + ], + "OGFLC99": [ + "OrcaFilamentLibrary/Generic CoPE" + ], + "OGFN03": [ + "OrcaFilamentLibrary/Bambu PA-CF" + ], + "OGFN04": [ + "OrcaFilamentLibrary/Bambu PAHT-CF" + ], + "OGFN05": [ + "OrcaFilamentLibrary/Bambu PA6-CF" + ], + "OGFN06": [ + "OrcaFilamentLibrary/Bambu PPA-CF" + ], + "OGFN08": [ + "OrcaFilamentLibrary/Bambu PA6-GF" + ], + "OGFN96": [ + "Flashforge/Flashforge PPA-CF", + "Flashforge/Flashforge PPS-CF", + "OrcaFilamentLibrary/Generic PPA-GF" + ], + "OGFN97": [ + "OrcaFilamentLibrary/Generic PPA-CF" + ], + "OGFN98": [ + "Custom/Generic PA-CF", + "Flashforge/Flashforge PA-CF", + "Flashforge/Flashforge PAHT-CF", + "Flashforge/FusRock PAHT-CF", + "Flashforge/FusRock S-PAHT", + "OrcaFilamentLibrary/Generic PA-CF" + ], + "OGFN99": [ + "Custom/Generic PA", + "OrcaFilamentLibrary/Generic PA" + ], + "OGFNMK00": [ + "OrcaFilamentLibrary/Numakers PLA+" + ], + "OGFP97": [ + "OrcaFilamentLibrary/Generic PP", + "OrcaFilamentLibrary/Generic PP-CF", + "OrcaFilamentLibrary/Generic PP-GF" + ], + "OGFP99": [ + "OrcaFilamentLibrary/Generic PE", + "OrcaFilamentLibrary/Generic PE-CF" + ], + "OGFPM001": [ + "OrcaFilamentLibrary/Panchroma PLA" + ], + "OGFPM002": [ + "OrcaFilamentLibrary/Panchroma PLA Matte" + ], + "OGFPM003": [ + "OrcaFilamentLibrary/Panchroma PLA Marble" + ], + "OGFPM004": [ + "OrcaFilamentLibrary/Panchroma PLA Silk" + ], + "OGFPM005": [ + "OrcaFilamentLibrary/Panchroma PLA Satin" + ], + "OGFPM006": [ + "OrcaFilamentLibrary/Panchroma PLA Translucent" + ], + "OGFPM007": [ + "OrcaFilamentLibrary/Panchroma PLA Galaxy" + ], + "OGFPM008": [ + "OrcaFilamentLibrary/Panchroma PLA Celestial" + ], + "OGFPM009": [ + "OrcaFilamentLibrary/Panchroma PLA Starlight" + ], + "OGFPM010": [ + "OrcaFilamentLibrary/Panchroma PLA Glow" + ], + "OGFPM011": [ + "OrcaFilamentLibrary/Panchroma PLA Luminous" + ], + "OGFPM012": [ + "OrcaFilamentLibrary/Panchroma PLA Metallic" + ], + "OGFPM013": [ + "OrcaFilamentLibrary/Panchroma PLA Neon" + ], + "OGFPM014": [ + "OrcaFilamentLibrary/Panchroma PLA UV Shift" + ], + "OGFPM015": [ + "OrcaFilamentLibrary/Panchroma PLA Temp Shift" + ], + "OGFPM016": [ + "OrcaFilamentLibrary/Panchroma CoPE" + ], + "OGFPM017": [ + "OrcaFilamentLibrary/Polymaker HT-PLA" + ], + "OGFPM018": [ + "OrcaFilamentLibrary/Polymaker HT-PLA-GF" + ], + "OGFPM019": [ + "OrcaFilamentLibrary/PolyLite PLA Pro" + ], + "OGFR00": [ + "OrcaFilamentLibrary/FusRock ABS-GF" + ], + "OGFR98": [ + "OrcaFilamentLibrary/Generic PHA" + ], + "OGFR99": [ + "OrcaFilamentLibrary/Generic EVA" + ], + "OGFS00": [ + "OrcaFilamentLibrary/Bambu Support W" + ], + "OGFS01": [ + "OrcaFilamentLibrary/Bambu Support G" + ], + "OGFS02": [ + "OrcaFilamentLibrary/Bambu Support For PLA" + ], + "OGFS03": [ + "OrcaFilamentLibrary/Bambu Support For PA/PET" + ], + "OGFS04": [ + "OrcaFilamentLibrary/Bambu PVA" + ], + "OGFS05": [ + "OrcaFilamentLibrary/Bambu Support For PLA/PETG" + ], + "OGFS06": [ + "OrcaFilamentLibrary/Bambu Support for ABS" + ], + "OGFS97": [ + "Flashforge/Generic BVOH", + "OrcaFilamentLibrary/Generic BVOH" + ], + "OGFS98": [ + "Flashforge/Flashforge HIPS", + "OrcaFilamentLibrary/Generic HIPS" + ], + "OGFS99": [ + "Flashforge/Flashforge PVA", + "OrcaFilamentLibrary/Generic PVA" + ], + "OGFSNL02": [ + "OrcaFilamentLibrary/SUNLU PLA Matte" + ], + "OGFSNL03": [ + "OrcaFilamentLibrary/SUNLU PLA+" + ], + "OGFSNL04": [ + "OrcaFilamentLibrary/SUNLU PLA+ 2.0" + ], + "OGFSNL05": [ + "OrcaFilamentLibrary/SUNLU Silk PLA+" + ], + "OGFSNL06": [ + "OrcaFilamentLibrary/SUNLU PLA Marble" + ], + "OGFSNL07": [ + "OrcaFilamentLibrary/SUNLU Wood PLA" + ], + "OGFSNL08": [ + "OrcaFilamentLibrary/SUNLU PETG" + ], + "OGFT01": [ + "OrcaFilamentLibrary/Bambu PET-CF" + ], + "OGFT02": [], + "OGFU00": [ + "OrcaFilamentLibrary/Bambu TPU 95A HF" + ], + "OGFU01": [ + "OrcaFilamentLibrary/Bambu TPU 95A" + ], + "OGFU99": [ + "Flashforge/Flashforge TPU-64D", + "Flashforge/Flashforge TPU-90A", + "Flashforge/Flashforge TPU-95A", + "Flashforge/Generic TPU-64D", + "Flashforge/Generic TPU-90A", + "Flashforge/Generic TPU-95A", + "OrcaFilamentLibrary/Generic TPU" + ], + "OVTABS08": [ + "OrcaFilamentLibrary/Overture ABS Basic" + ], + "P1001": [ + "Creality/Panchroma PLA Satin" + ], + "P1002": [ + "Creality/PolySonic PLA Pro" + ], + "P1003": [ + "Creality/Panchroma PLA Matte" + ], + "P1004": [ + "Creality/PolySonic PLA" + ], + "P11851ba": [ + "Artillery/Artillery PET" + ], + "P284941e": [ + "Artillery/Artillery PETG", + "Artillery/Artillery PETG Basic" + ], + "P2fbf0c0": [ + "Artillery/Artillery TPU" + ], + "P39db358": [ + "Artillery/Artillery ABS" + ], + "P510cfa0": [ + "Cubicon/Cubicon PLA" + ], + "P510cfa1": [ + "Cubicon/Cubicon PLA+" + ], + "P510cfa2": [ + "Cubicon/Cubicon PLAi21" + ], + "P510cfb0": [ + "Cubicon/Cubicon ABS" + ], + "P510cfb1": [ + "Cubicon/Cubicon ABS-A100" + ], + "P510cfb2": [ + "Cubicon/Cubicon ABSk" + ], + "P510cfc0": [ + "Cubicon/Cubicon PETG" + ], + "P510cfd0": [ + "Cubicon/Cubicon PA-CF", + "Cubicon/Cubicon PC" + ], + "P510eff9": [ + "Ginger Additive/Ginger Generic PETG", + "Ginger Additive/Ginger Generic PLA" + ], + "P8163162": [ + "Artillery/Artillery PVA" + ], + "P87436f6": [ + "Artillery/Artillery ASA" + ], + "Pfcf9c4c": [ + "Artillery/Artillery PLA", + "Artillery/Artillery PLA Basic", + "Artillery/Artillery PLA Matte", + "Artillery/Artillery PLA Silk" + ], + "Prusa Generic ABS @CORE One": [ + "Prusa/Prusa Generic ABS" + ], + "Prusa Generic ABS @CORE One 0.6": [ + "Prusa/Prusa Generic ABS" + ], + "Prusa Generic ABS @CORE One 0.8": [ + "Prusa/Prusa Generic ABS" + ], + "Prusa Generic ABS @CORE One HF 0.4": [ + "Prusa/Prusa Generic ABS" + ], + "Prusa Generic ABS @CORE One HF 0.5": [ + "Prusa/Prusa Generic ABS" + ], + "Prusa Generic ABS @CORE One HF 0.6": [ + "Prusa/Prusa Generic ABS" + ], + "Prusa Generic ABS @CORE One HF 0.8": [ + "Prusa/Prusa Generic ABS" + ], + "Prusa Generic ASA @CORE One": [ + "Prusa/Prusa Generic ASA" + ], + "Prusa Generic ASA @CORE One 0.6": [ + "Prusa/Prusa Generic ASA" + ], + "Prusa Generic ASA @CORE One 0.8": [ + "Prusa/Prusa Generic ASA" + ], + "Prusa Generic ASA @CORE One HF 0.4": [ + "Prusa/Prusa Generic ASA" + ], + "Prusa Generic ASA @CORE One HF 0.5": [ + "Prusa/Prusa Generic ASA" + ], + "Prusa Generic ASA @CORE One HF 0.6": [ + "Prusa/Prusa Generic ASA" + ], + "Prusa Generic ASA @CORE One HF 0.8": [ + "Prusa/Prusa Generic ASA" + ], + "Prusa Generic PETG @CORE One": [ + "Prusa/Prusa Generic PETG" + ], + "Prusa Generic PETG @CORE One 0.6": [ + "Prusa/Prusa Generic PETG" + ], + "Prusa Generic PETG @CORE One 0.8": [ + "Prusa/Prusa Generic PETG" + ], + "Prusa Generic PETG @CORE One HF 0.4": [ + "Prusa/Prusa Generic PETG" + ], + "Prusa Generic PETG @CORE One HF 0.5": [ + "Prusa/Prusa Generic PETG" + ], + "Prusa Generic PETG @CORE One HF 0.6": [ + "Prusa/Prusa Generic PETG" + ], + "Prusa Generic PETG @CORE One HF 0.8": [ + "Prusa/Prusa Generic PETG" + ], + "Prusa Generic PLA @CORE One": [ + "Prusa/Prusa Generic PLA" + ], + "Prusa Generic PLA @CORE One 0.6": [ + "Prusa/Prusa Generic PLA" + ], + "Prusa Generic PLA @CORE One 0.8": [ + "Prusa/Prusa Generic PLA" + ], + "Prusa Generic PLA @CORE One HF 0.4": [ + "Prusa/Prusa Generic PLA" + ], + "Prusa Generic PLA @CORE One HF 0.5": [ + "Prusa/Prusa Generic PLA" + ], + "Prusa Generic PLA @CORE One HF 0.6": [ + "Prusa/Prusa Generic PLA" + ], + "Prusa Generic PLA @CORE One HF 0.8": [ + "Prusa/Prusa Generic PLA" + ], + "Prusa Generic PLA Silk @CORE One": [ + "Prusa/Prusa Generic PLA Silk" + ], + "Prusa Generic PLA Silk @CORE One 0.6": [ + "Prusa/Prusa Generic PLA Silk" + ], + "Prusa Generic PLA Silk @CORE One 0.8": [ + "Prusa/Prusa Generic PLA Silk" + ], + "Prusa Generic TPU @CORE One": [ + "Prusa/Prusa Generic TPU" + ], + "Prusa Generic TPU @CORE One 0.6": [ + "Prusa/Prusa Generic TPU" + ], + "Prusa Generic TPU @CORE One 0.8": [ + "Prusa/Prusa Generic TPU" + ], + "Prusament ASA @CORE One": [ + "Prusa/Prusament ASA" + ], + "Prusament ASA @CORE One 0.6": [ + "Prusa/Prusament ASA" + ], + "Prusament ASA @CORE One 0.8": [ + "Prusa/Prusament ASA" + ], + "Prusament ASA @CORE One HF 0.4": [ + "Prusa/Prusament ASA" + ], + "Prusament ASA @CORE One HF 0.5": [ + "Prusa/Prusament ASA" + ], + "Prusament ASA @CORE One HF 0.6": [ + "Prusa/Prusament ASA" + ], + "Prusament ASA @CORE One HF 0.8": [ + "Prusa/Prusament ASA" + ], + "Prusament ASA @MK4S": [ + "Prusa/Prusa Generic ASA" + ], + "Prusament ASA @MK4S 0.6": [ + "Prusa/Prusa Generic ASA" + ], + "Prusament ASA @MK4S 0.8": [ + "Prusa/Prusa Generic ASA" + ], + "Prusament ASA @MK4S HF0.4": [ + "Prusa/Prusa Generic ASA" + ], + "Prusament ASA @MK4S HF0.5": [ + "Prusa/Prusa Generic ASA" + ], + "Prusament ASA @MK4S HF0.6": [ + "Prusa/Prusa Generic ASA" + ], + "Prusament ASA @MK4S HF0.8": [ + "Prusa/Prusa Generic ASA" + ], + "Prusament PA-CF @CORE One": [ + "Prusa/Prusament PA-CF" + ], + "Prusament PA-CF @CORE One 0.6": [ + "Prusa/Prusament PA-CF" + ], + "Prusament PA-CF @CORE One 0.8": [ + "Prusa/Prusament PA-CF" + ], + "Prusament PC Blend @CORE One": [ + "Prusa/Prusament PC Blend" + ], + "Prusament PC Blend @CORE One 0.6": [ + "Prusa/Prusament PC Blend" + ], + "Prusament PC Blend @CORE One 0.8": [ + "Prusa/Prusament PC Blend" + ], + "Prusament PC Blend @CORE One HF 0.4": [ + "Prusa/Prusament PC Blend" + ], + "Prusament PC Blend @CORE One HF 0.5": [ + "Prusa/Prusament PC Blend" + ], + "Prusament PC Blend @CORE One HF 0.6": [ + "Prusa/Prusament PC Blend" + ], + "Prusament PC Blend @CORE One HF 0.8": [ + "Prusa/Prusament PC Blend" + ], + "Prusament PC-CF @CORE One": [ + "Prusa/Prusament PC-CF" + ], + "Prusament PC-CF @CORE One 0.6": [ + "Prusa/Prusament PC-CF" + ], + "Prusament PC-CF @CORE One 0.8": [ + "Prusa/Prusament PC-CF" + ], + "Prusament PETG @CORE One": [ + "Prusa/Prusament PETG" + ], + "Prusament PETG @CORE One 0.6": [ + "Prusa/Prusament PETG" + ], + "Prusament PETG @CORE One 0.8": [ + "Prusa/Prusament PETG" + ], + "Prusament PETG @CORE One HF 0.4": [ + "Prusa/Prusament PETG" + ], + "Prusament PETG @CORE One HF 0.5": [ + "Prusa/Prusament PETG" + ], + "Prusament PETG @CORE One HF 0.6": [ + "Prusa/Prusament PETG" + ], + "Prusament PETG @CORE One HF 0.8": [ + "Prusa/Prusament PETG" + ], + "Prusament PLA @CORE One": [ + "Prusa/Prusament PLA" + ], + "Prusament PLA @CORE One 0.6": [ + "Prusa/Prusament PLA" + ], + "Prusament PLA @CORE One 0.8": [ + "Prusa/Prusament PLA" + ], + "Prusament PLA @CORE One HF 0.4": [ + "Prusa/Prusament PLA" + ], + "Prusament PLA @CORE One HF 0.5": [ + "Prusa/Prusament PLA" + ], + "Prusament PLA @CORE One HF 0.6": [ + "Prusa/Prusament PLA" + ], + "Prusament PLA @CORE One HF 0.8": [ + "Prusa/Prusament PLA" + ], + "Prusament PVB @CORE One": [ + "Prusa/Prusament PVB" + ], + "Prusament PVB @CORE One 0.6": [ + "Prusa/Prusament PVB" + ], + "Prusament PVB @CORE One 0.8": [ + "Prusa/Prusament PVB" + ], + "Prusament rPLA @CORE One": [ + "Prusa/Prusament rPLA" + ], + "Prusament rPLA @CORE One 0.6": [ + "Prusa/Prusament rPLA" + ], + "Prusament rPLA @CORE One 0.8": [ + "Prusa/Prusament rPLA" + ], + "QD_0_1_1": [ + "Qidi/QIDI PLA Rapido" + ], + "QD_0_1_15": [ + "Qidi/QIDI TPU-GF" + ], + "QD_0_1_2": [ + "Qidi/QIDI PLA Rapido Matte" + ], + "QD_0_1_20": [ + "Qidi/QIDI ASA-CF" + ], + "QD_0_1_24": [ + "Qidi/QIDI PA-Ultra" + ], + "QD_0_1_26": [ + "Qidi/QIDI UltraPA-CF25" + ], + "QD_0_1_27": [ + "Qidi/QIDI PA12-CF" + ], + "QD_0_1_3": [ + "Qidi/QIDI PLA Rapido Metal" + ], + "QD_0_1_30": [ + "Qidi/QIDI PAHT-CF" + ], + "QD_0_1_31": [ + "Qidi/QIDI PAHT-GF" + ], + "QD_0_1_32": [ + "Qidi/QIDI Support For PAHT" + ], + "QD_0_1_33": [ + "Qidi/QIDI Support For PET/PA" + ], + "QD_0_1_34": [ + "Qidi/Qidi PC-ABS-FR" + ], + "QD_0_1_36": [ + "Qidi/QIDI PEBA 95A" + ], + "QD_0_1_37": [ + "Qidi/QIDI PET-CF" + ], + "QD_0_1_38": [ + "Qidi/QIDI PET-GF" + ], + "QD_0_1_39": [ + "Qidi/QIDI PETG Basic" + ], + "QD_0_1_4": [ + "Qidi/QIDI PLA Rapido Silk" + ], + "QD_0_1_40": [ + "Qidi/QIDI PETG Tough" + ], + "QD_0_1_41": [ + "Qidi/QIDI PETG Rapido" + ], + "QD_0_1_42": [ + "Qidi/QIDI PETG-CF" + ], + "QD_0_1_43": [ + "Qidi/QIDI PETG-GF" + ], + "QD_0_1_44": [ + "Qidi/QIDI PPS-CF" + ], + "QD_0_1_45": [ + "Qidi/QIDI PETG Translucent" + ], + "QD_0_1_46": [ + "Qidi/QIDI PPS-GF" + ], + "QD_0_1_49": [ + "Qidi/QIDI TPU-Aero" + ], + "QD_0_1_5": [ + "Qidi/QIDI PLA-CF" + ], + "QD_0_1_50": [ + "Qidi/Qidi TPU 95A-HF" + ], + "QD_0_1_6": [ + "Qidi/QIDI WOOD Rapido" + ], + "QD_0_1_7": [ + "Qidi/QIDI PLA Basic" + ], + "QD_0_1_8": [ + "Qidi/QIDI PLA Matte Basic" + ], + "QD_1_0_1": [ + "Qidi/Generic PLA" + ], + "QD_1_0_11": [ + "Qidi/Generic ABS" + ], + "QD_1_0_23": [ + "Qidi/Generic PC" + ], + "QD_1_0_4": [ + "Qidi/Generic PLA Silk" + ], + "QD_1_0_41": [ + "Qidi/Generic PETG" + ], + "QD_1_0_50": [ + "Qidi/Generic TPU 95A" + ], + "QD_1_1_1": [ + "Qidi/QIDI PLA Rapido" + ], + "QD_1_1_11": [ + "Qidi/QIDI ABS Rapido" + ], + "QD_1_1_12": [ + "Qidi/QIDI ABS-GF" + ], + "QD_1_1_13": [ + "Qidi/QIDI ABS Rapido Metal" + ], + "QD_1_1_14": [ + "Qidi/QIDI ABS Odorless" + ], + "QD_1_1_15": [ + "Qidi/QIDI TPU-GF" + ], + "QD_1_1_18": [ + "Qidi/QIDI ASA" + ], + "QD_1_1_19": [ + "Qidi/QIDI ASA-Aero" + ], + "QD_1_1_2": [ + "Qidi/QIDI PLA Rapido Matte" + ], + "QD_1_1_20": [ + "Qidi/QIDI ASA-CF" + ], + "QD_1_1_24": [ + "Qidi/QIDI UltraPA" + ], + "QD_1_1_26": [ + "Qidi/QIDI UltraPA-CF25" + ], + "QD_1_1_27": [ + "Qidi/QIDI PA12-CF" + ], + "QD_1_1_3": [ + "Qidi/QIDI PLA Rapido Metal" + ], + "QD_1_1_30": [ + "Qidi/QIDI PAHT-CF" + ], + "QD_1_1_31": [ + "Qidi/QIDI PAHT-GF" + ], + "QD_1_1_32": [ + "Qidi/QIDI Support For PAHT" + ], + "QD_1_1_33": [ + "Qidi/QIDI Support For PET/PA" + ], + "QD_1_1_34": [ + "Qidi/QIDI PC-ABS-FR" + ], + "QD_1_1_36": [ + "Qidi/QIDI PEBA 95A" + ], + "QD_1_1_37": [ + "Qidi/QIDI PET-CF" + ], + "QD_1_1_38": [ + "Qidi/QIDI PET-GF" + ], + "QD_1_1_39": [ + "Qidi/QIDI PETG Basic" + ], + "QD_1_1_4": [ + "Qidi/QIDI PLA Rapido Silk" + ], + "QD_1_1_40": [ + "Qidi/QIDI PETG Tough" + ], + "QD_1_1_41": [ + "Qidi/QIDI PETG Rapido" + ], + "QD_1_1_42": [ + "Qidi/QIDI PETG-CF" + ], + "QD_1_1_43": [ + "Qidi/QIDI PETG-GF" + ], + "QD_1_1_44": [ + "Qidi/QIDI PPS-CF" + ], + "QD_1_1_45": [ + "Qidi/QIDI PETG Translucent" + ], + "QD_1_1_46": [ + "Qidi/QIDI PPS-GF" + ], + "QD_1_1_49": [ + "Qidi/QIDI TPU-Aero" + ], + "QD_1_1_5": [ + "Qidi/QIDI PLA-CF" + ], + "QD_1_1_50": [ + "Qidi/QIDI TPU 95A-HF" + ], + "QD_1_1_6": [ + "Qidi/QIDI WOOD Rapido" + ], + "QD_1_1_7": [ + "Qidi/QIDI PLA Basic" + ], + "QD_1_1_8": [ + "Qidi/QIDI PLA Matte Basic" + ], + "QD_2_0_1": [ + "Qidi/Generic PLA" + ], + "QD_2_0_11": [ + "Qidi/Generic ABS" + ], + "QD_2_0_23": [ + "Qidi/Generic PC" + ], + "QD_2_0_4": [ + "Qidi/Generic PLA Silk" + ], + "QD_2_0_41": [ + "Qidi/Generic PETG" + ], + "QD_2_0_50": [ + "Qidi/Generic TPU 95A" + ], + "QD_2_1_1": [ + "Qidi/QIDI PLA Rapido" + ], + "QD_2_1_11": [ + "Qidi/QIDI ABS Rapido" + ], + "QD_2_1_12": [ + "Qidi/QIDI ABS-GF" + ], + "QD_2_1_13": [ + "Qidi/QIDI ABS Rapido Metal" + ], + "QD_2_1_14": [ + "Qidi/QIDI ABS Odorless" + ], + "QD_2_1_15": [ + "Qidi/QIDI TPU-GF" + ], + "QD_2_1_18": [ + "Qidi/QIDI ASA" + ], + "QD_2_1_19": [ + "Qidi/QIDI ASA-Aero" + ], + "QD_2_1_2": [ + "Qidi/QIDI PLA Rapido Matte" + ], + "QD_2_1_20": [ + "Qidi/QIDI ASA-CF" + ], + "QD_2_1_24": [ + "Qidi/QIDI UltraPA" + ], + "QD_2_1_26": [ + "Qidi/QIDI UltraPA-CF25" + ], + "QD_2_1_27": [ + "Qidi/QIDI PA12-CF" + ], + "QD_2_1_3": [ + "Qidi/QIDI PLA Rapido Metal" + ], + "QD_2_1_30": [ + "Qidi/QIDI PAHT-CF" + ], + "QD_2_1_31": [ + "Qidi/QIDI PAHT-GF" + ], + "QD_2_1_32": [ + "Qidi/QIDI Support For PAHT" + ], + "QD_2_1_33": [ + "Qidi/QIDI Support For PET/PA" + ], + "QD_2_1_34": [ + "Qidi/QIDI PC-ABS-FR" + ], + "QD_2_1_36": [ + "Qidi/QIDI PEBA 95A" + ], + "QD_2_1_37": [ + "Qidi/QIDI PET-CF" + ], + "QD_2_1_38": [ + "Qidi/QIDI PET-GF" + ], + "QD_2_1_39": [ + "Qidi/QIDI PETG Basic" + ], + "QD_2_1_4": [ + "Qidi/QIDI PLA Rapido Silk" + ], + "QD_2_1_40": [ + "Qidi/QIDI PETG Tough" + ], + "QD_2_1_41": [ + "Qidi/QIDI PETG Rapido" + ], + "QD_2_1_42": [ + "Qidi/QIDI PETG-CF" + ], + "QD_2_1_43": [ + "Qidi/QIDI PETG-GF" + ], + "QD_2_1_44": [ + "Qidi/QIDI PPS-CF" + ], + "QD_2_1_45": [ + "Qidi/QIDI PETG Translucent" + ], + "QD_2_1_46": [ + "Qidi/QIDI PPS-GF" + ], + "QD_2_1_49": [ + "Qidi/QIDI TPU-Aero" + ], + "QD_2_1_5": [ + "Qidi/QIDI PLA-CF" + ], + "QD_2_1_50": [ + "Qidi/QIDI TPU 95A-HF" + ], + "QD_2_1_6": [ + "Qidi/QIDI WOOD Rapido" + ], + "QD_2_1_7": [ + "Qidi/QIDI PLA Basic" + ], + "QD_2_1_8": [ + "Qidi/QIDI PLA Matte Basic" + ], + "QD_3_0_1": [ + "Qidi/Generic PLA" + ], + "QD_3_0_11": [ + "Qidi/Generic ABS" + ], + "QD_3_0_23": [ + "Qidi/Generic PC" + ], + "QD_3_0_4": [ + "Qidi/Generic PLA Silk" + ], + "QD_3_0_41": [ + "Qidi/Generic PETG" + ], + "QD_3_0_50": [ + "Qidi/Generic TPU 95A" + ], + "QD_3_1_1": [ + "Qidi/QIDI PLA Rapido" + ], + "QD_3_1_11": [ + "Qidi/QIDI ABS Rapido" + ], + "QD_3_1_12": [ + "Qidi/QIDI ABS-GF" + ], + "QD_3_1_13": [ + "Qidi/QIDI ABS Rapido Metal" + ], + "QD_3_1_14": [ + "Qidi/QIDI ABS Odorless" + ], + "QD_3_1_15": [ + "Qidi/QIDI TPU-GF" + ], + "QD_3_1_18": [ + "Qidi/QIDI ASA" + ], + "QD_3_1_19": [ + "Qidi/QIDI ASA-Aero" + ], + "QD_3_1_2": [ + "Qidi/QIDI PLA Rapido Matte" + ], + "QD_3_1_20": [ + "Qidi/QIDI ASA-CF" + ], + "QD_3_1_24": [ + "Qidi/QIDI UltraPA" + ], + "QD_3_1_26": [ + "Qidi/QIDI UltraPA-CF25" + ], + "QD_3_1_27": [ + "Qidi/QIDI PA12-CF" + ], + "QD_3_1_3": [ + "Qidi/QIDI PLA Rapido Metal" + ], + "QD_3_1_30": [ + "Qidi/QIDI PAHT-CF" + ], + "QD_3_1_31": [ + "Qidi/QIDI PAHT-GF" + ], + "QD_3_1_32": [ + "Qidi/QIDI Support For PAHT" + ], + "QD_3_1_33": [ + "Qidi/QIDI Support For PET/PA" + ], + "QD_3_1_34": [ + "Qidi/QIDI PC/ABS-FR" + ], + "QD_3_1_36": [ + "Qidi/QIDI PEBA 95A" + ], + "QD_3_1_37": [ + "Qidi/QIDI PET-CF" + ], + "QD_3_1_38": [ + "Qidi/QIDI PET-GF" + ], + "QD_3_1_39": [ + "Qidi/QIDI PETG Basic" + ], + "QD_3_1_4": [ + "Qidi/QIDI PLA Rapido Silk" + ], + "QD_3_1_40": [ + "Qidi/QIDI PETG Tough" + ], + "QD_3_1_41": [ + "Qidi/QIDI PETG Rapido" + ], + "QD_3_1_42": [ + "Qidi/QIDI PETG-CF" + ], + "QD_3_1_43": [ + "Qidi/QIDI PETG-GF" + ], + "QD_3_1_44": [ + "Qidi/QIDI PPS-CF" + ], + "QD_3_1_45": [ + "Qidi/QIDI PETG Translucent" + ], + "QD_3_1_46": [ + "Qidi/QIDI PPS-GF" + ], + "QD_3_1_49": [ + "Qidi/QIDI TPU-Aero" + ], + "QD_3_1_5": [ + "Qidi/QIDI PLA-CF" + ], + "QD_3_1_50": [ + "Qidi/QIDI TPU 95A-HF" + ], + "QD_3_1_6": [ + "Qidi/QIDI WOOD Rapido" + ], + "QD_3_1_7": [ + "Qidi/QIDI PLA Basic" + ], + "QD_3_1_8": [ + "Qidi/QIDI PLA Matte Basic" + ], + "SMCFB001": [ + "SeeMeCNC/SeeMeCNC ABS" + ], + "SMCFG001": [ + "SeeMeCNC/SeeMeCNC PETG" + ], + "SMCFG002": [ + "SeeMeCNC/SeeMeCNC PETG-CF" + ], + "SMCFL001": [ + "SeeMeCNC/SeeMeCNC PLA" + ], + "SMCFN001": [ + "SeeMeCNC/SeeMeCNC PA-CF" + ], + "SMCFU001": [ + "SeeMeCNC/SeeMeCNC TPU" + ], + "VLMNT01": [ + "OrcaFilamentLibrary/Valment PLA" + ], + "VLMNT02": [ + "OrcaFilamentLibrary/Valment PLA Silk" + ], + "VLMNT03": [ + "OrcaFilamentLibrary/Valment PLA-CF" + ], + "VLMNT04": [ + "OrcaFilamentLibrary/Valment PLA Galaxy" + ] + }, + "instantiated_with_id": [ + "Afinia/Afinia ABS", + "Afinia/Afinia ABS+", + "Afinia/Afinia ABS+@HS", + "Afinia/Afinia ABS@HS", + "Afinia/Afinia PLA", + "Afinia/Afinia PLA@HS", + "Afinia/Afinia TPU", + "Afinia/Afinia TPU@HS", + "Afinia/Afinia Value ABS", + "Afinia/Afinia Value ABS@HS", + "Afinia/Afinia Value PLA", + "Afinia/Afinia Value PLA@HS", + "Anycubic/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle", + "Anycubic/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle", + "Anycubic/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle", + "Anycubic/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle", + "Anycubic/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic ABS @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle", + "Anycubic/Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle", + "Anycubic/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle", + "Anycubic/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle", + "Anycubic/Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic ASA @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic Generic ABS", + "Anycubic/Anycubic Generic ASA", + "Anycubic/Anycubic Generic PA", + "Anycubic/Anycubic Generic PA-CF", + "Anycubic/Anycubic Generic PC", + "Anycubic/Anycubic Generic PETG", + "Anycubic/Anycubic Generic PLA", + "Anycubic/Anycubic Generic PLA-CF", + "Anycubic/Anycubic Generic PVA", + "Anycubic/Anycubic Generic TPU", + "Anycubic/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PETG @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle", + "Anycubic/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic PVA @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle", + "Anycubic/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle", + "Anycubic/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle", + "Anycubic/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle", + "Anycubic/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle", + "Anycubic/Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Fiberon PA6-CF20 @Anycubic Kobra S1", + "Anycubic/Generic ABS @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle", + "Anycubic/Generic PETG @Anycubic Kobra X 0.4 nozzle", + "Anycubic/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic/Generic TPU @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Panchroma PLA @Anycubic Kobra S1", + "Anycubic/Polymaker PLA Pro @Anycubic Kobra S1", + "Anycubic/Polymaker PLA Pro Metallic @Anycubic Kobra S1", + "Artillery/Artillery ABS @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery ABS @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery ABS @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery ASA @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery ASA @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery ASA @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery Generic ABS", + "Artillery/Artillery Generic ASA", + "Artillery/Artillery Generic PETG", + "Artillery/Artillery Generic PLA", + "Artillery/Artillery Generic PLA-CF", + "Artillery/Artillery Generic TPU", + "Artillery/Artillery PET @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PET @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery PET @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery PETG @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PETG @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery PETG @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery PLA @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PLA @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery PLA @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery PVA @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PVA @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery PVA @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery TPU @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery TPU @Artillery M1 Pro 0.8 nozzle", + "BBL/Generic SBS", + "Blocks/Blocks Generic ABS", + "Blocks/Blocks Generic ASA", + "Blocks/Blocks Generic ASA-CF", + "Blocks/Blocks Generic PA", + "Blocks/Blocks Generic PA-CF", + "Blocks/Blocks Generic PC", + "Blocks/Blocks Generic PETG", + "Blocks/Blocks Generic PLA", + "Blocks/Blocks Generic PLA-CF", + "Blocks/Blocks Generic PVA", + "Blocks/Blocks Generic TPU", + "CONSTRUCT3D/C1 Generic High Flow PETG", + "CONSTRUCT3D/C1 Generic PETG", + "CONSTRUCT3D/C1 Generic PLA", + "Chuanying/Chuanying ABS @Chuanying X1 0.25 Nozzle", + "Chuanying/Chuanying ASA @Chuanying X1 0.25 Nozzle", + "Chuanying/Chuanying Generic ABS", + "Chuanying/Chuanying Generic ASA", + "Chuanying/Chuanying Generic HIPS", + "Chuanying/Chuanying Generic HS PLA", + "Chuanying/Chuanying Generic PETG", + "Chuanying/Chuanying Generic PETG-CF10", + "Chuanying/Chuanying Generic PLA", + "Chuanying/Chuanying Generic PLA-CF10", + "Chuanying/Chuanying Generic PLA-Silk", + "Chuanying/Chuanying Generic PVA", + "Chuanying/Chuanying Generic TPU", + "Chuanying/Chuanying HS PLA @Chuanying X1 0.25 Nozzle", + "Chuanying/Chuanying PETG @Chuanying X1 0.25 Nozzle", + "Chuanying/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle", + "Co Print/CoPrint Generic ABS", + "Co Print/CoPrint Generic PETG", + "Co Print/CoPrint Generic PLA", + "Co Print/CoPrint Generic TPU", + "CoLiDo/CoLiDo ABS @CoLiDo SR1", + "CoLiDo/CoLiDo Generic ABS @CoLiDo DIY 4.0", + "CoLiDo/CoLiDo Generic ABS @CoLiDo X16", + "CoLiDo/CoLiDo Generic PETG @CoLiDo DIY 4.0", + "CoLiDo/CoLiDo Generic PETG @CoLiDo X16", + "CoLiDo/CoLiDo Generic PLA @CoLiDo DIY 4.0", + "CoLiDo/CoLiDo Generic PLA @CoLiDo X16", + "CoLiDo/CoLiDo Generic TPU @CoLiDo DIY 4.0", + "CoLiDo/CoLiDo Generic TPU @CoLiDo X16", + "CoLiDo/CoLiDo PETG @CoLiDo SR1", + "CoLiDo/CoLiDo PLA @CoLiDo SR1", + "CoLiDo/CoLiDo PLA Silk @CoLiDo SR1", + "CoLiDo/CoLiDo PLA+ @CoLiDo DIY 4.0 V2", + "Comgrow/Comgrow Generic ABS", + "Comgrow/Comgrow Generic PETG", + "Comgrow/Comgrow Generic PLA", + "Comgrow/Comgrow T300 PLA", + "Creality/CR-ABS @Ender-3 V4-all", + "Creality/CR-ABS @Hi-all", + "Creality/CR-ABS @K1 Max_CFS-C-all", + "Creality/CR-ABS @K1 SE-all", + "Creality/CR-ABS @K1 SE_CFS-C-all", + "Creality/CR-ABS @K1C-all", + "Creality/CR-ABS @K1C_CFS-C-all", + "Creality/CR-ABS @K1_CFS-C-all", + "Creality/CR-ABS @K2 Plus-all", + "Creality/CR-ABS @K2 Pro-all", + "Creality/CR-ABS @K2 SE-all", + "Creality/CR-ABS @K2-all", + "Creality/CR-Nylon @K1 Max_CFS-C-all", + "Creality/CR-Nylon @K1C-all", + "Creality/CR-Nylon @K1C_CFS-C-all", + "Creality/CR-Nylon @K1_CFS-C-all", + "Creality/CR-Nylon @K2 Plus-all", + "Creality/CR-PETG @Ender-3 V4-all", + "Creality/CR-PETG @Hi-all", + "Creality/CR-PETG @K1 Max_CFS-C-all", + "Creality/CR-PETG @K1 SE-all", + "Creality/CR-PETG @K1 SE_CFS-C-all", + "Creality/CR-PETG @K1C-all", + "Creality/CR-PETG @K1C_CFS-C-all", + "Creality/CR-PETG @K1_CFS-C-all", + "Creality/CR-PETG @K2 Plus-all", + "Creality/CR-PETG @K2 Pro-all", + "Creality/CR-PETG @K2 SE-all", + "Creality/CR-PETG @K2-all", + "Creality/CR-PETG @SPARKX i7-all", + "Creality/CR-PLA @Ender-3 V4-all", + "Creality/CR-PLA @Hi-all", + "Creality/CR-PLA @K1 Max_CFS-C-all", + "Creality/CR-PLA @K1 SE-all", + "Creality/CR-PLA @K1 SE_CFS-C-all", + "Creality/CR-PLA @K1C-all", + "Creality/CR-PLA @K1C_CFS-C-all", + "Creality/CR-PLA @K1_CFS-C-all", + "Creality/CR-PLA @K2 Plus-all", + "Creality/CR-PLA @K2 Pro-all", + "Creality/CR-PLA @K2 SE-all", + "Creality/CR-PLA @K2-all", + "Creality/CR-PLA @SPARKX i7-all", + "Creality/CR-PLA Carbon @K1 Max_CFS-C-all", + "Creality/CR-PLA Carbon @K1C-all", + "Creality/CR-PLA Carbon @K1C_CFS-C-all", + "Creality/CR-PLA Carbon @K1_CFS-C-all", + "Creality/CR-PLA Carbon @K2 Plus-all", + "Creality/CR-PLA Fluo @K1 Max_CFS-C-all", + "Creality/CR-PLA Fluo @K1C-all", + "Creality/CR-PLA Fluo @K1C_CFS-C-all", + "Creality/CR-PLA Fluo @K1_CFS-C-all", + "Creality/CR-PLA Fluo @K2 Plus-all", + "Creality/CR-PLA Fluo @K2 Pro-all", + "Creality/CR-PLA Fluo @K2-all", + "Creality/CR-PLA Fluo @SPARKX i7-all", + "Creality/CR-PLA Matte @Ender-3 V4-all", + "Creality/CR-PLA Matte @K1 Max_CFS-C-all", + "Creality/CR-PLA Matte @K1C-all", + "Creality/CR-PLA Matte @K1C_CFS-C-all", + "Creality/CR-PLA Matte @K1_CFS-C-all", + "Creality/CR-PLA Matte @K2 Plus-all", + "Creality/CR-PLA Matte @K2 Pro-all", + "Creality/CR-PLA Matte @K2-all", + "Creality/CR-PLA Matte @SPARKX i7-all", + "Creality/CR-Silk @Ender-3 V4-all", + "Creality/CR-Silk @Hi-all", + "Creality/CR-Silk @K1 Max_CFS-C-all", + "Creality/CR-Silk @K1 SE-all", + "Creality/CR-Silk @K1 SE_CFS-C-all", + "Creality/CR-Silk @K1C-all", + "Creality/CR-Silk @K1C_CFS-C-all", + "Creality/CR-Silk @K1_CFS-C-all", + "Creality/CR-Silk @K2 Plus-all", + "Creality/CR-Silk @K2 Pro-all", + "Creality/CR-Silk @K2 SE-all", + "Creality/CR-Silk @K2-all", + "Creality/CR-Silk @SPARKX i7-all", + "Creality/CR-TPU @K1 Max_CFS-C-all", + "Creality/CR-TPU @K1C-all", + "Creality/CR-TPU @K1C_CFS-C-all", + "Creality/CR-TPU @K1_CFS-C-all", + "Creality/CR-TPU @K2 Plus-all", + "Creality/CR-TPU @K2 Pro-all", + "Creality/CR-TPU @K2-all", + "Creality/CR-TPU @SPARKX i7-all", + "Creality/CR-Wood @K1 Max_CFS-C-all", + "Creality/CR-Wood @K1C-all", + "Creality/CR-Wood @K1C_CFS-C-all", + "Creality/CR-Wood @K1_CFS-C-all", + "Creality/CR-Wood @K2 Plus-all", + "Creality/Creality Generic ABS", + "Creality/Creality Generic ABS @Ender-5Max-all", + "Creality/Creality Generic ASA", + "Creality/Creality Generic ASA @Ender-5Max-all", + "Creality/Creality Generic PA @Ender-5Max-all", + "Creality/Creality Generic PA-CF", + "Creality/Creality Generic PETG", + "Creality/Creality Generic PETG @Ender-5Max-all", + "Creality/Creality Generic PLA", + "Creality/Creality Generic PLA @Ender-5Max-all", + "Creality/Creality Generic PLA-CF", + "Creality/Creality Generic TPU", + "Creality/Creality Generic TPU @Ender-5Max-all", + "Creality/Creality HF Generic PLA", + "Creality/Creality HF Generic Speed PLA", + "Creality/Creality Hyper ABS @Ender-5Max-all", + "Creality/Creality Hyper PLA @Ender-5Max-all", + "Creality/Creality Hyper PLA-CF @Ender-5Max-all", + "Creality/Creality Silk PLA @Ender-5Max-all", + "Creality/EN-PLA+ @K1 Max_CFS-C-all", + "Creality/EN-PLA+ @K1C-all", + "Creality/EN-PLA+ @K1C_CFS-C-all", + "Creality/EN-PLA+ @K1_CFS-C-all", + "Creality/EN-PLA+ @K2 Plus-all", + "Creality/EN-PLA+ @K2 Pro-all", + "Creality/EN-PLA+ @K2-all", + "Creality/EN-PLA+ @SPARKX i7-all", + "Creality/ENDER FAST PLA @Hi-all", + "Creality/ENDER FAST PLA @K2 Plus-all", + "Creality/ENDER FAST PLA @K2 Pro-all", + "Creality/ENDER FAST PLA @K2-all", + "Creality/ENDER FAST PLA @SPARKX i7-all", + "Creality/Ender-PLA @Ender-3 V4-all", + "Creality/Ender-PLA @Hi-all", + "Creality/Ender-PLA @K1 Max_CFS-C-all", + "Creality/Ender-PLA @K1C-all", + "Creality/Ender-PLA @K1C_CFS-C-all", + "Creality/Ender-PLA @K1_CFS-C-all", + "Creality/Ender-PLA @K2 Plus-all", + "Creality/Ender-PLA @K2 Pro-all", + "Creality/Ender-PLA @K2-all", + "Creality/Ender-PLA @SPARKX i7-all", + "Creality/Generic ABS @Ender-3 V4-all", + "Creality/Generic ABS @Hi-all", + "Creality/Generic ABS @K1 Max_CFS-C-all", + "Creality/Generic ABS @K1 SE-all", + "Creality/Generic ABS @K1 SE_CFS-C-all", + "Creality/Generic ABS @K1C-all", + "Creality/Generic ABS @K1C_CFS-C-all", + "Creality/Generic ABS @K1_CFS-C-all", + "Creality/Generic ABS @K2 Plus-all", + "Creality/Generic ABS @K2 Pro-all", + "Creality/Generic ABS @K2 SE-all", + "Creality/Generic ABS @K2-all", + "Creality/Generic ASA @K1 Max_CFS-C-all", + "Creality/Generic ASA @K1 SE-all", + "Creality/Generic ASA @K1 SE_CFS-C-all", + "Creality/Generic ASA @K1C-all", + "Creality/Generic ASA @K1C_CFS-C-all", + "Creality/Generic ASA @K1_CFS-C-all", + "Creality/Generic ASA @K2 Plus-all", + "Creality/Generic ASA @K2 Pro-all", + "Creality/Generic ASA @K2 SE-all", + "Creality/Generic ASA @K2-all", + "Creality/Generic ASA-CF @K2 Plus-all", + "Creality/Generic BVOH @Hi-all", + "Creality/Generic BVOH @K1 Max_CFS-C-all", + "Creality/Generic BVOH @K1C-all", + "Creality/Generic BVOH @K1C_CFS-C-all", + "Creality/Generic BVOH @K1_CFS-C-all", + "Creality/Generic BVOH @K2 Plus-all", + "Creality/Generic BVOH @K2 Pro-all", + "Creality/Generic BVOH @K2-all", + "Creality/Generic HIPS @K1 Max_CFS-C-all", + "Creality/Generic HIPS @K1C-all", + "Creality/Generic HIPS @K1C_CFS-C-all", + "Creality/Generic HIPS @K1_CFS-C-all", + "Creality/Generic HIPS @K2 Plus-all", + "Creality/Generic PA @K1 Max_CFS-C-all", + "Creality/Generic PA @K1C-all", + "Creality/Generic PA @K1C_CFS-C-all", + "Creality/Generic PA @K1_CFS-C-all", + "Creality/Generic PA @K2 Plus-all", + "Creality/Generic PA @K2 Pro-all", + "Creality/Generic PA @K2-all", + "Creality/Generic PA-CF @K1 Max_CFS-C-all", + "Creality/Generic PA-CF @K1C-all", + "Creality/Generic PA-CF @K1C_CFS-C-all", + "Creality/Generic PA-CF @K1_CFS-C-all", + "Creality/Generic PA-CF @K2 Plus-all", + "Creality/Generic PA12-CF @K2 Plus-all", + "Creality/Generic PA6-CF @K1 Max_CFS-C-all", + "Creality/Generic PA6-CF @K1C-all", + "Creality/Generic PA6-CF @K1C_CFS-C-all", + "Creality/Generic PA6-CF @K1_CFS-C-all", + "Creality/Generic PA6-CF @K2 Plus-all", + "Creality/Generic PA6-CF @K2 Pro-all", + "Creality/Generic PA6-GF @K2 Plus-all", + "Creality/Generic PA612-CF @K2 Plus-all", + "Creality/Generic PA612-CF @K2 Pro-all", + "Creality/Generic PAHT-CF @K1 Max_CFS-C-all", + "Creality/Generic PAHT-CF @K1C-all", + "Creality/Generic PAHT-CF @K1C_CFS-C-all", + "Creality/Generic PAHT-CF @K1_CFS-C-all", + "Creality/Generic PAHT-CF @K2 Plus-all", + "Creality/Generic PAHT-CF @K2 Pro-all", + "Creality/Generic PAHT-CF @K2-all", + "Creality/Generic PC @K1 Max_CFS-C-all", + "Creality/Generic PC @K1C-all", + "Creality/Generic PC @K1C_CFS-C-all", + "Creality/Generic PC @K1_CFS-C-all", + "Creality/Generic PC @K2 Plus-all", + "Creality/Generic PC @K2 Pro-all", + "Creality/Generic PCTG @K2 Plus-all", + "Creality/Generic PET @K1 Max_CFS-C-all", + "Creality/Generic PET @K1C-all", + "Creality/Generic PET @K1C_CFS-C-all", + "Creality/Generic PET @K1_CFS-C-all", + "Creality/Generic PET @K2 Plus-all", + "Creality/Generic PET @K2 Pro-all", + "Creality/Generic PET @K2-all", + "Creality/Generic PET-CF @K1 Max_CFS-C-all", + "Creality/Generic PET-CF @K1C-all", + "Creality/Generic PET-CF @K1C_CFS-C-all", + "Creality/Generic PET-CF @K1_CFS-C-all", + "Creality/Generic PET-CF @K2 Plus-all", + "Creality/Generic PET-CF @K2 Pro-all", + "Creality/Generic PETG @Ender-3 V4-all", + "Creality/Generic PETG @Hi-all", + "Creality/Generic PETG @K1 Max_CFS-C-all", + "Creality/Generic PETG @K1 SE-all", + "Creality/Generic PETG @K1 SE_CFS-C-all", + "Creality/Generic PETG @K1C-all", + "Creality/Generic PETG @K1C_CFS-C-all", + "Creality/Generic PETG @K1_CFS-C-all", + "Creality/Generic PETG @K2 Plus-all", + "Creality/Generic PETG @K2 Pro-all", + "Creality/Generic PETG @K2 SE-all", + "Creality/Generic PETG @K2-all", + "Creality/Generic PETG @SPARKX i7-all", + "Creality/Generic PETG-CF @K1 Max_CFS-C-all", + "Creality/Generic PETG-CF @K1C-all", + "Creality/Generic PETG-CF @K1C_CFS-C-all", + "Creality/Generic PETG-CF @K1_CFS-C-all", + "Creality/Generic PETG-CF @K2 Plus-all", + "Creality/Generic PETG-CF @K2 Pro-all", + "Creality/Generic PETG-CF @K2-all", + "Creality/Generic PETG-CF @SPARKX i7-all", + "Creality/Generic PETG-GF @K2 Plus-all", + "Creality/Generic PETG-GF @K2 Pro-all", + "Creality/Generic PETG-GF @K2-all", + "Creality/Generic PLA @Ender-3 V4-all", + "Creality/Generic PLA @Hi-all", + "Creality/Generic PLA @K1 Max_CFS-C-all", + "Creality/Generic PLA @K1 SE-all", + "Creality/Generic PLA @K1 SE_CFS-C-all", + "Creality/Generic PLA @K1C-all", + "Creality/Generic PLA @K1C_CFS-C-all", + "Creality/Generic PLA @K1_CFS-C-all", + "Creality/Generic PLA @K2 Plus-all", + "Creality/Generic PLA @K2 Pro-all", + "Creality/Generic PLA @K2 SE-all", + "Creality/Generic PLA @K2-all", + "Creality/Generic PLA @SPARKX i7-all", + "Creality/Generic PLA-CF @Ender-3 V4-all", + "Creality/Generic PLA-CF @K1 Max_CFS-C-all", + "Creality/Generic PLA-CF @K1 SE-all", + "Creality/Generic PLA-CF @K1 SE_CFS-C-all", + "Creality/Generic PLA-CF @K1C-all", + "Creality/Generic PLA-CF @K1C_CFS-C-all", + "Creality/Generic PLA-CF @K1_CFS-C-all", + "Creality/Generic PLA-CF @K2 Plus-all", + "Creality/Generic PLA-CF @K2 Pro-all", + "Creality/Generic PLA-CF @K2 SE-all", + "Creality/Generic PLA-CF @K2-all", + "Creality/Generic PLA-CF @SPARKX i7-all", + "Creality/Generic PLA-Silk @Ender-3 V4-all", + "Creality/Generic PLA-Silk @Hi-all", + "Creality/Generic PLA-Silk @K1 Max_CFS-C-all", + "Creality/Generic PLA-Silk @K1 SE-all", + "Creality/Generic PLA-Silk @K1 SE_CFS-C-all", + "Creality/Generic PLA-Silk @K1C-all", + "Creality/Generic PLA-Silk @K1C_CFS-C-all", + "Creality/Generic PLA-Silk @K1_CFS-C-all", + "Creality/Generic PLA-Silk @K2 Plus-all", + "Creality/Generic PLA-Silk @K2 Pro-all", + "Creality/Generic PLA-Silk @K2 SE-all", + "Creality/Generic PLA-Silk @K2-all", + "Creality/Generic PLA-Silk @SPARKX i7-all", + "Creality/Generic PP @K1 Max_CFS-C-all", + "Creality/Generic PP @K1C-all", + "Creality/Generic PP @K1C_CFS-C-all", + "Creality/Generic PP @K1_CFS-C-all", + "Creality/Generic PP @K2 Plus-all", + "Creality/Generic PP @K2 Pro-all", + "Creality/Generic PP @K2-all", + "Creality/Generic PP-CF @K2 Plus-all", + "Creality/Generic PPS @K1 Max_CFS-C-all", + "Creality/Generic PPS @K1C-all", + "Creality/Generic PPS @K1C_CFS-C-all", + "Creality/Generic PPS @K1_CFS-C-all", + "Creality/Generic PPS @K2 Plus-all", + "Creality/Generic PPS-CF @K1 Max_CFS-C-all", + "Creality/Generic PPS-CF @K1C-all", + "Creality/Generic PPS-CF @K1C_CFS-C-all", + "Creality/Generic PPS-CF @K1_CFS-C-all", + "Creality/Generic PPS-CF @K2 Plus-all", + "Creality/Generic PVA @Hi-all", + "Creality/Generic PVA @K1 Max_CFS-C-all", + "Creality/Generic PVA @K1C-all", + "Creality/Generic PVA @K1C_CFS-C-all", + "Creality/Generic PVA @K1_CFS-C-all", + "Creality/Generic PVA @K2 Plus-all", + "Creality/Generic PVA @K2 Pro-all", + "Creality/Generic PVA @K2-all", + "Creality/Generic Support for PA @K2 Plus-all", + "Creality/Generic Support for PLA @K2 Plus-all", + "Creality/Generic TPU 64D @K2 Plus-all", + "Creality/Generic TPU 64D @SPARKX i7-all", + "Creality/Generic TPU @Ender-3 V4-all", + "Creality/Generic TPU @K1 Max_CFS-C-all", + "Creality/Generic TPU @K1 SE-all", + "Creality/Generic TPU @K1 SE_CFS-C-all", + "Creality/Generic TPU @K1C-all", + "Creality/Generic TPU @K1C_CFS-C-all", + "Creality/Generic TPU @K1_CFS-C-all", + "Creality/Generic TPU @K2 Plus-all", + "Creality/Generic TPU @K2 Pro-all", + "Creality/Generic TPU @K2 SE-all", + "Creality/Generic TPU @K2-all", + "Creality/Generic TPU @SPARKX i7-all", + "Creality/HP Ultra PLA @K1 Max_CFS-C-all", + "Creality/HP Ultra PLA @K1C-all", + "Creality/HP Ultra PLA @K1C_CFS-C-all", + "Creality/HP Ultra PLA @K1_CFS-C-all", + "Creality/HP Ultra PLA @K2 Plus-all", + "Creality/HP-ASA @K1 Max_CFS-C-all", + "Creality/HP-ASA @K1C-all", + "Creality/HP-ASA @K1C_CFS-C-all", + "Creality/HP-ASA @K1_CFS-C-all", + "Creality/HP-ASA @K2 Plus-all", + "Creality/HP-ASA @K2 Pro-all", + "Creality/HP-ASA @K2 SE-all", + "Creality/HP-ASA @K2-all", + "Creality/HP-TPU @Ender-3 V4-all", + "Creality/HP-TPU @Hi-all", + "Creality/HP-TPU @K1 Max_CFS-C-all", + "Creality/HP-TPU @K1 SE-all", + "Creality/HP-TPU @K1 SE_CFS-C-all", + "Creality/HP-TPU @K1C-all", + "Creality/HP-TPU @K1C_CFS-C-all", + "Creality/HP-TPU @K1_CFS-C-all", + "Creality/HP-TPU @K2 Plus-all", + "Creality/HP-TPU @K2 Pro-all", + "Creality/HP-TPU @K2 SE-all", + "Creality/HP-TPU @K2-all", + "Creality/HP-TPU @SPARKX i7-all", + "Creality/Hyper ABS @Ender-3 V4-all", + "Creality/Hyper ABS @Hi-all", + "Creality/Hyper ABS @K1 Max_CFS-C-all", + "Creality/Hyper ABS @K1 SE-all", + "Creality/Hyper ABS @K1 SE_CFS-C-all", + "Creality/Hyper ABS @K1C-all", + "Creality/Hyper ABS @K1C_CFS-C-all", + "Creality/Hyper ABS @K1_CFS-C-all", + "Creality/Hyper ABS @K2 Plus-all", + "Creality/Hyper ABS @K2 Pro-all", + "Creality/Hyper ABS @K2 SE-all", + "Creality/Hyper ABS @K2-all", + "Creality/Hyper L-W PLA @Hi-all", + "Creality/Hyper L-W PLA @K1 Max_CFS-C-all", + "Creality/Hyper L-W PLA @K1 SE-all", + "Creality/Hyper L-W PLA @K1 SE_CFS-C-all", + "Creality/Hyper L-W PLA @K1C-all", + "Creality/Hyper L-W PLA @K1C_CFS-C-all", + "Creality/Hyper L-W PLA @K1_CFS-C-all", + "Creality/Hyper L-W PLA @K2 Plus-all", + "Creality/Hyper L-W PLA @K2 Pro-all", + "Creality/Hyper L-W PLA @K2-all", + "Creality/Hyper Luminous @Hi-all", + "Creality/Hyper Luminous @K1C-all", + "Creality/Hyper Luminous @K2 Plus-all", + "Creality/Hyper Luminous @K2 Pro-all", + "Creality/Hyper Luminous @K2-all", + "Creality/Hyper Luminous @SPARKX i7-all", + "Creality/Hyper Marble @Hi-all", + "Creality/Hyper Marble @K1 Max_CFS-C-all", + "Creality/Hyper Marble @K1C-all", + "Creality/Hyper Marble @K1C_CFS-C-all", + "Creality/Hyper Marble @K1_CFS-C-all", + "Creality/Hyper Marble @K2 Plus-all", + "Creality/Hyper Marble @K2 Pro-all", + "Creality/Hyper Marble @K2 SE-all", + "Creality/Hyper Marble @K2-all", + "Creality/Hyper Marble @SPARKX i7-all", + "Creality/Hyper PA6-CF @K2 Plus-all", + "Creality/Hyper PA6-CF @K2 Pro-all", + "Creality/Hyper PA612-CF @K2 Plus-all", + "Creality/Hyper PA612-CF @K2 Pro-all", + "Creality/Hyper PAHT-CF @K1 Max_CFS-C-all", + "Creality/Hyper PAHT-CF @K1C-all", + "Creality/Hyper PAHT-CF @K1C_CFS-C-all", + "Creality/Hyper PAHT-CF @K1_CFS-C-all", + "Creality/Hyper PAHT-CF @K2 Plus-all", + "Creality/Hyper PAHT-CF @K2 Pro-all", + "Creality/Hyper PAHT-CF @K2-all", + "Creality/Hyper PC @K2 Plus-all", + "Creality/Hyper PC @K2 Pro-all", + "Creality/Hyper PETG @Ender-3 V4-all", + "Creality/Hyper PETG @Hi-all", + "Creality/Hyper PETG @K1 Max_CFS-C-all", + "Creality/Hyper PETG @K1 SE-all", + "Creality/Hyper PETG @K1 SE_CFS-C-all", + "Creality/Hyper PETG @K1C-all", + "Creality/Hyper PETG @K1C_CFS-C-all", + "Creality/Hyper PETG @K1_CFS-C-all", + "Creality/Hyper PETG @K2 Plus-all", + "Creality/Hyper PETG @K2 Pro-all", + "Creality/Hyper PETG @K2 SE-all", + "Creality/Hyper PETG @K2-all", + "Creality/Hyper PETG @SPARKX i7-all", + "Creality/Hyper PETG-CF @K1 Max_CFS-C-all", + "Creality/Hyper PETG-CF @K1C-all", + "Creality/Hyper PETG-CF @K1C_CFS-C-all", + "Creality/Hyper PETG-CF @K1_CFS-C-all", + "Creality/Hyper PETG-CF @K2 Plus-all", + "Creality/Hyper PETG-CF @K2 Pro-all", + "Creality/Hyper PETG-CF @K2-all", + "Creality/Hyper PETG-CF @SPARKX i7-all", + "Creality/Hyper PETG-GF @K1C-all", + "Creality/Hyper PETG-GF @K2 Plus-all", + "Creality/Hyper PETG-GF @K2 Pro-all", + "Creality/Hyper PETG-GF @K2-all", + "Creality/Hyper PLA @Ender-3 V4-all", + "Creality/Hyper PLA @Hi-all", + "Creality/Hyper PLA @K1 Max_CFS-C-all", + "Creality/Hyper PLA @K1 SE-all", + "Creality/Hyper PLA @K1 SE_CFS-C-all", + "Creality/Hyper PLA @K1C-all", + "Creality/Hyper PLA @K1C_CFS-C-all", + "Creality/Hyper PLA @K1_CFS-C-all", + "Creality/Hyper PLA @K2 Plus-all", + "Creality/Hyper PLA @K2 Pro-all", + "Creality/Hyper PLA @K2 SE-all", + "Creality/Hyper PLA @K2-all", + "Creality/Hyper PLA @SPARKX i7-all", + "Creality/Hyper PLA-CF @Ender-3 V4-all", + "Creality/Hyper PLA-CF @Hi-all", + "Creality/Hyper PLA-CF @K1 Max_CFS-C-all", + "Creality/Hyper PLA-CF @K1 SE-all", + "Creality/Hyper PLA-CF @K1 SE_CFS-C-all", + "Creality/Hyper PLA-CF @K1C-all", + "Creality/Hyper PLA-CF @K1C_CFS-C-all", + "Creality/Hyper PLA-CF @K1_CFS-C-all", + "Creality/Hyper PLA-CF @K2 Plus-all", + "Creality/Hyper PLA-CF @K2 Pro-all", + "Creality/Hyper PLA-CF @K2 SE-all", + "Creality/Hyper PLA-CF @K2-all", + "Creality/Hyper PLA-CF @SPARKX i7-all", + "Creality/Hyper PPA-CF @K2 Plus-all", + "Creality/Hyper PPA-CF @K2 Pro-all", + "Creality/Hyper Stardust @Hi-all", + "Creality/Hyper Stardust @K1 Max_CFS-C-all", + "Creality/Hyper Stardust @K1C-all", + "Creality/Hyper Stardust @K1C_CFS-C-all", + "Creality/Hyper Stardust @K1_CFS-C-all", + "Creality/Hyper Stardust @K2 Plus-all", + "Creality/Hyper Stardust @K2 Pro-all", + "Creality/Hyper Stardust @K2 SE-all", + "Creality/Hyper Stardust @K2-all", + "Creality/Hyper Stardust @SPARKX i7-all", + "Creality/Panchroma PLA Matte @K2 Plus-all", + "Creality/Panchroma PLA Satin @K2 Plus-all", + "Creality/PolySonic PLA @K2 Plus-all", + "Creality/PolySonic PLA Pro @K2 Plus-all", + "Creality/Soleyin Basic PETG @Hi-all", + "Creality/Soleyin Basic PETG @K1C-all", + "Creality/Soleyin Basic PETG @K2 Plus-all", + "Creality/Soleyin Basic PETG @K2 Pro-all", + "Creality/Soleyin Basic PETG @K2-all", + "Creality/Soleyin Basic PETG @SPARKX i7-all", + "Creality/Soleyin Ultra PLA @Ender-3 V4-all", + "Creality/Soleyin Ultra PLA @Hi-all", + "Creality/Soleyin Ultra PLA @K1 Max_CFS-C-all", + "Creality/Soleyin Ultra PLA @K1C-all", + "Creality/Soleyin Ultra PLA @K1C_CFS-C-all", + "Creality/Soleyin Ultra PLA @K1_CFS-C-all", + "Creality/Soleyin Ultra PLA @K2 Plus-all", + "Creality/Soleyin Ultra PLA @K2 Pro-all", + "Creality/Soleyin Ultra PLA @K2 SE-all", + "Creality/Soleyin Ultra PLA @K2-all", + "Creality/Soleyin Ultra PLA @SPARKX i7-all", + "Creality/eSUN ABS+ @K2 Plus-all", + "Creality/eSUN ASA+ @K2 Plus-all", + "Creality/eSUN PET-Basic @K2 Plus-all", + "Creality/eSUN PETG @K2 Plus-all", + "Creality/eSUN PETG+HS @K2 Plus-all", + "Creality/eSUN PETG-Basic @K2 Plus-all", + "Creality/eSUN PLA+ @K2 Plus-all", + "Creality/eSUN PLA-CF @K2 Plus-all", + "Creality/eSUN PLA-HS @K2 Plus-all", + "Creality/eSUN PLA-LW @K2 Plus-all", + "Creality/eSUN PLA-Lite @K2 Plus-all", + "Creality/eSUN PLA-Matte @K2 Plus-all", + "Creality/eSUN PLA-Silk @K2 Plus-all", + "Cubicon/Cubicon ABS @base", + "Cubicon/Cubicon ABS-A100 @base", + "Cubicon/Cubicon ABSk @base", + "Cubicon/Cubicon PA-CF @base", + "Cubicon/Cubicon PC @base", + "Cubicon/Cubicon PETG @base", + "Cubicon/Cubicon PLA @base", + "Cubicon/Cubicon PLA+ @base", + "Cubicon/Cubicon PLAi21 @base", + "Custom/Generic PC @MyToolChanger", + "Custom/Generic PETG @MyToolChanger", + "Custom/Generic PLA @MyToolChanger", + "Custom/Generic PLA-CF @MyToolChanger", + "Custom/Generic PVA @MyToolChanger", + "Custom/Generic TPU @MyToolChanger", + "DeltaMaker/DeltaMaker Brand PLA", + "DeltaMaker/DeltaMaker Generic PETG", + "DeltaMaker/DeltaMaker Generic PLA", + "DeltaMaker/DeltaMaker Generic TPU", + "Dremel/Dremel Generic PLA", + "Eryone/Eryone ABS", + "Eryone/Eryone ABS-CF", + "Eryone/Eryone ASA", + "Eryone/Eryone ASA-CF", + "Eryone/Eryone PA", + "Eryone/Eryone PA-CF", + "Eryone/Eryone PA-GF", + "Eryone/Eryone PETG", + "Eryone/Eryone PETG-CF", + "Eryone/Eryone PLA", + "Eryone/Eryone PLA-CF", + "Eryone/Eryone PP", + "Eryone/Eryone PP-CF", + "Eryone/Eryone Silk PLA", + "Eryone/Eryone TPU", + "FLSun/FLSun Generic ABS", + "FLSun/FLSun Generic ASA", + "FLSun/FLSun Generic PA", + "FLSun/FLSun Generic PA-CF", + "FLSun/FLSun Generic PC", + "FLSun/FLSun Generic PETG", + "FLSun/FLSun Generic PLA", + "FLSun/FLSun Generic PLA-CF", + "FLSun/FLSun Generic PVA", + "FLSun/FLSun Generic TPU", + "FLSun/FLSun S1 ABS", + "FLSun/FLSun S1 ASA", + "FLSun/FLSun S1 PETG", + "FLSun/FLSun S1 PLA Generic", + "FLSun/FLSun S1 PLA High Speed", + "FLSun/FLSun S1 PLA Silk", + "FLSun/FLSun S1 TPU", + "FLSun/FLSun T1 ABS", + "FLSun/FLSun T1 ASA", + "FLSun/FLSun T1 PETG", + "FLSun/FLSun T1 PLA Generic", + "FLSun/FLSun T1 PLA High Speed", + "FLSun/FLSun T1 PLA Silk", + "FLSun/FLSun T1 TPU", + "Flashforge/Flashforge ABS", + "Flashforge/Flashforge Generic ABS", + "Flashforge/Flashforge Generic ABS @FF AD5M 0.25 Nozzle", + "Flashforge/Flashforge Generic ABS @G3U", + "Flashforge/Flashforge Generic ABS @G3U 0.6 Nozzle", + "Flashforge/Flashforge Generic ASA", + "Flashforge/Flashforge Generic ASA @FF AD5M 0.25 Nozzle", + "Flashforge/Flashforge Generic ASA @G3U", + "Flashforge/Flashforge Generic ASA @G3U 0.6 Nozzle", + "Flashforge/Flashforge Generic HIPS", + "Flashforge/Flashforge Generic HIPS @G3U 0.6 Nozzle", + "Flashforge/Flashforge Generic HS PLA", + "Flashforge/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle", + "Flashforge/Flashforge Generic PETG", + "Flashforge/Flashforge Generic PETG @FF AD5M 0.25 Nozzle", + "Flashforge/Flashforge Generic PETG @G3U", + "Flashforge/Flashforge Generic PETG @G3U 0.6 Nozzle", + "Flashforge/Flashforge Generic PETG @G3U 0.8 Nozzle", + "Flashforge/Flashforge Generic PETG-CF @G3U", + "Flashforge/Flashforge Generic PETG-CF @G3U 0.6 Nozzle", + "Flashforge/Flashforge Generic PETG-CF @G3U 0.8 Nozzle", + "Flashforge/Flashforge Generic PETG-CF10", + "Flashforge/Flashforge Generic PLA", + "Flashforge/Flashforge Generic PLA @G3U", + "Flashforge/Flashforge Generic PLA-CF @G3U", + "Flashforge/Flashforge Generic PLA-CF @G3U 0.6 Nozzle", + "Flashforge/Flashforge Generic PLA-CF @G3U 0.8 Nozzle", + "Flashforge/Flashforge Generic PLA-CF10", + "Flashforge/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle", + "Flashforge/Flashforge Generic PLA-Silk", + "Flashforge/Flashforge Generic PVA", + "Flashforge/Flashforge Generic TPU", + "Flashforge/Flashforge HS PLA @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PETG", + "Flashforge/Flashforge PLA", + "Flashforge/FusRock Generic NexPA-CF25", + "Flashforge/FusRock Generic PAHT-CF", + "Flashforge/FusRock Generic PAHT-CF @G3U 0.6 Nozzle", + "Flashforge/FusRock Generic PAHT-GF", + "Flashforge/FusRock Generic PET-CF", + "Flashforge/FusRock Generic PET-CF @G3U 0.6 Nozzle", + "Flashforge/FusRock Generic PET-GF", + "Flashforge/FusRock Generic S-Multi", + "Flashforge/FusRock Generic S-Multi @G3U 0.6 Nozzle", + "Flashforge/FusRock Generic S-PAHT", + "Flashforge/FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "Flashforge/Generic ABS @Flashforge AD4", + "Flashforge/Generic ASA @Flashforge AD4", + "Flashforge/Generic PETG @Flashforge AD4", + "Flashforge/Generic PETG @Flashforge Artemis", + "Flashforge/Generic PETG-CF10 @Flashforge AD4", + "Flashforge/Generic PLA @Flashforge AD4", + "Flashforge/Generic PLA High Speed @Flashforge AD4", + "Flashforge/Generic PLA Silk @Flashforge AD4", + "Flashforge/Generic PLA-CF10 @Flashforge AD4", + "Flashforge/Generic TPU @Flashforge AD4", + "Flashforge/Polymaker Generic CoPA", + "Flashforge/Polymaker Generic S1", + "FlyingBear/FlyingBear ABS @Ghost7", + "FlyingBear/FlyingBear ABS @S1", + "FlyingBear/FlyingBear Generic ABS", + "FlyingBear/FlyingBear Generic PA-CF", + "FlyingBear/FlyingBear Generic PC", + "FlyingBear/FlyingBear Generic PETG", + "FlyingBear/FlyingBear Generic PLA", + "FlyingBear/FlyingBear Generic TPU", + "FlyingBear/FlyingBear PA-CF @Ghost7", + "FlyingBear/FlyingBear PA-CF @S1", + "FlyingBear/FlyingBear PC @Ghost7", + "FlyingBear/FlyingBear PC @S1", + "FlyingBear/FlyingBear PETG @S1", + "FlyingBear/FlyingBear PETG Basic @Ghost7", + "FlyingBear/FlyingBear PLA @S1", + "FlyingBear/FlyingBear PLA Basic @Ghost7", + "FlyingBear/FlyingBear PLA Hyper", + "FlyingBear/FlyingBear PLA Hyper @Ghost7", + "FlyingBear/FlyingBear PLA Hyper @S1", + "FlyingBear/FlyingBear TPU @S1", + "FlyingBear/FlyingBear TPU Basic @Ghost7", + "FlyingBear/Other ABS @S1", + "FlyingBear/Other PA-CF @S1", + "FlyingBear/Other PC @S1", + "FlyingBear/Other PETG @S1", + "FlyingBear/Other PLA @S1", + "FlyingBear/Other PLA Hyper @S1", + "FlyingBear/Other TPU @S1", + "InfiMech/InfiMech ABS @EX", + "InfiMech/InfiMech ABS @EX+APS", + "InfiMech/InfiMech ABS @HSN", + "InfiMech/InfiMech Generic ABS", + "InfiMech/InfiMech Generic PA-CF", + "InfiMech/InfiMech Generic PC", + "InfiMech/InfiMech Generic PETG", + "InfiMech/InfiMech Generic PLA", + "InfiMech/InfiMech Generic TPU", + "InfiMech/InfiMech PA-CF @EX", + "InfiMech/InfiMech PA-CF @EX+APS", + "InfiMech/InfiMech PA-CF @HSN", + "InfiMech/InfiMech PC @EX", + "InfiMech/InfiMech PC @EX+APS", + "InfiMech/InfiMech PC @HSN", + "InfiMech/InfiMech PETG @EX", + "InfiMech/InfiMech PETG @EX+APS", + "InfiMech/InfiMech PETG @HSN", + "InfiMech/InfiMech PLA @HSN", + "InfiMech/InfiMech PLA Basic @EX", + "InfiMech/InfiMech PLA Basic @EX+APS", + "InfiMech/InfiMech PLA Hyper", + "InfiMech/InfiMech PLA Hyper @EX", + "InfiMech/InfiMech PLA Hyper @EX+APS", + "InfiMech/InfiMech PLA Hyper @HSN", + "InfiMech/InfiMech TPU @HSN", + "InfiMech/InfiMech TPU Basic @EX", + "InfiMech/InfiMech TPU Basic @EX+APS", + "InfiMech/Other ABS", + "InfiMech/Other ABS @HSN", + "InfiMech/Other PA-CF", + "InfiMech/Other PA-CF @HSN", + "InfiMech/Other PC", + "InfiMech/Other PC @HSN", + "InfiMech/Other PETG", + "InfiMech/Other PETG @HSN", + "InfiMech/Other PLA", + "InfiMech/Other PLA @HSN", + "InfiMech/Other PLA Hyper", + "InfiMech/Other PLA Hyper @HSN", + "InfiMech/Other TPU", + "InfiMech/Other TPU @HSN", + "LH/LHS ABS", + "LH/LHS ASA", + "LH/LHS PC CF", + "LH/LHS PCTG", + "LH/LHS PETG", + "LH/LHS PLA", + "LH/LHS TPU", + "LH/LHS TPU Foamy 78A", + "LONGER/Generic PETG @LONGER LK10", + "LONGER/Generic PETG @LONGER LK10 Plus", + "LONGER/Generic PLA @LONGER LK10", + "LONGER/Generic PLA @LONGER LK10 Plus", + "Lulzbot/Lulzbot 2.85mm ABS", + "Lulzbot/Lulzbot 2.85mm PETG", + "Lulzbot/Lulzbot 2.85mm PLA", + "MagicMaker/MM Generic PEEK", + "OrcaArena/OrcaArena Generic PA", + "OrcaArena/OrcaArena Generic PA-CF", + "OrcaArena/OrcaArena Generic TPU", + "OrcaFilamentLibrary/Eolas Prints ABS @System", + "OrcaFilamentLibrary/Eolas Prints ASA @System", + "OrcaFilamentLibrary/Eolas Prints PETG @System", + "OrcaFilamentLibrary/Eolas Prints PETG Transition @System", + "OrcaFilamentLibrary/Eolas Prints PETG UV Resistant @System", + "OrcaFilamentLibrary/Eolas Prints PLA Antibacterial @System", + "OrcaFilamentLibrary/Eolas Prints PLA High Speed @System", + "OrcaFilamentLibrary/Eolas Prints PLA INGEO 850 @System", + "OrcaFilamentLibrary/Eolas Prints PLA INGEO 870 @System", + "OrcaFilamentLibrary/Eolas Prints PLA Matte @System", + "OrcaFilamentLibrary/Eolas Prints PLA Neon @System", + "OrcaFilamentLibrary/Eolas Prints PLA Premium @System", + "OrcaFilamentLibrary/Eolas Prints PLA Silk @System", + "OrcaFilamentLibrary/Eolas Prints PLA Transition @System", + "OrcaFilamentLibrary/Eolas Prints TPU D60 UV Resistant @System", + "OrcaFilamentLibrary/Eolas Prints TPU Flex 93A @System", + "OrcaFilamentLibrary/Eolas Prints TPU Flex D53 @System", + "OrcaFilamentLibrary/Eolas Prints TPU Transition @System", + "OrcaFilamentLibrary/FilAr PETG Amarillo Lima", + "OrcaFilamentLibrary/FilAr PETG Amarillo Radiante", + "OrcaFilamentLibrary/FilAr PETG Azul Boreal", + "OrcaFilamentLibrary/FilAr PETG Azul Francia", + "OrcaFilamentLibrary/FilAr PETG Azul Imperial", + "OrcaFilamentLibrary/FilAr PETG Blanco Antartida", + "OrcaFilamentLibrary/FilAr PETG Cian", + "OrcaFilamentLibrary/FilAr PETG Coral", + "OrcaFilamentLibrary/FilAr PETG Cristal", + "OrcaFilamentLibrary/FilAr PETG Gris Ceniza", + "OrcaFilamentLibrary/FilAr PETG Gris Plata", + "OrcaFilamentLibrary/FilAr PETG Magenta", + "OrcaFilamentLibrary/FilAr PETG Negro Azabache", + "OrcaFilamentLibrary/FilAr PETG Rojo Carmesi", + "OrcaFilamentLibrary/FilAr PLA Amarillo Lirio", + "OrcaFilamentLibrary/FilAr PLA Azul Francia", + "OrcaFilamentLibrary/FilAr PLA Blanco Antartida", + "OrcaFilamentLibrary/FilAr PLA Blanco Calido", + "OrcaFilamentLibrary/FilAr PLA Bronce", + "OrcaFilamentLibrary/FilAr PLA Cafe con Leche", + "OrcaFilamentLibrary/FilAr PLA Carpincho", + "OrcaFilamentLibrary/FilAr PLA Celeste Cielo", + "OrcaFilamentLibrary/FilAr PLA Cobre", + "OrcaFilamentLibrary/FilAr PLA Dorado", + "OrcaFilamentLibrary/FilAr PLA Gris Ceniza", + "OrcaFilamentLibrary/FilAr PLA Gris Pizarra", + "OrcaFilamentLibrary/FilAr PLA Gris Plata", + "OrcaFilamentLibrary/FilAr PLA Manteca", + "OrcaFilamentLibrary/FilAr PLA Marron Oxido", + "OrcaFilamentLibrary/FilAr PLA Naranja Tigre", + "OrcaFilamentLibrary/FilAr PLA Negro Azabache", + "OrcaFilamentLibrary/FilAr PLA Oro", + "OrcaFilamentLibrary/FilAr PLA Piel", + "OrcaFilamentLibrary/FilAr PLA Rojo de Carreras", + "OrcaFilamentLibrary/FilAr PLA Rosa Amaranto", + "OrcaFilamentLibrary/FilAr PLA Rosa Flamenco", + "OrcaFilamentLibrary/FilAr PLA Tabaco", + "OrcaFilamentLibrary/FilAr PLA Titanio", + "OrcaFilamentLibrary/FilAr PLA Verde FilAr", + "OrcaFilamentLibrary/FilAr PLA Verde Manzana", + "OrcaFilamentLibrary/FilAr PLA Verde Oliva", + "OrcaFilamentLibrary/FilAr PLA Verde Pixel", + "OrcaFilamentLibrary/FilAr PLA Violeta Jacaranda", + "OrcaFilamentLibrary/FilAr PLA-mate Amarillo", + "OrcaFilamentLibrary/FilAr PLA-mate Azul", + "OrcaFilamentLibrary/FilAr PLA-mate Beige", + "OrcaFilamentLibrary/FilAr PLA-mate Blanco", + "OrcaFilamentLibrary/FilAr PLA-mate Bordo", + "OrcaFilamentLibrary/FilAr PLA-mate Celeste Cielo", + "OrcaFilamentLibrary/FilAr PLA-mate Chocolate", + "OrcaFilamentLibrary/FilAr PLA-mate Gris", + "OrcaFilamentLibrary/FilAr PLA-mate Marron", + "OrcaFilamentLibrary/FilAr PLA-mate Naranja", + "OrcaFilamentLibrary/FilAr PLA-mate Negro", + "OrcaFilamentLibrary/FilAr PLA-mate Piel", + "OrcaFilamentLibrary/FilAr PLA-mate Rojo", + "OrcaFilamentLibrary/FilAr PLA-mate Rosa", + "OrcaFilamentLibrary/FilAr PLA-mate Uva", + "OrcaFilamentLibrary/FilAr PLA-mate Verde", + "OrcaFilamentLibrary/FilAr PLA-mate Violeta", + "OrcaFilamentLibrary/Generic ABS @System", + "OrcaFilamentLibrary/Generic ASA @System", + "OrcaFilamentLibrary/Generic PA @System", + "OrcaFilamentLibrary/Generic PA-CF @System", + "OrcaFilamentLibrary/Generic PC @System", + "OrcaFilamentLibrary/Generic PETG @System", + "OrcaFilamentLibrary/Generic PLA High Speed @System", + "OrcaFilamentLibrary/Generic PLA-CF @System", + "OrcaFilamentLibrary/Generic PPA-GF @System", + "OrcaFilamentLibrary/Generic PVA @System", + "OrcaFilamentLibrary/Generic TPU @System", + "OrcaFilamentLibrary/PolyLite PLA @System", + "OrcaFilamentLibrary/PolyTerra Dual PLA @System", + "OrcaFilamentLibrary/eSUN ePLA-LW @System", + "Peopoly/Peopoly Generic ABS", + "Peopoly/Peopoly Generic PETG", + "Peopoly/Peopoly Generic PLA", + "Peopoly/Peopoly Lancer ABS-GF", + "Peopoly/Peopoly Lancer PET-CF", + "Peopoly/Peopoly Lancer PETG-C", + "Peopoly/Peopoly Lancer PLA-C", + "Phrozen/Phrozen PLA @Phrozen Arco 0.4 nozzle", + "Prusa/Prusa Generic ABS @CORE One", + "Prusa/Prusa Generic ABS @CORE One 0.6", + "Prusa/Prusa Generic ABS @CORE One 0.8", + "Prusa/Prusa Generic ABS @CORE One HF 0.4", + "Prusa/Prusa Generic ABS @CORE One HF 0.5", + "Prusa/Prusa Generic ABS @CORE One HF 0.6", + "Prusa/Prusa Generic ABS @CORE One HF 0.8", + "Prusa/Prusa Generic ABS @MK3.5", + "Prusa/Prusa Generic ABS @MK3.5 0.25", + "Prusa/Prusa Generic ABS @MK3.5 0.6", + "Prusa/Prusa Generic ABS @MK3.5 0.8", + "Prusa/Prusa Generic ABS @MK4S", + "Prusa/Prusa Generic ABS @MK4S 0.6", + "Prusa/Prusa Generic ABS @MK4S 0.8", + "Prusa/Prusa Generic ABS @MK4S HF0.4", + "Prusa/Prusa Generic ABS @MK4S HF0.5", + "Prusa/Prusa Generic ABS @MK4S HF0.6", + "Prusa/Prusa Generic ABS @MK4S HF0.8", + "Prusa/Prusa Generic ABS HF @MK3.5", + "Prusa/Prusa Generic ABS HF @MK3.5 0.6", + "Prusa/Prusa Generic ABS HF @MK3.5 0.8", + "Prusa/Prusa Generic ASA @CORE One", + "Prusa/Prusa Generic ASA @CORE One 0.6", + "Prusa/Prusa Generic ASA @CORE One 0.8", + "Prusa/Prusa Generic ASA @CORE One HF 0.4", + "Prusa/Prusa Generic ASA @CORE One HF 0.5", + "Prusa/Prusa Generic ASA @CORE One HF 0.6", + "Prusa/Prusa Generic ASA @CORE One HF 0.8", + "Prusa/Prusa Generic ASA @MK3.5", + "Prusa/Prusa Generic ASA @MK3.5 0.25", + "Prusa/Prusa Generic ASA @MK3.5 0.6", + "Prusa/Prusa Generic ASA @MK3.5 0.8", + "Prusa/Prusa Generic ASA @MK4S", + "Prusa/Prusa Generic ASA @MK4S 0.6", + "Prusa/Prusa Generic ASA @MK4S 0.8", + "Prusa/Prusa Generic ASA @MK4S HF0.4", + "Prusa/Prusa Generic ASA @MK4S HF0.5", + "Prusa/Prusa Generic ASA @MK4S HF0.6", + "Prusa/Prusa Generic ASA @MK4S HF0.8", + "Prusa/Prusa Generic ASA HF @MK3.5", + "Prusa/Prusa Generic ASA HF @MK3.5 0.6", + "Prusa/Prusa Generic ASA HF @MK3.5 0.8", + "Prusa/Prusa Generic PA @MK3.5", + "Prusa/Prusa Generic PA @MK3.5 0.25", + "Prusa/Prusa Generic PA @MK3.5 0.6", + "Prusa/Prusa Generic PA @MK3.5 0.8", + "Prusa/Prusa Generic PA-CF @MK3.5", + "Prusa/Prusa Generic PA-CF @MK3.5 0.25", + "Prusa/Prusa Generic PA-CF @MK3.5 0.6", + "Prusa/Prusa Generic PA-CF @MK3.5 0.8", + "Prusa/Prusa Generic PC @MK3.5", + "Prusa/Prusa Generic PC @MK3.5 0.25", + "Prusa/Prusa Generic PC @MK3.5 0.6", + "Prusa/Prusa Generic PC @MK3.5 0.8", + "Prusa/Prusa Generic PC HF @MK3.5", + "Prusa/Prusa Generic PC HF @MK3.5 0.6", + "Prusa/Prusa Generic PC HF @MK3.5 0.8", + "Prusa/Prusa Generic PETG @CORE One", + "Prusa/Prusa Generic PETG @CORE One 0.6", + "Prusa/Prusa Generic PETG @CORE One 0.8", + "Prusa/Prusa Generic PETG @CORE One HF 0.4", + "Prusa/Prusa Generic PETG @CORE One HF 0.5", + "Prusa/Prusa Generic PETG @CORE One HF 0.6", + "Prusa/Prusa Generic PETG @CORE One HF 0.8", + "Prusa/Prusa Generic PETG @MK3.5", + "Prusa/Prusa Generic PETG @MK3.5 0.25", + "Prusa/Prusa Generic PETG @MK3.5 0.6", + "Prusa/Prusa Generic PETG @MK3.5 0.8", + "Prusa/Prusa Generic PETG @MK4S", + "Prusa/Prusa Generic PETG @MK4S 0.6", + "Prusa/Prusa Generic PETG @MK4S 0.8", + "Prusa/Prusa Generic PETG @MK4S HF0.4", + "Prusa/Prusa Generic PETG @MK4S HF0.5", + "Prusa/Prusa Generic PETG @MK4S HF0.6", + "Prusa/Prusa Generic PETG @MK4S HF0.8", + "Prusa/Prusa Generic PETG HF @MK3.5", + "Prusa/Prusa Generic PETG HF @MK3.5 0.6", + "Prusa/Prusa Generic PETG HF @MK3.5 0.8", + "Prusa/Prusa Generic PLA @CORE One", + "Prusa/Prusa Generic PLA @CORE One 0.6", + "Prusa/Prusa Generic PLA @CORE One 0.8", + "Prusa/Prusa Generic PLA @CORE One HF 0.4", + "Prusa/Prusa Generic PLA @CORE One HF 0.5", + "Prusa/Prusa Generic PLA @CORE One HF 0.6", + "Prusa/Prusa Generic PLA @CORE One HF 0.8", + "Prusa/Prusa Generic PLA @MK3.5", + "Prusa/Prusa Generic PLA @MK3.5 0.25", + "Prusa/Prusa Generic PLA @MK3.5 0.6", + "Prusa/Prusa Generic PLA @MK3.5 0.8", + "Prusa/Prusa Generic PLA @MK4S", + "Prusa/Prusa Generic PLA @MK4S 0.6", + "Prusa/Prusa Generic PLA @MK4S 0.8", + "Prusa/Prusa Generic PLA @MK4S HF0.4", + "Prusa/Prusa Generic PLA @MK4S HF0.5", + "Prusa/Prusa Generic PLA @MK4S HF0.6", + "Prusa/Prusa Generic PLA @MK4S HF0.8", + "Prusa/Prusa Generic PLA HF @MK3.5", + "Prusa/Prusa Generic PLA HF @MK3.5 0.6", + "Prusa/Prusa Generic PLA HF @MK3.5 0.8", + "Prusa/Prusa Generic PLA Silk @CORE One", + "Prusa/Prusa Generic PLA Silk @CORE One 0.6", + "Prusa/Prusa Generic PLA Silk @CORE One 0.8", + "Prusa/Prusa Generic PLA Silk @MK4S", + "Prusa/Prusa Generic PLA Silk @MK4S 0.6", + "Prusa/Prusa Generic PLA Silk @MK4S 0.8", + "Prusa/Prusa Generic PLA-CF @MK3.5", + "Prusa/Prusa Generic PLA-CF @MK3.5 0.25", + "Prusa/Prusa Generic PLA-CF @MK3.5 0.6", + "Prusa/Prusa Generic PLA-CF @MK3.5 0.8", + "Prusa/Prusa Generic PVA @MK3.5", + "Prusa/Prusa Generic PVA @MK3.5 0.25", + "Prusa/Prusa Generic PVA @MK3.5 0.6", + "Prusa/Prusa Generic PVA @MK3.5 0.8", + "Prusa/Prusa Generic PVA HF @MK3.5", + "Prusa/Prusa Generic PVA HF @MK3.5 0.6", + "Prusa/Prusa Generic PVA HF @MK3.5 0.8", + "Prusa/Prusa Generic TPU @CORE One", + "Prusa/Prusa Generic TPU @CORE One 0.6", + "Prusa/Prusa Generic TPU @CORE One 0.8", + "Prusa/Prusa Generic TPU @MK3.5", + "Prusa/Prusa Generic TPU @MK4S", + "Prusa/Prusa Generic TPU @MK4S 0.6", + "Prusa/Prusa Generic TPU @MK4S 0.8", + "Prusa/Prusa Generic TPU HF @MK3.5", + "Prusa/Prusament ASA @CORE One", + "Prusa/Prusament ASA @CORE One 0.6", + "Prusa/Prusament ASA @CORE One 0.8", + "Prusa/Prusament ASA @CORE One HF 0.4", + "Prusa/Prusament ASA @CORE One HF 0.5", + "Prusa/Prusament ASA @CORE One HF 0.6", + "Prusa/Prusament ASA @CORE One HF 0.8", + "Prusa/Prusament PA-CF @CORE One", + "Prusa/Prusament PA-CF @CORE One 0.6", + "Prusa/Prusament PA-CF @CORE One 0.8", + "Prusa/Prusament PC Blend @CORE One", + "Prusa/Prusament PC Blend @CORE One 0.6", + "Prusa/Prusament PC Blend @CORE One 0.8", + "Prusa/Prusament PC Blend @CORE One HF 0.4", + "Prusa/Prusament PC Blend @CORE One HF 0.5", + "Prusa/Prusament PC Blend @CORE One HF 0.6", + "Prusa/Prusament PC Blend @CORE One HF 0.8", + "Prusa/Prusament PC-CF @CORE One", + "Prusa/Prusament PC-CF @CORE One 0.6", + "Prusa/Prusament PC-CF @CORE One 0.8", + "Prusa/Prusament PETG @CORE One", + "Prusa/Prusament PETG @CORE One 0.6", + "Prusa/Prusament PETG @CORE One 0.8", + "Prusa/Prusament PETG @CORE One HF 0.4", + "Prusa/Prusament PETG @CORE One HF 0.5", + "Prusa/Prusament PETG @CORE One HF 0.6", + "Prusa/Prusament PETG @CORE One HF 0.8", + "Prusa/Prusament PLA @CORE One", + "Prusa/Prusament PLA @CORE One 0.6", + "Prusa/Prusament PLA @CORE One 0.8", + "Prusa/Prusament PLA @CORE One HF 0.4", + "Prusa/Prusament PLA @CORE One HF 0.5", + "Prusa/Prusament PLA @CORE One HF 0.6", + "Prusa/Prusament PLA @CORE One HF 0.8", + "Prusa/Prusament PVB @CORE One", + "Prusa/Prusament PVB @CORE One 0.6", + "Prusa/Prusament PVB @CORE One 0.8", + "Prusa/Prusament rPLA @CORE One", + "Prusa/Prusament rPLA @CORE One 0.6", + "Prusa/Prusament rPLA @CORE One 0.8", + "Qidi/Bambu ABS", + "Qidi/Bambu ABS @0.2 nozzle", + "Qidi/Bambu ABS @0.6 nozzle", + "Qidi/Bambu ABS @0.8 nozzle", + "Qidi/Bambu ABS @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Bambu ABS @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Bambu ABS @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Bambu ABS @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Bambu ABS @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Bambu ABS @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Bambu ABS @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Bambu ABS @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Bambu PETG", + "Qidi/Bambu PETG @0.2 nozzle", + "Qidi/Bambu PETG @0.6 nozzle", + "Qidi/Bambu PETG @0.8 nozzle", + "Qidi/Bambu PETG @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Bambu PETG @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Bambu PETG @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Bambu PETG @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Bambu PETG @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Bambu PETG @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Bambu PETG @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Bambu PETG @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Bambu PLA", + "Qidi/Bambu PLA @0.2 nozzle", + "Qidi/Bambu PLA @0.6 nozzle", + "Qidi/Bambu PLA @0.8 nozzle", + "Qidi/Bambu PLA @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Bambu PLA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Bambu PLA @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Bambu PLA @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Bambu PLA @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Bambu PLA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Bambu PLA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Bambu PLA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/HATCHBOX ABS @Qidi", + "Qidi/HATCHBOX ABS @Qidi 0.2 nozzle", + "Qidi/HATCHBOX ABS @Qidi 0.6 nozzle", + "Qidi/HATCHBOX ABS @Qidi 0.8 nozzle", + "Qidi/HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle", + "Qidi/HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle", + "Qidi/HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle", + "Qidi/HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle", + "Qidi/HATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle", + "Qidi/HATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle", + "Qidi/HATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle", + "Qidi/HATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle", + "Qidi/HATCHBOX PETG @0.2 nozzle", + "Qidi/HATCHBOX PETG @0.6 nozzle", + "Qidi/HATCHBOX PETG @0.8 nozzle", + "Qidi/HATCHBOX PETG @Qidi", + "Qidi/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle", + "Qidi/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle", + "Qidi/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle", + "Qidi/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle", + "Qidi/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle", + "Qidi/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle", + "Qidi/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle", + "Qidi/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle", + "Qidi/HATCHBOX PLA @0.2 nozzle", + "Qidi/HATCHBOX PLA @0.6 nozzle", + "Qidi/HATCHBOX PLA @0.8 nozzle", + "Qidi/HATCHBOX PLA @Qidi", + "Qidi/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle", + "Qidi/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle", + "Qidi/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle", + "Qidi/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle", + "Qidi/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Overture ABS @Qidi", + "Qidi/Overture ABS @Qidi 0.2 nozzle", + "Qidi/Overture ABS @Qidi 0.6 nozzle", + "Qidi/Overture ABS @Qidi 0.8 nozzle", + "Qidi/Overture ABS @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Overture ABS @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Overture ABS @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Overture ABS @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Overture ABS @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Overture ABS @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Overture ABS @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Overture ABS @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Overture PLA @Qidi", + "Qidi/Overture PLA @Qidi 0.2 nozzle", + "Qidi/Overture PLA @Qidi 0.6 nozzle", + "Qidi/Overture PLA @Qidi 0.8 nozzle", + "Qidi/Overture PLA @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Overture PLA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Overture PLA @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Overture PLA @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Overture PLA @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Overture PLA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Overture PLA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Overture PLA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/PolyLite ABS @Qidi", + "Qidi/PolyLite ABS @Qidi 0.2 nozzle", + "Qidi/PolyLite ABS @Qidi 0.6 nozzle", + "Qidi/PolyLite ABS @Qidi 0.8 nozzle", + "Qidi/PolyLite ABS @Qidi Q1 Pro 0.2 nozzle", + "Qidi/PolyLite ABS @Qidi Q1 Pro 0.4 nozzle", + "Qidi/PolyLite ABS @Qidi Q1 Pro 0.6 nozzle", + "Qidi/PolyLite ABS @Qidi Q1 Pro 0.8 nozzle", + "Qidi/PolyLite ABS @Qidi X-Plus 4 0.2 nozzle", + "Qidi/PolyLite ABS @Qidi X-Plus 4 0.4 nozzle", + "Qidi/PolyLite ABS @Qidi X-Plus 4 0.6 nozzle", + "Qidi/PolyLite ABS @Qidi X-Plus 4 0.8 nozzle", + "Qidi/PolyLite PLA @Qidi", + "Qidi/PolyLite PLA @Qidi 0.2 nozzle", + "Qidi/PolyLite PLA @Qidi 0.6 nozzle", + "Qidi/PolyLite PLA @Qidi 0.8 nozzle", + "Qidi/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle", + "Qidi/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle", + "Qidi/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle", + "Qidi/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle", + "Qidi/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI ABS Odorless", + "Qidi/QIDI ABS Odorless @0.2 nozzle", + "Qidi/QIDI ABS Odorless @0.6 nozzle", + "Qidi/QIDI ABS Odorless @0.8 nozzle", + "Qidi/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI ABS Odorless @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI ABS Odorless @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI ABS Odorless @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI ABS Odorless @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI ABS Rapido", + "Qidi/QIDI ABS Rapido 0.2 nozzle", + "Qidi/QIDI ABS Rapido 0.6 nozzle", + "Qidi/QIDI ABS Rapido 0.8 nozzle", + "Qidi/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI ABS Rapido Metal", + "Qidi/QIDI ABS Rapido Metal @0.2 nozzle", + "Qidi/QIDI ABS Rapido Metal @0.6 nozzle", + "Qidi/QIDI ABS Rapido Metal @0.8 nozzle", + "Qidi/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI ABS-GF", + "Qidi/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI ABS-GF10", + "Qidi/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI ABS-GF25", + "Qidi/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI ASA", + "Qidi/QIDI ASA @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI ASA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI ASA @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI ASA @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI ASA @Qidi X-Max 3 0.2 nozzle", + "Qidi/QIDI ASA @Qidi X-Plus 3 0.2 nozzle", + "Qidi/QIDI ASA @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI ASA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI ASA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI ASA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI ASA @Qidi X-Smart 3 0.2 nozzle", + "Qidi/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle", + "Qidi/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle", + "Qidi/QIDI PA-Ultra", + "Qidi/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PA-Ultra @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PA-Ultra @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PA-Ultra @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PA12-CF", + "Qidi/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PA12-CF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PA12-CF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PA12-CF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PAHT-CF", + "Qidi/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PAHT-CF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PAHT-CF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PAHT-CF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PAHT-GF", + "Qidi/QIDI PAHT-GF @0.6 nozzle", + "Qidi/QIDI PAHT-GF @0.8 nozzle", + "Qidi/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PAHT-GF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PAHT-GF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PAHT-GF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PEBA 95A", + "Qidi/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PET-CF", + "Qidi/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PET-CF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PET-CF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PET-CF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PET-GF", + "Qidi/QIDI PET-GF @0.6 nozzle", + "Qidi/QIDI PET-GF @0.8 nozzle", + "Qidi/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PET-GF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PET-GF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PET-GF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PETG Basic", + "Qidi/QIDI PETG Basic @0.2 nozzle", + "Qidi/QIDI PETG Basic @0.6 nozzle", + "Qidi/QIDI PETG Basic @0.8 nozzle", + "Qidi/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PETG Basic @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PETG Basic @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PETG Basic @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PETG Basic @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PETG Rapido", + "Qidi/QIDI PETG Rapido @0.2 nozzle", + "Qidi/QIDI PETG Rapido @0.6 nozzle", + "Qidi/QIDI PETG Rapido @0.8 nozzle", + "Qidi/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PETG Rapido @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PETG Rapido @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PETG Rapido @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PETG Rapido @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PETG Tough", + "Qidi/QIDI PETG Tough 0.2 nozzle", + "Qidi/QIDI PETG Tough 0.6 nozzle", + "Qidi/QIDI PETG Tough 0.8 nozzle", + "Qidi/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PETG Tough @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PETG Tough @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PETG Tough @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PETG Tough @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PETG Translucent", + "Qidi/QIDI PETG Translucent @0.2 nozzle", + "Qidi/QIDI PETG Translucent @0.6 nozzle", + "Qidi/QIDI PETG Translucent @0.8 nozzle", + "Qidi/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PETG Translucent @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PETG Translucent @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PETG Translucent @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PETG Translucent @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PETG-CF", + "Qidi/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PETG-CF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PETG-CF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PETG-CF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PETG-GF", + "Qidi/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PETG-GF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PETG-GF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PLA Basic", + "Qidi/QIDI PLA Basic @0.2 nozzle", + "Qidi/QIDI PLA Basic @0.6 nozzle", + "Qidi/QIDI PLA Basic @0.8 nozzle", + "Qidi/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PLA Basic @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PLA Basic @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA Basic @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA Basic @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PLA Matte Basic", + "Qidi/QIDI PLA Matte Basic @0.2 nozzle", + "Qidi/QIDI PLA Matte Basic @0.6 nozzle", + "Qidi/QIDI PLA Matte Basic @0.8 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA Matte Basic @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PLA Rapido", + "Qidi/QIDI PLA Rapido 0.2 nozzle", + "Qidi/QIDI PLA Rapido 0.8 nozzle", + "Qidi/QIDI PLA Rapido @0.6 nozzle", + "Qidi/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PLA Rapido @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PLA Rapido @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA Rapido @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA Rapido @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PLA Rapido Matte", + "Qidi/QIDI PLA Rapido Matte @0.2 nozzle", + "Qidi/QIDI PLA Rapido Matte @0.6 nozzle", + "Qidi/QIDI PLA Rapido Matte @0.8 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PLA Rapido Metal", + "Qidi/QIDI PLA Rapido Metal @0.2 nozzle", + "Qidi/QIDI PLA Rapido Metal @0.6 nozzle", + "Qidi/QIDI PLA Rapido Metal @0.8 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.2 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PLA Rapido Silk", + "Qidi/QIDI PLA Rapido Silk @0.6 nozzle", + "Qidi/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA-CF @0.6 nozzle", + "Qidi/QIDI PLA-CF @0.8 nozzle", + "Qidi/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PLA-CF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PLA-CF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PPS-CF", + "Qidi/QIDI PPS-CF @0.6 nozzle", + "Qidi/QIDI PPS-CF @0.8 nozzle", + "Qidi/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI PPS-CF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI PPS-CF @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI PPS-CF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI PPS-GF", + "Qidi/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI Support For PAHT", + "Qidi/QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI Support For PAHT @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI Support For PAHT @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI Support For PET/PA", + "Qidi/QIDI Support For PET/PA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI Support For PET/PA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI Support For PET/PA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI TPU-Aero", + "Qidi/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI TPU-Aero @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI TPU-GF", + "Qidi/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI UltraPA-CF25", + "Qidi/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle", + "Qidi/QIDI WOOD Rapido", + "Qidi/QIDI WOOD Rapido @0.6 nozzle", + "Qidi/QIDI WOOD Rapido @0.8 nozzle", + "Qidi/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle", + "Qidi/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle", + "Qidi/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle", + "Qidi/QIDI WOOD Rapido @Qidi X-Plus 4 0.4 nozzle", + "Qidi/QIDI WOOD Rapido @Qidi X-Plus 4 0.6 nozzle", + "Qidi/QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Qidi ASA-Aero", + "Qidi/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi Generic ABS", + "Qidi/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle", + "Qidi/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle", + "Qidi/Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle", + "Qidi/Qidi Generic ASA", + "Qidi/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle", + "Qidi/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle", + "Qidi/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle", + "Qidi/Qidi Generic PA", + "Qidi/Qidi Generic PA-CF", + "Qidi/Qidi Generic PC", + "Qidi/Qidi Generic PC @0.2 nozzle", + "Qidi/Qidi Generic PC @0.8 nozzle", + "Qidi/Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Qidi Generic PETG", + "Qidi/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle", + "Qidi/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle", + "Qidi/Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle", + "Qidi/Qidi Generic PETG-CF", + "Qidi/Qidi Generic PLA", + "Qidi/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle", + "Qidi/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle", + "Qidi/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Qidi Generic PLA Silk", + "Qidi/Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi Generic PLA+", + "Qidi/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle", + "Qidi/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle", + "Qidi/Qidi Generic PLA-CF", + "Qidi/Qidi Generic PVA", + "Qidi/Qidi Generic TPU", + "Qidi/Qidi Generic TPU 95A", + "Qidi/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi PC-ABS-FR", + "Qidi/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Qidi PC-ABS-FR @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi PC-ABS-FR @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Qidi PLA-CF", + "Qidi/Qidi TPU 95A-HF", + "Qidi/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Qidi TPU 95A-HF @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Qidi TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Tinmorry PETG-ECO", + "RH3D/Generic ABS @E3NG v1.2S", + "RH3D/Generic ASA @E3NG v1.2S", + "RH3D/Generic PCCF @E3NG v1.2S", + "RH3D/Generic PETG @E3NG v1.2S", + "RH3D/Generic PLA @E3NG v1.2S", + "RH3D/Generic TPU @E3NG v1.2S", + "Ratrig/RatRig BigNozzle ABS", + "Ratrig/RatRig BigNozzle ASA", + "Ratrig/RatRig BigNozzle PCTG", + "Ratrig/RatRig BigNozzle PETG", + "Ratrig/RatRig BigNozzle PLA", + "Ratrig/RatRig BigNozzle TPU", + "Ratrig/RatRig Generic ABS", + "Ratrig/RatRig Generic ASA", + "Ratrig/RatRig Generic PA", + "Ratrig/RatRig Generic PA-CF", + "Ratrig/RatRig Generic PC", + "Ratrig/RatRig Generic PCTG", + "Ratrig/RatRig Generic PETG", + "Ratrig/RatRig Generic PLA", + "Ratrig/RatRig Generic PLA-CF", + "Ratrig/RatRig Generic PVA", + "Ratrig/RatRig Generic TPU", + "Ratrig/RatRig PunkFil ABS", + "Ratrig/RatRig PunkFil PETG", + "Ratrig/RatRig PunkFil PETG CF", + "SecKit/SecKit Generic ABS", + "SecKit/SecKit Generic ASA", + "SecKit/SecKit Generic PA", + "SecKit/SecKit Generic PA-CF", + "SecKit/SecKit Generic PC", + "SecKit/SecKit Generic PETG", + "SecKit/SecKit Generic PLA", + "SecKit/SecKit Generic PLA-CF", + "SecKit/SecKit Generic PVA", + "SecKit/SecKit Generic TPU", + "SeeMeCNC/SeeMeCNC ABS", + "SeeMeCNC/SeeMeCNC PA-CF", + "SeeMeCNC/SeeMeCNC PETG", + "SeeMeCNC/SeeMeCNC PETG-CF", + "SeeMeCNC/SeeMeCNC PLA", + "SeeMeCNC/SeeMeCNC TPU", + "Sovol/Generic ABS @Sovol SV08 MAX", + "Sovol/Generic PC @Sovol SV08 MAX", + "Sovol/Generic PETG @Sovol SV08 MAX", + "Sovol/Generic PLA @Sovol SV08 MAX", + "Sovol/Generic PLA Silk @Sovol SV08 MAX", + "Sovol/Generic TPU @Sovol SV08 MAX", + "Sovol/Polymaker PETG @Sovol SV08 MAX", + "Sovol/SUNLU PETG @Sovol SV08 MAX", + "Sovol/Sovol SV06 ACE ABS", + "Sovol/Sovol SV06 ACE PETG", + "Sovol/Sovol SV06 ACE PLA", + "Sovol/Sovol SV06 ACE TPU", + "Sovol/Sovol SV06 Plus ACE ABS", + "Sovol/Sovol SV06 Plus ACE PETG", + "Sovol/Sovol SV06 Plus ACE PLA", + "Sovol/Sovol SV06 Plus ACE TPU", + "Sovol/Sovol SV07 PLA", + "Sovol/Sovol SV08 ABS", + "Sovol/Sovol SV08 PETG", + "Sovol/Sovol SV08 PLA", + "Sovol/Sovol SV08 PLA @SV08 0.2 nozzle", + "Sovol/Sovol SV08 TPU", + "Sovol/Sovol Zero ABS", + "Sovol/Sovol Zero PC", + "Sovol/Sovol Zero PETG", + "Sovol/Sovol Zero PETG HS Nozzle", + "Sovol/Sovol Zero PLA Basic", + "Sovol/Sovol Zero PLA Basic HS Nozzle", + "Sovol/Sovol Zero PLA Silk", + "Sovol/Sovol Zero PLA Silk HS Nozzle", + "Sovol/Sovol Zero TPU", + "Tiertime/Tiertime ABS", + "Tiertime/Tiertime ABS@300HS", + "Tiertime/Tiertime ASA", + "Tiertime/Tiertime ASA@300HS", + "Tiertime/Tiertime Generic ABS", + "Tiertime/Tiertime Generic ABS@300HS", + "Tiertime/Tiertime Generic ASA", + "Tiertime/Tiertime Generic ASA@300HS", + "Tiertime/Tiertime Generic BVOH", + "Tiertime/Tiertime Generic BVOH@300HS", + "Tiertime/Tiertime Generic EVA", + "Tiertime/Tiertime Generic EVA@300HS", + "Tiertime/Tiertime Generic HIPS", + "Tiertime/Tiertime Generic HIPS@300HS", + "Tiertime/Tiertime Generic PA", + "Tiertime/Tiertime Generic PA-CF", + "Tiertime/Tiertime Generic PA-CF@300HS", + "Tiertime/Tiertime Generic PA@300HS", + "Tiertime/Tiertime Generic PC", + "Tiertime/Tiertime Generic PC@300HS", + "Tiertime/Tiertime Generic PCTG", + "Tiertime/Tiertime Generic PCTG@300HS", + "Tiertime/Tiertime Generic PE", + "Tiertime/Tiertime Generic PE-CF", + "Tiertime/Tiertime Generic PE-CF@300HS", + "Tiertime/Tiertime Generic PE@300HS", + "Tiertime/Tiertime Generic PETG", + "Tiertime/Tiertime Generic PETG-CF", + "Tiertime/Tiertime Generic PETG-CF@300HS", + "Tiertime/Tiertime Generic PETG@300HS", + "Tiertime/Tiertime Generic PHA", + "Tiertime/Tiertime Generic PHA@300HS", + "Tiertime/Tiertime Generic PLA", + "Tiertime/Tiertime Generic PLA High Speed", + "Tiertime/Tiertime Generic PLA High Speed@300HS", + "Tiertime/Tiertime Generic PLA Silk", + "Tiertime/Tiertime Generic PLA Silk@300HS", + "Tiertime/Tiertime Generic PLA-CF", + "Tiertime/Tiertime Generic PLA-CF@300HS", + "Tiertime/Tiertime Generic PLA@300HS", + "Tiertime/Tiertime Generic PP", + "Tiertime/Tiertime Generic PP-CF", + "Tiertime/Tiertime Generic PP-CF@300HS", + "Tiertime/Tiertime Generic PP-GF", + "Tiertime/Tiertime Generic PP-GF@300HS", + "Tiertime/Tiertime Generic PP@300HS", + "Tiertime/Tiertime Generic PPA-CF", + "Tiertime/Tiertime Generic PPA-CF@300HS", + "Tiertime/Tiertime Generic PPA-GF", + "Tiertime/Tiertime Generic PPA-GF@300HS", + "Tiertime/Tiertime Generic PPS", + "Tiertime/Tiertime Generic PPS-CF", + "Tiertime/Tiertime Generic PPS-CF@300HS", + "Tiertime/Tiertime Generic PPS@300HS", + "Tiertime/Tiertime Generic PVA", + "Tiertime/Tiertime Generic PVA@300HS", + "Tiertime/Tiertime Generic SBS", + "Tiertime/Tiertime Generic SBS@300HS", + "Tiertime/Tiertime Generic TPU", + "Tiertime/Tiertime Generic TPU@300HS", + "Tiertime/Tiertime PA6-CF", + "Tiertime/Tiertime PA6-CF@300HS", + "Tiertime/Tiertime PC", + "Tiertime/Tiertime PC@300HS", + "Tiertime/Tiertime PET-CF", + "Tiertime/Tiertime PET-CF@300HS", + "Tiertime/Tiertime PETG", + "Tiertime/Tiertime PETG@300HS", + "Tiertime/Tiertime PLA", + "Tiertime/Tiertime PLA-CF", + "Tiertime/Tiertime PLA-CF@300HS", + "Tiertime/Tiertime PLA@300HS", + "Tiertime/Tiertime PVA", + "Tiertime/Tiertime PVA@300HS", + "Tiertime/Tiertime TPU 95A", + "Tiertime/Tiertime TPU 95A@300HS", + "TwoTrees/TwoTrees Generic 95A TPU @SK1", + "TwoTrees/TwoTrees Generic HS PLA @SK1", + "Volumic/Désactivé", + "Volumic/PA6 CF20 (Performance)", + "Volumic/PETG ESD (Performance)", + "Volumic/PPS Carbone (Performance)", + "Volumic/Volumic ABS Ultra", + "Volumic/Volumic ABS Ultra (Performance)", + "Volumic/Volumic ASA Ultra", + "Volumic/Volumic ASA Ultra (Performance)", + "Volumic/Volumic FLEX93 Ultra", + "Volumic/Volumic FLEX93 Ultra (Performance)", + "Volumic/Volumic NYLON Ultra", + "Volumic/Volumic NYLON Ultra (Performance)", + "Volumic/Volumic PC", + "Volumic/Volumic PC (Performance)", + "Volumic/Volumic PCTG Ultra (Performance)", + "Volumic/Volumic PETG Ultra", + "Volumic/Volumic PETG Ultra (Performance)", + "Volumic/Volumic PETG Ultra carbone", + "Volumic/Volumic PETG Ultra carbone (Performance)", + "Volumic/Volumic PLA Ultra", + "Volumic/Volumic PLA Ultra (Performance)", + "Volumic/Volumic PP Ultra", + "Volumic/Volumic PP Ultra (Performance)", + "Volumic/Volumic PVA", + "Volumic/Volumic PVA-BVOH (Performance)", + "Volumic/Volumic UNIVERSAL Ultra", + "Volumic/Volumic UNIVERSAL Ultra (Performance)", + "Vzbot/Vzbot Generic ABS", + "Vzbot/Vzbot Generic ASA", + "Vzbot/Vzbot Generic PA", + "Vzbot/Vzbot Generic PA-CF", + "Vzbot/Vzbot Generic PC", + "Vzbot/Vzbot Generic PETG", + "Vzbot/Vzbot Generic PLA", + "Vzbot/Vzbot Generic PLA-CF", + "Vzbot/Vzbot Generic PVA", + "Vzbot/Vzbot Generic TPU", + "Wanhao France/YUMI PETG", + "Wanhao France/YUMI PLA Bowden", + "Wanhao France/YUMI PLA Direct Drive", + "WonderMaker/WonderMaker ABS", + "WonderMaker/WonderMaker ASA", + "WonderMaker/WonderMaker PET-CF", + "WonderMaker/WonderMaker PETG Basic", + "WonderMaker/WonderMaker PLA Basic", + "WonderMaker/WonderMaker PLA Marble", + "WonderMaker/WonderMaker PLA Matte", + "WonderMaker/WonderMaker PLA Metal", + "WonderMaker/WonderMaker PLA Silk", + "WonderMaker/WonderMaker PLA Wood", + "WonderMaker/WonderMaker PVA", + "WonderMaker/WonderMaker TPU 95A", + "Z-Bolt/Generic ABS @Z-Bolt 0.4 nozzle", + "Z-Bolt/Generic ABS @Z-Bolt 0.6 nozzle", + "Z-Bolt/Generic ABS @Z-Bolt 0.8 nozzle", + "Z-Bolt/Generic ABS HT @Z-Bolt 0.4 nozzle", + "Z-Bolt/Generic ABS HT @Z-Bolt 0.6 nozzle", + "Z-Bolt/Generic ABS HT @Z-Bolt 0.8 nozzle", + "Z-Bolt/Generic PA @Z-Bolt 0.4 nozzle", + "Z-Bolt/Generic PA @Z-Bolt 0.6 nozzle", + "Z-Bolt/Generic PA @Z-Bolt 0.8 nozzle", + "Z-Bolt/Generic PETG @Z-Bolt 0.4 nozzle", + "Z-Bolt/Generic PETG @Z-Bolt 0.6 nozzle", + "Z-Bolt/Generic PETG @Z-Bolt 0.8 nozzle", + "Z-Bolt/Generic PLA @Z-Bolt 0.4 nozzle", + "Z-Bolt/Generic PLA @Z-Bolt 0.6 nozzle", + "Z-Bolt/Generic PLA @Z-Bolt 0.8 nozzle", + "iQ/Fiberthree PACF Pro P1 @iQ TiQ2 0.4 Nozzle", + "iQ/Fiberthree PACF Pro P2 @iQ TiQ2 0.4 Nozzle", + "iQ/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle", + "iQ/Material4Print ABS Natur P1 @iQ TiQ8 0.4 Nozzle", + "iQ/Polymaker PETG Polymax black P1 @iQ TiQ2 0.4 Nozzle", + "iQ/VXL90 TiQ2 P2 @iQ TiQ2 0.4 Nozzle", + "re3D/re3D Greengate rPETG", + "re3D/re3D Greengate rPETG @0.8 nozzle", + "re3D/re3D Greengate rPETG @1.75 nozzle", + "re3D/re3D PC", + "re3D/re3D PC @0.4 nozzle", + "re3D/re3D PC @0.8 nozzle", + "re3D/re3D PETG", + "re3D/re3D PETG @0.4 nozzle", + "re3D/re3D PETG @0.8 nozzle", + "re3D/re3D PLA", + "re3D/re3D PLA @0.4 nozzle", + "re3D/re3D PLA @0.8 nozzle", + "re3D/re3D rPP", + "re3D/re3D rPP @0.8 nozzle", + "re3D/re3D rPP @1.75 nozzle" + ] +} diff --git a/scripts/orca_extra_profile_check.py b/scripts/orca_extra_profile_check.py index cdfc8544a4..746dbf25ec 100644 --- a/scripts/orca_extra_profile_check.py +++ b/scripts/orca_extra_profile_check.py @@ -4,6 +4,7 @@ import argparse from pathlib import Path from assign_vendor_setting_ids import generate_preset_setting_id +from assign_filament_ids import check_filament_ids OBSOLETE_KEYS = { "acceleration", "scale", "rotate", "duplicate", "duplicate_grid", @@ -288,6 +289,12 @@ def check_name_consistency(profiles_dir, vendor_name): def check_filament_id(vendor, vendor_folder): """ Make sure filament_id is not longer than 8 characters, otherwise AMS won't work properly + + NOTE: superseded by check_filament_ids (assign_filament_ids.py) for non-BBL/OFL + vendors, which validates format/uniqueness/structure tree-wide against the + grandfather snapshot. This length check stays scoped to BBL/OFL because other + vendors ship grandfathered >8-char ids (e.g. Prusa's 36-char name-ids), so it + cannot simply go tree-wide. """ if vendor not in ('BBL', 'OrcaFilamentLibrary'): return 0 @@ -606,6 +613,11 @@ def main(): # Runs once over the whole tree regardless of the --vendor filter. errors_found += check_setting_id_uniqueness(profiles_dir) + # Global filament_id check (see scripts/assign_filament_ids.py): effective ids + # are resolved loader-faithfully and validated against the sanctioned snapshot + # (scripts/filament_id_snapshot.json). Runs once over the whole tree. + errors_found += check_filament_ids(profiles_dir) + # ✨ Output finale in stile "compilatore" print("\n==================== SUMMARY ====================") print_info(f"Checked vendors : {checked_vendor_count}") diff --git a/scripts/retired_filament_ids.json b/scripts/retired_filament_ids.json new file mode 100644 index 0000000000..d4c5f3faf5 --- /dev/null +++ b/scripts/retired_filament_ids.json @@ -0,0 +1,3 @@ +{ + "retired": {} +} diff --git a/scripts/tests/__init__.py b/scripts/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/tests/test_filament_id.py b/scripts/tests/test_filament_id.py new file mode 100644 index 0000000000..14d7d439b7 --- /dev/null +++ b/scripts/tests/test_filament_id.py @@ -0,0 +1,669 @@ +#!/usr/bin/env python3 +"""Tests for scripts/assign_filament_ids.py (stdlib unittest, no external deps). + +Run from the repo root: python -m unittest discover -s scripts/tests -v +""" + +import contextlib +import io +import json +import os +import shutil +import sys +import tempfile +import unittest +import uuid + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) + +import assign_filament_ids as afi # noqa: E402 + +REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) +REAL_PROFILES = os.path.join(REPO_ROOT, "resources", "profiles") + +OFL = "OrcaFilamentLibrary" + + +def load_json_file(path): + with open(path, encoding="utf-8") as f: + return json.load(f) + + +# --------------------------------------------------------------------------- +# helpers: synthetic profile trees +# --------------------------------------------------------------------------- + +def preset(name, filament_id=None, inherits=None, instantiation=True, + compatible_printers=None): + data = {"type": "filament", "name": name} + if inherits is not None: + data["inherits"] = inherits + if filament_id is not None: + data["filament_id"] = filament_id + data["instantiation"] = "true" if instantiation else "false" + if compatible_printers is not None: + data["compatible_printers"] = compatible_printers + return data + + +class SyntheticTree: + """A throwaway resources/profiles-shaped directory plus ledger paths.""" + + def __init__(self): + self.dir = tempfile.mkdtemp(prefix="filament_id_test_") + self.profiles = os.path.join(self.dir, "profiles") + os.makedirs(self.profiles) + self.snapshot = os.path.join(self.dir, "filament_id_snapshot.json") + self.retired = os.path.join(self.dir, "retired_filament_ids.json") + + def cleanup(self): + shutil.rmtree(self.dir, ignore_errors=True) + + def preset_path(self, vendor, name): + return os.path.join(self.profiles, vendor, "filament", name + ".json") + + def add_vendor(self, vendor, presets): + vendor_dir = os.path.join(self.profiles, vendor, "filament") + os.makedirs(vendor_dir, exist_ok=True) + index = {"name": vendor, "version": "01.00.00.00", "filament_list": []} + for data in presets: + fname = data["name"] + ".json" + with open(os.path.join(vendor_dir, fname), "w", encoding="utf-8") as f: + json.dump(data, f, indent=4, ensure_ascii=False) + index["filament_list"].append( + {"name": data["name"], "sub_path": f"filament/{fname}"}) + with open(os.path.join(self.profiles, vendor + ".json"), "w", + encoding="utf-8") as f: + json.dump(index, f, indent=4, ensure_ascii=False) + + def add_to_index(self, vendor, name): + idx_path = os.path.join(self.profiles, vendor + ".json") + with open(idx_path, encoding="utf-8") as f: + index = json.load(f) + index["filament_list"].append( + {"name": name, "sub_path": f"filament/{name}.json"}) + with open(idx_path, "w", encoding="utf-8") as f: + json.dump(index, f, indent=4, ensure_ascii=False) + + def write_preset(self, vendor, data, register=True): + path = self.preset_path(vendor, data["name"]) + with open(path, "w", encoding="utf-8") as f: + json.dump(data, f, indent=4, ensure_ascii=False) + if register: + self.add_to_index(vendor, data["name"]) + + def remove_preset(self, vendor, name): + os.remove(self.preset_path(vendor, name)) + idx_path = os.path.join(self.profiles, vendor + ".json") + with open(idx_path, encoding="utf-8") as f: + index = json.load(f) + index["filament_list"] = [ + e for e in index["filament_list"] if e["name"] != name] + with open(idx_path, "w", encoding="utf-8") as f: + json.dump(index, f, indent=4, ensure_ascii=False) + + # -- pipeline wrappers --------------------------------------------------- + + def update_snapshot(self, allow_shared_catalog=False): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + rc = afi.update_snapshot(self.profiles, self.snapshot, self.retired, + allow_shared_catalog=allow_shared_catalog) + return rc, buf.getvalue() + + def check(self): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors = afi.check_filament_ids(self.profiles, self.snapshot, self.retired) + return errors, buf.getvalue() + + def assign(self): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + changed, errors = afi.assign_missing_ids(self.profiles, self.snapshot, + self.retired) + return changed, errors, buf.getvalue() + + +def make_clean_tree(): + """Baseline tree: OFL base+generic, a vendor family, a clean tuned generic.""" + t = SyntheticTree() + t.add_vendor(OFL, [ + preset("fdm_pla", filament_id="OGFL99", instantiation=False), + preset("Generic PLA @System", inherits="fdm_pla", + compatible_printers=[]), + ]) + t.add_vendor("VendorA", [ + preset("APLA @base", filament_id="AX01", instantiation=False), + preset("APLA @P1", inherits="APLA @base", + compatible_printers=["P1 0.4 nozzle"]), + # Correctly tuned OFL generic: keeps the OFL base name, claims a printer. + preset("Generic PLA @P1", inherits="Generic PLA @System", + compatible_printers=["P1 0.4 nozzle"]), + ]) + rc, _out = t.update_snapshot() + assert rc == 0 + return t + + +class SyntheticTreeCase(unittest.TestCase): + def setUp(self): + self.t = make_clean_tree() + self.addCleanup(self.t.cleanup) + + +# --------------------------------------------------------------------------- +# mint +# --------------------------------------------------------------------------- + +class TestMint(unittest.TestCase): + def test_namespace_literal(self): + # Frozen: derived from the setting_id namespace; baked into the ledger. + self.assertEqual(afi.FILAMENT_ID_NAMESPACE, + uuid.UUID("c4d3ff49-4c32-5534-a3e3-00894157ab97")) + + def test_known_vector(self): + # Hardcoded, independently computed vector: freezes prefix, input string + # layout ("filament_family//") and base62 derivation. + self.assertEqual(afi.generate_filament_id("Qidi", "HATCHBOX PLA"), "OFiJYDPC") + + def test_determinism_and_format(self): + for vendor, family in [("Qidi", "HATCHBOX PLA"), ("Creality", "CR PLA"), + ("OrcaFilamentLibrary", "Generic ABS"), + ("BBL", "拓竹 PLA")]: # unicode family + a = afi.generate_filament_id(vendor, family) + b = afi.generate_filament_id(vendor, family) + self.assertEqual(a, b) + self.assertRegex(a, r"^OF[0-9A-Za-z]{6}$") + self.assertEqual(len(a), 8) + + def test_salt_changes_id(self): + base = afi.generate_filament_id("Qidi", "HATCHBOX PLA") + salted = afi.generate_filament_id("Qidi", "HATCHBOX PLA", salt=1) + self.assertNotEqual(base, salted) + self.assertRegex(salted, r"^OF[0-9A-Za-z]{6}$") + + def test_mint_salt_iteration(self): + v, fam = "Qidi", "HATCHBOX PLA" + taken = {afi.generate_filament_id(v, fam, s) for s in range(2)} + self.assertEqual(afi.mint_filament_id(v, fam, taken), + afi.generate_filament_id(v, fam, salt=2)) + self.assertEqual(afi.mint_filament_id(v, fam, set()), + afi.generate_filament_id(v, fam)) + + +class TestBaseName(unittest.TestCase): + def test_family_derivation(self): + cases = [ + ("X @base", "X"), + ("Afinia PLA@HS", "Afinia PLA"), + ("PolyTerra PLA", "PolyTerra PLA"), + ("HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle", "HATCHBOX PLA"), + ("A @B @C", "A"), # first @ wins + ("Filár PLA 拓竹 @0.4 nozzle", "Filár PLA 拓竹"), + ] + for name, family in cases: + self.assertEqual(afi.base_name(name), family, msg=name) + + +# --------------------------------------------------------------------------- +# resolver (loader-faithful semantics) +# --------------------------------------------------------------------------- + +class TestResolver(unittest.TestCase): + @staticmethod + def rec(name, filament_id=None, inherits=None): + return {"name": name, "filament_id": filament_id, "inherits": inherits} + + def resolve(self, name, vendor_recs, ofl_recs, **kw): + fmap = {r["name"]: r for r in vendor_recs} + omap = {r["name"]: r for r in ofl_recs} + return afi.resolve_filament_id(name, fmap, omap, **kw) + + def test_own_id(self): + fid, src, entry = self.resolve("A", [self.rec("A", "ID1")], []) + self.assertEqual((fid, src, entry), ("ID1", "own", None)) + + def test_inherited_within_vendor(self): + fid, src, entry = self.resolve( + "A", [self.rec("A", inherits="B"), self.rec("B", inherits="C"), + self.rec("C", "ID3")], []) + self.assertEqual((fid, src, entry), ("ID3", "inherited", None)) + + def test_ofl_fallback(self): + # Vendor preset inherits a name that only exists in the OFL map. + fid, src, entry = self.resolve( + "A", [self.rec("A", inherits="Generic PLA @System")], + [self.rec("Generic PLA @System", inherits="fdm_pla"), + self.rec("fdm_pla", "OGFL99")]) + self.assertEqual(fid, "OGFL99") + self.assertEqual(entry, "Generic PLA @System") + + def test_ofl_stays_in_ofl(self): + # Once a chain enters OFL it stays there: a vendor file sharing an + # OFL-internal hop's name must not shadow it. + fid, _src, entry = self.resolve( + "A", + [self.rec("A", inherits="ofl_entry"), self.rec("fdm_pla", "WRONG")], + [self.rec("ofl_entry", inherits="fdm_pla"), self.rec("fdm_pla", "RIGHT")]) + self.assertEqual(fid, "RIGHT") + self.assertEqual(entry, "ofl_entry") + + def test_dead_end_retries_parent_in_ofl(self): + # The vendor chain dead-ends id-less on a parent that also exists in + # OFL: the loader re-consults the OFL map for that direct parent. + fid, _src, entry = self.resolve( + "A", [self.rec("A", inherits="shared"), self.rec("shared")], + [self.rec("shared", "OFLID1")]) + self.assertEqual(fid, "OFLID1") + self.assertEqual(entry, "shared") + + def test_cycle(self): + fid, src, _e = self.resolve( + "A", [self.rec("A", inherits="B"), self.rec("B", inherits="A")], []) + self.assertEqual((fid, src), (None, "cycle")) + + def test_dangling_parent(self): + fid, src, _e = self.resolve("A", [self.rec("A", inherits="nope")], []) + self.assertEqual((fid, src), (None, "dangling")) + + def test_missing_id(self): + fid, src, _e = self.resolve("A", [self.rec("A")], []) + self.assertEqual((fid, src), (None, "missing")) + + def test_skip_own_resolves_inherited(self): + fid, _src, _e = self.resolve( + "A", [self.rec("A", "OWN", inherits="B"), self.rec("B", "PARENT")], [], + skip_own=True) + self.assertEqual(fid, "PARENT") + + +# --------------------------------------------------------------------------- +# reserved namespaces +# --------------------------------------------------------------------------- + +class TestReservedSpaces(unittest.TestCase): + def test_owners(self): + self.assertEqual(afi.reserved_space_owner("GFL99"), (True, "BBL")) + self.assertEqual(afi.reserved_space_owner("QD_X4_PLA"), (True, "Qidi")) + self.assertEqual(afi.reserved_space_owner("P1234abc"), (True, None)) + self.assertEqual(afi.reserved_space_owner("pAbCdEf1"), (True, None)) # case-insensitive + self.assertEqual(afi.reserved_space_owner("null"), (True, None)) + self.assertEqual(afi.reserved_space_owner("OFiJYDPC"), (False, None)) + self.assertEqual(afi.reserved_space_owner("P1234abcd"), (False, None)) # 8 hex chars: not the user space + + +# --------------------------------------------------------------------------- +# checks on synthetic trees +# --------------------------------------------------------------------------- + +class TestChecks(SyntheticTreeCase): + def test_clean_tree_is_silent(self): + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + self.assertNotIn("[ERROR]", out) + + def test_check1_unknown_non_of_id(self): + self.t.write_preset("VendorA", preset("BPLA @base", filament_id="BOGUS_9", + instantiation=False)) + self.t.write_preset("VendorA", preset("BPLA @P1", inherits="BPLA @base", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("neither grandfathered in the snapshot", out) + self.assertIn("BOGUS_9", out) + + def test_check2_new_claim_needs_snapshot_update(self): + self.t.write_preset("VendorA", preset("ANEW @P2", inherits="APLA @base", + compatible_printers=["P2"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn('claim "VendorA/ANEW" is not sanctioned', out) + self.assertIn("--update-snapshot", out) + + def test_check2_vanished_claim_is_stability_error(self): + self.t.remove_preset("VendorA", "APLA @P1") + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("stability", out) + self.assertIn('"VendorA/APLA"', out) + + def test_check3_of_id_must_match_mint(self): + self.t.write_preset("VendorA", preset("BNEW @base", filament_id="OFZZZZZZ", + instantiation=False)) + self.t.write_preset("VendorA", preset("BNEW @P1", inherits="BNEW @base", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("does not match its mint", out) + self.assertIn(afi.generate_filament_id("VendorA", "BNEW"), out) + + def test_check3_salted_mint_is_accepted(self): + salted = afi.generate_filament_id("VendorA", "BNEW", salt=3) + self.t.write_preset("VendorA", preset("BNEW @base", filament_id=salted, + instantiation=False)) + self.t.write_preset("VendorA", preset("BNEW @P1", inherits="BNEW @base", + compatible_printers=["P1"])) + _errors, out = self.t.check() # check 2 still wants a snapshot update + self.assertNotIn("does not match its mint", out) + + def test_check4_retired_id_reuse(self): + afi.write_ledger(self.t.retired, {"retired": {"AX01": ["VendorA/APLA"]}}) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("retired", out) + self.assertIn("AX01", out) + + def test_check5_renamed_tuned_generic(self): + self.t.write_preset("VendorA", preset("Tuned PLA @P1", + inherits="Generic PLA @System", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("rename re-exposes the OFL preset", out) + self.assertIn("Tuned PLA @P1", out) + + def test_check5_empty_compatible_printers(self): + self.t.write_preset("VendorA", preset("Generic PLA @P2", + inherits="Generic PLA @System", + compatible_printers=[])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("cannot shadow the OFL preset", out) + + def test_check5_exception_is_grandfathered(self): + self.t.write_preset("VendorA", preset("Tuned PLA @P1", + inherits="Generic PLA @System", + compatible_printers=["P1"])) + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_check6_reserved_namespace_claims(self): + for fid, marker in [("GFX99", "owned by BBL"), + ("QD_X_PLA", "owned by Qidi"), + ("P1a2b3c4", "user-custom"), + ("null", "user-custom")]: + with self.subTest(fid=fid): + name = f"R{fid} @base" + self.t.write_preset("VendorA", preset(name, filament_id=fid, + instantiation=False)) + self.t.write_preset("VendorA", preset(f"R{fid} @P1", inherits=name, + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("reserved id space", out) + self.assertIn(marker, out) + + def test_check7a_instantiated_preset_with_own_key(self): + self.t.write_preset("VendorA", preset("APLA @P1", filament_id="AX01", + inherits="APLA @base", + compatible_printers=["P1 0.4 nozzle"]), + register=False) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("declares its own filament_id key", out) + + def test_check7b_declared_vs_inherited_drift(self): + self.t.write_preset("VendorA", preset("APLA @P1", filament_id="AX02", + inherits="APLA @base", + compatible_printers=["P1 0.4 nozzle"]), + register=False) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn('declares filament_id "AX02" but its inherits chain resolves "AX01"', out) + + def test_check7c_unresolvable_instantiated_filament(self): + self.t.write_preset("VendorA", preset("DNEW @P1", compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("resolves no filament_id", out) + self.assertIn("hard load error", out) + + def test_missing_snapshot_is_an_error(self): + os.remove(self.t.snapshot) + errors, out = self.t.check() + self.assertEqual(errors, 1) + self.assertIn("snapshot not found", out) + + +# --------------------------------------------------------------------------- +# --update-snapshot +# --------------------------------------------------------------------------- + +class TestUpdateSnapshot(SyntheticTreeCase): + def test_idempotent_and_deterministic(self): + with open(self.t.snapshot, "rb") as f: + first = f.read() + rc, out = self.t.update_snapshot() + self.assertEqual(rc, 0) + self.assertIn("nothing changed", out) + with open(self.t.snapshot, "rb") as f: + self.assertEqual(f.read(), first) + self.assertTrue(first.endswith(b"\n")) + self.assertNotIn(b"\r", first) + snap = json.loads(first.decode("utf-8")) + self.assertEqual(list(snap["ids"]), sorted(snap["ids"])) + self.assertEqual(snap["ids"]["AX01"], ["VendorA/APLA"]) + self.assertEqual(snap["ids"]["OGFL99"], + ["OrcaFilamentLibrary/Generic PLA", "VendorA/Generic PLA"]) + + def test_vanished_id_is_retired(self): + self.t.remove_preset("VendorA", "APLA @base") + self.t.remove_preset("VendorA", "APLA @P1") + rc, out = self.t.update_snapshot() + self.assertEqual(rc, 0) + self.assertIn("AX01", out) + retired = load_json_file(self.t.retired) + self.assertEqual(retired["retired"], {"AX01": ["VendorA/APLA"]}) + snap = load_json_file(self.t.snapshot) + self.assertNotIn("AX01", snap["ids"]) + # append-only + idempotent: a second run keeps the ledger intact + rc, out = self.t.update_snapshot() + self.assertEqual(rc, 0) + self.assertIn("nothing changed", out) + retired2 = load_json_file(self.t.retired) + self.assertEqual(retired, retired2) + # ... and a retired id may never be minted again + self.assertNotIn(afi.mint_filament_id("VendorA", "APLA", + set(retired["retired"])), retired["retired"]) + + def test_refuses_new_reserved_namespace_claims(self): + self.t.write_preset("VendorA", preset("CNEW @base", filament_id="GFX99", + instantiation=False)) + self.t.write_preset("VendorA", preset("CNEW @P1", inherits="CNEW @base", + compatible_printers=["P1"])) + with open(self.t.snapshot, "rb") as f: + before = f.read() + rc, out = self.t.update_snapshot() + self.assertEqual(rc, 1) + self.assertIn("refusing to sanction", out) + with open(self.t.snapshot, "rb") as f: + self.assertEqual(f.read(), before) # nothing written on refusal + rc, _out = self.t.update_snapshot(allow_shared_catalog=True) + self.assertEqual(rc, 0) + snap = load_json_file(self.t.snapshot) + self.assertEqual(snap["ids"]["GFX99"], ["VendorA/CNEW"]) + + +# --------------------------------------------------------------------------- +# default run: mint + insert +# --------------------------------------------------------------------------- + +class TestAssign(SyntheticTreeCase): + def test_noop_on_fully_idded_tree(self): + changed, errors, out = self.t.assign() + self.assertEqual((changed, errors), (0, 0)) + self.assertIn("nothing to do (0 files changed)", out) + + def test_mints_into_family_root_and_rootless_member(self): + self.t.write_preset("VendorA", preset("FNEW @base", instantiation=False)) + self.t.write_preset("VendorA", preset("FNEW @P1", inherits="FNEW @base", + compatible_printers=["P1"])) + self.t.write_preset("VendorA", preset("FNEW @P2", inherits="FNEW @base", + compatible_printers=["P2"])) + self.t.write_preset("VendorA", preset("GNEW @P1", compatible_printers=["P1"])) + changed, errors, _out = self.t.assign() + self.assertEqual(errors, 0) + self.assertEqual(changed, 2) # one root + one root-less member + root = load_json_file(self.t.preset_path("VendorA", "FNEW @base")) + self.assertEqual(root["filament_id"], + afi.generate_filament_id("VendorA", "FNEW")) + member = load_json_file(self.t.preset_path("VendorA", "GNEW @P1")) + self.assertEqual(member["filament_id"], + afi.generate_filament_id("VendorA", "GNEW")) + # variants themselves never get the key + child = load_json_file(self.t.preset_path("VendorA", "FNEW @P1")) + self.assertNotIn("filament_id", child) + # idempotent: second run is a no-op + changed, errors, out = self.t.assign() + self.assertEqual((changed, errors), (0, 0)) + self.assertIn("nothing to do", out) + + def test_shared_root_between_families_is_refused(self): + self.t.write_preset("VendorA", preset("shared_base", instantiation=False)) + self.t.write_preset("VendorA", preset("HNEW @P1", inherits="shared_base", + compatible_printers=["P1"])) + self.t.write_preset("VendorA", preset("INEW @P1", inherits="shared_base", + compatible_printers=["P1"])) + changed, errors, out = self.t.assign() + self.assertEqual(changed, 0) + self.assertGreater(errors, 0) + self.assertIn("shared with famil", out) + + +class TestInsertEditing(unittest.TestCase): + CRLF_TEXT = ( + '{\r\n' + '\t"type": "filament",\r\n' + '\t"name": "JNEW @base",\r\n' + '\t"inherits": "fdm_pla",\r\n' + '\t"from": "system",\r\n' + '\t"instantiation": "false",\r\n' + '\t"filament_type": [\r\n' + '\t\t"PLA"\r\n' + '\t]\r\n' + '}\r\n' + ) + + def test_insert_before_instantiation_preserves_bytes(self): + text, n = afi.insert_filament_id(self.CRLF_TEXT, "OFabc123") + self.assertEqual(n, 1) + json.loads(text) + inserted = '\t"filament_id": "OFabc123",\r\n' + self.assertIn(inserted + '\t"instantiation"', text) + # every original byte is preserved: removing the inserted line restores + # the input exactly (CRLF stays CRLF, tabs stay tabs) + self.assertEqual(text.replace(inserted, "", 1), self.CRLF_TEXT) + + def test_insert_after_name_when_no_instantiation_line(self): + lf_text = '{\n "type": "filament",\n "name": "K",\n "from": "system"\n}\n' + text, n = afi.insert_filament_id(lf_text, "OFabc123") + self.assertEqual(n, 1) + json.loads(text) + self.assertIn('"name": "K",\n "filament_id": "OFabc123",\n', text) + self.assertNotIn("\r", text) + + def test_insert_no_anchor_fails(self): + _text, n = afi.insert_filament_id('{"type": "filament"}', "OFabc123") + self.assertEqual(n, 0) + + def test_write_filament_id_keeps_crlf_on_disk(self): + t = SyntheticTree() + self.addCleanup(t.cleanup) + t.add_vendor("VendorA", []) + path = t.preset_path("VendorA", "JNEW @base") + with open(path, "wb") as f: + f.write(self.CRLF_TEXT.encode("utf-8")) + t.add_to_index("VendorA", "JNEW @base") + afi.write_filament_id(path, "OFabc123") + with open(path, "rb") as f: + raw = f.read() + self.assertEqual(raw.count(b"\n"), raw.count(b"\r\n")) # still CRLF-only + self.assertEqual( + raw.replace(b'\t"filament_id": "OFabc123",\r\n', b"", 1), + self.CRLF_TEXT.encode("utf-8")) + + +# --------------------------------------------------------------------------- +# the real tree +# --------------------------------------------------------------------------- + +@unittest.skipUnless(os.path.isdir(REAL_PROFILES), "resources/profiles not present") +class TestRealTree(unittest.TestCase): + def test_shipped_snapshot_matches_tree(self): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors = afi.check_filament_ids(REAL_PROFILES) + self.assertEqual(errors, 0, buf.getvalue()) + + def test_every_instantiated_filament_resolves_an_id(self): + analysis = afi.analyze_tree(REAL_PROFILES) + self.assertEqual(analysis["missing_effective"], []) + self.assertEqual(analysis["read_errors"], []) + + +# --------------------------------------------------------------------------- +# review-fix regressions +# --------------------------------------------------------------------------- + +class TestReviewFixes(SyntheticTreeCase): + def test_update_snapshot_refuses_retired_id_reuse(self): + fid = afi.generate_filament_id("VendorA", "LONER") + self.t.write_preset("VendorA", preset("LONER @base", filament_id=fid, + instantiation=False)) + self.t.write_preset("VendorA", preset("LONER @P1", inherits="LONER @base", + compatible_printers=["P1 0.4 nozzle"])) + rc, _ = self.t.update_snapshot() + self.assertEqual(rc, 0) + self.t.remove_preset("VendorA", "LONER @base") + self.t.remove_preset("VendorA", "LONER @P1") + rc, out = self.t.update_snapshot() + self.assertEqual(rc, 0, out) + self.assertIn(fid, afi.load_retired(self.t.retired)) + # Resurrect the same id: --update-snapshot must refuse, not sanction. + self.t.write_preset("VendorA", preset("LONER @base", filament_id=fid, + instantiation=False)) + self.t.write_preset("VendorA", preset("LONER @P1", inherits="LONER @base", + compatible_printers=["P1 0.4 nozzle"])) + rc, out = self.t.update_snapshot() + self.assertEqual(rc, 1) + self.assertIn("retired", out) + self.assertNotIn(fid, load_json_file(self.t.snapshot)["ids"]) + + def test_check3_skips_of_id_inherited_from_other_vendor(self): + # Post-Phase-1 world: an OFL generic carries its own minted OF id and a + # vendor tunes it correctly (same base name, non-empty printers). The + # new claim must trip only the snapshot gate, never mint conformance. + fid = afi.generate_filament_id(OFL, "Generic PLA Matte") + self.t.write_preset(OFL, preset("Generic PLA Matte @base", filament_id=fid, + instantiation=False)) + self.t.write_preset(OFL, preset("Generic PLA Matte @System", + inherits="Generic PLA Matte @base", + compatible_printers=[])) + rc, _ = self.t.update_snapshot() + self.assertEqual(rc, 0) + self.t.write_preset("VendorA", preset("Generic PLA Matte @P1", + inherits="Generic PLA Matte @System", + compatible_printers=["P1 0.4 nozzle"])) + errors, out = self.t.check() + self.assertNotIn("does not match its mint", out) + self.assertIn("not sanctioned", out) + self.assertEqual(errors, 1, out) + # After sanctioning the claim the tree is fully green again. + rc, _ = self.t.update_snapshot() + self.assertEqual(rc, 0) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_check7c_prints_expected_mint(self): + self.t.write_preset("VendorA", preset("Orphan PLA @P1", + compatible_printers=["P1 0.4 nozzle"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn(afi.generate_filament_id("VendorA", "Orphan PLA"), out) + + +if __name__ == "__main__": + unittest.main() diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index ee32e8d036..399443a706 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -3109,6 +3109,24 @@ void PresetBundle::update_num_filaments(unsigned int to_del_flament_id) } +// Orca: the AMS lookups below resolve a tray's filament_id to the FIRST compatible base +// preset. When several presets match the same id for the selected printer the pick is +// arbitrary (a profile bug - see the validator's check_duplicate_filament_subtypes), so +// scan past a successful match and warn about the runners-up. Behavior is unchanged. +static void warn_ambiguous_filament_id_match(const PresetCollection &filaments, PresetCollection::ConstIterator match, const std::string &filament_id) +{ + if (match == filaments.end()) + return; + std::string others; + for (auto it = std::next(match); it != filaments.end(); ++it) + if (it->is_compatible && filaments.get_preset_base(*it) == &*it && it->filament_id == filament_id) + others += (others.empty() ? "\"" : ", \"") + it->name + "\""; + if (!others.empty()) + BOOST_LOG_TRIVIAL(warning) << "Ambiguous AMS filament match: filament_id \"" << filament_id + << "\" matches multiple presets compatible with the selected printer; picked \"" << match->name + << "\", also matches " << others; +} + void PresetBundle::get_ams_cobox_infos(AMSComboInfo& combox_info) { combox_info.clear(); @@ -3131,6 +3149,7 @@ void PresetBundle::get_ams_cobox_infos(AMSComboInfo& combox_info) } auto iter = std::find_if(filaments.begin(), filaments.end(), [this, &filament_id](auto &f) { return f.is_compatible && filaments.get_preset_base(f) == &f && f.filament_id == filament_id; }); + warn_ambiguous_filament_id_match(filaments, iter, filament_id); if (iter == filaments.end()) { BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": filament_id %1% not found or system or compatible") % filament_id; auto filament_type = ams.opt_string("filament_type", 0u); @@ -3233,6 +3252,7 @@ unsigned int PresetBundle::sync_ams_list(std::vector> filaments_by_vendor; for (const auto &preset : filaments) { if (!preset.is_system || preset.filament_id.empty() || preset.vendor == nullptr) @@ -5665,20 +5689,29 @@ bool PresetBundle::check_duplicate_filament_subtypes() const filaments_by_vendor[preset.vendor->name].push_back(&preset); } + const std::vector no_filaments; + const auto library_it = filaments_by_vendor.find(ORCA_FILAMENT_LIBRARY); + const std::vector &library_filaments = library_it == filaments_by_vendor.end() ? no_filaments : library_it->second; + bool found_duplicates = false; for (const auto &printer : printers) { if (!printer.is_system || printer.vendor == nullptr) continue; auto vendor_it = filaments_by_vendor.find(printer.vendor->name); - if (vendor_it == filaments_by_vendor.end()) + const std::vector &vendor_filaments = vendor_it == filaments_by_vendor.end() ? no_filaments : vendor_it->second; + if (vendor_filaments.empty() && library_filaments.empty()) continue; const PresetWithVendorProfile active_printer = printers.get_preset_with_vendor_profile(printer); // std::map keeps the reported errors in a deterministic (sorted) order. std::map> by_filament_id; - for (const Preset *fil : vendor_it->second) + for (const Preset *fil : vendor_filaments) if (is_compatible_with_printer(filaments.get_preset_with_vendor_profile(*fil), active_printer)) by_filament_id[fil->filament_id].push_back(fil); + if (&vendor_filaments != &library_filaments) + for (const Preset *fil : library_filaments) + if (is_compatible_with_printer(filaments.get_preset_with_vendor_profile(*fil), active_printer)) + by_filament_id[fil->filament_id].push_back(fil); for (const auto &entry : by_filament_id) { if (entry.second.size() < 2) @@ -5686,9 +5719,15 @@ bool PresetBundle::check_duplicate_filament_subtypes() const found_duplicates = true; // List each conflicting preset with a clickable file:// URI on its own // line, so the profile author can jump straight to the files to fix. + // A preset from another bundle (the Orca Filament Library) is tagged with + // its vendor so the source bundle is obvious. std::string presets; - for (const Preset *p : entry.second) - presets += "\n - " + p->name + "\n " + preset_file_uri(p->file); + for (const Preset *p : entry.second) { + presets += "\n - " + p->name; + if (p->vendor != nullptr && p->vendor->name != printer.vendor->name) + presets += " [" + p->vendor->name + "]"; + presets += "\n " + preset_file_uri(p->file); + } BOOST_LOG_TRIVIAL(error) << "Ambiguous AMS filament match: " << entry.second.size() << " filament presets share filament_id \"" << entry.first